[Pkg-virtualbox-commits] [virtualbox] 01/03: New upstream version 5.2.2-dfsg

Gianfranco Costamagna locutusofborg at moszumanska.debian.org
Fri Nov 24 18:36:20 UTC 2017


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

locutusofborg pushed a commit to branch master
in repository virtualbox.

commit 2da0079ec957540da92d6a6cb458926e40b39e1b
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Fri Nov 24 19:24:13 2017 +0100

    New upstream version 5.2.2-dfsg
---
 .scm-settings                                      |  107 +-
 Config.kmk                                         |   72 +-
 Maintenance.kmk                                    |    1 -
 Makefile.kmk                                       |   32 +-
 Version.kmk                                        |    6 +-
 configure                                          |    2 +-
 configure.vbs                                      |    2 +-
 doc/.scm-settings                                  |   39 +
 doc/License-gpl-2.0.rtf                            |  786 +++---
 doc/License-gpl-2.rtf                              |  712 +++---
 doc/VBox-CodingGuidelines.cpp                      |    4 +-
 doc/VBox-MakefileGuidelines.cpp                    |    2 +-
 doc/VBox-doc.c                                     |    2 +-
 doc/kBuild-tricks.txt                              |    4 +-
 doc/manual/.scm-settings                           |   23 +
 doc/manual/ChangeLog.xml                           |   11 -
 doc/manual/Config.kmk                              |   12 -
 doc/manual/Makefile.kmk                            |    4 +-
 doc/manual/common-html-formatcfg.xsl               |    4 +-
 doc/manual/docbook-changelog-formatcfg.xsl         |   24 +-
 doc/manual/docbook2latex.xsl                       |    2 +-
 doc/manual/en_US/UserManual.xml                    |    4 +-
 doc/manual/en_US/man_VBoxManage-debugvm.xml        |    5 +-
 doc/manual/en_US/man_VBoxManage-extpack.xml        |    4 +-
 doc/manual/en_US/man_VBoxManage-unattended.xml     |    4 +-
 doc/manual/en_US/user_AdvancedTopics.xml           |    4 +-
 doc/manual/en_US/user_BasicConcepts.xml            |    4 +-
 doc/manual/en_US/user_ChangeLog.xml                |    4 +-
 doc/manual/en_US/user_Frontends.xml                |    6 +-
 doc/manual/en_US/user_Glossary.xml                 |    4 +-
 doc/manual/en_US/user_GuestAdditions.xml           |    4 +-
 doc/manual/en_US/user_Installation.xml             |    4 +-
 doc/manual/en_US/user_Introduction.xml             |    4 +-
 doc/manual/en_US/user_KnownIssues.xml              |   88 +-
 doc/manual/en_US/user_Networking.xml               |    4 +-
 doc/manual/en_US/user_PrivacyPolicy.xml            |    4 +-
 doc/manual/en_US/user_Security.xml                 |    4 +-
 doc/manual/en_US/user_Storage.xml                  |    4 +-
 doc/manual/en_US/user_Technical.xml                |    4 +-
 doc/manual/en_US/user_ThirdParty.xml               |    4 +-
 doc/manual/en_US/user_Troubleshooting.xml          |    6 +-
 doc/manual/en_US/user_VBoxManage.xml               |   15 +-
 doc/manual/en_US/user_VirtualBoxAPI.xml            |    6 +-
 doc/manual/fr_FR/UserManual.xml                    |    4 +-
 doc/manual/fr_FR/user_AdvancedTopics.xml           |  210 +-
 doc/manual/fr_FR/user_BasicConcepts.xml            |  142 +-
 doc/manual/fr_FR/user_ChangeLog.xml                |  390 +--
 doc/manual/fr_FR/user_Frontends.xml                |   90 +-
 doc/manual/fr_FR/user_Glossary.xml                 |   10 +-
 doc/manual/fr_FR/user_GuestAdditions.xml           |  188 +-
 doc/manual/fr_FR/user_Installation.xml             |   78 +-
 doc/manual/fr_FR/user_Introduction.xml             |  148 +-
 doc/manual/fr_FR/user_KnownIssues.xml              |   86 +-
 doc/manual/fr_FR/user_Networking.xml               |   96 +-
 doc/manual/fr_FR/user_PrivacyPolicy.xml            |    6 +-
 doc/manual/fr_FR/user_Security.xml                 |   30 +-
 doc/manual/fr_FR/user_Storage.xml                  |  120 +-
 doc/manual/fr_FR/user_Technical.xml                |   78 +-
 doc/manual/fr_FR/user_ThirdParty.xml               |   12 +-
 doc/manual/fr_FR/user_Troubleshooting.xml          |  100 +-
 doc/manual/fr_FR/user_VBoxManage.xml               |  268 +-
 doc/manual/fr_FR/user_VirtualBoxAPI.xml            |    6 +-
 doc/manual/user_ChangeLogImpl.xml                  |  127 +-
 include/.scm-settings                              |   52 +
 include/Makefile.kmk                               |   25 +-
 include/VBox/Graphics/HGSMI.h                      |   31 +-
 include/VBox/Graphics/HGSMIBase.h                  |   33 +-
 include/VBox/Graphics/HGSMIChSetup.h               |   31 +-
 include/VBox/Graphics/HGSMIChannels.h              |   31 +-
 include/VBox/Graphics/HGSMIContext.h               |   33 +-
 include/VBox/Graphics/HGSMIDefs.h                  |   31 +-
 include/VBox/Graphics/VBoxUhgsmi.h                 |   12 +-
 include/VBox/Graphics/VBoxVideo.h                  |   34 +-
 include/VBox/Graphics/VBoxVideoErr.h               |   33 +-
 include/VBox/Graphics/VBoxVideoGuest.h             |   31 +-
 include/VBox/Graphics/VBoxVideoHost3D.h            |    2 +-
 include/VBox/Graphics/VBoxVideoIPRT.h              |   11 +-
 include/VBox/Graphics/VBoxVideoVBE.h               |   31 +-
 include/VBox/Graphics/VBoxVideoVBEPrivate.h        |   31 +-
 include/VBox/GuestHost/DragAndDrop.h               |    2 +-
 include/VBox/HostServices/VBoxOGLOp.h              |    1 -
 include/VBox/VMMDevTesting.mac                     |   27 +
 include/VBox/apic.mac                              |   27 +
 include/VBox/ata.h                                 |    9 +
 include/VBox/bios.mac                              |   27 +
 include/VBox/com/com.h                             |    7 +-
 include/VBox/dbg.h                                 |    2 +-
 include/VBox/err.mac                               |   37 +
 include/VBox/err.sed                               |   13 +-
 include/VBox/log.h                                 |    3 +
 include/VBox/param.mac                             |   27 +
 include/VBox/scsiinline.h                          |    9 +
 include/VBox/various.sed                           |   38 +
 include/VBox/vmm/cpum.h                            |   14 +-
 include/VBox/vmm/cpum.mac                          |    2 +-
 include/VBox/vmm/cpumctx.h                         |    6 +-
 include/VBox/vmm/hm.h                              |    2 +-
 include/VBox/vmm/hm_svm.h                          |    9 +-
 include/VBox/vmm/pdmaudioifs.h                     |   12 +-
 include/VBox/x86.mac                               |    2 -
 include/iprt/asmdefs.mac                           |    2 +-
 include/iprt/bldprog-strtab-template.cpp.h         |   11 +-
 include/iprt/cdefs.h                               |   16 +
 include/iprt/dir.h                                 |  344 ++-
 include/iprt/dvm.h                                 |   85 +-
 include/iprt/err.h                                 |    3 +
 include/iprt/err.mac                               |  222 +-
 include/iprt/err.sed                               |    2 +-
 include/iprt/formats/fat.h                         |    2 +-
 include/iprt/formats/mach-o.h                      |    2 +
 include/iprt/fs.h                                  |    4 +-
 include/iprt/getopt.h                              |   14 +
 include/iprt/krnlmod.h                             |    2 +-
 include/iprt/locale.h                              |    1 -
 include/iprt/log.h                                 |   30 +-
 include/iprt/mangling.h                            |   29 +-
 include/iprt/nocrt/math.h                          |    1 +
 include/iprt/nt/nt.h                               |   43 +-
 include/iprt/refentry.h                            |    1 -
 include/iprt/solaris/kmoddeps.mac                  |    2 +-
 include/iprt/types.h                               |    7 +
 include/iprt/vfs.h                                 |   65 +
 include/iprt/vfslowlevel.h                         |    9 +
 include/iprt/x86.mac                               |   71 +-
 include/iprt/x86extra.mac                          |    2 +-
 .../Additions/common/VBoxControl/VBoxControl.cpp   |    2 +-
 .../Additions/common/VBoxControl/VBoxControl.rc    |    2 +-
 .../common/VBoxControl/testcase/tstVBoxControl.cpp |    2 +-
 src/VBox/Additions/common/VBoxGuest/.scm-settings  |   30 +
 src/VBox/Additions/common/VBoxGuest/Makefile.kmk   |   25 +-
 .../Additions/common/VBoxGuest/VBoxDev-haiku.c     |   11 +-
 .../common/VBoxGuest/VBoxGuest-darwin.cpp          |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-freebsd.c |   11 +-
 .../common/VBoxGuest/VBoxGuest-haiku-stubs.c       |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-haiku.c   |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-haiku.h   |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-linux.c   |   15 +-
 .../Additions/common/VBoxGuest/VBoxGuest-netbsd.c  |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-os2.cpp   |   12 +-
 .../Additions/common/VBoxGuest/VBoxGuest-os2.def   |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-solaris.c |    2 +-
 .../common/VBoxGuest/VBoxGuest-solaris.conf        |    6 +-
 .../common/VBoxGuest/VBoxGuest-win-legacy.cpp      |   11 +-
 .../common/VBoxGuest/VBoxGuest-win-pnp.cpp         |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-win.cpp   |   11 +-
 .../Additions/common/VBoxGuest/VBoxGuest-win.h     |   11 +-
 src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp  |    2 +-
 .../Additions/common/VBoxGuest/VBoxGuestA-os2.asm  |   58 +-
 .../Additions/common/VBoxGuest/VBoxGuestInternal.h |    2 +-
 .../Additions/common/VBoxGuest/freebsd/Makefile    |   15 +-
 .../common/VBoxGuest/freebsd/files_vboxguest       |   15 +-
 .../common/VBoxGuest/lib/VBoxGuestR0LibCrOgl.cpp   |    2 +-
 .../VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR0LibHGCM.cpp    |    4 +-
 .../VBoxGuest/lib/VBoxGuestR0LibHGCMInternal.cpp   |    6 +-
 .../common/VBoxGuest/lib/VBoxGuestR0LibInit.cpp    |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR0LibInternal.h  |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR0LibMouse.cpp   |    3 +-
 .../VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp       |    3 +-
 .../VBoxGuest/lib/VBoxGuestR0LibSharedFolders.c    |   27 +-
 .../common/VBoxGuest/lib/VBoxGuestR0LibVMMDev.cpp  |    3 +-
 .../common/VBoxGuest/lib/VBoxGuestR3Lib.cpp        |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibAdditions.cpp      |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibAutoLogon.cpp      |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibBalloon.cpp |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp      |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibCoreDump.cpp       |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibCpuHotPlug.cpp     |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibCredentials.cpp    |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibDaemonize.cpp      |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp    |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibEvent.cpp   |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibGR.cpp      |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp      |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibGuestProp.cpp      |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibGuestUser.cpp      |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibHGCM.cpp    |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibHostChannel.cpp    |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibHostVersion.cpp    |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibInternal.h  |    3 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibLog.cpp     |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibMisc.cpp    |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibModule.cpp  |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibMouse.cpp   |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibPidFile.cpp |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibRuntimeXF86.cpp    |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibSeamless.cpp       |    2 +-
 .../VBoxGuest/lib/VBoxGuestR3LibSharedFolders.cpp  |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibStat.cpp    |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibTime.cpp    |    2 +-
 .../common/VBoxGuest/lib/VBoxGuestR3LibVideo.cpp   |    2 +-
 .../VBoxGuest/lib/VbglR0CanUsePhysPageList.cpp     |    3 +-
 src/VBox/Additions/common/VBoxGuest/linux/Makefile |   15 +-
 .../common/VBoxGuest/linux/files_vboxguest         |   15 +-
 .../Additions/common/VBoxGuest/solaris/deps.asm    |   11 +-
 .../Additions/common/VBoxGuest/win/VBoxGuest.inf   |   11 +-
 .../Additions/common/VBoxGuest/win/VBoxGuest.rc    |   11 +-
 .../common/VBoxGuest/win/VBoxGuestInst.cpp         |   11 +-
 .../common/VBoxService/VBoxService-os2.def         |    2 +-
 .../common/VBoxService/VBoxService-win.cpp         |    2 +-
 .../common/VBoxService/VBoxService-win.rc          |    2 +-
 .../Additions/common/VBoxService/VBoxService.cpp   |    8 +-
 .../common/VBoxService/VBoxServiceAutoMount.cpp    |   16 +-
 .../common/VBoxService/VBoxServiceBalloon.cpp      |    2 +-
 .../VBoxService/VBoxServiceClipboard-os2.cpp       |    2 +-
 .../common/VBoxService/VBoxServiceControl.cpp      |    2 +-
 .../common/VBoxService/VBoxServiceControl.h        |    2 +-
 .../VBoxService/VBoxServiceControlProcess.cpp      |    2 +-
 .../VBoxService/VBoxServiceControlSession.cpp      |    2 +-
 .../common/VBoxService/VBoxServiceCpuHotPlug.cpp   |   37 +-
 .../common/VBoxService/VBoxServiceInternal.h       |    2 +-
 .../common/VBoxService/VBoxServicePageSharing.cpp  |    2 +-
 .../common/VBoxService/VBoxServicePropCache.cpp    |    2 +-
 .../common/VBoxService/VBoxServicePropCache.h      |    2 +-
 .../common/VBoxService/VBoxServiceResource-win.h   |    2 +-
 .../common/VBoxService/VBoxServiceStats.cpp        |    2 +-
 .../common/VBoxService/VBoxServiceTimeSync.cpp     |    2 +-
 .../common/VBoxService/VBoxServiceToolBox.cpp      |   10 +-
 .../common/VBoxService/VBoxServiceToolBox.h        |    2 +-
 .../common/VBoxService/VBoxServiceUtils.cpp        |    2 +-
 .../common/VBoxService/VBoxServiceUtils.h          |    2 +-
 .../common/VBoxService/VBoxServiceVMInfo-win.cpp   |    2 +-
 .../common/VBoxService/VBoxServiceVMInfo.cpp       |    2 +-
 .../common/VBoxService/VBoxServiceVMInfo.h         |    2 +-
 .../common/VBoxService/testcase/tstUserInfo.cpp    |    2 +-
 src/VBox/Additions/common/VBoxVideo/.scm-settings  |   33 +
 src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp  |   31 +-
 .../Additions/common/VBoxVideo/HGSMIBuffers.cpp    |   31 +-
 .../Additions/common/VBoxVideo/HGSMIHostCmd.cpp    |   31 +-
 .../Additions/common/VBoxVideo/Modesetting.cpp     |   31 +-
 src/VBox/Additions/common/VBoxVideo/VBVABase.cpp   |   31 +-
 ...odo-create-library-from-these-files-for-windows |    0
 src/VBox/Additions/common/crOpenGL/.scm-settings   |   62 +
 src/VBox/Additions/common/crOpenGL/DD_glc.py       |    2 +-
 src/VBox/Additions/common/crOpenGL/DD_glh.py       |    2 +-
 .../common/crOpenGL/Linux_i386_glxapi_exports.py   |    8 +-
 .../common/crOpenGL/SunOS_i386_exports.py          |    2 +-
 .../common/crOpenGL/SunOS_i386_exports_dri.py      |    2 +-
 .../common/crOpenGL/SunOS_i386_glxapi_exports.py   |    2 +-
 src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc    |    2 +-
 src/VBox/Additions/common/crOpenGL/VBoxICDList.h   |    8 +-
 .../Additions/common/crOpenGL/array/arrayspu.c     |    8 +-
 .../Additions/common/crOpenGL/array/arrayspu.rc    |    2 +-
 .../common/crOpenGL/array/arrayspu_init.c          |    4 +-
 src/VBox/Additions/common/crOpenGL/context.c       |   46 +-
 src/VBox/Additions/common/crOpenGL/cr_gl.py        |    2 +-
 src/VBox/Additions/common/crOpenGL/defs.py         |    4 +-
 src/VBox/Additions/common/crOpenGL/defs64.py       |    4 +-
 src/VBox/Additions/common/crOpenGL/dri_drv.c       |   38 +-
 src/VBox/Additions/common/crOpenGL/dri_drv.h       |    2 +-
 src/VBox/Additions/common/crOpenGL/dri_glx.h       |    4 +-
 src/VBox/Additions/common/crOpenGL/dri_util.c      |   68 +-
 src/VBox/Additions/common/crOpenGL/egl.c           |   30 +-
 src/VBox/Additions/common/crOpenGL/entrypoints.py  |    1 -
 src/VBox/Additions/common/crOpenGL/entrypoints.pyc |  Bin 5904 -> 5904 bytes
 src/VBox/Additions/common/crOpenGL/fakedri_drv.c   |  199 +-
 src/VBox/Additions/common/crOpenGL/fakedri_drv.h   |    6 +-
 .../common/crOpenGL/fakedri_glfuncsList.h          |    3 +-
 .../common/crOpenGL/fakedri_glxfuncsList.h         |    3 +-
 .../common/crOpenGL/feedback/feedback_context.c    |    6 +-
 .../crOpenGL/feedback/feedback_state_special       |    2 +-
 .../common/crOpenGL/feedback/feedbackspu.rc        |    2 +-
 .../common/crOpenGL/feedback/feedbackspu_init.c    |    2 +-
 src/VBox/Additions/common/crOpenGL/glx.c           |   93 +-
 src/VBox/Additions/common/crOpenGL/glx_c_exports.c |    3 +-
 src/VBox/Additions/common/crOpenGL/glx_proto.h     |    3 +-
 src/VBox/Additions/common/crOpenGL/icd_drv.c       |   12 +-
 src/VBox/Additions/common/crOpenGL/icd_drv.h       |    4 +-
 src/VBox/Additions/common/crOpenGL/load.c          |   10 +-
 src/VBox/Additions/common/crOpenGL/pack/pack.py    |    4 +-
 src/VBox/Additions/common/crOpenGL/pack/packspu.rc |    2 +-
 .../common/crOpenGL/pack/packspu_bufferobject.c    |    4 +-
 .../common/crOpenGL/pack/packspu_client.c          |    6 +-
 .../common/crOpenGL/pack/packspu_config.c          |    4 +-
 .../common/crOpenGL/pack/packspu_context.c         |    4 +-
 .../common/crOpenGL/pack/packspu_framebuffer.c     |   16 +-
 .../Additions/common/crOpenGL/pack/packspu_get.py  |   12 +-
 .../common/crOpenGL/pack/packspu_getshaders.c      |    4 +-
 .../common/crOpenGL/pack/packspu_getstring.c       |    4 +-
 .../Additions/common/crOpenGL/pack/packspu_glsl.c  |    4 +-
 .../Additions/common/crOpenGL/pack/packspu_misc.c  |    6 +-
 .../Additions/common/crOpenGL/pack/packspu_net.c   |    6 +-
 .../Additions/common/crOpenGL/pack/packspu_pixel.c |    8 +-
 .../common/crOpenGL/pack/packspu_proto.py          |    4 +-
 .../Additions/common/crOpenGL/pack/packspu_special |    2 +-
 .../common/crOpenGL/pack/packspu_swapbuf.c         |    2 +-
 .../common/crOpenGL/pack/packspu_texture.c         |    2 +-
 .../common/crOpenGL/passthrough/passthroughspu.rc  |    2 +-
 .../crOpenGL/passthrough/passthroughspu_init.c     |    2 +-
 src/VBox/Additions/common/crOpenGL/stub.c          |   28 +-
 src/VBox/Additions/common/crOpenGL/stub_common.py  |   22 +-
 src/VBox/Additions/common/crOpenGL/utils.c         |   44 +-
 src/VBox/Additions/common/crOpenGL/vboxdri_drv.c   |   32 +-
 src/VBox/Additions/common/crOpenGL/wgl.c           |   34 +-
 .../Additions/common/crOpenGL/windows_exports.py   |    2 +-
 .../common/crOpenGL/windows_getprocaddress.py      |    2 +-
 src/VBox/Additions/common/pam/pam_vbox.cpp         |    2 +-
 .../Additions/common/testcase/tstPageFusion.cpp    |    2 +-
 src/VBox/Additions/darwin/Installer/.scm-settings  |   27 +
 .../darwin/Installer/DiskImage/Uninstall.tool      |    8 +-
 .../Installer/VBoxGuestAdditionsKEXTs/postflight   |    6 +-
 .../VBoxServiceWrapper                             |    6 +-
 .../Additions/darwin/VBoxClient/VBoxClient.cpp     |    2 +-
 .../darwin/VBoxClient/VBoxClientClipboard.cpp      |    2 +-
 .../VBoxClient/VBoxClientClipboardGuestToHost.cpp  |    2 +-
 .../VBoxClient/VBoxClientClipboardHostToGuest.cpp  |    2 +-
 .../darwin/VBoxClient/VBoxClientInternal.h         |    2 +-
 src/VBox/Additions/darwin/vboxfs/.scm-settings     |   19 +
 src/VBox/Additions/darwin/vboxfs/Makefile.kmk      |   12 +-
 .../Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp     |    2 +-
 .../Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp   |    2 +-
 src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp |    2 +-
 src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp       |    2 +-
 src/VBox/Additions/darwin/vboxfs/mount.vboxvfs.c   |    2 +-
 src/VBox/Additions/darwin/vboxfs/vboxvfs.h         |    2 +-
 src/VBox/Additions/freebsd/.scm-settings           |   20 +
 src/VBox/Additions/freebsd/Installer/vboxguest.sh  |    7 +-
 src/VBox/Additions/freebsd/Makefile                |    3 +-
 src/VBox/Additions/freebsd/drm/Makefile            |    3 +-
 src/VBox/Additions/freebsd/drm/files_vboxvideo_drm |    4 +-
 src/VBox/Additions/freebsd/drm/vboxvideo_drm.c     |    2 +-
 src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h       |    2 +-
 .../Additions/freebsd/vboxvfs/vboxvfs_vfsops.c     |    2 +-
 src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vnops.c |    2 +-
 src/VBox/Additions/haiku/.scm-settings             |   20 +
 .../Additions/haiku/SharedFolders/OpenHashTable.h  |    2 +-
 .../Additions/haiku/SharedFolders/kernel_cpp.h     |    2 +-
 src/VBox/Additions/haiku/SharedFolders/lock.h      |    2 +-
 src/VBox/Additions/haiku/SharedFolders/vboxsf.c    |    2 +-
 src/VBox/Additions/haiku/SharedFolders/vboxsf.h    |    2 +-
 .../Additions/haiku/SharedFolders/vnode_cache.cpp  |    2 +-
 src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.cpp   |    2 +-
 src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.h     |    2 +-
 .../Additions/haiku/VBoxMouse/VBoxMouseFilter.cpp  |    2 +-
 .../Additions/haiku/VBoxMouse/VBoxMouseFilter.h    |    2 +-
 .../Additions/haiku/VBoxTray/VBoxClipboard.cpp     |    2 +-
 src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.h  |    2 +-
 src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.cpp  |    2 +-
 src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.h    |    2 +-
 .../haiku/VBoxTray/VBoxGuestApplication.cpp        |    2 +-
 .../haiku/VBoxTray/VBoxGuestApplication.h          |    2 +-
 .../haiku/VBoxTray/VBoxGuestDeskbarView.cpp        |    2 +-
 .../haiku/VBoxTray/VBoxGuestDeskbarView.h          |    2 +-
 .../haiku/VBoxTray/VBoxServiceDescriptor.h         |    2 +-
 src/VBox/Additions/haiku/VBoxTray/VBoxTray.rdef    |    7 +-
 .../haiku/VBoxVideo/accelerant/accelerant.cpp      |    2 +-
 .../haiku/VBoxVideo/accelerant/accelerant.h        |    2 +-
 .../haiku/VBoxVideo/common/VBoxVideo_common.h      |    2 +-
 .../Additions/haiku/VBoxVideo/driver/driver.cpp    |    2 +-
 .../Additions/haiku/include/VBoxGuestInternal.h    |    2 +-
 src/VBox/Additions/haiku/include/lock.h            |    2 +-
 src/VBox/Additions/haiku/load.sh                   |   16 +
 src/VBox/Additions/haiku/unload.sh                 |   16 +
 src/VBox/Additions/linux/Makefile                  |    3 +-
 src/VBox/Additions/linux/Makefile.kmk              |   25 +-
 src/VBox/Additions/linux/drm/.scm-settings         |   25 +
 src/VBox/Additions/linux/drm/Makefile.kmk          |   12 +-
 src/VBox/Additions/linux/drm/Makefile.module.kms   |   21 +-
 src/VBox/Additions/linux/drm/files_vboxvideo_drv   |    4 +-
 src/VBox/Additions/linux/drm/indent.sed            |   14 +-
 src/VBox/Additions/linux/drm/vbox_drv.c            |    8 +-
 src/VBox/Additions/linux/drm/vbox_drv.h            |    1 -
 src/VBox/Additions/linux/drm/vbox_fb.c             |   25 +-
 src/VBox/Additions/linux/drm/vbox_hgsmi.c          |   39 +-
 src/VBox/Additions/linux/drm/vbox_mode.c           |   15 +-
 src/VBox/Additions/linux/drm/vbox_prime.c          |    1 +
 src/VBox/Additions/linux/export_modules            |  127 -
 src/VBox/Additions/linux/export_modules.sh         |  136 +
 src/VBox/Additions/linux/installer/.scm-settings   |   20 +
 src/VBox/Additions/linux/installer/autorun.sh      |    4 +-
 src/VBox/Additions/linux/installer/deffiles        |    3 +-
 src/VBox/Additions/linux/installer/install.sh.in   |    4 +-
 .../Additions/linux/installer/module-autologon.sh  |    5 +-
 .../Additions/linux/installer/vboxadd-service.sh   |    7 +-
 src/VBox/Additions/linux/installer/vboxadd-x11.sh  |    7 +-
 src/VBox/Additions/linux/installer/vboxadd.sh      |   15 +-
 .../Additions/linux/lightdm-greeter/.scm-settings  |   20 +
 .../liblightdm-gobject-1.5.0/greeter.c             |    9 +
 .../liblightdm-gobject-1.5.0/language.c            |    9 +
 .../liblightdm-gobject-1.5.0/layout.c              |    9 +
 .../liblightdm-gobject-1.5.0/power.c               |    9 +
 .../liblightdm-gobject-1.5.0/session.c             |    9 +
 .../liblightdm-gobject-1.5.0/system.c              |    9 +
 .../liblightdm-gobject-1.5.0/user.c                |    9 +
 .../linux/lightdm-greeter/vbox-greeter.cpp         |    5 +-
 .../Additions/linux/sharedfolders/.scm-settings    |   20 +
 .../Additions/linux/sharedfolders/Makefile.kmk     |    8 +-
 .../Additions/linux/sharedfolders/Makefile.module  |    7 +-
 src/VBox/Additions/linux/sharedfolders/dirops.c    |    2 +-
 .../Additions/linux/sharedfolders/files_vboxsf     |    2 +-
 src/VBox/Additions/linux/sharedfolders/lnkops.c    |    2 +-
 .../Additions/linux/sharedfolders/mount.vboxsf.c   |   14 +-
 src/VBox/Additions/linux/sharedfolders/regops.c    |   16 +-
 src/VBox/Additions/linux/sharedfolders/utils.c     |    2 +-
 src/VBox/Additions/linux/sharedfolders/vbsfmount.c |    2 +-
 src/VBox/Additions/linux/sharedfolders/vbsfmount.h |   24 +-
 src/VBox/Additions/linux/sharedfolders/vfsmod.c    |   24 +-
 src/VBox/Additions/linux/sharedfolders/vfsmod.h    |    2 +-
 .../Additions/linux/testcase/TimesyncBackdoor.c    |    2 +-
 src/VBox/Additions/solaris/.scm-settings           |   44 +
 src/VBox/Additions/solaris/DRM/deps.asm            |    2 +-
 src/VBox/Additions/solaris/DRM/vboxvideo_drm.c     |    2 +-
 src/VBox/Additions/solaris/Installer/VBox.sh       |    7 +-
 .../Additions/solaris/Installer/makepackage.sh     |    7 +-
 .../Additions/solaris/Installer/postinstall.sh     |    2 +-
 src/VBox/Additions/solaris/Installer/preremove.sh  |    2 +-
 .../Additions/solaris/Installer/vbox_vendor_select |   10 +-
 .../Additions/solaris/Installer/vboxdevlink.sed    |   25 +
 src/VBox/Additions/solaris/Installer/vboxguest.sh  |    7 +-
 src/VBox/Additions/solaris/Mouse/deps.asm          |    2 +-
 .../Additions/solaris/Mouse/testcase/solaris.h     |    2 +-
 .../solaris/Mouse/testcase/tstVBoxMouse-solaris.c  |    2 +-
 src/VBox/Additions/solaris/Mouse/vboxms.c          |    3 +-
 src/VBox/Additions/solaris/Mouse/vboxms.conf       |   16 +-
 src/VBox/Additions/solaris/Mouse/vboxmslnk.c       |    2 +-
 src/VBox/Additions/solaris/SharedFolders/deps.asm  |    2 +-
 src/VBox/Additions/solaris/SharedFolders/vboxfs.h  |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_mount.c |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_prov.c  |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_prov.h  |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_vfs.c   |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_vfs.h   |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_vnode.c |    2 +-
 .../Additions/solaris/SharedFolders/vboxfs_vnode.h |    2 +-
 src/VBox/Additions/solaris/Virtio/Virtio-solaris.c |    2 +-
 src/VBox/Additions/solaris/Virtio/Virtio-solaris.h |    2 +-
 .../Additions/solaris/Virtio/VirtioNet-solaris.c   |    2 +-
 .../Additions/solaris/Virtio/VirtioPci-solaris.c   |    2 +-
 .../Additions/solaris/Virtio/VirtioPci-solaris.h   |    2 +-
 .../Additions/solaris/Virtio/VirtioRing-solaris.c  |    2 +-
 src/VBox/Additions/x11/.scm-settings               |   37 +
 src/VBox/Additions/x11/Installer/98vboxadd-xclient |    2 +-
 src/VBox/Additions/x11/Installer/x11config.pl      |    7 +-
 src/VBox/Additions/x11/Installer/x11config.sh      |    7 +-
 src/VBox/Additions/x11/Installer/x11config15.pl    |    7 +-
 src/VBox/Additions/x11/Installer/x11config15sol.pl |   11 +-
 .../Additions/x11/Installer/x11config15suse.pl     |    7 +-
 src/VBox/Additions/x11/Installer/x11restore.pl     |    8 +-
 src/VBox/Additions/x11/Makefile.kmk                |    1 +
 src/VBox/Additions/x11/VBoxClient/VBoxClient.h     |    2 +-
 src/VBox/Additions/x11/VBoxClient/check3d.cpp      |    2 +-
 src/VBox/Additions/x11/VBoxClient/clipboard.cpp    |    2 +-
 src/VBox/Additions/x11/VBoxClient/display-svga.cpp |    4 +-
 src/VBox/Additions/x11/VBoxClient/display.cpp      |    2 +-
 src/VBox/Additions/x11/VBoxClient/draganddrop.cpp  |    2 +-
 src/VBox/Additions/x11/VBoxClient/hostversion.cpp  |    2 +-
 src/VBox/Additions/x11/VBoxClient/main.cpp         |    2 +-
 src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp |    2 +-
 src/VBox/Additions/x11/VBoxClient/seamless-x11.h   |    2 +-
 src/VBox/Additions/x11/VBoxClient/seamless.cpp     |    2 +-
 src/VBox/Additions/x11/VBoxClient/seamless.h       |    2 +-
 .../VBoxClient/testcase/tstSeamlessX11-auto.cpp    |    2 +-
 .../x11/VBoxClient/testcase/tstSeamlessX11.cpp     |    2 +-
 src/VBox/Additions/x11/vboxmouse/vboxmouse.c       |    2 +-
 src/VBox/Additions/x11/vboxvideo/HGSMIMemAlloc.h   |   33 +-
 src/VBox/Additions/x11/vboxvideo/VBoxVideoIPRT.h   |   33 +-
 src/VBox/Additions/x11/vboxvideo/edid.c            |    2 +-
 src/VBox/Additions/x11/vboxvideo/getmode.c         |   33 +-
 src/VBox/Additions/x11/vboxvideo/hgsmimemalloc.c   |   33 +-
 src/VBox/Additions/x11/vboxvideo/pointer.c         |   33 +-
 src/VBox/Additions/x11/vboxvideo/setmode.c         |    4 +-
 src/VBox/Additions/x11/vboxvideo/vboxvideo.c       |    2 +-
 src/VBox/Additions/x11/vboxvideo/vboxvideo.h       |    6 +-
 src/VBox/Additions/x11/vboxvideo/vbva.c            |   33 +-
 src/VBox/Artwork/.scm-settings                     |   21 +
 src/VBox/Artwork/win/.scm-settings                 |   29 +
 src/VBox/Artwork/win/TemplateDll.rc                |    2 +-
 src/VBox/Artwork/win/TemplateDrv.rc                |    2 +-
 src/VBox/Artwork/win/TemplateExe.rc                |    2 +-
 src/VBox/Artwork/win/TemplateR0.rc                 |    2 +-
 src/VBox/Artwork/win/TemplateRC.rc                 |    2 +-
 src/VBox/Artwork/win/TemplateRsrcDefs.h            |    2 +-
 src/VBox/Debugger/DBGCBuiltInSymbols.cpp           |    2 +-
 src/VBox/Debugger/DBGCCmdHlp.cpp                   |    2 +-
 src/VBox/Debugger/DBGCCmdWorkers.cpp               |    2 +-
 src/VBox/Debugger/DBGCCommands.cpp                 |    2 +-
 src/VBox/Debugger/DBGCEmulateCodeView.cpp          |    2 +-
 src/VBox/Debugger/DBGCEval.cpp                     |    2 +-
 src/VBox/Debugger/DBGCFunctions.cpp                |    2 +-
 src/VBox/Debugger/DBGCGdbRemoteStub.cpp            |    2 +-
 src/VBox/Debugger/DBGCInternal.h                   |    2 +-
 src/VBox/Debugger/DBGCOps.cpp                      |    2 +-
 src/VBox/Debugger/DBGCScreenAscii.cpp              |    5 +-
 src/VBox/Debugger/DBGCTcp.cpp                      |    2 +-
 src/VBox/Debugger/DBGConsole.cpp                   |    2 +-
 src/VBox/Debugger/DBGPlugInCommonELF.cpp           |    2 +-
 src/VBox/Debugger/DBGPlugInCommonELF.h             |    6 +-
 src/VBox/Debugger/DBGPlugInCommonELFTmpl.cpp.h     |    2 +-
 src/VBox/Debugger/DBGPlugInDarwin.cpp              |    2 +-
 src/VBox/Debugger/DBGPlugInDiggers.cpp             |    2 +-
 src/VBox/Debugger/DBGPlugInFreeBsd.cpp             |    8 +-
 src/VBox/Debugger/DBGPlugInLinux.cpp               |    2 +-
 src/VBox/Debugger/DBGPlugInOS2.cpp                 |    2 +-
 src/VBox/Debugger/DBGPlugInSolaris.cpp             |    2 +-
 src/VBox/Debugger/DBGPlugInWinNt.cpp               |    2 +-
 src/VBox/Debugger/DBGPlugIns.h                     |    2 +-
 src/VBox/Debugger/VBoxDbg.cpp                      |    2 +-
 src/VBox/Debugger/VBoxDbgBase.cpp                  |    2 +-
 src/VBox/Debugger/VBoxDbgBase.h                    |    2 +-
 src/VBox/Debugger/VBoxDbgConsole.cpp               |    6 +-
 src/VBox/Debugger/VBoxDbgConsole.h                 |    2 +-
 src/VBox/Debugger/VBoxDbgDisas.h                   |    2 +-
 src/VBox/Debugger/VBoxDbgGui.cpp                   |    2 +-
 src/VBox/Debugger/VBoxDbgGui.h                     |    2 +-
 src/VBox/Debugger/VBoxDbgStatsQt.cpp               |    2 +-
 src/VBox/Debugger/VBoxDbgStatsQt.h                 |    2 +-
 src/VBox/Debugger/testcase/tstDBGCParser.cpp       |    2 +-
 src/VBox/Debugger/testcase/tstDBGCStubs.cpp        |    2 +-
 src/VBox/Debugger/testcase/tstVBoxDbg.cpp          |    2 +-
 src/VBox/Devices/Audio/AudioMixer.h                |    2 +-
 src/VBox/Devices/Audio/DevHDA.cpp                  |  101 +-
 src/VBox/Devices/Audio/DevHDA.h                    |    4 +-
 src/VBox/Devices/Audio/DevHDACommon.h              |   10 +-
 src/VBox/Devices/Audio/DevSB16.cpp                 |    1 +
 src/VBox/Devices/Audio/DrvAudioCommon.cpp          |    1 +
 src/VBox/Devices/Audio/HDACodec.h                  |    2 +-
 src/VBox/Devices/Audio/HDAStreamPeriod.cpp         |   18 +-
 src/VBox/Devices/Audio/HDAStreamPeriod.h           |    2 +-
 src/VBox/Devices/Audio/alsa_stubs.h                |    2 +-
 src/VBox/Devices/BiosCommonCode/commondefs.inc     |   23 +-
 src/VBox/Devices/EFI/.scm-settings                 |  135 +
 src/VBox/Devices/EFI/DevEFI.cpp                    |    4 +-
 src/VBox/Devices/EFI/DevEFI.h                      |    2 +-
 src/VBox/Devices/EFI/DevSmc.cpp                    |    2 +-
 .../BaseTools/Source/C/EfiRom/Makefile.kmk         |    2 -
 .../BaseTools/Source/C/VolInfo/Makefile.kmk        |    2 -
 .../BaseTools/Source/Python/Ecc/exception.xml      |  636 ++---
 .../Universal/Disk/PartitionDxe/Apple.c            |    4 +-
 .../Devices/EFI/Firmware/VBoxPkg/Include/DevEFI.h  |   25 +
 .../Include/IndustryStandard/VBoxFatImage.h        |    2 +-
 .../EFI/Firmware/VBoxPkg/Include/VBoxDebugLib.h    |    2 +-
 .../EFI/Firmware/VBoxPkg/Include/VBoxMemLayout.h   |    2 +-
 .../Devices/EFI/Firmware/VBoxPkg/Include/VBoxPkg.h |    2 +-
 .../Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c  |    8 +-
 .../VBoxDebugAgentLib/VBoxDebugAgentLib.inf        |    2 +-
 .../VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c    |    9 +-
 .../VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf  |    3 +-
 .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c   |    9 +-
 .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c   |    8 +-
 .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c    |    8 +-
 .../Library/VBoxDebugLib/VBoxPrintHexDump.c        |    8 +-
 .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintString.c |    8 +-
 .../VBoxOemHookStatusCodeLib.c                     |    8 +-
 .../VBoxOemHookStatusCodeLib.inf                   |    3 +-
 .../VBoxPeCoffExtraActionLib.c                     |    8 +-
 .../VBoxPeCoffExtraActionLib.inf                   |    2 +-
 .../VBoxPkg/Library/VBoxPeCoffLib/BasePeCoff.c     |    2 +-
 .../Library/VBoxPeCoffLib/BasePeCoffLibInternals.h |    2 +-
 .../VBoxPkg/Library/VBoxPeCoffLib/PeCoffLoaderEx.c |    2 +-
 .../Library/VBoxPeCoffLib/VBoxPeCoffLib.inf        |    4 +-
 .../EFI/Firmware/VBoxPkg/VBoxAppleSim/Console.c    |    2 +-
 .../Firmware/VBoxPkg/VBoxAppleSim/ConsoleControl.h |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxAppleSim/Cpu.c        |    8 +-
 .../Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.c   |    8 +-
 .../Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf |    8 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.c     |   16 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.inf   |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFswParam.h  |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf     |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxIso9660.inf |    4 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_base.h      |    6 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.c      |   35 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.h      |    6 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c       |   10 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.h       |    6 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_base.h  |    6 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_lib.c   |    8 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.c       |   17 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.h       |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.c   |    8 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.h   |   23 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_lib.c       |    8 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_strfunc.h   |    2 +-
 .../Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.c    |   20 +-
 .../Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.h    |   26 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lslr.c     |    8 +-
 .../EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lsroot.c   |   10 +-
 .../VBoxPkg/VBoxInterceptorDxe/BootService.c       |    2 +-
 .../Firmware/VBoxPkg/VBoxInterceptorDxe/RunTime.c  |    2 +-
 .../VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.c   |    2 +-
 .../VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.h   |    2 +-
 .../VBoxInterceptorDxe/VBoxInterceptorDxe.inf      |    3 +-
 .../VBoxInterceptorDxe/boot_service_table.h        |    2 +-
 .../VBoxPkg/VBoxInterceptorDxe/interceptor.h       |    2 +-
 .../VBoxPkg/VBoxInterceptorDxe/print_types.h       |    2 +-
 .../VBoxInterceptorDxe/runtime_service_table.h     |    2 +-
 .../Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c  |    2 +-
 .../Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h  |    2 +-
 .../VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf      |    3 +-
 .../Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h    |    2 +-
 .../Devices/EFI/Firmware/VBoxPkg/VBoxMisc/Makefile |   10 +-
 src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxPkg.dec  |    2 +-
 .../VBoxPkg/VBoxSysTables/LegacyBiosMpTable.h      |    2 +-
 .../VBoxPkg/VBoxSysTables/TableConversion.c        |    2 +-
 .../Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.c |   15 +-
 .../VBoxPkg/VBoxSysTables/VBoxSysTables.inf        |    8 +-
 .../Firmware/VBoxPkg/VBoxVgaDxe/ComponentName.c    |    2 +-
 .../VBoxPkg/VBoxVgaDxe/DriverSupportedEfiVersion.c |    2 +-
 .../Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/Edid.c |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.c      |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.h      |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf |    2 +-
 .../VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c     |    6 +-
 .../EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.c   |    2 +-
 .../EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.h   |    2 +-
 .../Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaUgaDraw.c   |    2 +-
 .../VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c        |   26 +-
 .../VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf      |    3 +-
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd      |  Bin 2097152 -> 2097152 bytes
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd      |  Bin 2097152 -> 2097152 bytes
 src/VBox/Devices/EFI/VBoxSmcUtil-darwin.cpp        |    2 +-
 src/VBox/Devices/GIMDev/DrvUDP.cpp                 |    2 +-
 src/VBox/Devices/GIMDev/GIMDev.cpp                 |    2 +-
 src/VBox/Devices/Graphics/.scm-settings            |   63 +
 .../Graphics/BIOS/VBoxVgaBiosAlternative286.asm    |    6 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum |    2 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative386.asm    |    6 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum |    2 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative8086.asm   |    6 +-
 .../BIOS/VBoxVgaBiosAlternative8086.md5sum         |    2 +-
 src/VBox/Devices/Graphics/BIOS/inlines.h           |    2 +-
 src/VBox/Devices/Graphics/BIOS/vberom.asm          |   24 +-
 src/VBox/Devices/Graphics/BIOS/vgarom.asm          |   32 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA.cpp          |  119 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA.h            |    9 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h    |    2 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m    |    2 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp   |  113 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h |  191 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp    |  194 +-
 .../Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp  |  200 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp |   73 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp    | 2506 +++++++++++-------
 src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp        |  555 ++--
 src/VBox/Devices/Graphics/DevVGA-SVGA3d.h          |   13 +-
 src/VBox/Devices/Graphics/DevVGA.cpp               |    1 +
 src/VBox/Devices/Graphics/DevVGA.h                 |    2 +-
 src/VBox/Devices/Graphics/DevVGAModes.h            |    2 +-
 src/VBox/Devices/Graphics/DevVGASavedState.h       |    6 +-
 src/VBox/Devices/Graphics/DevVGATmpl.h             |    2 +-
 src/VBox/Devices/Graphics/DevVGA_VBVA.cpp          |    2 +-
 src/VBox/Devices/Graphics/DevVGA_VDMA.cpp          |    2 +-
 src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp      |    2 +-
 src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h        |    2 +-
 src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp     |    2 +-
 src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h       |    2 +-
 src/VBox/Devices/Graphics/VBoxSVGA3D.def           |    2 +-
 src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def       |    2 +-
 src/VBox/Devices/Graphics/shaderlib/shaderapi.c    |   14 +-
 src/VBox/Devices/Graphics/shaderlib/shaderlib.h    |    2 +-
 src/VBox/Devices/Graphics/shaderlib/utils.c        |    2 +-
 src/VBox/Devices/Graphics/shaderlib/vboxext.h      |    3 +-
 .../Graphics/shaderlib/wine/include/commctrl.rh    |    9 +
 .../Graphics/shaderlib/wine/include/d3dvec.inl     |    9 +
 .../Graphics/shaderlib/wine/include/d3dx9math.inl  |    9 +
 .../Devices/Graphics/shaderlib/wine/include/dde.rh |    9 +
 .../Graphics/shaderlib/wine/include/rmxftmpl.x     |    9 +
 .../Graphics/shaderlib/wine/include/winnt.rh       |    9 +
 .../Graphics/shaderlib/wine/include/winuser.rh     |    9 +
 .../Graphics/shaderlib/wine/vbox/VBoxDbgGl.c       |    3 +-
 .../Graphics/shaderlib/wine/vbox/VBoxDbgGl.h       |    3 +-
 .../Graphics/shaderlib/wine/vbox/VBoxWineEx.h      |   11 +-
 src/VBox/Devices/Graphics/shaderlib/winoverride.h  |    2 +-
 src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c   |    2 +-
 src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h      |    5 +
 src/VBox/Devices/Input/DevPS2.cpp                  |   30 +-
 src/VBox/Devices/Input/DrvKeyboardQueue.cpp        |    2 +-
 src/VBox/Devices/Input/DrvMouseQueue.cpp           |    2 +-
 src/VBox/Devices/Input/PS2Dev.h                    |    2 +-
 src/VBox/Devices/Input/PS2K.cpp                    |    2 +-
 src/VBox/Devices/Input/PS2M.cpp                    |    4 +-
 src/VBox/Devices/Input/UsbKbd.cpp                  |    2 +-
 src/VBox/Devices/Input/UsbMouse.cpp                |    5 +-
 src/VBox/Devices/Input/testcase/tstUsbMouse.cpp    |    2 +-
 src/VBox/Devices/Makefile.kmk                      |   28 +
 src/VBox/Devices/Misc/VirtualKD.cpp                |    2 +-
 src/VBox/Devices/Network/.scm-settings             |   42 +
 src/VBox/Devices/Network/DevE1000.cpp              |    4 +-
 src/VBox/Devices/Network/DevE1000Phy.cpp           |    2 +-
 src/VBox/Devices/Network/DevE1000Phy.h             |    2 +-
 src/VBox/Devices/Network/DevEEPROM.cpp             |    2 +-
 src/VBox/Devices/Network/DevEEPROM.h               |    2 +-
 src/VBox/Devices/Network/DevINIP.cpp               |    2 +-
 src/VBox/Devices/Network/DevPCNet.cpp              |    2 +-
 src/VBox/Devices/Network/DevVirtioNet.cpp          |    2 +-
 src/VBox/Devices/Network/DrvDedicatedNic.cpp       |    2 +-
 src/VBox/Devices/Network/DrvIntNet.cpp             |    2 +-
 src/VBox/Devices/Network/DrvNAT.cpp                |    2 +-
 src/VBox/Devices/Network/DrvNetShaper.cpp          |    2 +-
 src/VBox/Devices/Network/DrvNetSniffer.cpp         |    2 +-
 src/VBox/Devices/Network/DrvTAP.cpp                |    2 +-
 src/VBox/Devices/Network/DrvUDPTunnel.cpp          |    2 +-
 src/VBox/Devices/Network/DrvVDE.cpp                |    3 +-
 src/VBox/Devices/Network/Pcap.cpp                  |    2 +-
 src/VBox/Devices/Network/Pcap.h                    |    2 +-
 src/VBox/Devices/Network/SrvIntNetR0.cpp           |    2 +-
 src/VBox/Devices/Network/VDEPlug.cpp               |    2 +-
 .../Devices/Network/lwip-new/vbox/VBoxLwipCore.cpp |    2 +-
 .../Devices/Network/lwip-new/vbox/VBoxLwipCore.h   |    2 +-
 src/VBox/Devices/Network/lwip-new/vbox/sys_arch.c  |    2 +-
 .../Devices/Network/scripts/VBoxConvertNATStats.sh |    6 +-
 .../Devices/Network/scripts/VBoxPortForwarding.py  |    2 +-
 src/VBox/Devices/Network/slirp/bootp.c             |    2 +-
 src/VBox/Devices/Network/slirp/bootp.h             |    2 +-
 src/VBox/Devices/Network/slirp/cksum.c             |    2 +-
 src/VBox/Devices/Network/slirp/counters.h          |    2 +-
 src/VBox/Devices/Network/slirp/ctl.h               |    2 +-
 src/VBox/Devices/Network/slirp/debug.c             |    2 +-
 src/VBox/Devices/Network/slirp/debug.h             |    2 +-
 src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c |    2 +-
 src/VBox/Devices/Network/slirp/ext.h               |    2 +-
 src/VBox/Devices/Network/slirp/hostres.c           |    2 +-
 src/VBox/Devices/Network/slirp/icmp_var.h          |    2 +-
 src/VBox/Devices/Network/slirp/if.h                |    2 +-
 src/VBox/Devices/Network/slirp/ip.h                |    2 +-
 src/VBox/Devices/Network/slirp/ip_icmp.c           |    2 +-
 src/VBox/Devices/Network/slirp/ip_icmp.h           |    2 +-
 src/VBox/Devices/Network/slirp/ip_icmpwin.c        |    2 +-
 src/VBox/Devices/Network/slirp/ip_input.c          |    2 +-
 src/VBox/Devices/Network/slirp/ip_output.c         |    2 +-
 src/VBox/Devices/Network/slirp/libslirp.h          |    2 +-
 src/VBox/Devices/Network/slirp/main.h              |    2 +-
 src/VBox/Devices/Network/slirp/misc.c              |    2 +-
 src/VBox/Devices/Network/slirp/misc.h              |    2 +-
 src/VBox/Devices/Network/slirp/queue.h             |    2 +-
 .../Devices/Network/slirp/resolv_conf_parser.c     |    2 +-
 .../Devices/Network/slirp/resolv_conf_parser.h     |    2 +-
 src/VBox/Devices/Network/slirp/sbuf.c              |    2 +-
 src/VBox/Devices/Network/slirp/sbuf.h              |    2 +-
 src/VBox/Devices/Network/slirp/slirp.c             |    2 +-
 src/VBox/Devices/Network/slirp/slirp.h             |    2 +-
 src/VBox/Devices/Network/slirp/slirp_config.h      |    2 +-
 src/VBox/Devices/Network/slirp/slirp_dns.c         |    2 +-
 src/VBox/Devices/Network/slirp/slirp_dns.h         |    2 +-
 src/VBox/Devices/Network/slirp/slirp_state.h       |    2 +-
 src/VBox/Devices/Network/slirp/socket.c            |    2 +-
 src/VBox/Devices/Network/slirp/socket.h            |    2 +-
 src/VBox/Devices/Network/slirp/tcp.h               |    2 +-
 src/VBox/Devices/Network/slirp/tcp_input.c         |    2 +-
 src/VBox/Devices/Network/slirp/tcp_output.c        |    2 +-
 src/VBox/Devices/Network/slirp/tcp_subr.c          |    2 +-
 src/VBox/Devices/Network/slirp/tcp_timer.c         |    2 +-
 src/VBox/Devices/Network/slirp/tcp_timer.h         |    2 +-
 src/VBox/Devices/Network/slirp/tcp_var.h           |    2 +-
 src/VBox/Devices/Network/slirp/tcpip.h             |    2 +-
 src/VBox/Devices/Network/slirp/tftp.c              |    2 +-
 src/VBox/Devices/Network/slirp/tftp.h              |    2 +-
 src/VBox/Devices/Network/slirp/udp.c               |    4 +-
 src/VBox/Devices/Network/slirp/udp.h               |    2 +-
 src/VBox/Devices/Network/slirp/zone.h              |    2 +-
 src/VBox/Devices/Network/testcase/tstDevEEPROM.cpp |    2 +-
 src/VBox/Devices/Network/testcase/tstDevPhy.cpp    |    2 +-
 src/VBox/Devices/Network/testcase/tstIntNet-1.cpp  |    4 +-
 src/VBox/Devices/Network/testcase/tstIntNetR0.cpp  |    2 +-
 src/VBox/Devices/PC/.scm-settings                  |  101 +
 src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp              |    2 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative286.asm     |  141 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative286.md5sum  |    2 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative386.asm     |  137 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative386.md5sum  |    2 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative8086.asm    |  141 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum |    2 +-
 src/VBox/Devices/PC/BIOS/ahci.c                    |    2 +-
 src/VBox/Devices/PC/BIOS/apm.c                     |    2 +-
 src/VBox/Devices/PC/BIOS/apm_pm.asm                |   33 +-
 src/VBox/Devices/PC/BIOS/ata.c                     |   16 +-
 src/VBox/Devices/PC/BIOS/ata.h                     |   16 +-
 src/VBox/Devices/PC/BIOS/bios.c                    |   16 +-
 src/VBox/Devices/PC/BIOS/biosint.h                 |   16 +-
 src/VBox/Devices/PC/BIOS/boot.c                    |   20 +-
 src/VBox/Devices/PC/BIOS/disk.c                    |   16 +-
 src/VBox/Devices/PC/BIOS/ebda.h                    |   16 +-
 src/VBox/Devices/PC/BIOS/eltorito.c                |   16 +-
 src/VBox/Devices/PC/BIOS/floppy.c                  |   16 +-
 src/VBox/Devices/PC/BIOS/floppyt.c                 |    2 +-
 src/VBox/Devices/PC/BIOS/inlines.h                 |    1 +
 src/VBox/Devices/PC/BIOS/invop.c                   |    2 +-
 src/VBox/Devices/PC/BIOS/keyboard.c                |   16 +-
 src/VBox/Devices/PC/BIOS/logo.c                    |    2 +-
 src/VBox/Devices/PC/BIOS/notes.txt                 |    4 +-
 src/VBox/Devices/PC/BIOS/orgs.asm                  |  100 +-
 src/VBox/Devices/PC/BIOS/parallel.c                |   16 +-
 src/VBox/Devices/PC/BIOS/pci32.c                   |    2 +-
 src/VBox/Devices/PC/BIOS/pcibio32.asm              |   29 +-
 src/VBox/Devices/PC/BIOS/pcibios.c                 |    2 +-
 src/VBox/Devices/PC/BIOS/pcibios.inc               |   90 +-
 src/VBox/Devices/PC/BIOS/pciutil.c                 |    3 +-
 src/VBox/Devices/PC/BIOS/pciutil.h                 |    3 +-
 src/VBox/Devices/PC/BIOS/pirq.inc                  |   83 +-
 src/VBox/Devices/PC/BIOS/pmode.inc                 |   30 +-
 src/VBox/Devices/PC/BIOS/pmsetup.inc               |   30 +-
 src/VBox/Devices/PC/BIOS/post.c                    |    1 +
 src/VBox/Devices/PC/BIOS/print.c                   |   16 +-
 src/VBox/Devices/PC/BIOS/ps2mouse.c                |   16 +-
 src/VBox/Devices/PC/BIOS/scsi.c                    |    2 +-
 src/VBox/Devices/PC/BIOS/serial.c                  |   16 +-
 src/VBox/Devices/PC/BIOS/smidmi.inc                |   82 +-
 src/VBox/Devices/PC/BIOS/system.c                  |   16 +-
 src/VBox/Devices/PC/BIOS/timepci.c                 |   11 +-
 src/VBox/Devices/PC/BIOS/vbdmismi.inc              |   18 +
 src/VBox/Devices/PC/BIOS/vds.c                     |    3 +-
 src/VBox/Devices/PC/BIOS/vds.h                     |   42 +-
 src/VBox/Devices/PC/DevACPI.cpp                    |    2 +-
 src/VBox/Devices/PC/DevDMA.cpp                     |    2 +-
 src/VBox/Devices/PC/DevFwCommon.cpp                |    2 +-
 src/VBox/Devices/PC/DevFwCommon.h                  |    2 +-
 src/VBox/Devices/PC/DevHPET.cpp                    |    2 +-
 src/VBox/Devices/PC/DevIoApic.cpp                  |    2 +-
 src/VBox/Devices/PC/DevLPC.cpp                     |   11 +-
 src/VBox/Devices/PC/DevPIC.cpp                     |    2 +-
 src/VBox/Devices/PC/DevPcArch.cpp                  |    2 +-
 src/VBox/Devices/PC/DevPcBios.h                    |    2 +-
 src/VBox/Devices/PC/DevPit-i8254.cpp               |    2 +-
 src/VBox/Devices/PC/DevRTC.cpp                     |    2 +-
 src/VBox/Devices/PC/DrvACPI.cpp                    |   22 +-
 src/VBox/Devices/PC/DrvAcpiCpu.cpp                 |    2 +-
 src/VBox/Devices/PC/vbox-cpuhotplug.dsl            |   30 +-
 src/VBox/Devices/PC/vbox-standard.dsl              |   30 +-
 src/VBox/Devices/PC/vbox.dsl                       |   30 +-
 src/VBox/Devices/Parallel/DevParallel.cpp          |    2 +-
 src/VBox/Devices/Parallel/DrvHostParallel.cpp      |    2 +-
 src/VBox/Devices/Samples/DrvStorageFilter.cpp      |    2 +-
 src/VBox/Devices/Samples/VBoxSampleDevice.cpp      |    2 +-
 src/VBox/Devices/Serial/DevSerial.cpp              |    2 +-
 src/VBox/Devices/Serial/DrvChar.cpp                |    2 +-
 src/VBox/Devices/Serial/DrvHostSerial.cpp          |    7 +-
 src/VBox/Devices/Serial/DrvNamedPipe.cpp           |    4 +-
 src/VBox/Devices/Serial/DrvRawFile.cpp             |    2 +-
 src/VBox/Devices/Serial/DrvTCP.cpp                 |    8 +-
 src/VBox/Devices/Storage/ATAPIPassthrough.cpp      |    2 +-
 src/VBox/Devices/Storage/ATAPIPassthrough.h        |    2 +-
 src/VBox/Devices/Storage/Debug.cpp                 |    2 +-
 src/VBox/Devices/Storage/DevAHCI.cpp               |    2 +-
 src/VBox/Devices/Storage/DevATA.cpp                |    5 +-
 src/VBox/Devices/Storage/DevBusLogic.cpp           |    4 +-
 src/VBox/Devices/Storage/DevFdc.cpp                |    2 +-
 src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp       |    2 +-
 src/VBox/Devices/Storage/DevLsiLogicSCSI.h         |    2 +-
 src/VBox/Devices/Storage/DrvDiskIntegrity.cpp      |    2 +-
 src/VBox/Devices/Storage/DrvHostBase-darwin.cpp    |    2 +-
 src/VBox/Devices/Storage/DrvHostBase-freebsd.cpp   |    2 +-
 src/VBox/Devices/Storage/DrvHostBase-linux.cpp     |    2 +-
 src/VBox/Devices/Storage/DrvHostBase-solaris.cpp   |    2 +-
 src/VBox/Devices/Storage/DrvHostBase-win.cpp       |    2 +-
 src/VBox/Devices/Storage/DrvHostBase.cpp           |    4 +-
 src/VBox/Devices/Storage/DrvHostBase.h             |    2 +-
 src/VBox/Devices/Storage/DrvHostDVD.cpp            |    3 +-
 src/VBox/Devices/Storage/DrvHostFloppy.cpp         |    2 +-
 src/VBox/Devices/Storage/DrvRamDisk.cpp            |    6 +-
 src/VBox/Devices/Storage/DrvSCSI.cpp               |    2 +-
 src/VBox/Devices/Storage/DrvVD.cpp                 |    6 +-
 src/VBox/Devices/Storage/HBDMgmt-darwin.cpp        |    2 +-
 src/VBox/Devices/Storage/HBDMgmt-generic.cpp       |    2 +-
 src/VBox/Devices/Storage/HBDMgmt-win.cpp           |    2 +-
 src/VBox/Devices/Storage/HBDMgmt.h                 |    2 +-
 src/VBox/Devices/Storage/IOBufMgmt.cpp             |    2 +-
 src/VBox/Devices/Storage/IOBufMgmt.h               |    2 +-
 src/VBox/Devices/Storage/UsbMsd.cpp                |    2 +-
 src/VBox/Devices/Storage/VBoxSCSI.cpp              |    2 +-
 src/VBox/Devices/Storage/VBoxSCSI.h                |    2 +-
 src/VBox/Devices/Storage/VSCSI/VSCSIDevice.cpp     |    2 +-
 src/VBox/Devices/Storage/VSCSI/VSCSIInternal.h     |    2 +-
 src/VBox/Devices/Storage/VSCSI/VSCSIIoReq.cpp      |    2 +-
 src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp     |    5 +-
 src/VBox/Devices/Storage/VSCSI/VSCSILunSbc.cpp     |    2 +-
 src/VBox/Devices/Storage/VSCSI/VSCSILunSsc.cpp     |   21 +-
 src/VBox/Devices/Storage/VSCSI/VSCSISense.cpp      |    2 +-
 .../Devices/Storage/VSCSI/VSCSIVpdPagePool.cpp     |    2 +-
 src/VBox/Devices/Storage/VSCSI/VSCSIVpdPages.h     |    2 +-
 src/VBox/Devices/Storage/swab.h                    |    2 +-
 src/VBox/Devices/USB/DevOHCI.cpp                   |  110 +-
 src/VBox/Devices/USB/DrvVUSBRootHub.cpp            |    2 +-
 src/VBox/Devices/USB/USBProxyDevice-stub.cpp       |    2 +-
 src/VBox/Devices/USB/USBProxyDevice.cpp            |    2 +-
 src/VBox/Devices/USB/USBProxyDevice.h              |    2 +-
 src/VBox/Devices/USB/VUSBDevice.cpp                |    2 +-
 src/VBox/Devices/USB/VUSBInternal.h                |    2 +-
 src/VBox/Devices/USB/VUSBSniffer.cpp               |    2 +-
 src/VBox/Devices/USB/VUSBSniffer.h                 |    2 +-
 src/VBox/Devices/USB/VUSBSnifferInternal.h         |    2 +-
 src/VBox/Devices/USB/VUSBSnifferUsbMon.cpp         |    2 +-
 src/VBox/Devices/USB/VUSBSnifferVmx.cpp            |    2 +-
 src/VBox/Devices/USB/VUSBUrb.cpp                   |    2 +-
 src/VBox/Devices/USB/VUSBUrbPool.cpp               |    2 +-
 src/VBox/Devices/USB/VUSBUrbTrace.cpp              |    2 +-
 .../Devices/USB/darwin/USBProxyDevice-darwin.cpp   |    2 +-
 .../Devices/USB/freebsd/USBProxyDevice-freebsd.cpp |    2 +-
 .../Devices/USB/linux/USBProxyDevice-linux.cpp     |    2 +-
 src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp    |    2 +-
 .../Devices/USB/solaris/USBProxyDevice-solaris.cpp |    2 +-
 .../Devices/USB/testcase/tstOhciRegisterAccess.cpp |    2 +-
 src/VBox/Devices/USB/testcase/tstPalmOne.c         |    2 +-
 src/VBox/Devices/USB/testcase/tstTrekStorGo.c      |    2 +-
 .../Devices/USB/usbip/USBProxyDevice-usbip.cpp     |    2 +-
 src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp  |    2 +-
 src/VBox/Devices/USB/win/USBProxyDevice-win.cpp    |    2 +-
 src/VBox/Devices/VMMDev/VMMDev.cpp                 |    2 +-
 src/VBox/Devices/VMMDev/VMMDevHGCM.cpp             |    2 +-
 src/VBox/Devices/VMMDev/VMMDevHGCM.h               |    2 +-
 src/VBox/Devices/VMMDev/VMMDevState.h              |    2 +-
 src/VBox/Devices/VMMDev/VMMDevTesting.cpp          |    2 +-
 src/VBox/Devices/VMMDev/VMMDevTesting.h            |    2 +-
 src/VBox/Devices/VirtIO/Virtio.cpp                 |    2 +-
 src/VBox/Devices/VirtIO/Virtio.h                   |    2 +-
 src/VBox/Devices/build/VBoxDD.d                    |    1 -
 src/VBox/Devices/testcase/tstDevice.cpp            |  918 +++++++
 src/VBox/Devices/testcase/tstDeviceInternal.h      |  238 ++
 src/VBox/Devices/testcase/tstDevicePdmDevHlp.cpp   | 1917 ++++++++++++++
 src/VBox/Devices/testcase/tstDevicePlugin.h        |  125 +
 src/VBox/Devices/testcase/tstDeviceSUP.cpp         |  251 ++
 src/VBox/Devices/testcase/tstDeviceStructSize.cpp  |    2 +-
 .../Devices/testcase/tstDeviceStructSizeRC.cpp     |    4 +-
 src/VBox/Devices/testcase/tstDeviceVMM.cpp         | 1108 ++++++++
 src/VBox/Devices/testcase/tstDeviceVMMInternal.h   |  360 +++
 src/VBox/Devices/testcase/tstDeviceVMMStubs.cpp    |  991 ++++++++
 src/VBox/Disassembler/.scm-settings                |   19 +
 src/VBox/Disassembler/DisasmTables.cpp             |    1 -
 src/VBox/Disassembler/DisasmTables.h               |    1 -
 src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm  |    2 +-
 src/VBox/Disassembler/testcase/tstAsmPush-1.asm    |    1 -
 src/VBox/Disassembler/testcase/tstAsmRegs-1.asm    |    1 -
 src/VBox/ExtPacks/.scm-settings                    |   21 +
 src/VBox/ExtPacks/BusMouseSample/.scm-settings     |   33 +
 src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp      |    4 +-
 src/VBox/ExtPacks/BusMouseSample/Makefile.kmk      |    2 +-
 .../ExtPacks/BusMouseSample/VBoxBusMouseMain.cpp   |    2 +-
 .../ExtPacks/BusMouseSample/VBoxBusMouseMainVM.cpp |    2 +-
 src/VBox/ExtPacks/Skeleton/.scm-settings           |   33 +
 src/VBox/ExtPacks/Skeleton/Makefile.kmk            |    2 +-
 src/VBox/ExtPacks/Skeleton/VBoxSkeletonMain.cpp    |    2 +-
 src/VBox/ExtPacks/Skeleton/VBoxSkeletonMainVM.cpp  |    2 +-
 src/VBox/ExtPacks/VBoxDTrace/.scm-settings         |   39 +-
 src/VBox/ExtPacks/VBoxDTrace/Samples/Hello.d       |   25 +
 src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceMain.cpp    |    2 +-
 src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0.cpp      |    3 +-
 src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0A.asm     |    7 +-
 src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceWrapper.cpp |    3 +-
 .../VBoxDTrace/include/VBoxDTraceLibCWrappers.h    |    3 +-
 .../ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h  |    5 +-
 .../ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_impl.h |    4 +-
 .../VBoxDTrace/onnv/lib/libdtrace/common/dt_cc.c   |    8 +-
 .../onnv/lib/libdtrace/common/dt_module.c          |    2 +-
 src/VBox/ExtPacks/VNC/VBoxVNC.cpp                  |    4 +-
 .../Frontends/Common/VBoxKeyboard/.scm-settings    |   21 +
 src/VBox/Frontends/Common/VBoxKeyboard/Makefile    |    5 +-
 .../Common/VBoxKeyboard/keyboard-layouts.h         |   11 +-
 .../Frontends/Common/VBoxKeyboard/keyboard-list.h  |    8 +-
 .../VBoxAutostart/VBoxAutostart-posix.cpp          |   12 +-
 .../Frontends/VBoxAutostart/VBoxAutostart-win.cpp  |    2 +-
 src/VBox/Frontends/VBoxAutostart/VBoxAutostart.h   |    2 +-
 .../Frontends/VBoxAutostart/VBoxAutostartCfg.cpp   |    2 +-
 .../Frontends/VBoxAutostart/VBoxAutostartStart.cpp |    2 +-
 .../Frontends/VBoxAutostart/VBoxAutostartStop.cpp  |    2 +-
 .../Frontends/VBoxAutostart/VBoxAutostartUtils.cpp |    2 +-
 .../Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.rc   |    2 +-
 .../VBoxBalloonCtrl/VBoxModAPIMonitor.cpp          |    2 +-
 .../VBoxBalloonCtrl/VBoxModBallooning.cpp          |    2 +-
 .../Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp     |   12 +-
 .../VBoxBalloonCtrl/VBoxWatchdogInternal.h         |    2 +-
 .../VBoxBalloonCtrl/VBoxWatchdogUtils.cpp          |    2 +-
 src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp |   40 +-
 src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h   |    2 +-
 .../Frontends/VBoxBugReport/VBoxBugReportWin.cpp   |    2 +-
 src/VBox/Frontends/VBoxFB/Framebuffer.cpp          |    2 +-
 src/VBox/Frontends/VBoxFB/Framebuffer.h            |    2 +-
 src/VBox/Frontends/VBoxFB/Helper.cpp               |    2 +-
 src/VBox/Frontends/VBoxFB/Helper.h                 |    2 +-
 src/VBox/Frontends/VBoxFB/VBoxFB.cpp               |    2 +-
 src/VBox/Frontends/VBoxFB/VBoxFB.h                 |    2 +-
 src/VBox/Frontends/VBoxHeadless/VBoxHeadless.rc    |    2 +-
 .../VBoxHeadless/VBoxHeadlessHardened.cpp          |    2 +-
 .../VBoxHeadless/testcase/tstHeadless.cpp          |    2 +-
 .../Frontends/VBoxManage/VBoxInternalManage.cpp    |    4 +-
 src/VBox/Frontends/VBoxManage/VBoxManage.cpp       |    2 +-
 src/VBox/Frontends/VBoxManage/VBoxManage.h         |    2 +-
 src/VBox/Frontends/VBoxManage/VBoxManage.rc        |    2 +-
 .../Frontends/VBoxManage/VBoxManageAppliance.cpp   |    2 +-
 .../VBoxManage/VBoxManageBandwidthControl.cpp      |    2 +-
 .../Frontends/VBoxManage/VBoxManageDHCPServer.cpp  |    2 +-
 .../Frontends/VBoxManage/VBoxManageDebugVM.cpp     |    2 +-
 src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp   |    2 +-
 .../Frontends/VBoxManage/VBoxManageGuestCtrl.cpp   |  184 +-
 .../Frontends/VBoxManage/VBoxManageGuestCtrl.h     |    2 +-
 .../VBoxManage/VBoxManageGuestCtrlListener.cpp     |    2 +-
 .../Frontends/VBoxManage/VBoxManageGuestProp.cpp   |    2 +-
 src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp   |    1 +
 .../Frontends/VBoxManage/VBoxManageHostonly.cpp    |    2 +-
 src/VBox/Frontends/VBoxManage/VBoxManageList.cpp   |    5 +-
 .../Frontends/VBoxManage/VBoxManageMetrics.cpp     |    2 +-
 .../Frontends/VBoxManage/VBoxManageModifyVM.cpp    |    2 +-
 .../Frontends/VBoxManage/VBoxManageNATNetwork.cpp  |    2 +-
 .../Frontends/VBoxManage/VBoxManageSnapshot.cpp    |    2 +-
 .../VBoxManage/VBoxManageStorageController.cpp     |   12 +-
 src/VBox/Frontends/VBoxManage/VBoxManageUSB.cpp    |    2 +-
 src/VBox/Frontends/VBoxSDL/.scm-settings           |   22 +
 src/VBox/Frontends/VBoxSDL/Framebuffer-darwin.m    |   16 +
 src/VBox/Frontends/VBoxSDL/Framebuffer.cpp         |    2 +-
 src/VBox/Frontends/VBoxSDL/Framebuffer.h           |    2 +-
 src/VBox/Frontends/VBoxSDL/Helper.cpp              |    2 +-
 src/VBox/Frontends/VBoxSDL/Helper.h                |    2 +-
 src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp             |    2 +-
 src/VBox/Frontends/VBoxSDL/VBoxSDL.h               |    2 +-
 src/VBox/Frontends/VBoxSDL/VBoxSDLHardened.cpp     |    2 +-
 src/VBox/Frontends/VBoxSDL/VBoxSDLMain-darwin.h    |    2 +-
 src/VBox/Frontends/VBoxSDL/VBoxSDLTest.cpp         |    2 +-
 src/VBox/Frontends/VBoxShell/vboxinfo.vb           |   13 +-
 src/VBox/Frontends/VBoxShell/vboxinfo.vbs          |    8 +-
 src/VBox/Frontends/VBoxShell/vboxshell.py          |    4 +-
 src/VBox/Frontends/VirtualBox/.scm-settings        |   20 +
 src/VBox/Frontends/VirtualBox/Makefile.kmk         |    3 -
 src/VBox/Frontends/VirtualBox/VBoxUI.pro           |    2 +-
 src/VBox/Frontends/VirtualBox/VirtualBox1.qrc      |   14 +-
 .../Frontends/VirtualBox/VirtualBox1_hidpi.qrc     |   14 +-
 src/VBox/Frontends/VirtualBox/VirtualBox2.qrc      |    2 -
 .../Frontends/VirtualBox/VirtualBox2_hidpi.qrc     |    6 +
 src/VBox/Frontends/VirtualBox/VirtualBoxMac.qrc    |    1 -
 src/VBox/Frontends/VirtualBox/VirtualBoxOther.qrc  |    1 -
 .../Frontends/VirtualBox/images/cd_move_16px.png   |  Bin 0 -> 882 bytes
 .../Frontends/VirtualBox/images/cd_move_22px.png   |  Bin 0 -> 1271 bytes
 .../VirtualBox/images/cd_move_disabled_16px.png    |  Bin 0 -> 818 bytes
 .../VirtualBox/images/cd_move_disabled_22px.png    |  Bin 0 -> 1228 bytes
 .../Frontends/VirtualBox/images/connect_16px.png   |  Bin 821 -> 826 bytes
 .../VirtualBox/images/connect_on_16px.png          |  Bin 0 -> 659 bytes
 .../VirtualBox/images/disconnect_16px.png          |  Bin 807 -> 0 bytes
 .../Frontends/VirtualBox/images/fd_move_16px.png   |  Bin 0 -> 763 bytes
 .../Frontends/VirtualBox/images/fd_move_22px.png   |  Bin 0 -> 1093 bytes
 .../VirtualBox/images/fd_move_disabled_16px.png    |  Bin 0 -> 687 bytes
 .../VirtualBox/images/fd_move_disabled_22px.png    |  Bin 0 -> 991 bytes
 .../Frontends/VirtualBox/images/hd_move_16px.png   |  Bin 0 -> 831 bytes
 .../Frontends/VirtualBox/images/hd_move_22px.png   |  Bin 0 -> 1241 bytes
 .../VirtualBox/images/hd_move_disabled_16px.png    |  Bin 0 -> 767 bytes
 .../VirtualBox/images/hd_move_disabled_22px.png    |  Bin 0 -> 1167 bytes
 .../VirtualBox/images/hidpi/cd_move_16px_hidpi.png |  Bin 0 -> 2115 bytes
 .../VirtualBox/images/hidpi/cd_move_22px_hidpi.png |  Bin 0 -> 3017 bytes
 .../images/hidpi/cd_move_disabled_16px_hidpi.png   |  Bin 0 -> 1963 bytes
 .../images/hidpi/cd_move_disabled_22px_hidpi.png   |  Bin 0 -> 2719 bytes
 .../VirtualBox/images/hidpi/connect_16px_hidpi.png |  Bin 1886 -> 1901 bytes
 .../images/hidpi/connect_on_16px_hidpi.png         |  Bin 0 -> 1552 bytes
 .../images/hidpi/disconnect_16px_hidpi.png         |  Bin 2158 -> 0 bytes
 .../VirtualBox/images/hidpi/fd_move_16px_hidpi.png |  Bin 0 -> 1681 bytes
 .../VirtualBox/images/hidpi/fd_move_22px_hidpi.png |  Bin 0 -> 2313 bytes
 .../images/hidpi/fd_move_disabled_16px_hidpi.png   |  Bin 0 -> 1439 bytes
 .../images/hidpi/fd_move_disabled_22px_hidpi.png   |  Bin 0 -> 1968 bytes
 .../VirtualBox/images/hidpi/hd_move_16px_hidpi.png |  Bin 0 -> 2093 bytes
 .../VirtualBox/images/hidpi/hd_move_22px_hidpi.png |  Bin 0 -> 2958 bytes
 .../images/hidpi/hd_move_disabled_16px_hidpi.png   |  Bin 0 -> 1890 bytes
 .../images/hidpi/hd_move_disabled_22px_hidpi.png   |  Bin 0 -> 2662 bytes
 .../VirtualBox/images/hidpi/vmw_clone_hidpi.png    |  Bin 0 -> 75668 bytes
 .../images/hidpi/vmw_first_run_hidpi.png           |  Bin 0 -> 101892 bytes
 .../images/hidpi/vmw_new_harddisk_hidpi.png        |  Bin 0 -> 74459 bytes
 .../images/hidpi/vmw_new_welcome_hidpi.png         |  Bin 0 -> 67460 bytes
 .../images/hidpi/vmw_ovf_export_hidpi.png          |  Bin 0 -> 77842 bytes
 .../images/hidpi/vmw_ovf_import_hidpi.png          |  Bin 0 -> 77592 bytes
 .../Frontends/VirtualBox/images/sf_write_16px.png  |  Bin 3313 -> 654 bytes
 .../images/{ => unused}/vmw_new_user.png           |  Bin
 .../images/{ => unused}/vmw_new_user_bg.png        |  Bin
 src/VBox/Frontends/VirtualBox/nls/.scm-settings    |   20 +
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts |  199 +-
 .../Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts   |  133 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts |  199 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts |  199 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts |  199 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts |  189 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts |  461 ++--
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa.ts | 2674 +++++++++++---------
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts |  119 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts |  199 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl.ts |  119 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_he.ts |  129 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts |  199 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts |  215 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts |  187 +-
 .../Frontends/VirtualBox/nls/VirtualBox_km_KH.ts   |  119 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts |  183 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts |  121 +-
 .../Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts   |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts |  121 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts |  189 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts |  121 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts | 1349 +++++-----
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts |  133 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts |  133 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_th.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts |  187 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts |  199 +-
 .../Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts   |  119 +-
 .../Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts   |  187 +-
 .../Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts   |  290 +--
 .../Frontends/VirtualBox/shaders/.scm-settings     |   24 +
 .../VirtualBox/src/UIMediumTypeChangeDialog.cpp    |  297 ---
 .../VirtualBox/src/UIMediumTypeChangeDialog.h      |   98 -
 .../Frontends/VirtualBox/src/UIVMLogViewer.cpp     |   11 +-
 src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.h  |    2 +-
 src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp |   14 +-
 src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.h   |    2 +-
 .../Frontends/VirtualBox/src/VBoxFBOverlay.cpp     |    2 +-
 src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h  |    2 +-
 .../Frontends/VirtualBox/src/VBoxFBOverlayCommon.h |    4 +-
 .../Frontends/VirtualBox/src/VBoxGLSupportInfo.cpp |    2 +-
 .../Frontends/VirtualBox/src/VBoxLicenseViewer.cpp |    4 +-
 .../Frontends/VirtualBox/src/VBoxLicenseViewer.h   |    2 +-
 .../VirtualBox/src/converter/UIConverter.cpp       |    2 +-
 .../VirtualBox/src/converter/UIConverter.h         |    2 +-
 .../VirtualBox/src/converter/UIConverterBackend.h  |    2 +-
 .../src/converter/UIConverterBackendCOM.cpp        |    2 +-
 .../src/converter/UIConverterBackendGlobal.cpp     |    2 +-
 .../VirtualBox/src/extensions/QIAdvancedSlider.cpp |    2 +-
 .../VirtualBox/src/extensions/QIAdvancedSlider.h   |    2 +-
 .../src/extensions/QIArrowButtonPress.cpp          |    2 +-
 .../VirtualBox/src/extensions/QIArrowButtonPress.h |    2 +-
 .../src/extensions/QIArrowButtonSwitch.cpp         |    2 +-
 .../src/extensions/QIArrowButtonSwitch.h           |    2 +-
 .../VirtualBox/src/extensions/QIArrowSplitter.cpp  |    2 +-
 .../VirtualBox/src/extensions/QIArrowSplitter.h    |    2 +-
 .../VirtualBox/src/extensions/QIComboBox.cpp       |    2 +-
 .../VirtualBox/src/extensions/QIComboBox.h         |    2 +-
 .../VirtualBox/src/extensions/QIDialog.cpp         |    2 +-
 .../Frontends/VirtualBox/src/extensions/QIDialog.h |    2 +-
 .../src/extensions/QIDialogButtonBox.cpp           |    2 +-
 .../VirtualBox/src/extensions/QIDialogButtonBox.h  |    2 +-
 .../VirtualBox/src/extensions/QIFileDialog.cpp     |    2 +-
 .../VirtualBox/src/extensions/QIFileDialog.h       |    2 +-
 .../VirtualBox/src/extensions/QILabel.cpp          |    2 +-
 .../Frontends/VirtualBox/src/extensions/QILabel.h  |    2 +-
 .../VirtualBox/src/extensions/QILabelSeparator.cpp |    2 +-
 .../VirtualBox/src/extensions/QILabelSeparator.h   |    2 +-
 .../VirtualBox/src/extensions/QILineEdit.cpp       |    2 +-
 .../VirtualBox/src/extensions/QILineEdit.h         |    2 +-
 .../VirtualBox/src/extensions/QIMainDialog.cpp     |    2 +-
 .../VirtualBox/src/extensions/QIMainDialog.h       |    2 +-
 .../VirtualBox/src/extensions/QIMainWindow.cpp     |    2 +-
 .../VirtualBox/src/extensions/QIMainWindow.h       |    2 +-
 .../VirtualBox/src/extensions/QIManagerDialog.cpp  |    7 +-
 .../Frontends/VirtualBox/src/extensions/QIMenu.cpp |    2 +-
 .../Frontends/VirtualBox/src/extensions/QIMenu.h   |    2 +-
 .../VirtualBox/src/extensions/QIMessageBox.cpp     |    9 +-
 .../VirtualBox/src/extensions/QIMessageBox.h       |    2 +-
 .../VirtualBox/src/extensions/QIProcess.cpp        |    2 +-
 .../VirtualBox/src/extensions/QIProcess.h          |    2 +-
 .../VirtualBox/src/extensions/QIRichTextLabel.cpp  |    2 +-
 .../VirtualBox/src/extensions/QIRichTextLabel.h    |    2 +-
 .../VirtualBox/src/extensions/QIRichToolButton.cpp |    2 +-
 .../VirtualBox/src/extensions/QIRichToolButton.h   |    2 +-
 .../VirtualBox/src/extensions/QISplitter.cpp       |    2 +-
 .../VirtualBox/src/extensions/QISplitter.h         |    4 +-
 .../VirtualBox/src/extensions/QIStatusBar.cpp      |    2 +-
 .../VirtualBox/src/extensions/QIStatusBar.h        |    2 +-
 .../src/extensions/QIStatusBarIndicator.cpp        |    2 +-
 .../src/extensions/QIStatusBarIndicator.h          |    2 +-
 .../src/extensions/QIStyledItemDelegate.h          |    2 +-
 .../VirtualBox/src/extensions/QITabWidget.h        |    2 +-
 .../VirtualBox/src/extensions/QITableView.cpp      |    4 +-
 .../VirtualBox/src/extensions/QITableView.h        |    2 +-
 .../VirtualBox/src/extensions/QIToolButton.h       |    2 +-
 .../VirtualBox/src/extensions/QITreeView.cpp       |    2 +-
 .../VirtualBox/src/extensions/QITreeView.h         |    2 +-
 .../VirtualBox/src/extensions/QITreeWidget.cpp     |    2 +-
 .../VirtualBox/src/extensions/QITreeWidget.h       |    2 +-
 .../src/extensions/QIWidgetValidator.cpp           |    2 +-
 .../VirtualBox/src/extensions/QIWidgetValidator.h  |    2 +-
 .../src/extensions/graphics/QIGraphicsView.cpp     |    2 +-
 .../src/extensions/graphics/QIGraphicsView.h       |    2 +-
 .../src/extensions/graphics/QIGraphicsWidget.cpp   |    2 +-
 .../src/extensions/graphics/QIGraphicsWidget.h     |    2 +-
 .../VirtualBox/src/extradata/UIExtraDataDefs.cpp   |    3 +-
 .../VirtualBox/src/extradata/UIExtraDataDefs.h     |    4 +-
 .../src/extradata/UIExtraDataManager.cpp           |   56 +-
 .../VirtualBox/src/extradata/UIExtraDataManager.h  |    7 +-
 .../Frontends/VirtualBox/src/globals/CIShared.h    |    2 +-
 .../Frontends/VirtualBox/src/globals/COMDefs.cpp   |    2 +-
 .../Frontends/VirtualBox/src/globals/COMDefs.h     |    2 +-
 .../VirtualBox/src/globals/QIWithRetranslateUI.h   |    2 +-
 .../VirtualBox/src/globals/UIActionPool.cpp        |    2 +-
 .../VirtualBox/src/globals/UIActionPool.h          |    2 +-
 .../src/globals/UIAnimationFramework.cpp           |    2 +-
 .../VirtualBox/src/globals/UIAnimationFramework.h  |    2 +-
 .../Frontends/VirtualBox/src/globals/UIDefs.cpp    |    2 +-
 src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h |    2 +-
 .../src/globals/UIDesktopWidgetWatchdog.cpp        |    2 +-
 .../src/globals/UIDesktopWidgetWatchdog.h          |    2 +-
 .../VirtualBox/src/globals/UIImageTools.cpp        |    2 +-
 .../VirtualBox/src/globals/UIImageTools.h          |    2 +-
 .../VirtualBox/src/globals/UIMainEventListener.cpp |    2 +-
 .../VirtualBox/src/globals/UIMainEventListener.h   |    2 +-
 .../VirtualBox/src/globals/UIMessageCenter.cpp     |   49 +-
 .../VirtualBox/src/globals/UIMessageCenter.h       |    7 +-
 .../src/globals/UIModalWindowManager.cpp           |    2 +-
 .../VirtualBox/src/globals/UIModalWindowManager.h  |    2 +-
 .../VirtualBox/src/globals/UIPopupCenter.cpp       |    2 +-
 .../VirtualBox/src/globals/UIPopupCenter.h         |    4 +-
 .../VirtualBox/src/globals/UIShortcutPool.cpp      |    2 +-
 .../VirtualBox/src/globals/UIShortcutPool.h        |    2 +-
 .../VirtualBox/src/globals/UIThreadPool.cpp        |    2 +-
 .../VirtualBox/src/globals/UIThreadPool.h          |    2 +-
 .../VirtualBox/src/globals/VBoxGlobal.cpp          |   35 +-
 .../Frontends/VirtualBox/src/globals/VBoxGlobal.h  |    7 +-
 .../Frontends/VirtualBox/src/globals/VBoxUtils.h   |    2 +-
 .../Frontends/VirtualBox/src/globals/VBoxVersion.h |    2 +-
 src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp |    2 +-
 .../src/hostnetwork/UIHostNetworkManager.cpp       |    5 +
 src/VBox/Frontends/VirtualBox/src/main.cpp         |    2 +-
 .../Frontends/VirtualBox/src/medium/UIMedium.cpp   |    7 +-
 .../Frontends/VirtualBox/src/medium/UIMedium.h     |    9 +-
 .../VirtualBox/src/medium/UIMediumDefs.cpp         |    2 +-
 .../Frontends/VirtualBox/src/medium/UIMediumDefs.h |    2 +-
 .../src/medium/UIMediumDetailsWidget.cpp           |  162 +-
 .../VirtualBox/src/medium/UIMediumDetailsWidget.h  |   38 +-
 .../VirtualBox/src/medium/UIMediumEnumerator.cpp   |   16 +-
 .../VirtualBox/src/medium/UIMediumEnumerator.h     |    2 +-
 .../VirtualBox/src/medium/UIMediumManager.cpp      |  405 +--
 .../VirtualBox/src/medium/UIMediumManager.h        |   54 +-
 .../Frontends/VirtualBox/src/net/UIDownloader.cpp  |    8 +-
 .../Frontends/VirtualBox/src/net/UIDownloader.h    |    2 +-
 .../VirtualBox/src/net/UIDownloaderAdditions.cpp   |    2 +-
 .../VirtualBox/src/net/UIDownloaderAdditions.h     |    2 +-
 .../src/net/UIDownloaderExtensionPack.cpp          |    2 +-
 .../VirtualBox/src/net/UIDownloaderExtensionPack.h |    2 +-
 .../VirtualBox/src/net/UIDownloaderUserManual.cpp  |    2 +-
 .../VirtualBox/src/net/UIDownloaderUserManual.h    |    2 +-
 .../VirtualBox/src/net/UINetworkCustomer.cpp       |    2 +-
 .../VirtualBox/src/net/UINetworkCustomer.h         |    2 +-
 .../Frontends/VirtualBox/src/net/UINetworkDefs.h   |    2 +-
 .../VirtualBox/src/net/UINetworkManager.cpp        |   32 +-
 .../VirtualBox/src/net/UINetworkManager.h          |    2 +-
 .../VirtualBox/src/net/UINetworkManagerDialog.cpp  |    9 +-
 .../VirtualBox/src/net/UINetworkManagerDialog.h    |    2 +-
 .../src/net/UINetworkManagerIndicator.cpp          |   22 +-
 .../VirtualBox/src/net/UINetworkManagerIndicator.h |    6 +-
 .../VirtualBox/src/net/UINetworkReply.cpp          |   13 +-
 .../Frontends/VirtualBox/src/net/UINetworkReply.h  |    2 +-
 .../VirtualBox/src/net/UINetworkRequest.cpp        |   13 +-
 .../VirtualBox/src/net/UINetworkRequest.h          |   14 +-
 .../VirtualBox/src/net/UINetworkRequestWidget.cpp  |   27 +-
 .../VirtualBox/src/net/UINetworkRequestWidget.h    |    2 +-
 .../Frontends/VirtualBox/src/net/UIUpdateDefs.cpp  |    2 +-
 .../Frontends/VirtualBox/src/net/UIUpdateDefs.h    |    2 +-
 .../VirtualBox/src/net/UIUpdateManager.cpp         |   21 +-
 .../Frontends/VirtualBox/src/net/UIUpdateManager.h |    2 +-
 .../VirtualBox/src/net/tstSSLCertDownloads.cpp     |    2 +-
 .../VirtualBox/src/objects/UIRichTextString.cpp    |    2 +-
 .../VirtualBox/src/objects/UIRichTextString.h      |    2 +-
 .../VirtualBox/src/platform/UIDesktopServices.h    |    2 +-
 .../src/platform/darwin/CocoaEventHelper.h         |    2 +-
 .../src/platform/darwin/CocoaEventHelper.mm        |    2 +-
 .../src/platform/darwin/DarwinKeyboard.cpp         |    2 +-
 .../src/platform/darwin/DarwinKeyboard.h           |    4 +-
 .../src/platform/darwin/DockIconPreview.h          |    2 +-
 .../platform/darwin/UIAbstractDockIconPreview.cpp  |    2 +-
 .../platform/darwin/UIAbstractDockIconPreview.h    |    2 +-
 .../src/platform/darwin/UICocoaApplication.h       |    2 +-
 .../src/platform/darwin/UICocoaApplication.mm      |    2 +-
 .../src/platform/darwin/UICocoaDockIconPreview.h   |    2 +-
 .../src/platform/darwin/UICocoaDockIconPreview.mm  |    2 +-
 .../src/platform/darwin/UICocoaSpecialControls.h   |    2 +-
 .../src/platform/darwin/UICocoaSpecialControls.mm  |    4 +-
 .../platform/darwin/UIDesktopServices_darwin.cpp   |    2 +-
 .../darwin/UIDesktopServices_darwin_cocoa.mm       |    2 +-
 .../platform/darwin/UIDesktopServices_darwin_p.h   |    2 +-
 .../src/platform/darwin/UIWindowMenuManager.cpp    |    4 +-
 .../src/platform/darwin/UIWindowMenuManager.h      |    2 +-
 .../src/platform/darwin/VBoxCocoaHelper.h          |    2 +-
 .../src/platform/darwin/VBoxIChatTheaterWrapper.h  |    2 +-
 .../src/platform/darwin/VBoxIChatTheaterWrapper.m  |    2 +-
 .../src/platform/darwin/VBoxUtils-darwin-cocoa.mm  |    2 +-
 .../src/platform/darwin/VBoxUtils-darwin.cpp       |    2 +-
 .../src/platform/darwin/VBoxUtils-darwin.h         |    2 +-
 .../src/platform/darwin/tstDarwinKeyboard.cpp      |    2 +-
 .../VirtualBox/src/platform/darwin/vmstarter.mm    |    2 +-
 .../VirtualBox/src/platform/os2/VBoxHlp.asm        |   10 +-
 .../VirtualBox/src/platform/os2/VBoxHlp.cpp        |    2 +-
 .../VirtualBox/src/platform/os2/VBoxHlp.h          |    2 +-
 .../src/platform/win/UIDesktopServices_win.cpp     |    2 +-
 .../VirtualBox/src/platform/win/VBoxUtils-win.cpp  |    2 +-
 .../VirtualBox/src/platform/win/VBoxUtils-win.h    |    2 +-
 .../VirtualBox/src/platform/win/VirtualBox.rc      |    2 +-
 .../src/platform/win/VirtualBoxHardened.rc         |    2 +-
 .../VirtualBox/src/platform/win/WinKeyboard.cpp    |    2 +-
 .../VirtualBox/src/platform/win/WinKeyboard.h      |    2 +-
 .../src/platform/x11/UIDesktopServices_x11.cpp     |    2 +-
 .../VirtualBox/src/platform/x11/VBoxX11Helper.cpp  |    2 +-
 .../VirtualBox/src/platform/x11/VBoxX11Helper.h    |    2 +-
 .../VirtualBox/src/platform/x11/XKeyboard-new.cpp  |    2 +-
 .../VirtualBox/src/platform/x11/XKeyboard.h        |    2 +-
 src/VBox/Frontends/VirtualBox/src/precomp.h        |    3 +-
 src/VBox/Frontends/VirtualBox/src/precomp_vcc.h    |    2 +-
 .../VirtualBox/src/runtime/UIActionPoolRuntime.cpp |    2 +-
 .../VirtualBox/src/runtime/UIActionPoolRuntime.h   |    2 +-
 .../runtime/UIAddDiskEncryptionPasswordDialog.cpp  |    2 +-
 .../runtime/UIAddDiskEncryptionPasswordDialog.h    |    2 +-
 .../src/runtime/UIConsoleEventHandler.cpp          |    2 +-
 .../VirtualBox/src/runtime/UIConsoleEventHandler.h |    2 +-
 .../VirtualBox/src/runtime/UIDnDDataObject_win.cpp |    2 +-
 .../VirtualBox/src/runtime/UIDnDDataObject_win.h   |    2 +-
 .../VirtualBox/src/runtime/UIDnDDropSource_win.cpp |    2 +-
 .../VirtualBox/src/runtime/UIDnDDropSource_win.h   |    2 +-
 .../VirtualBox/src/runtime/UIDnDEnumFormat_win.cpp |    2 +-
 .../VirtualBox/src/runtime/UIDnDEnumFormat_win.h   |    2 +-
 .../VirtualBox/src/runtime/UIDnDHandler.cpp        |    2 +-
 .../VirtualBox/src/runtime/UIDnDHandler.h          |    2 +-
 .../VirtualBox/src/runtime/UIDnDMIMEData.cpp       |    2 +-
 .../VirtualBox/src/runtime/UIDnDMIMEData.h         |    2 +-
 .../VirtualBox/src/runtime/UIFrameBuffer.cpp       |    2 +-
 .../VirtualBox/src/runtime/UIFrameBuffer.h         |    2 +-
 .../VirtualBox/src/runtime/UIKeyboardHandler.cpp   |    9 +-
 .../VirtualBox/src/runtime/UIKeyboardHandler.h     |    3 +-
 .../Frontends/VirtualBox/src/runtime/UIMachine.cpp |    2 +-
 .../Frontends/VirtualBox/src/runtime/UIMachine.h   |    2 +-
 .../VirtualBox/src/runtime/UIMachineDefs.h         |    2 +-
 .../VirtualBox/src/runtime/UIMachineLogic.cpp      |    9 +-
 .../VirtualBox/src/runtime/UIMachineLogic.h        |    2 +-
 .../VirtualBox/src/runtime/UIMachineView.cpp       |    2 +-
 .../VirtualBox/src/runtime/UIMachineView.h         |    2 +-
 .../VirtualBox/src/runtime/UIMachineWindow.cpp     |   18 +-
 .../VirtualBox/src/runtime/UIMachineWindow.h       |    2 +-
 .../src/runtime/UIMenuBarEditorWindow.cpp          |   57 +-
 .../VirtualBox/src/runtime/UIMenuBarEditorWindow.h |    2 +-
 .../VirtualBox/src/runtime/UIMouseHandler.cpp      |    2 +-
 .../VirtualBox/src/runtime/UIMouseHandler.h        |    2 +-
 .../VirtualBox/src/runtime/UIMultiScreenLayout.cpp |    2 +-
 .../VirtualBox/src/runtime/UIMultiScreenLayout.h   |    2 +-
 .../Frontends/VirtualBox/src/runtime/UISession.cpp |    2 +-
 .../Frontends/VirtualBox/src/runtime/UISession.h   |    2 +-
 .../src/runtime/UIStatusBarEditorWindow.cpp        |   66 +-
 .../src/runtime/UIStatusBarEditorWindow.h          |    2 +-
 .../VirtualBox/src/runtime/UIVMCloseDialog.cpp     |   21 +-
 .../VirtualBox/src/runtime/UIVMCloseDialog.h       |    2 +-
 .../fullscreen/UIKeyboardHandlerFullscreen.cpp     |    2 +-
 .../fullscreen/UIKeyboardHandlerFullscreen.h       |    2 +-
 .../fullscreen/UIMachineLogicFullscreen.cpp        |    2 +-
 .../runtime/fullscreen/UIMachineLogicFullscreen.h  |    2 +-
 .../runtime/fullscreen/UIMachineViewFullscreen.cpp |    2 +-
 .../runtime/fullscreen/UIMachineViewFullscreen.h   |    2 +-
 .../fullscreen/UIMachineWindowFullscreen.cpp       |    2 +-
 .../runtime/fullscreen/UIMachineWindowFullscreen.h |    2 +-
 .../information/UIInformationConfiguration.cpp     |    3 +-
 .../information/UIInformationConfiguration.h       |    2 +-
 .../runtime/information/UIInformationDataItem.cpp  |    2 +-
 .../runtime/information/UIInformationDataItem.h    |    2 +-
 .../src/runtime/information/UIInformationItem.cpp  |   17 +-
 .../src/runtime/information/UIInformationItem.h    |    2 +-
 .../src/runtime/information/UIInformationModel.cpp |    2 +-
 .../src/runtime/information/UIInformationModel.h   |    2 +-
 .../runtime/information/UIInformationRuntime.cpp   |    3 +-
 .../src/runtime/information/UIInformationRuntime.h |    2 +-
 .../src/runtime/information/UIInformationView.cpp  |    2 +-
 .../src/runtime/information/UIInformationView.h    |    2 +-
 .../runtime/information/UIVMInformationDialog.cpp  |    2 +-
 .../runtime/information/UIVMInformationDialog.h    |    2 +-
 .../src/runtime/normal/UIKeyboardHandlerNormal.cpp |    2 +-
 .../src/runtime/normal/UIKeyboardHandlerNormal.h   |    2 +-
 .../src/runtime/normal/UIMachineLogicNormal.cpp    |    2 +-
 .../src/runtime/normal/UIMachineLogicNormal.h      |    2 +-
 .../src/runtime/normal/UIMachineViewNormal.cpp     |    2 +-
 .../src/runtime/normal/UIMachineViewNormal.h       |    2 +-
 .../src/runtime/normal/UIMachineWindowNormal.cpp   |    2 +-
 .../src/runtime/normal/UIMachineWindowNormal.h     |    2 +-
 .../src/runtime/scale/UIKeyboardHandlerScale.cpp   |    2 +-
 .../src/runtime/scale/UIKeyboardHandlerScale.h     |    2 +-
 .../src/runtime/scale/UIMachineLogicScale.cpp      |    2 +-
 .../src/runtime/scale/UIMachineLogicScale.h        |    2 +-
 .../src/runtime/scale/UIMachineViewScale.cpp       |    2 +-
 .../src/runtime/scale/UIMachineViewScale.h         |    2 +-
 .../src/runtime/scale/UIMachineWindowScale.cpp     |    2 +-
 .../src/runtime/scale/UIMachineWindowScale.h       |    2 +-
 .../runtime/seamless/UIKeyboardHandlerSeamless.cpp |    2 +-
 .../runtime/seamless/UIKeyboardHandlerSeamless.h   |    2 +-
 .../runtime/seamless/UIMachineLogicSeamless.cpp    |    2 +-
 .../src/runtime/seamless/UIMachineLogicSeamless.h  |    2 +-
 .../src/runtime/seamless/UIMachineViewSeamless.cpp |    2 +-
 .../src/runtime/seamless/UIMachineViewSeamless.h   |    2 +-
 .../runtime/seamless/UIMachineWindowSeamless.cpp   |    2 +-
 .../src/runtime/seamless/UIMachineWindowSeamless.h |    2 +-
 .../src/selector/UIActionPoolSelector.cpp          |    2 +-
 .../VirtualBox/src/selector/UIActionPoolSelector.h |    2 +-
 .../VirtualBox/src/selector/UIDesktopPane.cpp      |   26 +-
 .../VirtualBox/src/selector/UISelectorWindow.cpp   |   15 +-
 .../src/selector/UISnapshotDetailsWidget.cpp       |   32 +-
 .../src/selector/UISnapshotDetailsWidget.h         |    5 -
 .../VirtualBox/src/selector/UISnapshotPane.cpp     |    2 +-
 .../VirtualBox/src/selector/UIToolsPaneGlobal.cpp  |    6 -
 .../VirtualBox/src/selector/UIToolsPaneMachine.cpp |    6 -
 .../VirtualBox/src/selector/UIToolsToolbar.cpp     |    2 +-
 .../Frontends/VirtualBox/src/selector/UIVMItem.cpp |    2 +-
 .../Frontends/VirtualBox/src/selector/UIVMItem.h   |    2 +-
 .../src/selector/UIVirtualBoxEventHandler.cpp      |    2 +-
 .../src/selector/UIVirtualBoxEventHandler.h        |    2 +-
 .../src/selector/graphics/chooser/UIGChooser.cpp   |    6 +-
 .../src/selector/graphics/chooser/UIGChooser.h     |    2 +-
 .../graphics/chooser/UIGChooserHandlerKeyboard.cpp |    2 +-
 .../graphics/chooser/UIGChooserHandlerKeyboard.h   |    2 +-
 .../graphics/chooser/UIGChooserHandlerMouse.cpp    |    2 +-
 .../graphics/chooser/UIGChooserHandlerMouse.h      |    2 +-
 .../selector/graphics/chooser/UIGChooserItem.cpp   |    2 +-
 .../src/selector/graphics/chooser/UIGChooserItem.h |    2 +-
 .../graphics/chooser/UIGChooserItemGroup.cpp       |   55 +-
 .../graphics/chooser/UIGChooserItemGroup.h         |    2 +-
 .../graphics/chooser/UIGChooserItemMachine.cpp     |   10 +-
 .../graphics/chooser/UIGChooserItemMachine.h       |    2 +-
 .../selector/graphics/chooser/UIGChooserModel.cpp  |    2 +-
 .../selector/graphics/chooser/UIGChooserModel.h    |    2 +-
 .../selector/graphics/chooser/UIGChooserView.cpp   |    2 +-
 .../src/selector/graphics/chooser/UIGChooserView.h |    2 +-
 .../src/selector/graphics/details/UIGDetails.cpp   |    6 +-
 .../src/selector/graphics/details/UIGDetails.h     |    2 +-
 .../graphics/details/UIGDetailsElement.cpp         |    9 +-
 .../selector/graphics/details/UIGDetailsElement.h  |    5 +-
 .../graphics/details/UIGDetailsElements.cpp        |    2 +-
 .../selector/graphics/details/UIGDetailsElements.h |    2 +-
 .../selector/graphics/details/UIGDetailsGroup.cpp  |    6 +-
 .../selector/graphics/details/UIGDetailsGroup.h    |    2 +-
 .../selector/graphics/details/UIGDetailsItem.cpp   |    2 +-
 .../src/selector/graphics/details/UIGDetailsItem.h |    2 +-
 .../selector/graphics/details/UIGDetailsModel.cpp  |    2 +-
 .../selector/graphics/details/UIGDetailsModel.h    |    2 +-
 .../selector/graphics/details/UIGDetailsSet.cpp    |    4 +-
 .../src/selector/graphics/details/UIGDetailsSet.h  |    2 +-
 .../selector/graphics/details/UIGDetailsView.cpp   |    2 +-
 .../src/selector/graphics/details/UIGDetailsView.h |    2 +-
 .../graphics/details/UIGMachinePreview.cpp         |   21 +-
 .../selector/graphics/details/UIGMachinePreview.h  |    3 +-
 .../VirtualBox/src/settings/UISettingsDialog.cpp   |    2 +-
 .../VirtualBox/src/settings/UISettingsDialog.h     |    2 +-
 .../src/settings/UISettingsDialogSpecific.cpp      |    2 +-
 .../src/settings/UISettingsDialogSpecific.h        |    2 +-
 .../VirtualBox/src/settings/UISettingsPage.cpp     |    2 +-
 .../VirtualBox/src/settings/UISettingsPage.h       |    2 +-
 .../VirtualBox/src/settings/UISettingsSelector.cpp |    2 +-
 .../VirtualBox/src/settings/UISettingsSelector.h   |    2 +-
 .../src/settings/UISettingsSerializer.cpp          |    2 +-
 .../VirtualBox/src/settings/UISettingsSerializer.h |    2 +-
 .../global/UIGlobalSettingsNetworkDetailsNAT.cpp   |    2 +-
 .../global/UIGlobalSettingsNetworkDetailsNAT.h     |    4 +-
 .../global/UIGlobalSettingsPortForwardingDlg.cpp   |    2 +-
 .../global/UIGlobalSettingsPortForwardingDlg.h     |    2 +-
 .../settings/machine/UIMachineSettingsNetwork.cpp  |    3 -
 .../machine/UIMachineSettingsPortForwardingDlg.cpp |    2 +-
 .../machine/UIMachineSettingsPortForwardingDlg.h   |    2 +-
 .../src/settings/machine/UIMachineSettingsSF.cpp   |    6 +-
 .../machine/UIMachineSettingsSFDetails.cpp         |    2 +-
 .../settings/machine/UIMachineSettingsSFDetails.h  |    2 +-
 .../settings/machine/UIMachineSettingsSerial.cpp   |    3 -
 .../settings/machine/UIMachineSettingsStorage.cpp  |    2 +-
 .../machine/UIMachineSettingsUSBFilterDetails.cpp  |    2 +-
 .../machine/UIMachineSettingsUSBFilterDetails.h    |    2 +-
 .../src/widgets/UIApplianceEditorWidget.cpp        |    2 +-
 .../src/widgets/UIApplianceEditorWidget.h          |    2 +-
 .../src/widgets/UIApplianceExportEditorWidget.cpp  |    2 +-
 .../src/widgets/UIApplianceExportEditorWidget.h    |    2 +-
 .../src/widgets/UIApplianceImportEditorWidget.cpp  |    2 +-
 .../src/widgets/UIApplianceImportEditorWidget.h    |    2 +-
 .../VirtualBox/src/widgets/UIBootTable.cpp         |    2 +-
 .../Frontends/VirtualBox/src/widgets/UIBootTable.h |    2 +-
 .../src/widgets/UIEmptyFilePathSelector.cpp        |    2 +-
 .../src/widgets/UIEmptyFilePathSelector.h          |    2 +-
 .../VirtualBox/src/widgets/UIFilePathSelector.cpp  |    2 +-
 .../VirtualBox/src/widgets/UIFilePathSelector.h    |    2 +-
 .../VirtualBox/src/widgets/UIFilmContainer.cpp     |    6 +-
 .../VirtualBox/src/widgets/UIFilmContainer.h       |    2 +-
 .../VirtualBox/src/widgets/UIHostComboEditor.cpp   |    2 +-
 .../VirtualBox/src/widgets/UIHostComboEditor.h     |    2 +-
 .../VirtualBox/src/widgets/UIHotKeyEditor.cpp      |    2 +-
 .../VirtualBox/src/widgets/UIHotKeyEditor.h        |    2 +-
 .../VirtualBox/src/widgets/UILineTextEdit.cpp      |    2 +-
 .../VirtualBox/src/widgets/UILineTextEdit.h        |    2 +-
 .../Frontends/VirtualBox/src/widgets/UIMenuBar.cpp |    2 +-
 .../Frontends/VirtualBox/src/widgets/UIMenuBar.h   |    2 +-
 .../src/widgets/UINameAndSystemEditor.cpp          |    2 +-
 .../VirtualBox/src/widgets/UINameAndSystemEditor.h |    2 +-
 .../VirtualBox/src/widgets/UIPopupBox.cpp          |    3 +-
 .../Frontends/VirtualBox/src/widgets/UIPopupBox.h  |    2 +-
 .../VirtualBox/src/widgets/UIPopupPane.cpp         |    2 +-
 .../Frontends/VirtualBox/src/widgets/UIPopupPane.h |    2 +-
 .../src/widgets/UIPopupPaneButtonPane.cpp          |    2 +-
 .../VirtualBox/src/widgets/UIPopupPaneButtonPane.h |    2 +-
 .../VirtualBox/src/widgets/UIPopupPaneDetails.cpp  |    2 +-
 .../VirtualBox/src/widgets/UIPopupPaneDetails.h    |    2 +-
 .../VirtualBox/src/widgets/UIPopupPaneMessage.cpp  |    2 +-
 .../VirtualBox/src/widgets/UIPopupPaneMessage.h    |    2 +-
 .../VirtualBox/src/widgets/UIPopupStack.cpp        |    2 +-
 .../VirtualBox/src/widgets/UIPopupStack.h          |    2 +-
 .../src/widgets/UIPopupStackViewport.cpp           |    2 +-
 .../VirtualBox/src/widgets/UIPopupStackViewport.h  |    2 +-
 .../src/widgets/UIPortForwardingTable.cpp          |    7 +-
 .../VirtualBox/src/widgets/UIPortForwardingTable.h |    2 +-
 .../VirtualBox/src/widgets/UISpecialControls.cpp   |    3 +-
 .../VirtualBox/src/widgets/UISpecialControls.h     |    2 +-
 .../Frontends/VirtualBox/src/widgets/UITabBar.cpp  |    2 +-
 .../Frontends/VirtualBox/src/widgets/UIToolBar.cpp |    2 +-
 .../Frontends/VirtualBox/src/widgets/UIToolBar.h   |    2 +-
 .../VirtualBox/src/widgets/UIWarningPane.cpp       |    2 +-
 .../VirtualBox/src/widgets/UIWarningPane.h         |    2 +-
 .../VirtualBox/src/widgets/VBoxGuestRAMSlider.cpp  |    2 +-
 .../VirtualBox/src/widgets/VBoxGuestRAMSlider.h    |    2 +-
 .../VirtualBox/src/widgets/VBoxMediaComboBox.cpp   |    2 +-
 .../VirtualBox/src/widgets/VBoxMediaComboBox.h     |    2 +-
 .../src/widgets/VBoxOSTypeSelectorButton.cpp       |    2 +-
 .../src/widgets/VBoxOSTypeSelectorButton.h         |    2 +-
 .../src/widgets/graphics/UIGraphicsButton.cpp      |  124 +-
 .../src/widgets/graphics/UIGraphicsButton.h        |   12 +-
 .../widgets/graphics/UIGraphicsRotatorButton.cpp   |    2 +-
 .../src/widgets/graphics/UIGraphicsRotatorButton.h |    2 +-
 .../src/widgets/graphics/UIGraphicsTextPane.cpp    |    4 +-
 .../src/widgets/graphics/UIGraphicsTextPane.h      |    2 +-
 .../src/widgets/graphics/UIGraphicsToolBar.cpp     |    2 +-
 .../src/widgets/graphics/UIGraphicsToolBar.h       |    2 +-
 .../src/widgets/graphics/UIGraphicsZoomButton.cpp  |    2 +-
 .../src/widgets/graphics/UIGraphicsZoomButton.h    |    2 +-
 .../Frontends/VirtualBox/src/wizards/UIWizard.cpp  |   23 +-
 .../Frontends/VirtualBox/src/wizards/UIWizard.h    |    2 +-
 .../VirtualBox/src/wizards/UIWizardPage.cpp        |    2 +-
 .../VirtualBox/src/wizards/UIWizardPage.h          |    2 +-
 .../src/wizards/clonevd/UIWizardCloneVD.cpp        |   68 +-
 .../src/wizards/clonevd/UIWizardCloneVD.h          |   52 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic1.cpp  |   26 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic1.h    |   53 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic2.cpp  |   38 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic2.h    |   71 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic3.cpp  |   19 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic3.h    |   52 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic4.cpp  |   45 +-
 .../wizards/clonevd/UIWizardCloneVDPageBasic4.h    |   75 +-
 .../wizards/clonevd/UIWizardCloneVDPageExpert.cpp  |   43 +-
 .../wizards/clonevd/UIWizardCloneVDPageExpert.h    |   53 +-
 .../src/wizards/clonevm/UIWizardCloneVM.cpp        |    2 +-
 .../src/wizards/clonevm/UIWizardCloneVM.h          |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageBasic1.cpp  |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageBasic1.h    |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageBasic2.cpp  |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageBasic2.h    |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageBasic3.cpp  |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageBasic3.h    |    2 +-
 .../wizards/clonevm/UIWizardCloneVMPageExpert.cpp  |    4 +-
 .../wizards/clonevm/UIWizardCloneVMPageExpert.h    |    2 +-
 .../wizards/exportappliance/UIWizardExportApp.cpp  |    2 +-
 .../wizards/exportappliance/UIWizardExportApp.h    |    2 +-
 .../exportappliance/UIWizardExportAppDefs.h        |    2 +-
 .../UIWizardExportAppPageBasic1.cpp                |    2 +-
 .../exportappliance/UIWizardExportAppPageBasic1.h  |    2 +-
 .../UIWizardExportAppPageBasic2.cpp                |    2 +-
 .../exportappliance/UIWizardExportAppPageBasic2.h  |    2 +-
 .../exportappliance/UIWizardExportAppPageBasic3.h  |    2 +-
 .../UIWizardExportAppPageBasic4.cpp                |    2 +-
 .../exportappliance/UIWizardExportAppPageBasic4.h  |    2 +-
 .../UIWizardExportAppPageExpert.cpp                |    2 -
 .../exportappliance/UIWizardExportAppPageExpert.h  |    2 +-
 .../src/wizards/firstrun/UIWizardFirstRun.cpp      |    2 +-
 .../src/wizards/firstrun/UIWizardFirstRun.h        |    2 +-
 .../wizards/firstrun/UIWizardFirstRunPageBasic.cpp |    4 +-
 .../wizards/firstrun/UIWizardFirstRunPageBasic.h   |    2 +-
 .../wizards/importappliance/UIWizardImportApp.cpp  |    2 +-
 .../wizards/importappliance/UIWizardImportApp.h    |    2 +-
 .../importappliance/UIWizardImportAppDefs.h        |    2 +-
 .../UIWizardImportAppPageBasic1.cpp                |    2 +-
 .../importappliance/UIWizardImportAppPageBasic1.h  |    2 +-
 .../UIWizardImportAppPageBasic2.cpp                |    2 +-
 .../importappliance/UIWizardImportAppPageBasic2.h  |    2 +-
 .../UIWizardImportAppPageExpert.cpp                |    4 +-
 .../importappliance/UIWizardImportAppPageExpert.h  |    2 +-
 .../VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp |    2 +-
 .../VirtualBox/src/wizards/newvd/UIWizardNewVD.h   |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageBasic1.cpp  |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageBasic1.h    |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageBasic2.cpp  |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageBasic2.h    |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageBasic3.cpp  |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageBasic3.h    |    2 +-
 .../src/wizards/newvd/UIWizardNewVDPageExpert.cpp  |    4 +-
 .../src/wizards/newvd/UIWizardNewVDPageExpert.h    |    2 +-
 .../VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp |    2 +-
 .../VirtualBox/src/wizards/newvm/UIWizardNewVM.h   |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic1.cpp  |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic1.h    |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic2.cpp  |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic2.h    |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic3.cpp  |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageBasic3.h    |    2 +-
 .../src/wizards/newvm/UIWizardNewVMPageExpert.cpp  |    4 +-
 .../src/wizards/newvm/UIWizardNewVMPageExpert.h    |    2 +-
 src/VBox/GuestHost/DragAndDrop/DnDDroppedFiles.cpp |    8 +-
 src/VBox/GuestHost/DragAndDrop/DnDMIME.cpp         |    2 +-
 src/VBox/GuestHost/DragAndDrop/DnDPath.cpp         |    2 +-
 src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp      |   31 +-
 src/VBox/GuestHost/DragAndDrop/DnDURIObject.cpp    |    2 +-
 src/VBox/GuestHost/HGSMI/.scm-settings             |   21 +
 src/VBox/GuestHost/HGSMI/HGSMICommon.cpp           |   31 +-
 src/VBox/GuestHost/HGSMI/HGSMIMemAlloc.cpp         |   12 +-
 src/VBox/GuestHost/OpenGL/.scm-settings            |   49 +
 src/VBox/GuestHost/OpenGL/error/VBoxOGLerrorspu.rc |    2 +-
 src/VBox/GuestHost/OpenGL/error/errorspu.rc        |    2 +-
 src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc |  Bin 23671 -> 23671 bytes
 src/VBox/GuestHost/OpenGL/include/cr_blitter.h     |    2 +-
 src/VBox/GuestHost/OpenGL/include/cr_compositor.h  |    2 +-
 src/VBox/GuestHost/OpenGL/include/cr_dump.h        |    2 +-
 src/VBox/GuestHost/OpenGL/include/cr_glext.h       |    2 +-
 src/VBox/GuestHost/OpenGL/include/cr_htable.h      |    2 +-
 src/VBox/GuestHost/OpenGL/include/cr_sortarray.h   |    2 +-
 src/VBox/GuestHost/OpenGL/include/cr_vreg.h        |    2 +-
 .../OpenGL/include/state/cr_framebuffer.h          |    2 +-
 src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h  |    2 +-
 src/VBox/GuestHost/OpenGL/packer/pack_client.c     |    4 +-
 .../GuestHost/OpenGL/packer/pack_currenttypes.pyc  |  Bin 2110 -> 2110 bytes
 .../GuestHost/OpenGL/packer/pack_framebuffer.c     |   10 +-
 src/VBox/GuestHost/OpenGL/packer/pack_shaders.c    |   56 +-
 .../GuestHost/OpenGL/packer/pack_visibleregion.c   |    2 +-
 .../GuestHost/OpenGL/state_tracker/convert.pyc     |  Bin 2087 -> 2087 bytes
 src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp   |    2 +-
 .../OpenGL/state_tracker/get_components.py         |    1 -
 .../OpenGL/state_tracker/get_components.pyc        |  Bin 5791 -> 5791 bytes
 .../GuestHost/OpenGL/state_tracker/state_attrib.c  |    2 +-
 .../OpenGL/state_tracker/state_bits_globalop.h     |    2 +-
 .../OpenGL/state_tracker/state_bufferobject.c      |    3 +-
 .../GuestHost/OpenGL/state_tracker/state_fence.c   |    1 -
 .../OpenGL/state_tracker/state_framebuffer.c       |   16 +-
 .../GuestHost/OpenGL/state_tracker/state_glsl.c    |   24 +-
 .../GuestHost/OpenGL/state_tracker/state_init.c    |    2 +-
 .../GuestHost/OpenGL/state_tracker/state_polygon.c |    2 +-
 .../GuestHost/OpenGL/state_tracker/state_program.c |    2 +-
 .../OpenGL/state_tracker/state_snapshot.c          |   48 +-
 .../GuestHost/OpenGL/state_tracker/state_texture.c |    4 +-
 src/VBox/GuestHost/OpenGL/util/VBoxOGLcrutil.rc    |    2 +-
 src/VBox/GuestHost/OpenGL/util/blitter.cpp         |   14 +-
 src/VBox/GuestHost/OpenGL/util/bmpscale.cpp        |    2 +-
 src/VBox/GuestHost/OpenGL/util/compositor.cpp      |   17 +-
 src/VBox/GuestHost/OpenGL/util/error.c             |    2 +-
 src/VBox/GuestHost/OpenGL/util/htable.cpp          |    2 +-
 src/VBox/GuestHost/OpenGL/util/net.c               |    2 +-
 src/VBox/GuestHost/OpenGL/util/pixel.c             |    2 +-
 src/VBox/GuestHost/OpenGL/util/sortarray.cpp       |    2 +-
 src/VBox/GuestHost/OpenGL/util/util.rc             |    2 +-
 src/VBox/GuestHost/OpenGL/util/vboxhgcm.c          |   18 +-
 src/VBox/GuestHost/OpenGL/util/vboxhgsmi.c         |   20 +-
 src/VBox/GuestHost/OpenGL/util/vreg.cpp            |   25 +-
 .../GuestHost/SharedClipboard/clipboard-helper.cpp |    2 +-
 .../GuestHost/SharedClipboard/x11-clipboard.cpp    |   82 +-
 src/VBox/HostDrivers/.scm-settings                 |   60 +
 src/VBox/HostDrivers/Makefile.kmk                  |   35 +-
 src/VBox/HostDrivers/Support/Makefile.kmk          |   24 +-
 src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp     |    2 +-
 src/VBox/HostDrivers/Support/SUPDrv.cpp            |    8 +-
 src/VBox/HostDrivers/Support/SUPDrv.d              |   12 +-
 src/VBox/HostDrivers/Support/SUPDrvGip.cpp         |    2 +-
 src/VBox/HostDrivers/Support/SUPDrvIDC.h           |    2 +-
 src/VBox/HostDrivers/Support/SUPDrvIOC.h           |    2 +-
 src/VBox/HostDrivers/Support/SUPDrvInternal.h      |    2 +-
 src/VBox/HostDrivers/Support/SUPDrvSem.cpp         |    2 +-
 src/VBox/HostDrivers/Support/SUPDrvTracer.cpp      |    2 +-
 src/VBox/HostDrivers/Support/SUPDrvTracerA.asm     |    2 +-
 src/VBox/HostDrivers/Support/SUPLib.cpp            |    2 +-
 src/VBox/HostDrivers/Support/SUPLibAll.cpp         |    2 +-
 src/VBox/HostDrivers/Support/SUPLibInternal.h      |    2 +-
 src/VBox/HostDrivers/Support/SUPLibLdr.cpp         |    2 +-
 src/VBox/HostDrivers/Support/SUPLibSem.cpp         |    2 +-
 src/VBox/HostDrivers/Support/SUPLibTracerA.asm     |    3 +-
 src/VBox/HostDrivers/Support/SUPR0-def-lx.sed      |    3 +-
 src/VBox/HostDrivers/Support/SUPR0-def-pe.sed      |    3 +-
 src/VBox/HostDrivers/Support/SUPR0IdcClient.c      |    2 +-
 .../HostDrivers/Support/SUPR0IdcClientComponent.c  |    2 +-
 .../HostDrivers/Support/SUPR0IdcClientInternal.h   |    2 +-
 src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c |    2 +-
 src/VBox/HostDrivers/Support/SUPR3HardenedIPRT.cpp |    2 +-
 src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp |    3 +-
 .../Support/SUPR3HardenedMainTemplate.cpp          |    2 +-
 .../Support/SUPR3HardenedMainTemplateTestcase.cpp  |    2 +-
 .../HostDrivers/Support/SUPR3HardenedNoCrt.cpp     |    2 +-
 .../HostDrivers/Support/SUPR3HardenedVerify.cpp    |    2 +-
 src/VBox/HostDrivers/Support/SUPSvc.cpp            |    2 +-
 src/VBox/HostDrivers/Support/SUPSvcGlobal.cpp      |    2 +-
 src/VBox/HostDrivers/Support/SUPSvcGrant.cpp       |    2 +-
 src/VBox/HostDrivers/Support/SUPSvcInternal.h      |    2 +-
 .../HostDrivers/Support/darwin/SUPDrv-darwin.cpp   |    2 +-
 .../HostDrivers/Support/darwin/SUPLib-darwin.cpp   |    2 +-
 .../Support/darwin/SUPR0IdcClient-darwin.c         |    2 +-
 src/VBox/HostDrivers/Support/darwin/load.sh        |    2 +-
 .../HostDrivers/Support/darwin/sys/dtrace_glue.h   |   26 +-
 src/VBox/HostDrivers/Support/freebsd/Makefile      |    6 +-
 .../HostDrivers/Support/freebsd/SUPLib-freebsd.cpp |    2 +-
 .../Support/freebsd/SUPR0IdcClient-freebsd.c       |    2 +-
 src/VBox/HostDrivers/Support/freebsd/files_vboxdrv |    6 +-
 src/VBox/HostDrivers/Support/linux/Makefile        |    3 +-
 src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c  |    4 +-
 .../HostDrivers/Support/linux/SUPDrv-linux.mod.c   |    2 +-
 .../HostDrivers/Support/linux/SUPLib-linux.cpp     |    2 +-
 .../Support/linux/SUPR0IdcClient-linux.c           |    2 +-
 src/VBox/HostDrivers/Support/linux/files_vboxdrv   |    6 +-
 src/VBox/HostDrivers/Support/os2/SUPDrv-os2.def    |    2 +-
 src/VBox/HostDrivers/Support/os2/SUPDrvA-os2.asm   |    1 -
 src/VBox/HostDrivers/Support/os2/SUPLib-os2.cpp    |    2 +-
 .../HostDrivers/Support/os2/SUPR0IdcClient-os2.c   |    2 +-
 .../HostDrivers/Support/solaris/SUPDrv-solaris.c   |    2 +-
 .../HostDrivers/Support/solaris/SUPLib-solaris.cpp |    2 +-
 .../Support/solaris/SUPR0IdcClient-solaris.c       |    2 +-
 src/VBox/HostDrivers/Support/solaris/load.sh       |    2 +-
 src/VBox/HostDrivers/Support/solaris/vboxdrv.conf  |    2 +-
 .../HostDrivers/Support/testcase/SUPInstall.cpp    |    2 +-
 .../HostDrivers/Support/testcase/SUPLoggerCtl.cpp  |    2 +-
 .../HostDrivers/Support/testcase/SUPUninstall.cpp  |    2 +-
 .../HostDrivers/Support/testcase/tstContiguous.cpp |    2 +-
 src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp |    2 +-
 .../Support/testcase/tstGetPagingMode.cpp          |    2 +-
 src/VBox/HostDrivers/Support/testcase/tstInit.cpp  |    2 +-
 src/VBox/HostDrivers/Support/testcase/tstInt.cpp   |    2 +-
 src/VBox/HostDrivers/Support/testcase/tstLow.cpp   |    2 +-
 .../Support/testcase/tstNtQueryStuff.cpp           |    2 +-
 src/VBox/HostDrivers/Support/testcase/tstPage.cpp  |    2 +-
 src/VBox/HostDrivers/Support/testcase/tstPin.cpp   |    2 +-
 .../Support/testcase/tstSupLoadModule.cpp          |    4 +-
 .../Support/testcase/tstSupSem-Zombie.cpp          |    2 +-
 .../HostDrivers/Support/testcase/tstSupSem.cpp     |    2 +-
 .../Support/testcase/tstSupTscDelta.cpp            |    2 +-
 .../HostDrivers/Support/testcase/tstSupVerify.cpp  |    4 +-
 src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp    |    2 +-
 src/VBox/HostDrivers/Support/win/SUPDrvA-win.asm   |    2 +-
 .../Support/win/SUPHardenedVerify-win.h            |    2 +-
 .../Support/win/SUPHardenedVerifyImage-win.cpp     |    2 +-
 .../Support/win/SUPHardenedVerifyProcess-win.cpp   |    4 +-
 src/VBox/HostDrivers/Support/win/SUPLib-win.cpp    |    2 +-
 .../HostDrivers/Support/win/SUPR0IdcClient-win.c   |    2 +-
 .../Support/win/SUPR3HardenedMain-win.cpp          |    2 +-
 .../Support/win/SUPR3HardenedMainA-win.asm         |    2 +-
 .../Support/win/SUPR3HardenedMainImports-win.cpp   |    2 +-
 .../Support/win/SUPR3HardenedNoCrt-win.cpp         |    2 +-
 src/VBox/HostDrivers/Support/win/SUPSvc-win.cpp    |    2 +-
 src/VBox/HostDrivers/Support/win/VBoxDrv.inf       |  140 +-
 src/VBox/HostDrivers/Support/win/VBoxDrv.rc        |    2 +-
 .../HostDrivers/Support/win/VBoxSupLib-win.cpp     |    2 +-
 src/VBox/HostDrivers/Support/win/VBoxSupLib.rc     |    2 +-
 src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk       |    9 +
 src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c       |   11 +-
 .../HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h    |   11 +-
 .../VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp        |   11 +-
 .../HostDrivers/VBoxNetAdp/darwin/loadnetadp.sh    |   11 +-
 src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile   |   12 +-
 .../VBoxNetAdp/freebsd/files_vboxnetadp            |    4 +-
 src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile     |   10 +-
 .../VBoxNetAdp/linux/VBoxNetAdp-linux.c            |   11 +-
 .../HostDrivers/VBoxNetAdp/linux/files_vboxnetadp  |   15 +-
 .../VBoxNetAdp/solaris/VBoxNetAdp-solaris.c        |    2 +-
 .../HostDrivers/VBoxNetAdp/solaris/vboxnet.conf    |    9 +-
 .../HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp  |   25 +-
 .../HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.h    |   11 +-
 .../HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.rc   |   11 +-
 .../HostDrivers/VBoxNetAdp/win/VBoxNetAdp6.inf     |   14 +-
 src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk       |    9 +
 src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c       |   11 +-
 src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.rc      |   11 +-
 .../HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h    |   11 +-
 .../VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp        |   11 +-
 .../HostDrivers/VBoxNetFlt/darwin/loadnetflt.sh    |   11 +-
 src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile   |   12 +-
 .../VBoxNetFlt/freebsd/files_vboxnetflt            |    4 +-
 src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile     |   10 +-
 .../VBoxNetFlt/linux/VBoxNetFlt-linux.c            |   60 +-
 .../HostDrivers/VBoxNetFlt/linux/files_vboxnetflt  |   13 +-
 .../VBoxNetFlt/solaris/VBoxNetFlt-solaris.c        |    2 +-
 .../VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c     |    2 +-
 .../HostDrivers/VBoxNetFlt/solaris/vboxbow.conf    |    9 +-
 .../HostDrivers/VBoxNetFlt/solaris/vboxflt.conf    |    9 +-
 .../HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp  |   11 +-
 .../HostDrivers/VBoxNetFlt/win/drv/VBoxNetAdp.inf  |   18 +-
 .../VBoxNetFlt/win/drv/VBoxNetFlt-win.rc           |   11 +-
 .../HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt.inf  |   17 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h         |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltM-win.cpp         |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltM-win.h           |   11 +-
 .../HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM.inf |   19 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltP-win.cpp         |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltP-win.h           |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp        |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetFltRt-win.h          |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp          |   11 +-
 .../VBoxNetFlt/win/drv/VBoxNetLwf-win.h            |   11 +-
 .../HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf  |   12 +-
 .../VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp         |   11 +-
 .../VBoxNetFlt/win/nobj/VBoxNetFltNobj.def         |   12 +-
 .../VBoxNetFlt/win/nobj/VBoxNetFltNobj.h           |   11 +-
 .../VBoxNetFlt/win/nobj/VBoxNetFltNobj.rc          |   11 +-
 .../VBoxNetFlt/win/nobj/VBoxNetFltNobjRc.h         |   11 +-
 .../VBoxNetFlt/win/nobj/VBoxNetFltNobjT.idl        |   16 +-
 .../VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp     |   11 +-
 .../VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp   |   11 +-
 .../VBoxNetFlt/win/tools/VBoxNetFltInstall.cpp     |   11 +-
 .../VBoxNetFlt/win/tools/VBoxNetFltUninstall.cpp   |   11 +-
 .../VBoxNetFlt/win/tools/VBoxNetLwfInstall.cpp     |   11 +-
 .../VBoxNetFlt/win/tools/VBoxNetLwfUninstall.cpp   |   11 +-
 src/VBox/HostDrivers/VBoxPci/Makefile.kmk          |    9 +
 src/VBox/HostDrivers/VBoxPci/VBoxPci.c             |   11 +-
 src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h     |   13 +-
 src/VBox/HostDrivers/VBoxPci/linux/Makefile        |   10 +-
 src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c |   15 +-
 src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci   |   13 +-
 src/VBox/HostDrivers/VBoxUSB/Makefile.kmk          |    9 +
 src/VBox/HostDrivers/VBoxUSB/USBFilter.cpp         |   11 +-
 src/VBox/HostDrivers/VBoxUSB/USBLib.cpp            |   11 +-
 src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp  |   11 +-
 src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h    |   11 +-
 src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk   |    9 +
 .../HostDrivers/VBoxUSB/darwin/USBLib-darwin.cpp   |   11 +-
 src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSB.cpp    |   11 +-
 .../HostDrivers/VBoxUSB/darwin/VBoxUSBInterface.h  |   11 +-
 src/VBox/HostDrivers/VBoxUSB/darwin/loadusb.sh     |   11 +-
 .../VBoxUSB/darwin/testcase/tstOpenUSBDev.cpp      |   13 +-
 src/VBox/HostDrivers/VBoxUSB/solaris/Makefile.kmk  |    9 +
 .../HostDrivers/VBoxUSB/solaris/USBLib-solaris.cpp |   11 +-
 .../HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c  |    2 +-
 .../VBoxUSB/solaris/VBoxUSBMon-solaris.c           |    2 +-
 src/VBox/HostDrivers/VBoxUSB/solaris/vboxusb.conf  |    2 +-
 .../HostDrivers/VBoxUSB/solaris/vboxusbmon.conf    |    2 +-
 .../HostDrivers/VBoxUSB/testcase/tstUSBFilter.cpp  |   11 +-
 .../HostDrivers/VBoxUSB/win/Install/USBInstall.cpp |   21 +-
 .../VBoxUSB/win/Install/USBUninstall.cpp           |   21 +-
 src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk      |    9 +
 .../HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp    |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.h |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbIdc.h  |   11 +-
 .../HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.cpp    |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.h |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUSB.inf   |   16 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbCmn.h  |   11 +-
 .../HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.cpp     |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h  |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.rc |   11 +-
 .../HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp     |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.h  |   15 +-
 .../HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp     |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.h  |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h   |   11 +-
 .../HostDrivers/VBoxUSB/win/lib/VBoxUsbLib-win.cpp |   11 +-
 .../HostDrivers/VBoxUSB/win/mon/VBoxUSBMon.inf     |   18 +-
 .../HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp     |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.h  |   11 +-
 .../HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp    |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h |   11 +-
 .../HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp     |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h  |   11 +-
 src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.rc |   11 +-
 .../HostDrivers/VBoxUSB/win/testcase/USBTest.cpp   |   19 +-
 src/VBox/HostDrivers/VBoxUSB/win/usbd/usbd.def     |   16 +-
 src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp      |    3 +-
 src/VBox/HostDrivers/darwin/Makefile.kmk           |    9 +
 src/VBox/HostDrivers/darwin/VBoxNetSend.h          |   11 +-
 src/VBox/HostDrivers/darwin/loadall.sh             |   11 +-
 src/VBox/HostDrivers/freebsd/Makefile              |   12 +-
 src/VBox/HostDrivers/freebsd/Makefile.kmk          |    9 +
 src/VBox/HostDrivers/linux/Makefile                |   14 +-
 src/VBox/HostDrivers/linux/Makefile.kmk            |    9 +
 src/VBox/HostDrivers/linux/build_in_tmp            |   20 +-
 src/VBox/HostDrivers/linux/export_modules          |  154 --
 src/VBox/HostDrivers/linux/export_modules.sh       |  172 ++
 src/VBox/HostDrivers/linux/load.sh                 |   11 +-
 src/VBox/HostDrivers/linux/loadall.sh              |   11 +-
 src/VBox/HostDrivers/win/Makefile.kmk              |    9 +
 src/VBox/HostDrivers/win/VBoxDbgLog.h              |   11 +-
 src/VBox/HostDrivers/win/cfg/VBoxDrvCfg.cpp        |   11 +-
 src/VBox/HostDrivers/win/load.cmd                  |   11 +-
 src/VBox/HostDrivers/win/load.sh                   |   11 +-
 src/VBox/HostDrivers/win/loadall.cmd               |   11 +-
 src/VBox/HostDrivers/win/loadall.sh                |   11 +-
 .../HostServices/DragAndDrop/VBoxDragAndDropSvc.rc |    2 +-
 src/VBox/HostServices/DragAndDrop/dndmanager.cpp   |    2 +-
 src/VBox/HostServices/DragAndDrop/dndmanager.h     |    2 +-
 src/VBox/HostServices/DragAndDrop/service.cpp      |    2 +-
 .../GuestControl/VBoxGuestControlSvc.rc            |    2 +-
 src/VBox/HostServices/GuestControl/service.cpp     |    2 +-
 .../GuestControl/testcase/tstGuestControlSvc.cpp   |    2 +-
 .../GuestProperties/VBoxGuestPropSvc.rc            |    2 +-
 src/VBox/HostServices/GuestProperties/service.cpp  |    2 +-
 .../GuestProperties/testcase/tstGuestPropSvc.cpp   |    2 +-
 src/VBox/HostServices/HostChannel/HostChannel.cpp  |    2 +-
 src/VBox/HostServices/HostChannel/HostChannel.h    |    2 +-
 .../HostServices/HostChannel/VBoxHostChannel.rc    |    2 +-
 src/VBox/HostServices/HostChannel/service.cpp      |    2 +-
 .../SharedClipboard/VBoxClipboard-win.cpp          |    2 +-
 .../HostServices/SharedClipboard/VBoxClipboard.h   |    2 +-
 .../SharedClipboard/VBoxSharedClipboard.rc         |    2 +-
 .../SharedClipboard/darwin-pasteboard.cpp          |    2 +-
 .../SharedClipboard/darwin-pasteboard.h            |    2 +-
 src/VBox/HostServices/SharedClipboard/darwin.cpp   |    2 +-
 src/VBox/HostServices/SharedClipboard/service.cpp  |   18 +-
 .../testcase/tstClipboardServiceHost.cpp           |  125 +-
 .../HostServices/SharedClipboard/x11-clipboard.cpp |    4 +-
 src/VBox/HostServices/SharedClipboard/x11-stub.cpp |    4 +-
 .../SharedFolders/VBoxSharedFolders.rc             |    2 +-
 src/VBox/HostServices/SharedFolders/mappings.cpp   |    2 +-
 src/VBox/HostServices/SharedFolders/mappings.h     |    2 +-
 src/VBox/HostServices/SharedFolders/service.cpp    |    2 +-
 src/VBox/HostServices/SharedFolders/shfl.h         |    2 +-
 src/VBox/HostServices/SharedFolders/shflhandle.cpp |    2 +-
 src/VBox/HostServices/SharedFolders/shflhandle.h   |    6 +-
 .../testcase/tstSharedFolderService.cpp            |   94 +-
 .../testcase/tstSharedFolderService.h              |    2 +-
 .../SharedFolders/testcase/tstShflCase.cpp         |   20 +-
 .../SharedFolders/testcase/tstShflSizes.cpp        |    2 +-
 src/VBox/HostServices/SharedFolders/teststubs.h    |   14 +-
 src/VBox/HostServices/SharedFolders/vbsf.cpp       |   16 +-
 src/VBox/HostServices/SharedFolders/vbsf.h         |    2 +-
 src/VBox/HostServices/SharedFolders/vbsfpath.cpp   |    6 +-
 src/VBox/HostServices/SharedFolders/vbsfpath.h     |    2 +-
 src/VBox/HostServices/SharedOpenGL/.scm-settings   |   42 +
 .../SharedOpenGL/OpenGLTest/OpenGLTest.cpp         |    2 +-
 .../SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp      |    7 +-
 .../SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp   |    8 +-
 .../SharedOpenGL/OpenGLTest/VBoxTestOGL.rc         |    2 +-
 .../SharedOpenGL/crserver/VBoxSharedCrOpenGL.rc    |    2 +-
 .../SharedOpenGL/crserver/crservice.cpp            |    6 +-
 .../SharedOpenGL/crserverlib/get_sizes.pyc         |  Bin 17777 -> 17777 bytes
 .../crserverlib/presenter/display_base.cpp         |    2 +-
 .../crserverlib/presenter/display_composite.cpp    |    2 +-
 .../crserverlib/presenter/display_vrdp.cpp         |    6 +-
 .../crserverlib/presenter/display_window.cpp       |    2 +-
 .../presenter/display_window_rootvr.cpp            |    2 +-
 .../crserverlib/presenter/server_presenter.cpp     |    4 +-
 .../crserverlib/presenter/server_presenter.h       |    2 +-
 .../SharedOpenGL/crserverlib/presenter/window.cpp  |    2 +-
 .../SharedOpenGL/crserverlib/server_config.c       |    2 +-
 .../SharedOpenGL/crserverlib/server_framebuffer.c  |   25 +-
 .../SharedOpenGL/crserverlib/server_getshaders.c   |   11 +-
 .../SharedOpenGL/crserverlib/server_glsl.c         |    7 +-
 .../SharedOpenGL/crserverlib/server_main.c         |   22 +-
 .../SharedOpenGL/crserverlib/server_misc.c         |    6 +-
 .../SharedOpenGL/crserverlib/server_muralfbo.cpp   |    2 +-
 .../SharedOpenGL/crserverlib/server_rpw.cpp        |    2 +-
 .../SharedOpenGL/crserverlib/server_texture.c      |   11 +-
 src/VBox/HostServices/SharedOpenGL/dlm/dlm_lists.c |    7 +-
 src/VBox/HostServices/SharedOpenGL/dlm/dlm_state.c |    2 +-
 .../HostServices/SharedOpenGL/expando/expandospu.c |    2 +-
 .../SharedOpenGL/render/VBoxOGLrenderspu.rc        |    2 +-
 .../SharedOpenGL/render/renderspu_cocoa.c          |    3 +-
 .../SharedOpenGL/render/renderspu_cocoa_helper.h   |    2 +-
 .../SharedOpenGL/render/renderspu_cocoa_helper.m   |  449 ++--
 .../SharedOpenGL/render/renderspu_init.c           |    2 +-
 .../SharedOpenGL/render/renderspu_wgl.c            |    2 +-
 .../HostServices/SharedOpenGL/unpacker/unpack.def  |    2 +-
 .../SharedOpenGL/unpacker/unpack_extend.py         |    1 -
 .../SharedOpenGL/unpacker/unpack_framebuffer.c     |    3 +-
 .../SharedOpenGL/unpacker/unpack_shaders.c         |   33 +-
 .../SharedOpenGL/unpacker/unpack_visibleregion.c   |    3 +-
 .../auth/directoryservice/directoryservice.cpp     |    2 +-
 src/VBox/HostServices/auth/pam/VBoxAuthPAM.c       |    2 +-
 .../HostServices/auth/simple/VBoxAuthSimple.cpp    |    2 +-
 .../HostServices/auth/simple/VBoxAuthSimple.rc     |    2 +-
 src/VBox/HostServices/auth/winlogon/VBoxAuth.rc    |    2 +-
 src/VBox/HostServices/auth/winlogon/winlogon.cpp   |    2 +-
 src/VBox/HostServices/testcase/tstHGCMSvc.cpp      |    2 +-
 src/VBox/ImageMounter/VBoxFUSE/VBoxFUSE.cpp        |    2 +-
 src/VBox/Installer/.scm-settings                   |   92 +
 src/VBox/Installer/common/vboxapisetup.py          |    2 +-
 src/VBox/Installer/common/virtualbox.xml           |    8 +-
 .../darwin/DiskImage/VirtualBox_Uninstall.tool     |    2 +-
 src/VBox/Installer/darwin/Makefile.kmk             |    6 +
 .../darwin/VBoxKEXTs/VirtualBoxStartup.sh          |    2 +-
 src/VBox/Installer/darwin/VBoxKEXTs/postflight     |    4 +-
 .../darwin/VirtualBox/VBoxAutostartDarwin.sh       |    2 +-
 src/VBox/Installer/darwin/VirtualBox/postflight    |   18 +-
 src/VBox/Installer/darwin/VirtualBox/preflight     |    2 +-
 src/VBox/Installer/freebsd/Makefile.kmk            |    4 +-
 src/VBox/Installer/freebsd/postdeinstall.sh        |    2 +-
 src/VBox/Installer/freebsd/postinstall.sh          |    2 +-
 src/VBox/Installer/linux/Makefile.include.footer   |   14 +-
 src/VBox/Installer/linux/Makefile.include.header   |   25 +-
 src/VBox/Installer/linux/VBox.sh                   |    2 +-
 src/VBox/Installer/linux/VBoxCreateUSBNode.sh      |    2 +-
 src/VBox/Installer/linux/VBoxSysInfo.sh            |    3 +-
 .../Installer/linux/check_module_dependencies.sh   |    2 +-
 src/VBox/Installer/linux/deffiles                  |    7 +-
 src/VBox/Installer/linux/install.sh                |    2 +-
 src/VBox/Installer/linux/postinst-common.sh        |    3 +-
 src/VBox/Installer/linux/prerm-common.sh           |    3 +-
 src/VBox/Installer/linux/routines.sh               |    3 +-
 src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec  |    7 +-
 src/VBox/Installer/linux/rpm/rules                 |    9 +-
 src/VBox/Installer/linux/runasroot.sh              |    2 +-
 .../Installer/linux/scripts/VBoxHeadlessXOrg.sh    |    6 +-
 .../Installer/linux/testcase/tstHeadlessXOrg.sh    |    2 +-
 src/VBox/Installer/linux/uninstall.sh              |    2 +-
 src/VBox/Installer/linux/vboxautostart-service.sh  |    7 +-
 .../Installer/linux/vboxballoonctrl-service.sh     |    7 +-
 src/VBox/Installer/linux/vboxdrv.sh                |   10 +-
 src/VBox/Installer/linux/vboxweb-service.sh        |    7 +-
 src/VBox/Installer/solaris/VBox.sh                 |    2 +-
 src/VBox/Installer/solaris/VBoxISAExec.c           |    2 +-
 src/VBox/Installer/solaris/VBoxZoneAccess.c        |    2 +-
 src/VBox/Installer/solaris/checkinstall.sh         |    2 +-
 src/VBox/Installer/solaris/makepackage.sh          |    2 +-
 src/VBox/Installer/solaris/pkginstall.sh           |    2 +-
 src/VBox/Installer/solaris/postinstall.sh          |    2 +-
 src/VBox/Installer/solaris/preremove.sh            |    4 +-
 src/VBox/Installer/solaris/smf-vboxautostart.sh    |    3 +-
 src/VBox/Installer/solaris/smf-vboxballoonctrl.sh  |    3 +-
 src/VBox/Installer/solaris/smf-vboxwebsrv.sh       |    3 +-
 src/VBox/Installer/solaris/vboxconfig.sh           |    2 +-
 .../Installer/solaris/virtualbox-autostart.xml     |    2 +-
 .../Installer/solaris/virtualbox-webservice.xml    |    2 +-
 .../Installer/win/InstallHelper/VBoxCommon.cpp     |    2 +-
 src/VBox/Installer/win/InstallHelper/VBoxCommon.h  |    2 +-
 .../win/InstallHelper/VBoxInstallHelper.def        |    2 +-
 .../win/InstallHelper/VBoxInstallHelper.rc         |    2 +-
 src/VBox/Installer/win/Makefile.kmk                |   81 -
 src/VBox/Installer/win/MsiHack/MsiHack.cpp         |    2 +-
 src/VBox/Installer/win/MsiHack/MsiHackExtension.cs |    2 +-
 src/VBox/Installer/win/NLS/de_DE.wxl               | 1198 ++++-----
 src/VBox/Installer/win/NLS/en_US.wxl               | 1200 ++++-----
 src/VBox/Installer/win/NLS/fr_FR.wxl               | 1196 ++++-----
 src/VBox/Installer/win/NLS/zh_TW.wxl               | 1200 ++++-----
 src/VBox/Installer/win/Resources/VBoxRes.rc        |    2 +-
 src/VBox/Installer/win/Resources/dummy.cpp         |    2 +-
 src/VBox/Installer/win/Resources/resource.h        |    2 +-
 src/VBox/Installer/win/Stub/VBoxStub.cpp           |    2 +-
 src/VBox/Installer/win/Stub/VBoxStub.h             |    2 +-
 src/VBox/Installer/win/Stub/VBoxStub.rc            |    2 +-
 src/VBox/Installer/win/Stub/VBoxStubCertUtil.cpp   |    2 +-
 src/VBox/Installer/win/Stub/VBoxStubCertUtil.h     |    2 +-
 src/VBox/Installer/win/Stub/crypt32.def            |    2 +-
 src/VBox/Installer/win/Stub/msi.def                |    2 +-
 src/VBox/Installer/win/Stub/resource.h             |    2 +-
 src/VBox/Installer/win/Stub/shell32.def            |    2 +-
 src/VBox/Installer/win/Stub/user32.def             |    2 +-
 src/VBox/Installer/win/Stub/ws2_32.def             |    2 +-
 src/VBox/Installer/win/StubBld/VBoxStubBld.cpp     |    2 +-
 src/VBox/Installer/win/StubBld/VBoxStubBld.h       |    2 +-
 src/VBox/Installer/win/VBoxMergeApp.wxi            |    4 +-
 src/VBox/Installer/win/VBoxMergeApp.wxs            |    8 +-
 src/VBox/Installer/win/VBoxMergeNetAdp.wxs         |   10 +-
 src/VBox/Installer/win/VBoxMergeNetAdp6.wxs        |    8 +-
 src/VBox/Installer/win/VBoxMergeNetFlt.wxs         |    8 +-
 src/VBox/Installer/win/VBoxMergeNetLwf.wxs         |    8 +-
 src/VBox/Installer/win/VirtualBox.wxs              |    4 +-
 src/VBox/Installer/win/VirtualBox_TypeLib.xsl      |    4 +-
 .../win/VirtualBox_TypeLibWithInterfaces.xsl       |    6 +-
 src/VBox/Main/.scm-settings                        |   69 +
 src/VBox/Main/Docs-Intro.cpp                       |    2 +-
 src/VBox/Main/Makefile.kmk                         |   10 +-
 src/VBox/Main/UnattendedTemplates/fedora_ks.cfg    |    4 +-
 src/VBox/Main/UnattendedTemplates/ol_ks.cfg        |    4 +-
 src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg  |    4 +-
 .../Main/UnattendedTemplates/suse_autoinstall.xml  |    2 +-
 src/VBox/Main/cbinding/Makefile.kmk                |    2 +
 src/VBox/Main/cbinding/VBoxCAPI.cpp                |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI.rc                 |    2 +-
 src/VBox/Main/cbinding/VBoxCAPIGlue.c              |    4 +-
 src/VBox/Main/cbinding/VBoxCAPIGlue.h.in           |    6 +-
 src/VBox/Main/cbinding/VBoxCAPI_v2_2.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v3_0.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v3_1.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v3_2.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v4_0.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v4_1.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v4_2.h             |    2 +-
 src/VBox/Main/cbinding/VBoxCAPI_v4_3.h             |    2 +-
 src/VBox/Main/cbinding/capiidl.xsl                 |    4 +-
 src/VBox/Main/cbinding/makefile.tstCAPIGlue        |   31 +-
 src/VBox/Main/cbinding/tstCAPIGlue.c               |    2 +-
 src/VBox/Main/glue/AutoLock.cpp                    |    2 +-
 src/VBox/Main/glue/ErrorInfo.cpp                   |    2 +-
 src/VBox/Main/glue/EventQueue.cpp                  |    2 +-
 src/VBox/Main/glue/GetVBoxUserHomeDirectory.cpp    |    3 +-
 src/VBox/Main/glue/NativeEventQueue.cpp            |    2 +-
 src/VBox/Main/glue/VBoxLogRelCreate.cpp            |    9 +-
 src/VBox/Main/glue/com.cpp                         |    2 +-
 src/VBox/Main/glue/errorprint.cpp                  |    2 +-
 src/VBox/Main/glue/glue-java.xsl                   |   14 +-
 src/VBox/Main/glue/initterm.cpp                    |   18 +-
 src/VBox/Main/glue/string.cpp                      |    2 +-
 src/VBox/Main/glue/tests/Makefile                  |    4 +-
 src/VBox/Main/glue/tests/TestVBox.java             |   12 +-
 src/VBox/Main/glue/tests/TestVBoxNATEngine.java    |   22 +-
 src/VBox/Main/glue/vboxapi.py                      |   72 +-
 src/VBox/Main/glue/xpcom/helpers.cpp               |    2 +-
 src/VBox/Main/idl/VirtualBox.xidl                  |   75 +-
 src/VBox/Main/idl/apiwrap-server-filelist.xsl      |    6 +-
 src/VBox/Main/idl/midl.xsl                         |   19 +-
 src/VBox/Main/idl/xpidl.xsl                        |    4 +-
 src/VBox/Main/include/AdditionsFacilityImpl.h      |    2 +-
 src/VBox/Main/include/ApplianceImpl.h              |    2 +-
 src/VBox/Main/include/ApplianceImplPrivate.h       |    2 +-
 src/VBox/Main/include/AudioAdapterImpl.h           |    2 +-
 src/VBox/Main/include/AuthLibrary.h                |    2 +-
 src/VBox/Main/include/AutoCaller.h                 |    2 +-
 src/VBox/Main/include/AutoStateDep.h               |    2 +-
 src/VBox/Main/include/AutostartDb.h                |    2 +-
 src/VBox/Main/include/BIOSSettingsImpl.h           |    2 +-
 src/VBox/Main/include/BandwidthControlImpl.h       |    2 +-
 src/VBox/Main/include/BandwidthGroupImpl.h         |    2 +-
 src/VBox/Main/include/BusAssignmentManager.h       |    2 +-
 src/VBox/Main/include/CertificateImpl.h            |    2 +-
 src/VBox/Main/include/ClientToken.h                |    2 +-
 src/VBox/Main/include/ClientTokenHolder.h          |    2 +-
 src/VBox/Main/include/ClientWatcher.h              |    2 +-
 src/VBox/Main/include/ConsoleVRDPServer.h          |    2 +-
 src/VBox/Main/include/DHCPServerImpl.h             |    2 +-
 src/VBox/Main/include/DisplayUtils.h               |    2 +-
 src/VBox/Main/include/DrvAudioVRDE.h               |    2 +-
 src/VBox/Main/include/EmulatedUSBImpl.h            |    2 +-
 src/VBox/Main/include/EventImpl.h                  |    2 +-
 src/VBox/Main/include/Global.h                     |    2 +-
 src/VBox/Main/include/GuestDirectoryImpl.h         |    2 +-
 src/VBox/Main/include/GuestDnDPrivate.h            |    2 +-
 src/VBox/Main/include/GuestDnDSourceImpl.h         |    2 +-
 src/VBox/Main/include/GuestDnDTargetImpl.h         |    2 +-
 src/VBox/Main/include/GuestFileImpl.h              |    2 +-
 src/VBox/Main/include/GuestFsObjInfoImpl.h         |    2 +-
 src/VBox/Main/include/GuestImpl.h                  |    2 +-
 src/VBox/Main/include/GuestOSTypeImpl.h            |    2 +-
 src/VBox/Main/include/GuestProcessImpl.h           |    2 +-
 src/VBox/Main/include/GuestSessionImpl.h           |    2 +-
 src/VBox/Main/include/HGCM.h                       |    2 +-
 src/VBox/Main/include/HGCMObjects.h                |    2 +-
 src/VBox/Main/include/HGCMThread.h                 |    2 +-
 src/VBox/Main/include/HashedPw.h                   |    2 +-
 src/VBox/Main/include/HostHardwareLinux.h          |    2 +-
 src/VBox/Main/include/HostImpl.h                   |    2 +-
 src/VBox/Main/include/HostNetworkInterfaceImpl.h   |    2 +-
 src/VBox/Main/include/HostPower.h                  |    2 +-
 src/VBox/Main/include/HostUSBDeviceImpl.h          |    2 +-
 src/VBox/Main/include/HostVideoInputDeviceImpl.h   |    2 +-
 src/VBox/Main/include/KeyboardImpl.h               |    2 +-
 src/VBox/Main/include/Logging.h                    |    2 +-
 src/VBox/Main/include/MachineDebuggerImpl.h        |    2 +-
 src/VBox/Main/include/MachineImplCloneVM.h         |    2 +-
 src/VBox/Main/include/Matching.h                   |    2 +-
 src/VBox/Main/include/MediumAttachmentImpl.h       |    4 +-
 src/VBox/Main/include/MediumFormatImpl.h           |    2 +-
 src/VBox/Main/include/MediumImpl.h                 |    2 +-
 src/VBox/Main/include/MediumLock.h                 |    2 +-
 src/VBox/Main/include/MouseImpl.h                  |    2 +-
 src/VBox/Main/include/NATEngineImpl.h              |    2 +-
 src/VBox/Main/include/NATNetworkImpl.h             |    2 +-
 src/VBox/Main/include/NetworkAdapterImpl.h         |    2 +-
 src/VBox/Main/include/NetworkServiceRunner.h       |    2 +-
 src/VBox/Main/include/Nvram.h                      |    2 +-
 src/VBox/Main/include/ObjectState.h                |    2 +-
 src/VBox/Main/include/PCIDeviceAttachmentImpl.h    |    2 +-
 src/VBox/Main/include/PCIRawDevImpl.h              |    2 +-
 src/VBox/Main/include/ParallelPortImpl.h           |    2 +-
 src/VBox/Main/include/Performance.h                |    2 +-
 src/VBox/Main/include/PerformanceImpl.h            |    2 +-
 src/VBox/Main/include/ProgressImpl.h               |    2 +-
 src/VBox/Main/include/ProgressProxyImpl.h          |    2 +-
 src/VBox/Main/include/QMTranslator.h               |    2 +-
 src/VBox/Main/include/RemoteUSBBackend.h           |    2 +-
 src/VBox/Main/include/RemoteUSBDeviceImpl.h        |    2 +-
 src/VBox/Main/include/SecretKeyStore.h             |    2 +-
 src/VBox/Main/include/SerialPortImpl.h             |    2 +-
 src/VBox/Main/include/SharedFolderImpl.h           |    2 +-
 src/VBox/Main/include/SnapshotImpl.h               |    2 +-
 src/VBox/Main/include/StorageControllerImpl.h      |    2 +-
 src/VBox/Main/include/SystemPropertiesImpl.h       |    2 +-
 src/VBox/Main/include/ThreadTask.h                 |    2 +-
 src/VBox/Main/include/TokenImpl.h                  |    2 +-
 src/VBox/Main/include/USBControllerImpl.h          |    2 +-
 src/VBox/Main/include/USBDeviceFilterImpl.h        |    2 +-
 src/VBox/Main/include/USBDeviceFiltersImpl.h       |    2 +-
 src/VBox/Main/include/USBDeviceImpl.h              |    2 +-
 src/VBox/Main/include/USBGetDevices.h              |    2 +-
 src/VBox/Main/include/USBIdDatabase.h              |    2 +-
 src/VBox/Main/include/USBProxyBackend.h            |    2 +-
 src/VBox/Main/include/USBProxyService.h            |    2 +-
 src/VBox/Main/include/UsbCardReader.h              |    2 +-
 src/VBox/Main/include/UsbWebcamInterface.h         |    2 +-
 src/VBox/Main/include/VFSExplorerImpl.h            |    2 +-
 src/VBox/Main/include/VMMDev.h                     |    2 +-
 src/VBox/Main/include/VRDEServerImpl.h             |    2 +-
 src/VBox/Main/include/VirtualBoxBase.h             |    2 +-
 src/VBox/Main/include/VirtualBoxClientImpl.h       |    6 +-
 src/VBox/Main/include/VirtualBoxErrorInfoImpl.h    |    2 +-
 src/VBox/Main/include/VirtualBoxImpl.h             |   14 +-
 src/VBox/Main/include/VirtualBoxSDSImpl.h          |  150 +-
 src/VBox/Main/include/Wrapper.h                    |    2 +-
 src/VBox/Main/include/netif.h                      |    2 +-
 src/VBox/Main/include/objectslist.h                |    2 +-
 src/VBox/Main/include/ovfreader.h                  |    2 +-
 src/VBox/Main/include/vbox-libhal.h                |    2 +-
 src/VBox/Main/include/vector.h                     |    2 +-
 src/VBox/Main/include/win/resource.h               |    2 +-
 src/VBox/Main/src-all/AuthLibrary.cpp              |    2 +-
 src/VBox/Main/src-all/AutoCaller.cpp               |    2 +-
 src/VBox/Main/src-all/DisplayPNGUtil.cpp           |    2 +-
 src/VBox/Main/src-all/DisplayResampleImage.cpp     |    2 +-
 src/VBox/Main/src-all/DisplayUtils.cpp             |    2 +-
 src/VBox/Main/src-all/EventImpl.cpp                |    3 +-
 src/VBox/Main/src-all/ExtPackManagerImpl.cpp       |   20 +-
 src/VBox/Main/src-all/Global.cpp                   |    2 +-
 src/VBox/Main/src-all/HashedPw.cpp                 |    2 +-
 src/VBox/Main/src-all/Logging.cpp                  |    2 +-
 src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp  |    2 +-
 src/VBox/Main/src-all/ProgressImpl.cpp             |   19 +-
 src/VBox/Main/src-all/QMTranslatorImpl.cpp         |    2 +-
 src/VBox/Main/src-all/SecretKeyStore.cpp           |    2 +-
 src/VBox/Main/src-all/SharedFolderImpl.cpp         |    2 +-
 src/VBox/Main/src-all/ThreadTask.cpp               |    2 +-
 src/VBox/Main/src-all/VBoxAPI-start.d              |    2 +-
 src/VBox/Main/src-all/VirtualBoxBase.cpp           |    2 +-
 src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp  |    2 +-
 .../Main/src-all/win/VBoxAPIWrap-precomp_vcc.h     |    3 +-
 src/VBox/Main/src-all/win/VBoxProxyStub-x86.rc     |    2 +-
 src/VBox/Main/src-all/win/VBoxProxyStub.c          |  277 +-
 src/VBox/Main/src-all/win/VBoxProxyStub.def        |    2 +-
 src/VBox/Main/src-all/win/VBoxProxyStub.rc         |    2 +-
 src/VBox/Main/src-all/win/VBoxProxyStubLegacy.rc   |    2 +-
 src/VBox/Main/src-all/win/comregister.cmd          |    2 +-
 src/VBox/Main/src-client/AdditionsFacilityImpl.cpp |    2 +-
 src/VBox/Main/src-client/BusAssignmentManager.cpp  |    2 +-
 src/VBox/Main/src-client/ClientTokenHolder.cpp     |    2 +-
 src/VBox/Main/src-client/ConsoleImpl.cpp           |    7 +-
 src/VBox/Main/src-client/ConsoleImplTeleporter.cpp |    2 +-
 src/VBox/Main/src-client/DisplayImpl.cpp           |   31 +-
 src/VBox/Main/src-client/DisplayImplLegacy.cpp     |    2 +-
 .../Main/src-client/DisplaySourceBitmapImpl.cpp    |    2 +-
 src/VBox/Main/src-client/DrvAudioVideoRec.cpp      |   22 +-
 src/VBox/Main/src-client/EBMLWriter.cpp            |  265 ++
 src/VBox/Main/src-client/EBMLWriter.h              |  143 ++
 src/VBox/Main/src-client/EBML_MKV.h                |   86 +
 src/VBox/Main/src-client/EbmlMkvIDs.h              |   86 -
 src/VBox/Main/src-client/EbmlWriter.cpp            | 1252 ---------
 src/VBox/Main/src-client/EbmlWriter.h              |  170 --
 src/VBox/Main/src-client/EmulatedUSBImpl.cpp       |    2 +-
 src/VBox/Main/src-client/GuestCtrlImpl.cpp         |    2 +-
 src/VBox/Main/src-client/GuestDirectoryImpl.cpp    |    2 +-
 src/VBox/Main/src-client/GuestDnDPrivate.cpp       |    2 +-
 src/VBox/Main/src-client/GuestDnDSourceImpl.cpp    |    2 +-
 src/VBox/Main/src-client/GuestDnDTargetImpl.cpp    |    2 +-
 src/VBox/Main/src-client/GuestFileImpl.cpp         |    2 +-
 src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp    |    2 +-
 src/VBox/Main/src-client/GuestImpl.cpp             |    2 +-
 src/VBox/Main/src-client/GuestProcessImpl.cpp      |    2 +-
 src/VBox/Main/src-client/GuestSessionImpl.cpp      |    2 +-
 src/VBox/Main/src-client/GuestSessionImplTasks.cpp |    2 +-
 src/VBox/Main/src-client/HGCM.cpp                  |    2 +-
 src/VBox/Main/src-client/HGCMObjects.cpp           |    2 +-
 src/VBox/Main/src-client/HGCMThread.cpp            |    2 +-
 src/VBox/Main/src-client/KeyboardImpl.cpp          |    2 +-
 src/VBox/Main/src-client/MachineDebuggerImpl.cpp   |    2 +-
 src/VBox/Main/src-client/MouseImpl.cpp             |    2 +-
 src/VBox/Main/src-client/Nvram.cpp                 |    2 +-
 src/VBox/Main/src-client/PCIRawDevImpl.cpp         |    2 +-
 src/VBox/Main/src-client/RemoteUSBBackend.cpp      |    2 +-
 src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp   |    2 +-
 src/VBox/Main/src-client/USBDeviceImpl.cpp         |    2 +-
 src/VBox/Main/src-client/UsbCardReader.cpp         |    2 +-
 src/VBox/Main/src-client/UsbWebcamInterface.cpp    |    2 +-
 src/VBox/Main/src-client/VMMDevInterface.cpp       |    2 +-
 src/VBox/Main/src-client/VideoRec.cpp              |   36 +-
 src/VBox/Main/src-client/VirtualBoxClientImpl.cpp  |  371 +--
 src/VBox/Main/src-client/WebMWriter.cpp            |  857 +++++++
 src/VBox/Main/src-client/WebMWriter.h              |  499 ++++
 src/VBox/Main/src-client/win/VBoxC.def             |    3 +-
 src/VBox/Main/src-client/win/VBoxC.rc              |    2 +-
 src/VBox/Main/src-client/win/VBoxClient-x86.def    |    2 +-
 src/VBox/Main/src-client/win/VBoxClient-x86.rc     |    2 +-
 src/VBox/Main/src-client/win/dllmain.cpp           |    2 +-
 src/VBox/Main/src-client/win/precomp_vcc.h         |    2 +-
 src/VBox/Main/src-client/xpcom/module.cpp          |    2 +-
 .../Main/src-helper-apps/VBoxExtPackHelperApp.cpp  |   10 +-
 .../Main/src-helper-apps/VBoxExtPackHelperApp.rc   |    2 +-
 src/VBox/Main/src-helper-apps/VBoxVolInfo.cpp      |    2 +-
 src/VBox/Main/src-server/ApplianceImpl.cpp         |    2 +-
 src/VBox/Main/src-server/ApplianceImplImport.cpp   |    2 +-
 src/VBox/Main/src-server/AudioAdapterImpl.cpp      |    2 +-
 src/VBox/Main/src-server/BIOSSettingsImpl.cpp      |    2 +-
 src/VBox/Main/src-server/BandwidthControlImpl.cpp  |    2 +-
 src/VBox/Main/src-server/BandwidthGroupImpl.cpp    |    2 +-
 src/VBox/Main/src-server/CertificateImpl.cpp       |    2 +-
 src/VBox/Main/src-server/ClientToken.cpp           |    2 +-
 src/VBox/Main/src-server/ClientWatcher.cpp         |    2 +-
 src/VBox/Main/src-server/DHCPServerImpl.cpp        |    2 +-
 src/VBox/Main/src-server/GuestOSTypeImpl.cpp       |    2 +-
 src/VBox/Main/src-server/HostDnsService.cpp        |    2 +-
 src/VBox/Main/src-server/HostDnsService.h          |    2 +-
 .../Main/src-server/HostDnsServiceResolvConf.cpp   |    2 +-
 src/VBox/Main/src-server/HostImpl.cpp              |    2 +-
 .../Main/src-server/HostNetworkInterfaceImpl.cpp   |    4 +-
 src/VBox/Main/src-server/HostPower.cpp             |    2 +-
 src/VBox/Main/src-server/HostUSBDeviceImpl.cpp     |    2 +-
 .../Main/src-server/HostVideoInputDeviceImpl.cpp   |    2 +-
 src/VBox/Main/src-server/MachineImplCloneVM.cpp    |    2 +-
 src/VBox/Main/src-server/Matching.cpp              |    2 +-
 src/VBox/Main/src-server/MediumAttachmentImpl.cpp  |    2 +-
 src/VBox/Main/src-server/MediumFormatImpl.cpp      |    2 +-
 src/VBox/Main/src-server/MediumImpl.cpp            |   55 +-
 src/VBox/Main/src-server/MediumLock.cpp            |    2 +-
 src/VBox/Main/src-server/NATEngineImpl.cpp         |    4 +-
 src/VBox/Main/src-server/NATNetworkImpl.cpp        |    2 +-
 src/VBox/Main/src-server/NetworkAdapterImpl.cpp    |    2 +-
 src/VBox/Main/src-server/NetworkServiceRunner.cpp  |    2 +-
 src/VBox/Main/src-server/ParallelPortImpl.cpp      |    2 +-
 src/VBox/Main/src-server/Performance.cpp           |    2 +-
 src/VBox/Main/src-server/PerformanceImpl.cpp       |    2 +-
 src/VBox/Main/src-server/ProgressProxyImpl.cpp     |    2 +-
 src/VBox/Main/src-server/SerialPortImpl.cpp        |    2 +-
 src/VBox/Main/src-server/SystemPropertiesImpl.cpp  |    2 +-
 src/VBox/Main/src-server/TokenImpl.cpp             |    2 +-
 src/VBox/Main/src-server/USBControllerImpl.cpp     |    2 +-
 src/VBox/Main/src-server/USBDeviceFilterImpl.cpp   |    2 +-
 src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp  |    2 +-
 .../Main/src-server/USBIdDatabaseGenerator.cpp     |    4 +-
 src/VBox/Main/src-server/USBIdDatabaseStub.cpp     |    2 +-
 src/VBox/Main/src-server/USBProxyBackend.cpp       |    2 +-
 src/VBox/Main/src-server/USBProxyService.cpp       |    2 +-
 src/VBox/Main/src-server/UnattendedImpl.cpp        |    1 +
 src/VBox/Main/src-server/UnattendedInstaller.cpp   |    1 +
 src/VBox/Main/src-server/UnattendedScript.cpp      |    1 +
 src/VBox/Main/src-server/VFSExplorerImpl.cpp       |   62 +-
 src/VBox/Main/src-server/VRDEServerImpl.cpp        |    2 +-
 src/VBox/Main/src-server/VirtualBoxImpl.cpp        |    2 +-
 .../src-server/darwin/HostDnsServiceDarwin.cpp     |    2 +-
 .../Main/src-server/darwin/HostPowerDarwin.cpp     |    2 +-
 src/VBox/Main/src-server/darwin/NetIf-darwin.cpp   |    2 +-
 .../Main/src-server/darwin/PerformanceDarwin.cpp   |    2 +-
 .../src-server/darwin/USBProxyBackendDarwin.cpp    |    2 +-
 src/VBox/Main/src-server/darwin/iokit.cpp          |    2 +-
 src/VBox/Main/src-server/darwin/iokit.h            |    2 +-
 .../src-server/freebsd/HostHardwareFreeBSD.cpp     |    2 +-
 src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp |    4 +-
 .../Main/src-server/freebsd/PerformanceFreeBSD.cpp |    2 +-
 .../src-server/freebsd/USBProxyBackendFreeBSD.cpp  |    2 +-
 .../src-server/generic/AutostartDb-generic.cpp     |    2 +-
 src/VBox/Main/src-server/generic/NetIf-generic.cpp |    2 +-
 .../Main/src-server/linux/HostDnsServiceLinux.cpp  |    2 +-
 .../Main/src-server/linux/HostHardwareLinux.cpp    |   15 +-
 src/VBox/Main/src-server/linux/HostPowerLinux.cpp  |    2 +-
 src/VBox/Main/src-server/linux/NetIf-linux.cpp     |    2 +-
 .../Main/src-server/linux/PerformanceLinux.cpp     |    2 +-
 src/VBox/Main/src-server/linux/USBGetDevices.cpp   |    2 +-
 .../Main/src-server/linux/USBProxyBackendLinux.cpp |    2 +-
 src/VBox/Main/src-server/linux/vbox-libhal.cpp     |    2 +-
 src/VBox/Main/src-server/os2/NetIf-os2.cpp         |    2 +-
 src/VBox/Main/src-server/os2/PerformanceOs2.cpp    |    2 +-
 .../Main/src-server/os2/USBProxyBackendOs2.cpp     |    2 +-
 .../Main/src-server/solaris/DynLoadLibSolaris.cpp  |    2 +-
 .../Main/src-server/solaris/DynLoadLibSolaris.h    |    2 +-
 src/VBox/Main/src-server/solaris/NetIf-solaris.cpp |    2 +-
 .../Main/src-server/solaris/PerformanceSolaris.cpp |    2 +-
 .../src-server/solaris/USBProxyBackendSolaris.cpp  |    2 +-
 src/VBox/Main/src-server/win/HostDnsServiceWin.cpp |    2 +-
 src/VBox/Main/src-server/win/HostPowerWin.cpp      |    2 +-
 src/VBox/Main/src-server/win/NetIf-win.cpp         |    3 +-
 src/VBox/Main/src-server/win/PerformanceWin.cpp    |    2 +-
 .../Main/src-server/win/USBProxyBackendWindows.cpp |    2 +-
 src/VBox/Main/src-server/win/VBoxSVC.rc            |    2 +-
 src/VBox/Main/src-server/win/precomp_vcc.h         |    2 +-
 src/VBox/Main/src-server/win/svchlp.cpp            |    2 +-
 src/VBox/Main/src-server/win/svchlp.h              |    2 +-
 src/VBox/Main/src-server/win/svcmain.cpp           |  396 ++-
 src/VBox/Main/src-server/xpcom/server.cpp          |    6 +-
 src/VBox/Main/src-server/xpcom/server.h            |    2 +-
 src/VBox/Main/src-server/xpcom/server_module.cpp   |    2 +-
 src/VBox/Main/testcase/makefile.tstVBoxAPIWin      |   21 +-
 src/VBox/Main/testcase/makefile.tstVBoxAPIXPCOM    |    7 +-
 .../Main/testcase/msiDarwinDescriptorDecoder.cpp   |    3 +-
 src/VBox/Main/testcase/tstAPI.cpp                  |    2 +-
 src/VBox/Main/testcase/tstCollector.cpp            |    2 +-
 src/VBox/Main/testcase/tstGuestCtrlContextID.cpp   |    2 +-
 src/VBox/Main/testcase/tstGuestCtrlParseBuffer.cpp |    2 +-
 src/VBox/Main/testcase/tstGuid.cpp                 |    2 +-
 src/VBox/Main/testcase/tstMediumLock.cpp           |    2 +-
 src/VBox/Main/testcase/tstOVF.cpp                  |    2 +-
 src/VBox/Main/testcase/tstUSBLinux.h               |    2 +-
 src/VBox/Main/testcase/tstUSBProxyLinux.cpp        |    2 +-
 src/VBox/Main/testcase/tstVBoxAPI.cpp              |    2 +-
 src/VBox/Main/testcase/tstVBoxAPIPerf.cpp          |    2 +-
 src/VBox/Main/testcase/tstVBoxAPIWin.cpp           |    2 +-
 src/VBox/Main/testcase/tstVBoxAPIXPCOM.cpp         |    2 +-
 src/VBox/Main/testcase/tstVBoxMultipleVM.cpp       |    2 +-
 src/VBox/Main/webservice/Makefile.kmk              |   24 +-
 src/VBox/Main/webservice/Makefile.webtest          |   10 +-
 src/VBox/Main/webservice/VBoxWebSrv.rc             |    2 +-
 .../webservice/samples/java/axis/clienttest.java   |   22 +-
 .../Main/webservice/samples/java/jax-ws/Makefile   |   38 +-
 .../webservice/samples/java/jax-ws/Makefile.glue   |   35 +-
 .../webservice/samples/java/jax-ws/clienttest.java |   22 +-
 .../webservice/samples/java/jax-ws/metrictest.java |   19 +-
 .../Main/webservice/samples/perl/clienttest.pl     |   19 +-
 .../Main/webservice/samples/php/clienttest.php     |   26 +-
 src/VBox/Main/webservice/samples/python/Makefile   |   39 +-
 .../Main/webservice/samples/python/Makefile.glue   |   35 +-
 .../Main/webservice/samples/python/clienttest.py   |   39 +-
 src/VBox/Main/webservice/split-soapC.cpp           |    8 +-
 src/VBox/Main/webservice/stdsoap2.sed              |    2 +-
 src/VBox/Main/webservice/vboxweb.cpp               |   19 +-
 src/VBox/Main/webservice/vboxweb.h                 |    5 +-
 src/VBox/Main/webservice/websrv-python.xsl         |    2 +-
 src/VBox/Main/webservice/webtest.cpp               |    8 +-
 src/VBox/Main/xml/ovfreader.cpp                    |    2 +-
 src/VBox/NetworkServices/DHCP/ClientDataInt.h      |    2 +-
 src/VBox/NetworkServices/DHCP/Config.cpp           |    2 +-
 src/VBox/NetworkServices/DHCP/Config.h             |    2 +-
 .../NetworkServices/DHCP/NetworkManagerDhcp.cpp    |    2 +-
 src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp      |    2 +-
 src/VBox/NetworkServices/DHCP/VBoxNetDHCP.rc       |    2 +-
 .../NetworkServices/DHCP/VBoxNetDHCPHardened.cpp   |    2 +-
 src/VBox/NetworkServices/NAT/RTWinPoll.cpp         |    2 +-
 src/VBox/NetworkServices/NAT/RTWinSocketPair.cpp   |    2 +-
 src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp    |    5 +-
 src/VBox/NetworkServices/NAT/VBoxNetNAT.rc         |    2 +-
 .../NetworkServices/NAT/VBoxNetNATHardened.cpp     |    2 +-
 src/VBox/NetworkServices/NAT/dhcp6.h               |    2 +-
 src/VBox/NetworkServices/NAT/fwtcp.c               |    2 +-
 src/VBox/NetworkServices/NAT/fwudp.c               |    2 +-
 src/VBox/NetworkServices/NAT/getrawsock.c          |  155 ++
 src/VBox/NetworkServices/NAT/lwipopts.h            |    2 +-
 src/VBox/NetworkServices/NAT/mkrawsock.c           |  339 +++
 src/VBox/NetworkServices/NAT/portfwd.c             |    2 +-
 src/VBox/NetworkServices/NAT/portfwd.h             |    2 +-
 src/VBox/NetworkServices/NAT/proxy.c               |    2 +-
 src/VBox/NetworkServices/NAT/proxy.h               |    2 +-
 src/VBox/NetworkServices/NAT/proxy_dhcp6ds.c       |    2 +-
 src/VBox/NetworkServices/NAT/proxy_pollmgr.c       |    4 +-
 src/VBox/NetworkServices/NAT/proxy_pollmgr.h       |    2 +-
 src/VBox/NetworkServices/NAT/proxy_rtadvd.c        |    2 +-
 src/VBox/NetworkServices/NAT/proxy_tftpd.c         |    2 +-
 src/VBox/NetworkServices/NAT/pxdns.c               |    2 +-
 src/VBox/NetworkServices/NAT/pxping.c              |    2 +-
 src/VBox/NetworkServices/NAT/pxping_win.c          |    2 +-
 src/VBox/NetworkServices/NAT/pxremap.c             |    2 +-
 src/VBox/NetworkServices/NAT/pxremap.h             |    2 +-
 src/VBox/NetworkServices/NAT/pxtcp.c               |    2 +-
 src/VBox/NetworkServices/NAT/pxtcp.h               |    2 +-
 src/VBox/NetworkServices/NAT/pxudp.c               |    2 +-
 src/VBox/NetworkServices/NAT/rtmon_bsd.c           |    2 +-
 src/VBox/NetworkServices/NAT/rtmon_linux.c         |    2 +-
 src/VBox/NetworkServices/NAT/rtmon_win.c           |    2 +-
 src/VBox/NetworkServices/NAT/tftp.h                |    2 +-
 src/VBox/NetworkServices/NAT/winpoll.h             |    2 +-
 src/VBox/NetworkServices/NAT/winutils.h            |    2 +-
 src/VBox/NetworkServices/NetLib/ComHostUtils.cpp   |    2 +-
 src/VBox/NetworkServices/NetLib/VBoxNetARP.cpp     |    2 +-
 .../NetworkServices/NetLib/VBoxNetBaseService.cpp  |    2 +-
 .../NetworkServices/NetLib/VBoxNetBaseService.h    |    2 +-
 src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp   |    2 +-
 src/VBox/NetworkServices/NetLib/VBoxNetLib.h       |    2 +-
 .../NetLib/VBoxNetPortForwardString.cpp            |    2 +-
 src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp     |    2 +-
 .../NetworkServices/NetLib/VBoxPortForwardString.h |    2 +-
 src/VBox/NetworkServices/NetLib/cpp/utils.h        |    2 +-
 src/VBox/NetworkServices/NetLib/shared_ptr.h       |    2 +-
 src/VBox/NetworkServices/NetLib/utils.h            |    2 +-
 src/VBox/RDP/.scm-settings                         |   35 +
 src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c            |   10 +-
 src/VBox/RDP/client-1.8.3/vrdp/vrdpusb.h           |    8 +-
 src/VBox/Runtime/.scm-settings                     |   77 +-
 src/VBox/Runtime/Makefile.kmk                      |   18 +-
 src/VBox/Runtime/VBox/LoadVBoxDDU.cpp              |  125 +
 src/VBox/Runtime/common/asm/ASMBitFirstSetU64.asm  |    1 -
 src/VBox/Runtime/common/asm/ASMBitNextClear.asm    |    1 -
 src/VBox/Runtime/common/asm/ASMBitNextSet.asm      |    1 -
 src/VBox/Runtime/common/asm/ASMGetLDTR.asm         |    2 +-
 src/VBox/Runtime/common/asm/ASMGetTR.asm           |    2 +-
 .../Runtime/common/asm/ASMMultU64ByU32DivByU32.asm |    1 -
 src/VBox/Runtime/common/asn1/oiddb.cfg             |   74 +-
 src/VBox/Runtime/common/checksum/crc16ccitt.cpp    |    2 +-
 src/VBox/Runtime/common/crypto/pemfile.cpp         |   37 +-
 .../Runtime/common/crypto/store-cert-add-basic.cpp |    4 +-
 src/VBox/Runtime/common/dbg/dbgcfg.cpp             |   10 +-
 src/VBox/Runtime/common/dvm/dvm.cpp                |  275 +-
 src/VBox/Runtime/common/dvm/dvmbsdlabel.cpp        |    5 +-
 src/VBox/Runtime/common/dvm/dvmgpt.cpp             |  139 +-
 src/VBox/Runtime/common/dvm/dvmmbr.cpp             |  542 ++--
 src/VBox/Runtime/common/dvm/dvmvfs.cpp             |  818 +++++-
 src/VBox/Runtime/common/err/errmsgcom.sed          |    1 +
 src/VBox/Runtime/common/fs/fatvfs.cpp              | 2075 +++++++++++----
 src/VBox/Runtime/common/fs/isomaker.cpp            |    4 +-
 src/VBox/Runtime/common/fs/isomakercmd-man.xml     |    4 +-
 src/VBox/Runtime/common/fs/isomakercmd.cpp         |    4 +-
 src/VBox/Runtime/common/fs/isovfs.cpp              |    3 +-
 src/VBox/Runtime/common/ldr/ldrELF.cpp             |    8 +-
 src/VBox/Runtime/common/log/log.cpp                |  215 +-
 src/VBox/Runtime/common/math/RTUInt128MulByU64.asm |    1 -
 src/VBox/Runtime/common/math/remainderf.asm        |    1 -
 src/VBox/Runtime/common/math/x86/fenv-x86.c        |    4 +-
 src/VBox/Runtime/common/misc/getopt.cpp            |   27 +
 src/VBox/Runtime/common/misc/json.cpp              |    4 +
 src/VBox/Runtime/common/misc/thread.cpp            |    2 +
 src/VBox/Runtime/common/path/RTPathGlob.cpp        |    4 +-
 src/VBox/Runtime/common/path/RTPathRmCmd.cpp       |    2 +-
 src/VBox/Runtime/common/time/timesupA.mac          |    2 -
 src/VBox/Runtime/common/vfs/vfsbase.cpp            |  299 ++-
 src/VBox/Runtime/common/vfs/vfschain.cpp           |  224 +-
 src/VBox/Runtime/common/vfs/vfsiosmisc.cpp         |    1 +
 src/VBox/Runtime/common/vfs/vfsprogress.cpp        |    1 -
 src/VBox/Runtime/common/vfs/vfsstddir.cpp          |  691 +++++
 src/VBox/Runtime/common/vfs/vfsstdfile.cpp         |    9 +-
 src/VBox/Runtime/common/zip/pkzip.cpp              |    8 +-
 src/VBox/Runtime/common/zip/tarvfs.cpp             |    1 -
 .../Runtime/generic/RTDirQueryInfo-generic.cpp     |    6 +-
 src/VBox/Runtime/generic/RTDirSetTimes-generic.cpp |    6 +-
 src/VBox/Runtime/include/internal/dir.h            |   38 +-
 src/VBox/Runtime/include/internal/dvm.h            |   21 +-
 src/VBox/Runtime/include/internal/file.h           |   19 +
 src/VBox/Runtime/include/internal/ldrELF.h         |   86 -
 src/VBox/Runtime/include/internal/ldrELF32.h       |  188 --
 src/VBox/Runtime/include/internal/ldrELF64.h       |  187 --
 src/VBox/Runtime/include/internal/ldrELFAmd64.h    |  128 -
 src/VBox/Runtime/include/internal/ldrELFCommon.h   |  336 ---
 src/VBox/Runtime/include/internal/ldrELFi386.h     |  131 -
 src/VBox/Runtime/include/internal/magics.h         |    4 +-
 src/VBox/Runtime/include/internal/path.h           |    8 +
 src/VBox/Runtime/iprt.d                            |    9 +
 src/VBox/Runtime/nt/RTErrConvertFromNtStatus.cpp   |    2 +
 src/VBox/Runtime/nt/fileioutils-nt.cpp             |  179 ++
 src/VBox/Runtime/os2/sys0.asm                      |    1 -
 .../r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp      |   65 +-
 src/VBox/Runtime/r0drv/netbsd/alloc-r0drv-netbsd.c |    2 +
 .../Runtime/r0drv/netbsd/process-r0drv-netbsd.c    |    3 +
 src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp           |   13 +-
 src/VBox/Runtime/r3/dir.cpp                        |  129 +-
 src/VBox/Runtime/r3/dir2.cpp                       |   14 +-
 ...aleQueryNormalizedBaseLocaleName-r3-generic.cpp |    1 -
 src/VBox/Runtime/r3/generic/dirrel-r3-generic.cpp  |  554 ++++
 .../r3/linux/RTProcIsRunningByName-linux.cpp       |   15 +-
 src/VBox/Runtime/r3/linux/krnlmod-linux.cpp        |   26 +-
 src/VBox/Runtime/r3/nt/RTFileSetMode-r3-nt.cpp     |   82 +
 src/VBox/Runtime/r3/nt/RTPathQueryInfo-nt.cpp      |  799 +++---
 src/VBox/Runtime/r3/nt/RTPathSetMode-r3-nt.cpp     |   88 +
 src/VBox/Runtime/r3/nt/direnum-r3-nt.cpp           |  143 +-
 src/VBox/Runtime/r3/nt/dirrel-r3-nt.cpp            |  695 +++++
 src/VBox/Runtime/r3/nt/internal-r3-nt.h            |    9 +
 src/VBox/Runtime/r3/nt/pathint-nt.cpp              |  504 +++-
 src/VBox/Runtime/r3/posix/dir-posix.cpp            |   25 +-
 src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp |    4 +-
 src/VBox/Runtime/r3/test.cpp                       |    3 +
 .../RTLocaleQueryNormalizedBaseLocaleName-win.cpp  |    1 -
 src/VBox/Runtime/r3/win/direnum-win.cpp            |   15 +-
 src/VBox/Runtime/r3/win/fileio-win.cpp             |   12 +-
 src/VBox/Runtime/r3/win/init-win.cpp               |    1 -
 src/VBox/Runtime/r3/win/krnlmod-win.cpp            |  594 ++---
 src/VBox/Runtime/r3/win/localipc-win.cpp           |    8 +-
 src/VBox/Runtime/r3/win/pipe-win.cpp               |    9 +-
 .../r3/win/rtFileNativeSetAttributes-win.cpp       |   59 -
 src/VBox/Runtime/r3/win/vcc100-kernel32-fakesA.asm |   27 +-
 src/VBox/Runtime/r3/win/vcc100-ntdll-fakesA.asm    |   25 +
 src/VBox/Runtime/r3/win/vcc100-ws2_32-fakesA.asm   |   25 +
 src/VBox/Runtime/r3/xml.cpp                        |    2 +-
 src/VBox/Runtime/testcase/Makefile.kmk             |    4 +-
 src/VBox/Runtime/testcase/tstDir-2.cpp             |    8 +-
 src/VBox/Runtime/testcase/tstDir-3.cpp             |   10 +-
 src/VBox/Runtime/testcase/tstDir.cpp               |   12 +-
 .../Runtime/testcase/tstRTBigNum-div-test-data.h   |   26 +
 .../testcase/tstRTBigNum-uint128-div-test-data.h   |   25 +
 .../Runtime/testcase/tstRTDarwinMachKernel.cpp     |   15 +-
 src/VBox/Runtime/testcase/tstRTDvm.cpp             |    9 +-
 src/VBox/Runtime/testcase/tstRTMath.cpp            |    2 +-
 src/VBox/Runtime/testcase/tstRTNtPath-1.cpp        |    2 +-
 src/VBox/Runtime/testcase/tstRTPathQueryInfo.cpp   |    1 +
 src/VBox/Runtime/testcase/tstRTPrfA.asm            |    6 +-
 src/VBox/Runtime/tools/Makefile.kmk                |   39 +-
 src/VBox/Runtime/tools/RTCat.cpp                   |  211 +-
 src/VBox/Runtime/tools/RTChMod.cpp                 |  434 ++++
 src/VBox/Runtime/tools/RTDbgSymCache.cpp           |   34 +-
 src/VBox/Runtime/tools/RTGzip.cpp                  |   12 +-
 src/VBox/Runtime/tools/RTHttp.cpp                  |    9 +-
 src/VBox/Runtime/tools/RTIsoMaker.cpp              |    6 +-
 src/VBox/Runtime/tools/RTKrnlModInfo.cpp           |    7 +-
 src/VBox/Runtime/tools/RTLdrFlt.cpp                |    8 +-
 src/VBox/Runtime/tools/RTLs.cpp                    |  162 +-
 src/VBox/Runtime/tools/RTManifest.cpp              |    6 +-
 src/VBox/Runtime/tools/RTMkDir.cpp                 |  369 +++
 src/VBox/Runtime/tools/RTNtDbgHelp.cpp             |   20 +-
 src/VBox/Runtime/tools/RTRm.cpp                    |    7 +-
 src/VBox/Runtime/tools/RTRmDir.cpp                 |  359 +++
 src/VBox/Runtime/tools/RTShutdown.cpp              |    7 +-
 src/VBox/Runtime/tools/RTSignTool.cpp              |   19 +-
 src/VBox/Runtime/tools/RTTar.cpp                   |    6 +-
 src/VBox/Runtime/tools/RTUnzip.cpp                 |    6 +-
 src/VBox/Runtime/win/RTErrConvertFromWin32.cpp     |    2 +
 src/VBox/Storage/.scm-settings                     |   19 +
 src/VBox/Storage/DMG.cpp                           |    2 +-
 src/VBox/Storage/Debug/VDDbgIoLog.cpp              |    2 +-
 src/VBox/Storage/ISCSI.cpp                         |    7 +-
 src/VBox/Storage/Parallels.cpp                     |    2 +-
 src/VBox/Storage/QCOW.cpp                          |    2 +-
 src/VBox/Storage/QED.cpp                           |    2 +-
 src/VBox/Storage/RAW.cpp                           |    5 +-
 src/VBox/Storage/VCICache.cpp                      |    2 +-
 src/VBox/Storage/VD.cpp                            |   23 +-
 src/VBox/Storage/VDBackends.h                      |    2 +-
 src/VBox/Storage/VDI.cpp                           |    2 +-
 src/VBox/Storage/VDICore.h                         |    2 +-
 src/VBox/Storage/VDIfVfs.cpp                       |    2 +-
 src/VBox/Storage/VDIfVfs2.cpp                      |    2 +-
 src/VBox/Storage/VDPlugin.cpp                      |   24 +-
 src/VBox/Storage/VDVfs.cpp                         |  132 +-
 src/VBox/Storage/VHD.cpp                           |    2 +-
 src/VBox/Storage/VHDX.cpp                          |    2 +-
 src/VBox/Storage/VMDK.cpp                          |    3 +-
 src/VBox/Storage/testcase/BuiltinTests.h           |    2 +-
 src/VBox/Storage/testcase/VDDefs.h                 |    2 +-
 src/VBox/Storage/testcase/VDIoBackend.cpp          |    2 +-
 src/VBox/Storage/testcase/VDIoBackend.h            |    2 +-
 src/VBox/Storage/testcase/VDIoBackendMem.cpp       |    2 +-
 src/VBox/Storage/testcase/VDIoBackendMem.h         |    2 +-
 src/VBox/Storage/testcase/VDIoRnd.cpp              |    2 +-
 src/VBox/Storage/testcase/VDIoRnd.h                |    2 +-
 src/VBox/Storage/testcase/VDMemDisk.cpp            |    2 +-
 src/VBox/Storage/testcase/VDMemDisk.h              |    2 +-
 src/VBox/Storage/testcase/VDScript.cpp             |    2 +-
 src/VBox/Storage/testcase/VDScript.h               |    2 +-
 src/VBox/Storage/testcase/VDScriptAst.cpp          |    2 +-
 src/VBox/Storage/testcase/VDScriptAst.h            |    2 +-
 src/VBox/Storage/testcase/VDScriptChecker.cpp      |    2 +-
 src/VBox/Storage/testcase/VDScriptInternal.h       |    2 +-
 src/VBox/Storage/testcase/VDScriptInterp.cpp       |    2 +-
 src/VBox/Storage/testcase/VDScriptStack.h          |    2 +-
 src/VBox/Storage/testcase/tstVD-2.cpp              |    2 +-
 src/VBox/Storage/testcase/tstVD.cpp                |    2 +-
 src/VBox/Storage/testcase/tstVDCompact.vd          |    2 +-
 src/VBox/Storage/testcase/tstVDCopy.vd             |    2 +-
 src/VBox/Storage/testcase/tstVDDiscard.vd          |    2 +-
 src/VBox/Storage/testcase/tstVDFill.cpp            |    2 +-
 src/VBox/Storage/testcase/tstVDIo.cpp              |    2 +-
 src/VBox/Storage/testcase/tstVDIo.vd               |    2 +-
 src/VBox/Storage/testcase/tstVDMultBackends.vd     |    2 +-
 src/VBox/Storage/testcase/tstVDResize.vd           |    2 +-
 src/VBox/Storage/testcase/tstVDShareable.vd        |    2 +-
 src/VBox/Storage/testcase/tstVDSnap.cpp            |    2 +-
 src/VBox/Storage/testcase/vbox-img.cpp             |   96 +-
 src/VBox/Storage/testcase/vbox-img.rc              |    2 +-
 src/VBox/Storage/testcase/vdkeystoremgr.cpp        |  280 ++
 src/VBox/Storage/testcase/vdkeystoremgr.rc         |   51 +
 src/VBox/VMM/.scm-settings                         |   22 +
 src/VBox/VMM/Makefile.kmk                          |    3 +
 src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp                |   71 +-
 src/VBox/VMM/VMMAll/CPUMAllRegs.cpp                |   10 +-
 src/VBox/VMM/VMMAll/HMSVMAll.cpp                   |   19 +-
 src/VBox/VMM/VMMAll/IEMAll.cpp                     |   20 +-
 src/VBox/VMM/VMMAll/IEMAllAImpl.asm                |    1 +
 src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h      |   45 +-
 .../VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h     |    1 -
 src/VBox/VMM/VMMAll/PGMAllPhys.cpp                 |    3 +-
 src/VBox/VMM/VMMR0/GMMR0.cpp                       |    2 +-
 src/VBox/VMM/VMMR0/HMSVMR0.cpp                     |  629 +++--
 src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp                 |    6 +-
 src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp               |    3 +-
 src/VBox/VMM/VMMR3/DBGFR3Flow.cpp                  |    8 +-
 src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp                |    8 +-
 src/VBox/VMM/VMMR3/EM.cpp                          |    6 +-
 src/VBox/VMM/VMMR3/HM.cpp                          |   10 +-
 src/VBox/VMM/VMMR3/MM.cpp                          |    1 -
 src/VBox/VMM/VMMR3/PATMA.asm                       |    1 +
 src/VBox/VMM/VMMR3/PDMThread.cpp                   |    2 +-
 .../VMM/VMMR3/cpus/Intel_Core2_X6800_2_93GHz.h     |  257 ++
 src/VBox/VMM/VMMRC/CPUMRCPatchHlp.asm              |    1 +
 src/VBox/VMM/VMMRC/VMMRC99.asm                     |    1 +
 src/VBox/VMM/VMMRC/VMMRCBuiltin.def                |    1 +
 src/VBox/VMM/VMMSwitcher/AMD64To32Bit.asm          |    1 -
 src/VBox/VMM/VMMSwitcher/X86Stub.asm               |    1 -
 src/VBox/VMM/dtrace/lib/amd64/vbox-arch-types.d    |   10 -
 src/VBox/VMM/dtrace/lib/vbox-types.d               |    9 -
 src/VBox/VMM/dtrace/lib/x86/vbox-arch-types.d      |   10 -
 src/VBox/VMM/include/CPUMInternal.mac              |    4 +-
 src/VBox/VMM/include/HMInternal.h                  |    2 +-
 src/VBox/VMM/testcase/mkdsk.sh                     |    4 +
 src/VBox/VMM/testcase/tstAsmStructsAsm-lst.sed     |   17 +
 src/VBox/VMM/testcase/tstMicroRC.def               |    1 +
 src/VBox/VMM/testcase/tstVMStruct.h                |    1 +
 src/VBox/VMM/tools/Makefile.kmk                    |    6 +-
 src/VBox/VMM/tools/VBoxCpuReport.cpp               |  139 +-
 src/VBox/VMM/tools/VBoxCpuReport.h                 |   51 +
 src/VBox/VMM/tools/VBoxCpuReportMsrLinux.cpp       |  169 ++
 src/VBox/VMM/tools/VBoxCpuReportMsrSup.cpp         |   53 +
 src/VBox/VMM/tools/VBoxVMMPreload.cpp              |   12 +-
 src/VBox/ValidationKit/.scm-settings               |   60 +
 .../ValidationKitCodingGuidelines.cpp              |    2 +-
 .../ValidationKit/bootsectors/bootsector-empty.asm |    1 -
 .../ValidationKit/bootsectors/bootsector-pae.asm   |    1 -
 .../bootsectors/bootsector2-boot-registers-1.asm   |    1 -
 .../bootsector2-cpu-instr-1-template.mac           |    1 -
 .../bootsectors/bs3-cpu-generated-1-data.py        |    3 +-
 .../bootsectors/bs3-cpu-instr-2-asm.asm            |    1 -
 .../bootsectors/bs3-cpu-instr-2-template.mac       |    1 -
 .../bs3-c16-SwitchFromV86To16BitAndCallC.asm       |    1 -
 .../bootsectors/bs3kit/bs3-c16-Trap16Generic.asm   |    1 -
 .../bs3kit/bs3-cmn-SelFlatCodeToProtFar16.asm      |    2 -
 .../bs3kit/bs3-cmn-SelFlatCodeToRealMode.asm       |    1 -
 .../bs3kit/bs3-cmn-SelFlatDataToProtFar16.asm      |    1 -
 ...witchHlpConvProtModeRetfPopBpDecBpAndReturn.asm |    1 -
 .../bootsectors/bs3kit/bs3-cmn-instantiate.c64     |    1 -
 .../bootsectors/bs3kit/bs3-first-dosexe.asm        |    1 -
 .../bs3kit/bs3-mode-TestDoModesStub.asm            |    1 -
 .../bootsectors/bs3kit/bs3-wc32-U8RS.asm           |    1 -
 .../bootsectors/bs3kit/bs3kit-template-header.mac  |    1 -
 src/VBox/ValidationKit/common/utils.py             |  114 +-
 src/VBox/ValidationKit/docs/Makefile.kmk           |    1 -
 src/VBox/ValidationKit/docs/WindbgPython.txt       |   10 +
 src/VBox/ValidationKit/jshintrc.js                 |   22 +
 src/VBox/ValidationKit/td-dummy.py                 |    2 +-
 .../ValidationKit/testboxscript/TestBoxHelper.cpp  |   18 +
 .../testboxscript/solaris/setup-routines.sh        |    2 +-
 .../testboxscript/win/autoexec-testbox.cmd         |   27 +
 .../testboxscript/win/fix_stale_refs.py            |  150 ++
 src/VBox/ValidationKit/testdriver/base.py          |    5 +-
 src/VBox/ValidationKit/testdriver/btresolver.py    |    4 +-
 src/VBox/ValidationKit/testdriver/reporter.py      |   10 +-
 src/VBox/ValidationKit/testdriver/vbox.py          |  159 +-
 src/VBox/ValidationKit/testdriver/vboxcon.py       |    4 +-
 .../testdriver/win-vbox-net-drvstore-cleanup.ps1   |   95 +-
 .../testdriver/win-vbox-net-uninstall.ps1          |  460 ++--
 src/VBox/ValidationKit/testdriver/winbase.py       |   67 +-
 .../ValidationKit/testmanager/core/testbox.pgsql   |    1 -
 .../ValidationKit/testmanager/core/testcase.pgsql  |   44 +-
 .../testmanager/core/useraccount.pgsql             |   10 +-
 .../db/TestManagerDatabaseComments.pgsql           |  242 +-
 .../testmanager/db/TestManagerDatabaseInit.pgsql   |   16 +-
 .../testmanager/db/TestManagerVBoxPilot-1.pgsql    |    7 +-
 .../testmanager/db/gen-sql-comments.py             |   24 +-
 .../testmanager/db/tmdb-r07-testresults-1.pgsql    |    1 -
 .../testmanager/db/tmdb-r11-testsets-2.pgsql       |   12 +-
 .../testmanager/db/tmdb-r15-index-sorting.pgsql    |    2 +-
 ...b-r16-testcaseargs-1-testresultfailures-1.pgsql |    4 +-
 .../db/tmdb-r17-testresultvalues-4.pgsql           |    1 -
 ...db-r18-testresultfiles-1-testresultmsgs-1.pgsql |   30 +-
 .../testmanager/db/tmdb-r19-testboxes-3.pgsql      |   89 +-
 .../ValidationKit/testmanager/htdocs/js/common.js  |    1 -
 .../testmanager/htdocs/js/graphwiz.js              |    1 -
 .../testmanager/selftest/st1-load.pgsql            |   16 +-
 .../testmanager/selftest/st1-unload.pgsql          |   26 +-
 src/VBox/ValidationKit/tests/api/tdAppliance1.py   |    8 +-
 .../VBox/ValidationKit/tests/audio/Makefile.kup    |    0
 .../tests/audio/tdGuestHostTimings.py              |  229 ++
 .../tests/installation/tdGuestOsInstOs2.py         |   18 +-
 .../ValidationKit/tests/unittests/tdUnitTest1.py   |    3 +-
 .../utils/TestExecServ/win/vboxtxs-nat.cmd         |    1 +
 .../utils/TestExecServ/win/vboxtxs.cmd             |    1 +
 src/VBox/ValidationKit/utils/audio/Makefile.kmk    |   38 +
 .../ValidationKit/utils/audio/ntPlayToneWaveX.cpp  |  216 ++
 src/VBox/ValidationKit/utils/cpu/xmmsaving-asm.asm |    1 -
 src/VBox/ValidationKit/utils/usb/UsbTest.cpp       |   24 +-
 .../utils/usb/UsbTestServicePlatform-linux.cpp     |   18 +-
 src/apps/svnsync-vbox/Makefile                     |    6 +-
 src/apps/tunctl/.scm-settings                      |   19 +
 src/bldprogs/Makefile.kmk                          |    1 +
 src/bldprogs/VBoxCPP.cpp                           |    4 +-
 src/bldprogs/VBoxCheckImports.cpp                  |    4 +-
 src/bldprogs/VBoxCmp.cpp                           |    2 +-
 src/bldprogs/VBoxCompilerPlugIns.h                 |    2 +-
 src/bldprogs/VBoxCompilerPlugInsCommon.cpp         |    2 +-
 src/bldprogs/VBoxDef2LazyLoad.cpp                  |    4 +-
 src/bldprogs/VBoxPeSetVersion.cpp                  |    2 +-
 src/bldprogs/VBoxTpG.cpp                           |    4 +-
 src/bldprogs/bin2c.c                               |    2 +-
 src/bldprogs/biossums.c                            |    2 +-
 src/bldprogs/checkUndefined.sh                     |    2 +-
 src/bldprogs/deftoimp.sed                          |    3 +-
 src/bldprogs/filesplitter.cpp                      |    2 +-
 src/bldprogs/preload.cpp                           |    4 +-
 src/bldprogs/scm.cpp                               | 1687 ++++++++++--
 src/bldprogs/scm.h                                 |  163 +-
 src/bldprogs/scmdiff.cpp                           |    2 +-
 src/bldprogs/scmdiff.h                             |    2 +-
 src/bldprogs/scmparser.cpp                         | 1008 ++++++++
 src/bldprogs/scmrw.cpp                             | 1509 ++++++++++-
 src/bldprogs/scmstream.cpp                         |  125 +-
 src/bldprogs/scmstream.h                           |    2 +-
 src/bldprogs/scmsubversion.cpp                     |  273 +-
 src/bldprogs/solgcc/.scm-settings                  |   19 +
 src/bldprogs/test-gccplugin-2.c                    |   17 +
 src/bldprogs/test-gccplugin.c                      |   16 +
 src/libs/kStuff/kStuff/include/k/kDefs.h           |   74 +-
 src/libs/xpcom18a4/java/tools/genjifaces.xsl       |    4 +-
 src/libs/xpcom18a4/python/src/module/_xpcom.cpp    |   75 +-
 src/recompiler/.scm-settings                       |   32 +
 src/recompiler/Sun/config-host.h                   |    2 +-
 src/recompiler/Sun/config.h                        |    2 +-
 src/recompiler/Sun/crt/stdio.h                     |    2 +-
 src/recompiler/Sun/deftoimp.sed                    |    3 +-
 src/recompiler/Sun/e_powl-amd64.S                  |    9 +
 src/recompiler/Sun/e_powl-x86.S                    |   17 +-
 src/recompiler/Sun/kvm.h                           |    2 +-
 src/recompiler/Sun/testmath.c                      |   22 +-
 src/recompiler/VBoxREM.def                         |    2 +-
 src/recompiler/VBoxREM.rc                          |    2 +-
 src/recompiler/VBoxREMWrapper.cpp                  |    2 +-
 src/recompiler/VBoxREMWrapperA.asm                 |    2 +-
 src/recompiler/VBoxRecompiler.c                    |    2 +-
 src/recompiler/target-i386/TODO                    |    4 +-
 src/recompiler/tcg/README                          |   10 +-
 src/recompiler/tcg/TODO                            |    2 +-
 src/recompiler/tests/hello-arm.c                   |    2 +-
 src/recompiler/tests/test-i386-muldiv.h            |   16 +-
 2784 files changed, 53156 insertions(+), 23438 deletions(-)

diff --git a/.scm-settings b/.scm-settings
index 17bb30d..57ae275 100644
--- a/.scm-settings
+++ b/.scm-settings
@@ -10,7 +10,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -41,41 +41,12 @@
 # recursion against these patterns.
 #
 --filter-out-dirs  ".svn"
---filter-out-dirs  "*/*out*/."
---filter-out-dirs  "*/tools/."
---filter-out-dirs  "*/webtools/."
---filter-out-dirs  "*/kBuild/."
---filter-out-dirs  "*/_kBuild/."
---filter-out-dirs  "*/kBuild_/."
---filter-out-dirs  "*/debian/."
---filter-out-dirs  "*/SlickEdit/."
---filter-out-dirs  "*/doc/manual/texfiles/."
---filter-out-dirs  "*/src/libs/*/."
---filter-out-dirs  "*/src/apps/kchmviewer*/."
---filter-out-dirs  "*/src/VBox/Additions/x11/x11include/."
---filter-out-dirs  "*/src/VBox/Additions/WINNT/Graphics/Wine/."
---filter-out-dirs  "*/src/VBox/Additions/WINNT/Network/freebsd/."
---filter-out-dirs  "*/src/VBox/Additions/WINNT/i8042prt/include/."
---filter-out-dirs  "*/src/VBox/Additions/WINNT/Graphics/Wine*/."
---filter-out-dirs  "*/src/VBox/Additions/common/crOpenGL/."
---filter-out-dirs  "*/src/VBox/Additions/solaris/DRM/include/."
---filter-out-dirs  "*/src/VBox/Additions/solaris/SharedFolders/solaris10/sys/."
---filter-out-dirs  "*/src/VBox/Additions/linux/lightdm-greeter/*/."
---filter-out-dirs  "*/src/VBox/HostServices/SharedOpenGL/."
---filter-out-dirs  "*/src/VBox/HostDrivers/VBoxNetFlt/solaris/include/."
---filter-out-dirs  "*/src/VBox/HostDrivers/VBoxUSB/solaris/include/."
---filter-out-dirs  "*/src/VBox/GuestHost/OpenGL/*/."
---filter-out-dirs  "*/src/VBox/Devices/Graphics/shaderlib*/."
---filter-out-dirs  "*/src/VBox/Devices/Graphics/vmsvga/."
---filter-out-dirs  "*/src/VBox/Devices/Graphics/vmsvga_glext/."
---filter-out-dirs  "*/src/VBox/Devices/PC/ipxe/*/."
---filter-out-dirs  "*/src/VBox/Devices/EFI/Firmware*/."
---filter-out-dirs  "*/src/VBox/Devices/Network/lwip*/src*/."
---filter-out-dirs  "*/src/VBox/Devices/Network/lwip*/doc*/."
---filter-out-dirs  "*/src/VBox/Devices/Network/lwip*/test*/."
---filter-out-dirs  "*/src/VBox/Storage/VDFormats/StorageCraft/*/."
---filter-out-dirs  "*/src/VBox/RDP/client-*/."
---filter-out-dirs  "*/src/recompiler/tests/."
+--filter-out-dirs  "/*out*/."
+--filter-out-dirs  "/webtools/."
+--filter-out-dirs  "/*kBuild*/."
+--filter-out-dirs  "/debian/."
+--filter-out-dirs  "/SlickEdit/."
+--filter-out-dirs  "/src/libs/*/."
 
 
 #
@@ -84,59 +55,13 @@
 # Same format as for the directories, except that we'll also apply them to
 # files specified directly on the command line.
 #
---filter-out-files "*/include/VBox/HostServices/glext.h"
---filter-out-files "*/include/VBox/HostServices/glxext.h"
---filter-out-files "*/include/VBox/HostServices/wglext.h"
---filter-out-files "*/src/VBox/Devices/Audio/sys-queue.h"
---filter-out-files "*/src/VBox/Devices/Audio_old/sys-queue.h"
---filter-out-files "*/src/VBox/HostDrivers/VBoxUSB/os2/usbcalls.h"
---filter-out-files "*/src/VBox/RDP/x11server/Init*.c"
---filter-out-files "*/vslick.h"
-
-
-#
-# Files and sub-trees where we don't convert tabs.
-#
-*/src/VBox/Additions/solaris/SharedFolders/*: --no-convert-tabs
-*/src/VBox/Additions/x11/vboxmouse/*mouse*: --no-convert-tabs
-*/src/VBox/Additions/x11/vboxmouse/*pnp.c: --no-convert-tabs
-*/src/VBox/Additions/x11/vboxvideo/vboxvideo*.c: --no-convert-tabs
-*/src/VBox/Additions/x11/vboxvideo/vboxvideo*.h: --no-convert-tabs
-*/src/VBox/Devices/Network/slirp/*: --no-convert-tabs
-*/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaDxe/Edid.c: --no-convert-tabs
-*/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxFsDxe/*.*: --no-convert-tabs
-*/src/apps/tunctl/tunctl.c: --no-convert-tabs
-*/src/VBox/Main/src-all/DisplayResampleImage.cpp: --no-convert-tabs
-vboxvideo_drm.c: --no-convert-tabs
-*linux.mod.c: --no-convert-tabs
-*/src/VBox/Main/DisplayResampleImage.cpp: --no-convert-tabs
-*/src/recompiler/*: --no-convert-tabs
-*/src/recompiler/VBox*: --convert-tabs
-
-
-#
-# Files and sub-trees where we don't set forcibly set svn:keywords.
-#
-*/src/VBox/Additions/x11/vboxmouse/*mouse*: --dont-set-svn-keywords
-*/src/VBox/Additions/x11/vboxmouse/*pnp.c: --dont-set-svn-keywords
-*/src/VBox/Additions/x11/vboxvideo/vboxvideo*.c: --dont-set-svn-keywords
-*/src/VBox/Additions/x11/vboxvideo/vboxvideo*.h: --dont-set-svn-keywords
-*/src/VBox/Devices/Network/slirp/*: --dont-set-svn-keywords
-*/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaDxe/Edid.c: --dont-set-svn-keywords
-*/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxFsDxe/*.*: --dont-set-svn-keywords
-*/src/VBox/Devices/PC/BIOS/rombios.c: --dont-set-svn-keywords
-*/src/recompiler/*: --dont-set-svn-keywords
-*/src/recompiler/VBox*: --set-svn-keywords
-
-
-#
-# Temporary exclusions, awaiting cleanup.
-#
---filter-out-dirs  "*/src/VBox/Additions/os2/VBoxGradd/."
---filter-out-dirs  "*/src/VBox/Additions/os2/VBoxGrext/."
---filter-out-dirs  "*/src/VBox/Additions/os2/VBoxMouse/."
---filter-out-dirs  "*/src/VBox/Devices/PC/PXE/."
-*/src/VBox/Additions/solaris/Installer/postinstall.sh: --no-convert-tabs
-*/src/VBox/HostDrivers/Support/solaris/mod.sh: --no-convert-tabs
-*/src/VBox/Installer/solaris/vboxconfig.sh: --no-convert-tabs
+--filter-out-files "/vslick.h"
+--filter-out-files "*/PkgInfo"
+--filter-out-files "*/*-PkgInfo"
+--filter-out-files "*.plist"
+--filter-out-files "*/Doxyfile*"
+--filter-out-files "*/COPYING"
+--filter-out-files "*/COPYING.LIB"
+--filter-out-files "*/COPYING.CDDL"
+--filter-out-files "*.desktop"
 
diff --git a/Config.kmk b/Config.kmk
index 812d511..436e01a 100644
--- a/Config.kmk
+++ b/Config.kmk
@@ -19,7 +19,8 @@
 #
 
 # Marker.
-VBOX_ROOT_CONFIG_KMK_INCLUDED = 1
+VBOX_ROOT_CONFIG_KMK_INCLUDED  = 1
+
 
 #
 # kBuild stuff
@@ -156,6 +157,7 @@ VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
 VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
 VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
 VBOX_PATH_PACKAGES    = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
+VBOX_PATH_TOOLS       = $(patsubst %/,%,$(PATH_STAGE)/$(VBOX_INST_TOOLS))
 
 
 # Delete targets on failure.
@@ -166,10 +168,16 @@ if  $(KBUILD_VERSION_MAJOR) == 0 \
  && (   $(KBUILD_VERSION_MINOR) >= 2 \
      || (   $(KBUILD_VERSION_MINOR) == 1 \
          && $(KBUILD_VERSION_PATCH) >= 999))
- if $(KMK_REVISION) >= 2689
-  # OK.
+ VBOX_MIN_KMK_REVISION        := 3093
+ VBOX_MIN_KBUILD_KMK_REVISION := $(if-expr "$(KBUILD_HOST)" == "win",3097,3074)
+ if $(KMK_REVISION) >= $(VBOX_MIN_KMK_REVISION)
+  if $(KBUILD_KMK_REVISION) >= $(VBOX_MIN_KBUILD_KMK_REVISION)
+   # OK.
+  else
+   $(error You must update kBuild! Requires kBuild binaries $(VBOX_MIN_KBUILD_KMK_REVISION) or later, kmk says $(KBUILD_KMK_REVISION) ($(KBUILD_VERSION)))
+  endif
  else
-  $(error You must update kBuild! Requires kBuild revision 2577 or later, found $(KMK_REVISION) ($(KBUILD_VERSION)))
+  $(error You must update kBuild! Requires kBuild revision $(VBOX_MIN_KMK_REVISION) or later, found $(KMK_REVISION) ($(KBUILD_VERSION)))
  endif
 else
  $(error You must update kBuild! Requires 0.1.999 or later, found $(KBUILD_VERSION))
@@ -210,9 +218,20 @@ VBOX_VERSION_STRING_RAW = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VER
 #       prerelease from different publishers correctly.
 VBOX_VERSION_STRING = $(VBOX_VERSION_STRING_RAW)$(addprefix _,$(VBOX_VERSION_PRERELEASE))$(VBOX_BUILD_PUBLISHER)
 
+
+## Make a numeric value from the major, minor and build numbers (params)
+VBOX_FULL_VERSION_MAKE = $(expr ($1 << 24) | ($2 << 16) | $3)
+
+## Checks if the current VBox version is higher or equal to the major, minor and
+# build numbers given as parameters.
+# @returns 1 if true, 0 if false.  For use with 'if'.
+VBOX_VERSION_PREREQ = $(expr $(call VBOX_FULL_VERSION_MAKE,$(VBOX_VERSION_MAJOR),$(VBOX_VERSION_MINOR),$(VBOX_VERSION_BUILD)) \
+			     >= $(call VBOX_FULL_VERSION_MAKE,$1,$2,$3))
+
+
 # Force the additions.sh script to get an exact additions build when we're doing the release.
 ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0)
-  ifeq ($VBOX_VERSION_PRERELEASE),)
+  ifeq ($(VBOX_VERSION_PRERELEASE),)
     VBOX_RELEASE_EXACT_MATCH=1
   endif
 endif
@@ -2687,6 +2706,7 @@ endif
 	$(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-return-type-c-linkage ?= $(call VBOX_GCC_CHECK_CXX,-Wno-return-type-c-linkage,)'
 	$(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-string-plus-int ?= $(call VBOX_GCC_CHECK_CC,-Wno-string-plus-int,)'
 	$(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-nested-anon-types ?= $(call VBOX_GCC_CHECK_CC,-Wno-nested-anon-types,)'
+	$(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-gnu-anonymous-struct ?= $(call VBOX_GCC_CHECK_CXX,-Wno-gnu-anonymous-struct,)'
 # C++ Std settings
 	$(QUIET)$(APPEND) '$@' 'ifneq ($$(VBOX_GCC_VERSION_CXX),)'
 	$(QUIET)$(APPEND) '$@' ' ifneq ($$(int-ge $$(VBOX_GCC_VERSION_CXX),40800),)'
@@ -2790,8 +2810,8 @@ endif # !VBOX_NOINC_DYNAMIC_CONFIG_KMK
 #
 VBOX_GCC_WARN     ?= -Wall $(VBOX_GCC_Wextra) $(VBOX_GCC_Wno-missing-field-initializers) -Wno-unused -Wno-trigraphs \
 	$(VBOX_GCC_fdiagnostics-show-option) $(VBOX_GCC_Wno-unused-parameter) $(VBOX_GCC_Wno-language-extension-token) \
-	$(VBOX_GCC_Wno-extended-offsetof) $(VBOX_GCC_Wno-gnu-folding-constant) $(VBOX_GCC_Wlogical-op) \
-	$(VBOX_GCC_Wno-string-plus-int) $(VBOX_GCC_Wno-nested-anon-types) $(VBOX_GCC_Wno-variadic-macros)
+	$(VBOX_GCC_Wno-extended-offsetof) $(VBOX_GCC_Wno-gnu-folding-constant) $(VBOX_GCC_Wno-gnu-anonymous-struct) \
+       $(VBOX_GCC_Wlogical-op) $(VBOX_GCC_Wno-string-plus-int) $(VBOX_GCC_Wno-nested-anon-types) $(VBOX_GCC_Wno-variadic-macros)
 VBOX_GCC_WARN_PEDANTIC = -Wshadow $(VBOX_GCC_WARN) -Wno-long-long
 if $(VBOX_GCC_VERSION_CXX) >= 40200 || defined(VBOX_WITH_MASOCHISTIC_WARNINGS) # gcc 4.2.x+ (4.1.2 is causing trouble with the extpack & add builds)
  VBOX_GCC_WARN_MASOCHISTIC ?= -Wunused-variable -Wunused-function -Wunused-label -Wunused-parameter
@@ -4196,7 +4216,38 @@ ifeq ($(KBUILD_TARGET),win)
 endif
 
 ifeq ($(KBUILD_TARGET),linux)
-TEMPLATE_VBOXR0DRV_TOOL                = $(NO_SUCH_VARIABLE)
+ TEMPLATE_VBOXR0DRV_TOOL                = $(NO_SUCH_VARIABLE)
+
+ ifndef KERN_DIR
+  ifndef KERN_VER
+   KERN_VER=$(patsubst /lib/modules/%/build/.config,%,$(firstword $(shell LC_ALL=C ls -t /lib/modules/*/build/.config 2>/dev/null)))
+  endif
+  ifeq ($(KERN_VER),)
+   KERN_VER=`uname -r`
+  endif
+  KERN_DIR=/lib/modules/$(KERN_VER)/build
+ endif
+
+##
+# Using the extra expansion to replace $(module) before eval, thus everything
+# else needs escaped dollars.
+ define VBOX_LINUX_GENERATE_KMOD_TEST
+  VBOX_TARGET_$(module) = $$(PATH_TARGET)/tst$(module)$(subst /,_,$(KERN_DIR))_mod.run
+  TESTING      += $$(VBOX_TARGET_$(module))
+  OTHERS       += $$(VBOX_TARGET_$(module))
+  OTHERS_CLEAN += $$(VBOX_TARGET_$(module))
+  $$(VBOX_TARGET_$(module)): $$$$($(module)_2_STAGE_TARGETS)
+	$(QUIET)$$(call MSG_L1,Doing a test build of the $(module) kernel module)
+	$(QUIET)$$(RM) -f -- "$$@"
+	$(QUIET)$$(RM) -Rf -- "$$(PATH_TARGET)/tst$(module)_mod"
+	$(QUIET)$$(MKDIR) -p -- "$$(PATH_TARGET)/tst$(module)_mod"
+	$(QUIET)$$(CP) -R -- "$$(PATH_STAGE_BIN)/../$$($(module)_INST)" "$$(PATH_TARGET)/tst$(module)_mod/"
+	+ $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) KERN_DIR=$(KERN_DIR) -C $$(PATH_TARGET)/tst$(module)_mod clean
+	+ $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) KERN_DIR=$(KERN_DIR) $(if-expr $(KMK_OPTS_JOBS) != 1,JOBS=$(KMK_OPTS_JOBS),) -C $$(PATH_TARGET)/tst$(module)_mod
+	$(QUIET)$$(RM) -Rf -- $$(PATH_TARGET)/tst$(module)_mod
+	$(QUIET)$$(APPEND) -t "$$@" "done"
+ endef
+
 endif
 
 ifeq ($(KBUILD_TARGET),os2)
@@ -7046,7 +7097,7 @@ endif
 SVN                    ?= svn$(HOSTSUFF_EXE)
 VBOX_SVN_REV_KMK        = $(PATH_OUT)/revision.kmk
 ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 118415 $  )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 119230 $  )
  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         :=
@@ -7230,6 +7281,3 @@ up2 update2::
 st stat status:
 	$(SVN) status
 
-
-
-
diff --git a/Maintenance.kmk b/Maintenance.kmk
index 95abc3d..f1aa123 100644
--- a/Maintenance.kmk
+++ b/Maintenance.kmk
@@ -49,4 +49,3 @@ show-maintence-help:
 VBOX_ONLY_ROOT_MAKEFILE=1
 include $(dir $(firstword $(MAKEFILE_LIST)))Makefile.kmk
 
-
diff --git a/Makefile.kmk b/Makefile.kmk
index 6c29e09..5344689 100644
--- a/Makefile.kmk
+++ b/Makefile.kmk
@@ -229,25 +229,25 @@ $(foreach qtmod,$(VBOX_QT_MOD_NAMES),$$(qt5-bin_0_OUTDIR)/lib$(qtmod).so.$(QT5_V
 	$(QUIET)$(CP) $^ $@
 	$(QUIET)chrpath --delete $@
 
-     ifneq ($(KBUILD_TARGET),solaris)
+     ifn1of ($(KBUILD_TARGET),solaris linux)
 $(foreach lib,$(VBOX_QT_PLUGINS),$$(qt5-bin_0_OUTDIR)/$(lib)): \
 	$$(qt5-bin_0_OUTDIR)/% : $(VBOX_PATH_QT)/% | $$(qt5-bin_0_OUTDIR)/
 	$(call MSG_INST_FILE,$^,$@)
 	$(QUIET)$(MKDIR) -p $(@D)
 	$(QUIET)$(CP) $^ $@
 	$(QUIET)chrpath --delete $@
-     endif # !solaris
+     endif # !solaris and !linux
 
-     # @todo For solaris dlopen fails to navigate executable rpath to dependent libraries,
+     # @todo For solaris and some linuxes dlopen fails to navigate executable rpath to dependent libraries,
      #       so add explicit rpath for libqxcb.so, find better solution later.
-     ifeq ($(KBUILD_TARGET),solaris)
+     if1of ($(KBUILD_TARGET),solaris linux)
 $(foreach lib,$(VBOX_QT_PLUGINS),$$(qt5-bin_0_OUTDIR)/$(lib)): \
 	$$(qt5-bin_0_OUTDIR)/% : $(VBOX_PATH_QT)/% | $$(qt5-bin_0_OUTDIR)/
 	$(call MSG_INST_FILE,$^,$@)
 	$(QUIET)$(MKDIR) -p $(@D)
 	$(QUIET)$(CP) $^ $@
 	$(QUIET)chrpath --replace "\$$ORIGIN/../../" $@
-     endif # solaris
+     endif # solaris linux
 
 $(foreach lib,$(VBOX_QT_LEGACY_LIBS),$$(qt5-bin_0_OUTDIR)/$(lib)): \
 	$$(qt5-bin_0_OUTDIR)/% : $(VBOX_PATH_QT_LIB)/legacy/% | $$(qt5-bin_0_OUTDIR)/
@@ -290,7 +290,7 @@ if  defined(VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER) \
 
  $$(buildserver-additions_0_OUTDIR)/VBoxGuestAdditions.zip: $(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/additions.sh | $$(dir $$@)
 	$(RM) -f -- "$@" "$@.tmp"
-	$(SHELL) $(PATH_DEVTOOLS)/bin/additions.sh --cmd fetch --filename "$@.tmp"
+	$(SHELL) $(PATH_DEVTOOLS)/bin/additions.sh --cmd fetch --filename "$@.tmp" $(if $(VBOX_USE_PROXY_FOR_BUILD_SERVER),--default-proxy,)
 	$(MV) -f -- "$@.tmp" "$@"
 
 endif # VBOX_WITH_ADDITIONS_FROM_BUILD_SERVER unless win.x86+combined
@@ -328,7 +328,7 @@ $(foreach f,$(VBOX_MANUAL_ADD_LANGUAGES),$(PATH_TARGET)/VirtualBox_$(f).chm $(PA
 
 $$(buildserver-docs_0_OUTDIR)/VBoxDocumentation.zip: $(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/documentation.sh | $$(dir $$@)
 	$(RM) -f -- "$@" "$@.tmp"
-	$(SHELL) $(PATH_DEVTOOLS)/bin/documentation.sh --cmd fetch --filename "$@.tmp"
+	$(SHELL) $(PATH_DEVTOOLS)/bin/documentation.sh --cmd fetch --filename "$@.tmp" $(if $(VBOX_USE_PROXY_FOR_BUILD_SERVER),--default-proxy,)
 	$(MV) -f -- "$@.tmp" "$@"
 
 endif # VBOX_WITH_DOCS_FROM_BUILD_SERVER
@@ -389,7 +389,7 @@ endif # VBOX_WITH_DOCS_FROM_BUILD_SERVER
    $$(buildserver-efifw_0_OUTDIR)/VBoxEfiFirmware.zip: \
 		$(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/efi_firmware.sh | $$(dir $$@)
 	$(RM) -f -- "$@" "$@.tmp"
-	$(SHELL) $(PATH_DEVTOOLS)/bin/efi_firmware.sh --cmd fetch --filename "$@.tmp"
+	$(SHELL) $(PATH_DEVTOOLS)/bin/efi_firmware.sh --cmd fetch --filename "$@.tmp" $(if $(VBOX_USE_PROXY_FOR_BUILD_SERVER),--default-proxy,)
 	$(MV) -f -- "$@.tmp" "$@"
 
   else # !VBOX_WITH_EFIFW_FROM_BUILD_SERVER
@@ -425,7 +425,7 @@ buildserver-extpacks_CLEANS = \
 $$(buildserver-extpacks_0_OUTDIR)/Oracle_VM_VirtualBox_Extension_Pack.vbox-extpack: \
 		$(VBOX_SVN_REV_KMK) $(PATH_DEVTOOLS)/bin/extpacks.sh | $$(dir $$@)
 	$(RM) -f -- "$@.tmp" "$@"
-	$(SHELL) $(PATH_DEVTOOLS)/bin/extpacks.sh --cmd fetch --filename "$@.tmp" --vbox-version "$(VBOX_VERSION_STRING)"
+	$(SHELL) $(PATH_DEVTOOLS)/bin/extpacks.sh --cmd fetch --filename "$@.tmp" --vbox-version "$(VBOX_VERSION_STRING)" $(if $(VBOX_USE_PROXY_FOR_BUILD_SERVER),--default-proxy,)
 	$(MV) -f -- "$@.tmp" "$@"
 	$(TOUCH) -- "$@"
 
@@ -900,6 +900,20 @@ $(VBOX_CORE_DOXYFILE_OUTPUT)/docs.Core: $(VBOX_CORE_DOXYFILE_OUTPUT)/Doxyfile.Co
 
 docs.Core docs.core: $(VBOX_CORE_DOXYFILE_OUTPUT)/docs.Core
 
+#
+# This is a bit odd, but we attach the optional scm check run onto the 'docs' pass
+# so the build box output is less confusing on failure.
+#
+ifeq ($(KBUILD_HOST),$(KBUILD_TARGET))
+ ifdef VBOX_WITH_SCM_CHECK_RUN
+  docs: scm.check.run
+ endif
+ .PHONY: scm.check.run
+ scm.check.run: $(VBOX_PATH_TOOLS)/scm$(HOSTSUFF_EXE)
+	$(REDIRECT) -E VBOX_LOG_FLAGS="disabled" -E VBOX_LOG_DEST="nofile" -- \
+		$(VBOX_PATH_TOOLS)/scm$(HOSTSUFF_EXE) -qvv --check-run $(PATH_ROOT)
+endif
+
 
 #
 # Alias for kmk_time.  Used by both the additions and validation kit build setups.
diff --git a/Version.kmk b/Version.kmk
index aca9e44..5aadfda 100644
--- a/Version.kmk
+++ b/Version.kmk
@@ -19,13 +19,13 @@
 #
 
 # Major version.
-VBOX_VERSION_MAJOR = 5
+VBOX_VERSION_MAJOR  = 5
 # Minor version.
-VBOX_VERSION_MINOR = 2
+VBOX_VERSION_MINOR  = 2
 # 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 = 0
+VBOX_VERSION_BUILD  = 2
 # This can be overridden in LocalConfig.kmk or elsewhere.
 # For the convention, see checks near the end of Config.kmk.
 VBOX_BUILD_PUBLISHER =
diff --git a/configure b/configure
index a5be758..bd177bf 100755
--- a/configure
+++ b/configure
@@ -3,7 +3,7 @@
 # libraries VBox OSE depends on.
 
 #
-# Copyright (C) 2006-2016 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/configure.vbs b/configure.vbs
index d853d73..336730d 100644
--- a/configure.vbs
+++ b/configure.vbs
@@ -9,7 +9,7 @@
 '
 
 '
-' Copyright (C) 2006-2016 Oracle Corporation
+' Copyright (C) 2006-2017 Oracle Corporation
 '
 ' This file is part of VirtualBox Open Source Edition (OSE), as
 ' available from http://www.virtualbox.org. This file is free software;
diff --git a/doc/.scm-settings b/doc/.scm-settings
new file mode 100644
index 0000000..45612ff
--- /dev/null
+++ b/doc/.scm-settings
@@ -0,0 +1,39 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the docs.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+/*.html: --treat-as plaintext
+/*.rtf:  --treat-as binary
+/*.doc:  --treat-as binary
+/*.odt:  --treat-as binary
+/*.ods:  --treat-as binary
+/*.odg:  --treat-as binary
+/*.sxi:  --treat-as binary
+/*.vpp:  --treat-as binary
+
+# Abusing --external-copyright.
+/*.txvpck:                      --treat-as xml --external-copyright --no-convert-eol
+/*.txvStateDiagram20:           --treat-as xml --external-copyright --no-convert-eol
+/*.txvComponentDiagram20:       --treat-as xml --external-copyright --no-convert-eol
+/*.xmi:                         --treat-as xml --external-copyright --no-convert-eol
+/*.tpx:                         --treat-as xml --external-copyright --no-convert-eol
+/*.graphml:                     --treat-as xml --external-copyright --no-convert-eol
+
+/*.iuml:                 --treat-as plaintext --add-action copyright-tick-style
+/Changelog.2*:           --treat-as plaintext
+
+--filter-out-files /Qt/qt4.darwin.patch
+
diff --git a/doc/License-gpl-2.0.rtf b/doc/License-gpl-2.0.rtf
index 800d6de..37c4b89 100644
--- a/doc/License-gpl-2.0.rtf
+++ b/doc/License-gpl-2.0.rtf
@@ -1,394 +1,394 @@
-{\rtf1\ansi\deff1\adeflang1025
-{\fonttbl{\f0\froman\fprq2\fcharset128 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Bitstream Vera Sans;}{\f3\fnil\fprq0\fcharset128 Palatino Linotype;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fswiss\fprq2\fcharset0 Arial;}{\f6\fmodern\fprq1\fcharset0 Bitstream Vera Sans Mono;}{\f7\fmodern\fprq1\fcharset0 Bitstream Vera Sans;}}
-{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
-{\stylesheet{\s1\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\snext1 Normal;}
-{\s2\sb240\sa120\keepn\rtlch\af5\afs28\lang1081\ltrch\dbch\af1\langfe2052\hich\f5\fs28\lang1031\loch\f5\fs28\lang1031\sbasedon1\snext3 Heading;}
-{\s3\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext3 Body Text;}
-{\s4\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon3\snext4 List;}
-{\s5\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\f3\fs24\lang1031\i\loch\f3\fs24\lang1031\i\sbasedon1\snext5 caption;}
-{\s6\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext6 Index;}
-{\s7\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\i\loch\fs24\lang1031\i\sbasedon1\snext7 caption;}
-{\s8\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031\sbasedon1\snext8 Preformatted Text;}
-}
-{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern3200}}\deftab709
-{\*\pgdsctbl
-{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
-{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
-\pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 {\*\bkmkstart __DdeLink__5_501511993}Preliminary notes:{\*\bkmkend }}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1) The majority of code in the VirtualBox Open Source Edition (OSE) is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyrighted by Oracle Corporation. This code is combined with third-party code}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that was originally released under licenses which the Free Software Foundation}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 considers incompatible with the GPL, such as the Apache License 2.0, the OpenSSL}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license, the Mozilla Public License (MPL) and the Slirp license. (Please see the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox User Manual for a complete list of third-party code and their}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 licenses.) As a special exception to the terms and conditions of the GPL listed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 below, Oracle gives you explicit permission to combine its GPL code contained in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox OSE with third-party code under the aforementioned licenses. You may}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copy and distribute such a combination provided that you adhere to the terms and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions of all of the GPL and the licenses of the third-party code; in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 particular, you must include the source code of the entire combination insofar}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 as the GPL requires distribution of source code.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2) The GPL listed below does not bind software which uses VirtualBox services by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 merely linking to VirtualBox libraries so long as all VirtualBox interfaces used}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 by that software are multi-licensed. A VirtualBox interface is deemed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 multi-licensed if it is declared in a VirtualBox header file that is licensed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under both the GPL version 2 (below) *and* the Common Development and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Distribution License Version 1.0 (CDDL), as it comes in the "COPYING.CDDL" file.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In other words, calling such a multi-licensed interface is merely considered}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 normal use of VirtualBox and does not turn the calling code into a derived work}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of VirtualBox. In particular, this applies to code that wants to extend}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox by way of the Extension Pack mechanism declared in the ExtPack.h}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 header file.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3) Whoever creates or distributes a derived work based on VirtualBox OSE is not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 obligated to grant the above exceptions for such a version. The GPL allows for}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 releasing a modified version without the above exception; in addition, Oracle}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 hereby also allows you to release a modified version which carries forward these}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exceptions.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Oracle Corporation}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\*\bkmkstart __DdeLink__0_501511993}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 -------------------------------------------------------}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\*\bkmkend }
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                        }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Version 2, June 1991}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Everyone is permitted to copy and distribute verbatim copies}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of this license document, but changing it is not allowed.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Preamble}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The licenses for most software are designed to take away your}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 freedom to share and change it.  By contrast, the GNU General Public}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License is intended to guarantee your freedom to share and change free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software--to make sure the software is free for all its users.  This}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 General Public License applies to most of the Free Software}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation's software and to any other program whose authors commit to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 using it.  (Some other Free Software Foundation software is covered by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the GNU Lesser General Public License instead.)  You can apply it to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your programs, too.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 When we speak of free software, we are referring to freedom, not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 price.  Our General Public Licenses are designed to make sure that you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 have the freedom to distribute copies of free software (and charge for}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this service if you wish), that you receive source code or can get it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 if you want it, that you can change the software or use pieces of it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 in new free programs; and that you know you can do these things.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To protect your rights, we need to make restrictions that forbid}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anyone to deny you these rights or to ask you to surrender the rights.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These restrictions translate to certain responsibilities for you if you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute copies of the software, or if you modify it.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 For example, if you distribute copies of such a program, whether}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 gratis or for a fee, you must give the recipients all the rights that}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you have.  You must make sure that they, too, receive or can get the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code.  And you must show them these terms so they know their}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 rights.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 We protect your rights with two steps: (1) copyright the software, and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (2) offer you this license which gives you legal permission to copy,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute and/or modify the software.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also, for each author's protection and ours, we want to make certain}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that everyone understands that there is no warranty for this free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software.  If the software is modified by someone else and passed on, we}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 want its recipients to know that what they have is not the original, so}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that any problems introduced by others will not reflect on the original}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 authors' reputations.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Finally, any free program is threatened constantly by software}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents.  We wish to avoid the danger that redistributors of a free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program will individually obtain patent licenses, in effect making the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program proprietary.  To prevent this, we have made it clear that any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patent must be licensed for everyone's free use or not licensed at all.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The precise terms and conditions for copying, distribution and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modification follow.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch    }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 0. This License applies to any program or other work which contains}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a notice placed by the copyright holder saying it may be distributed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under the terms of this General Public License.  The "Program", below,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refers to any such program or work, and a "work based on the Program"}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 means either the Program or any derivative work under copyright law:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that is to say, a work containing the Program or a portion of it,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either verbatim or with modifications and/or translated into another}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 language.  (Hereinafter, translation is included without limitation in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the term "modification".)  Each licensee is addressed as "you".}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Activities other than copying, distribution and modification are not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 covered by this License; they are outside its scope.  The act of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 running the Program is not restricted, and the output from the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 is covered only if its contents constitute a work based on the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program (independent of having been made by running the Program).}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Whether that is true depends on what the Program does.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1. You may copy and distribute verbatim copies of the Program's}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code as you receive it, in any medium, provided that you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conspicuously and appropriately publish on each copy an appropriate}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyright notice and disclaimer of warranty; keep intact all the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notices that refer to this License and to the absence of any warranty;}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and give any other recipients of the Program a copy of this License}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 along with the Program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You may charge a fee for the physical act of transferring a copy, and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you may at your option offer warranty protection in exchange for a fee.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2. You may modify your copy or copies of the Program or any portion}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of it, thus forming a work based on the Program, and copy and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute such modifications or work under the terms of Section 1}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 above, provided that you also meet all of these conditions:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) You must cause the modified files to carry prominent notices}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 stating that you changed the files and the date of any change.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) You must cause any work that you distribute or publish, that in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 whole or in part contains or is derived from the Program or any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 part thereof, to be licensed as a whole at no charge to all third}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties under the terms of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) If the modified program normally reads commands interactively}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when run, you must cause it, when started running for such}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 interactive use in the most ordinary way, to print or display an}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 announcement including an appropriate copyright notice and a}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notice that there is no warranty (or else, saying that you provide}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a warranty) and that users may redistribute the program under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these conditions, and telling the user how to view a copy of this}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License.  (Exception: if the Program itself is interactive but}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 does not normally print such an announcement, your work based on}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program is not required to print an announcement.)}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These requirements apply to the modified work as a whole.  If}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 identifiable sections of that work are not derived from the Program,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and can be reasonably considered independent and separate works in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 themselves, then this License, and its terms, do not apply to those}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 sections when you distribute them as separate works.  But when you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the same sections as part of a whole which is a work based}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 on the Program, the distribution of the whole must be on the terms of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, whose permissions for other licensees extend to the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 entire whole, and thus to each and every part regardless of who wrote it.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Thus, it is not the intent of this section to claim rights or contest}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your rights to work written entirely by you; rather, the intent is to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exercise the right to control the distribution of derivative or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 collective works based on the Program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In addition, mere aggregation of another work not based on the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with the Program (or with a work based on the Program) on a volume of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a storage or distribution medium does not bring the other work under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the scope of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3. You may copy and distribute the Program (or a work based on it,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under Section 2) in object code or executable form under the terms of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Sections 1 and 2 above provided that you also do one of the following:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) Accompany it with the complete corresponding machine-readable}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code, which must be distributed under the terms of Sections}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1 and 2 above on a medium customarily used for software interchange; or,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) Accompany it with a written offer, valid for at least three}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 years, to give any third party, for a charge no more than your}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 cost of physically performing source distribution, a complete}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 machine-readable copy of the corresponding source code, to be}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distributed under the terms of Sections 1 and 2 above on a medium}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 customarily used for software interchange; or,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) Accompany it with the information you received as to the offer}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute corresponding source code.  (This alternative is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 allowed only for noncommercial distribution and only if you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 received the program in object code or executable form with such}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 an offer, in accord with Subsection b above.)}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The source code for a work means the preferred form of the work for}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 making modifications to it.  For an executable work, complete source}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 code means all the source code for all modules it contains, plus any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 associated interface definition files, plus the scripts used to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 control compilation and installation of the executable.  However, as a}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 special exception, the source code distributed need not include}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anything that is normally distributed (in either source or binary}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 form) with the major components (compiler, kernel, and so on) of the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 operating system on which the executable runs, unless that component}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 itself accompanies the executable.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If distribution of executable or object code is made by offering}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy from a designated place, then offering equivalent}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy the source code from the same place counts as}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribution of the source code, even though third parties are not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 compelled to copy the source along with the object code.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 4. You may not copy, modify, sublicense, or distribute the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 except as expressly provided under this License.  Any attempt}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise to copy, modify, sublicense or distribute the Program is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 void, and will automatically terminate your rights under this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 However, parties who have received copies, or rights, from you under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License will not have their licenses terminated so long as such}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties remain in full compliance.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 5. You are not required to accept this License, since you have not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 signed it.  However, nothing else grants you permission to modify or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the Program or its derivative works.  These actions are}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 prohibited by law if you do not accept this License.  Therefore, by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modifying or distributing the Program (or any work based on the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), you indicate your acceptance of this License to do so, and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all its terms and conditions for copying, distributing or modifying}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program or works based on it.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 6. Each time you redistribute the Program (or any work based on the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), the recipient automatically receives a license from the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original licensor to copy, distribute or modify the Program subject to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these terms and conditions.  You may not impose any further}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 restrictions on the recipients' exercise of the rights granted herein.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You are not responsible for enforcing compliance by third parties to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 7. If, as a consequence of a court judgment or allegation of patent}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 infringement or for any other reason (not limited to patent issues),}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions are imposed on you (whether by court order, agreement or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise) that contradict the conditions of this License, they do not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 excuse you from the conditions of this License.  If you cannot}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute so as to satisfy simultaneously your obligations under this}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License and any other pertinent obligations, then as a consequence you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may not distribute the Program at all.  For example, if a patent}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license would not permit royalty-free redistribution of the Program by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all those who receive copies directly or indirectly through you, then}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the only way you could satisfy both it and this License would be to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refrain entirely from distribution of the Program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If any portion of this section is held invalid or unenforceable under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 any particular circumstance, the balance of the section is intended to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 apply and the section as a whole is intended to apply in other}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 circumstances.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 It is not the purpose of this section to induce you to infringe any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents or other property right claims or to contest validity of any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 such claims; this section has the sole purpose of protecting the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 integrity of the free software distribution system, which is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 implemented by public license practices.  Many people have made}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 generous contributions to the wide range of software distributed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 through that system in reliance on consistent application of that}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 system; it is up to the author/donor to decide if he or she is willing}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute software through any other system and a licensee cannot}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 impose that choice.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This section is intended to make thoroughly clear what is believed to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be a consequence of the rest of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 8. If the distribution and/or use of the Program is restricted in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 certain countries either by patents or by copyrighted interfaces, the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original copyright holder who places the Program under this License}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may add an explicit geographical distribution limitation excluding}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 those countries, so that distribution is permitted only in or among}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 countries not thus excluded.  In such case, this License incorporates}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the limitation as if written in the body of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 9. The Free Software Foundation may publish revised and/or new versions}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of the General Public License from time to time.  Such new versions will}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be similar in spirit to the present version, but may differ in detail to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 address new problems or concerns.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Each version is given a distinguishing version number.  If the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 specifies a version number of this License which applies to it and "any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 later version", you have the option of following the terms and conditions}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either of that version or of any later version published by the Free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation.  If the Program does not specify a version number of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, you may choose any version ever published by the Free Software}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 10. If you wish to incorporate parts of the Program into other free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 programs whose distribution conditions are different, write to the author}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to ask for permission.  For software which is copyrighted by the Free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation, write to the Free Software Foundation; we sometimes}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 make exceptions for this.  Our decision will be guided by the two goals}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of preserving the free status of all derivatives of our free software and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of promoting the sharing and reuse of software generally.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 NO WARRANTY}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REPAIR OR CORRECTION.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 POSSIBILITY OF SUCH DAMAGES.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                      }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 END OF TERMS AND CONDITIONS}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 How to Apply These Terms to Your New Programs}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If you develop a new program, and you want it to be of the greatest}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 possible use to the public, the best way to achieve this is to make it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 free software which everyone can redistribute and change under these terms.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To do so, attach the following notices to the program.  It is safest}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to attach them to the start of each source file to most effectively}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 convey the exclusion of warranty; and each file should have at least}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the "copyright" line and a pointer to where the full notice is found.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <one line to give the program's name and a brief idea of what it does.>}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) <year>  <name of author>}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is free software; you can redistribute it and/or modify}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 it under the terms of the GNU General Public License as published by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Free Software Foundation; either version 2 of the License, or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (at your option) any later version.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is distributed in the hope that it will be useful,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU General Public License for more details.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should have received a copy of the GNU General Public License along}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with this program; if not, write to the Free Software Foundation, Inc.,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also add information on how to contact you by electronic and paper mail.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If the program is interactive, make it output a short notice like this}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when it starts in an interactive mode:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision version 69, Copyright (C) year name of author}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This is free software, and you are welcome to redistribute it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under certain conditions; type `show c' for details.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The hypothetical commands `show w' and `show c' should show the appropriate}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parts of the General Public License.  Of course, the commands you use may}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be called something other than `show w' and `show c'; they could even be}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 mouse-clicks or menu items--whatever suits your program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should also get your employer (if you work as a programmer) or your}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 school, if any, to sign a "copyright disclaimer" for the program, if}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 necessary.  Here is a sample; alter the names:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright interest in the program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 `Gnomovision' (which makes passes at compilers) written by James Hacker.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <signature of Ty Coon>, 1 April 1989}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Ty Coon, President of Vice}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This General Public License does not permit incorporating your program into}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 proprietary programs.  If your program is a subroutine library, you may}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 consider it more useful to permit linking proprietary applications with the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 library.  If this is what you want to do, use the GNU Lesser General}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Public License instead of this License.}
+{\rtf1\ansi\deff1\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset128 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Bitstream Vera Sans;}{\f3\fnil\fprq0\fcharset128 Palatino Linotype;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fswiss\fprq2\fcharset0 Arial;}{\f6\fmodern\fprq1\fcharset0 Bitstream Vera Sans Mono;}{\f7\fmodern\fprq1\fcharset0 Bitstream Vera Sans;}}
+{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
+{\stylesheet{\s1\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\snext1 Normal;}
+{\s2\sb240\sa120\keepn\rtlch\af5\afs28\lang1081\ltrch\dbch\af1\langfe2052\hich\f5\fs28\lang1031\loch\f5\fs28\lang1031\sbasedon1\snext3 Heading;}
+{\s3\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext3 Body Text;}
+{\s4\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon3\snext4 List;}
+{\s5\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\f3\fs24\lang1031\i\loch\f3\fs24\lang1031\i\sbasedon1\snext5 caption;}
+{\s6\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext6 Index;}
+{\s7\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\i\loch\fs24\lang1031\i\sbasedon1\snext7 caption;}
+{\s8\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031\sbasedon1\snext8 Preformatted Text;}
+}
+{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern3200}}\deftab709
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
+{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+\pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 {\*\bkmkstart __DdeLink__5_501511993}Preliminary notes:{\*\bkmkend }}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1) The majority of code in the VirtualBox Open Source Edition (OSE) is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyrighted by Oracle Corporation. This code is combined with third-party code}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that was originally released under licenses which the Free Software Foundation}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 considers incompatible with the GPL, such as the Apache License 2.0, the OpenSSL}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license, the Mozilla Public License (MPL) and the Slirp license. (Please see the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox User Manual for a complete list of third-party code and their}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 licenses.) As a special exception to the terms and conditions of the GPL listed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 below, Oracle gives you explicit permission to combine its GPL code contained in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox OSE with third-party code under the aforementioned licenses. You may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copy and distribute such a combination provided that you adhere to the terms and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions of all of the GPL and the licenses of the third-party code; in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 particular, you must include the source code of the entire combination insofar}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 as the GPL requires distribution of source code.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2) The GPL listed below does not bind software which uses VirtualBox services by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 merely linking to VirtualBox libraries so long as all VirtualBox interfaces used}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 by that software are multi-licensed. A VirtualBox interface is deemed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 multi-licensed if it is declared in a VirtualBox header file that is licensed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under both the GPL version 2 (below) *and* the Common Development and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Distribution License Version 1.0 (CDDL), as it comes in the "COPYING.CDDL" file.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In other words, calling such a multi-licensed interface is merely considered}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 normal use of VirtualBox and does not turn the calling code into a derived work}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of VirtualBox. In particular, this applies to code that wants to extend}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 VirtualBox by way of the Extension Pack mechanism declared in the ExtPack.h}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 header file.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3) Whoever creates or distributes a derived work based on VirtualBox OSE is not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 obligated to grant the above exceptions for such a version. The GPL allows for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 releasing a modified version without the above exception; in addition, Oracle}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 hereby also allows you to release a modified version which carries forward these}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exceptions.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Oracle Corporation}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\*\bkmkstart __DdeLink__0_501511993}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 -------------------------------------------------------}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\*\bkmkend }
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                        }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Version 2, June 1991}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Everyone is permitted to copy and distribute verbatim copies}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of this license document, but changing it is not allowed.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Preamble}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The licenses for most software are designed to take away your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 freedom to share and change it.  By contrast, the GNU General Public}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License is intended to guarantee your freedom to share and change free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software--to make sure the software is free for all its users.  This}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 General Public License applies to most of the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation's software and to any other program whose authors commit to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 using it.  (Some other Free Software Foundation software is covered by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the GNU Lesser General Public License instead.)  You can apply it to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your programs, too.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 When we speak of free software, we are referring to freedom, not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 price.  Our General Public Licenses are designed to make sure that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 have the freedom to distribute copies of free software (and charge for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this service if you wish), that you receive source code or can get it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 if you want it, that you can change the software or use pieces of it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 in new free programs; and that you know you can do these things.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To protect your rights, we need to make restrictions that forbid}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anyone to deny you these rights or to ask you to surrender the rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These restrictions translate to certain responsibilities for you if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute copies of the software, or if you modify it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 For example, if you distribute copies of such a program, whether}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 gratis or for a fee, you must give the recipients all the rights that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you have.  You must make sure that they, too, receive or can get the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code.  And you must show them these terms so they know their}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 We protect your rights with two steps: (1) copyright the software, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (2) offer you this license which gives you legal permission to copy,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute and/or modify the software.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also, for each author's protection and ours, we want to make certain}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that everyone understands that there is no warranty for this free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software.  If the software is modified by someone else and passed on, we}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 want its recipients to know that what they have is not the original, so}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that any problems introduced by others will not reflect on the original}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 authors' reputations.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Finally, any free program is threatened constantly by software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents.  We wish to avoid the danger that redistributors of a free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program will individually obtain patent licenses, in effect making the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program proprietary.  To prevent this, we have made it clear that any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patent must be licensed for everyone's free use or not licensed at all.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The precise terms and conditions for copying, distribution and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modification follow.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch    }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 0. This License applies to any program or other work which contains}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a notice placed by the copyright holder saying it may be distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under the terms of this General Public License.  The "Program", below,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refers to any such program or work, and a "work based on the Program"}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 means either the Program or any derivative work under copyright law:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that is to say, a work containing the Program or a portion of it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either verbatim or with modifications and/or translated into another}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 language.  (Hereinafter, translation is included without limitation in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the term "modification".)  Each licensee is addressed as "you".}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Activities other than copying, distribution and modification are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 covered by this License; they are outside its scope.  The act of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 running the Program is not restricted, and the output from the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 is covered only if its contents constitute a work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program (independent of having been made by running the Program).}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Whether that is true depends on what the Program does.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1. You may copy and distribute verbatim copies of the Program's}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code as you receive it, in any medium, provided that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conspicuously and appropriately publish on each copy an appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyright notice and disclaimer of warranty; keep intact all the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notices that refer to this License and to the absence of any warranty;}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and give any other recipients of the Program a copy of this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 along with the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You may charge a fee for the physical act of transferring a copy, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you may at your option offer warranty protection in exchange for a fee.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2. You may modify your copy or copies of the Program or any portion}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of it, thus forming a work based on the Program, and copy and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute such modifications or work under the terms of Section 1}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 above, provided that you also meet all of these conditions:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) You must cause the modified files to carry prominent notices}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 stating that you changed the files and the date of any change.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) You must cause any work that you distribute or publish, that in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 whole or in part contains or is derived from the Program or any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 part thereof, to be licensed as a whole at no charge to all third}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties under the terms of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) If the modified program normally reads commands interactively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when run, you must cause it, when started running for such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 interactive use in the most ordinary way, to print or display an}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 announcement including an appropriate copyright notice and a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notice that there is no warranty (or else, saying that you provide}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a warranty) and that users may redistribute the program under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these conditions, and telling the user how to view a copy of this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License.  (Exception: if the Program itself is interactive but}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 does not normally print such an announcement, your work based on}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program is not required to print an announcement.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These requirements apply to the modified work as a whole.  If}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 identifiable sections of that work are not derived from the Program,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and can be reasonably considered independent and separate works in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 themselves, then this License, and its terms, do not apply to those}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 sections when you distribute them as separate works.  But when you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the same sections as part of a whole which is a work based}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 on the Program, the distribution of the whole must be on the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, whose permissions for other licensees extend to the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 entire whole, and thus to each and every part regardless of who wrote it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Thus, it is not the intent of this section to claim rights or contest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your rights to work written entirely by you; rather, the intent is to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exercise the right to control the distribution of derivative or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 collective works based on the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In addition, mere aggregation of another work not based on the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with the Program (or with a work based on the Program) on a volume of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a storage or distribution medium does not bring the other work under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the scope of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3. You may copy and distribute the Program (or a work based on it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under Section 2) in object code or executable form under the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Sections 1 and 2 above provided that you also do one of the following:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) Accompany it with the complete corresponding machine-readable}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code, which must be distributed under the terms of Sections}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1 and 2 above on a medium customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) Accompany it with a written offer, valid for at least three}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 years, to give any third party, for a charge no more than your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 cost of physically performing source distribution, a complete}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 machine-readable copy of the corresponding source code, to be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distributed under the terms of Sections 1 and 2 above on a medium}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) Accompany it with the information you received as to the offer}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute corresponding source code.  (This alternative is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 allowed only for noncommercial distribution and only if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 received the program in object code or executable form with such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 an offer, in accord with Subsection b above.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The source code for a work means the preferred form of the work for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 making modifications to it.  For an executable work, complete source}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 code means all the source code for all modules it contains, plus any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 associated interface definition files, plus the scripts used to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 control compilation and installation of the executable.  However, as a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 special exception, the source code distributed need not include}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anything that is normally distributed (in either source or binary}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 form) with the major components (compiler, kernel, and so on) of the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 operating system on which the executable runs, unless that component}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 itself accompanies the executable.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If distribution of executable or object code is made by offering}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy from a designated place, then offering equivalent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy the source code from the same place counts as}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribution of the source code, even though third parties are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 compelled to copy the source along with the object code.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 4. You may not copy, modify, sublicense, or distribute the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 except as expressly provided under this License.  Any attempt}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise to copy, modify, sublicense or distribute the Program is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 void, and will automatically terminate your rights under this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 However, parties who have received copies, or rights, from you under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License will not have their licenses terminated so long as such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties remain in full compliance.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 5. You are not required to accept this License, since you have not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 signed it.  However, nothing else grants you permission to modify or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the Program or its derivative works.  These actions are}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 prohibited by law if you do not accept this License.  Therefore, by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modifying or distributing the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), you indicate your acceptance of this License to do so, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all its terms and conditions for copying, distributing or modifying}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program or works based on it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 6. Each time you redistribute the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), the recipient automatically receives a license from the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original licensor to copy, distribute or modify the Program subject to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these terms and conditions.  You may not impose any further}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 restrictions on the recipients' exercise of the rights granted herein.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You are not responsible for enforcing compliance by third parties to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 7. If, as a consequence of a court judgment or allegation of patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 infringement or for any other reason (not limited to patent issues),}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions are imposed on you (whether by court order, agreement or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise) that contradict the conditions of this License, they do not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 excuse you from the conditions of this License.  If you cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute so as to satisfy simultaneously your obligations under this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License and any other pertinent obligations, then as a consequence you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may not distribute the Program at all.  For example, if a patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license would not permit royalty-free redistribution of the Program by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all those who receive copies directly or indirectly through you, then}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the only way you could satisfy both it and this License would be to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refrain entirely from distribution of the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If any portion of this section is held invalid or unenforceable under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 any particular circumstance, the balance of the section is intended to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 apply and the section as a whole is intended to apply in other}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 circumstances.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 It is not the purpose of this section to induce you to infringe any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents or other property right claims or to contest validity of any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 such claims; this section has the sole purpose of protecting the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 integrity of the free software distribution system, which is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 implemented by public license practices.  Many people have made}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 generous contributions to the wide range of software distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 through that system in reliance on consistent application of that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 system; it is up to the author/donor to decide if he or she is willing}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute software through any other system and a licensee cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 impose that choice.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This section is intended to make thoroughly clear what is believed to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be a consequence of the rest of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 8. If the distribution and/or use of the Program is restricted in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 certain countries either by patents or by copyrighted interfaces, the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original copyright holder who places the Program under this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may add an explicit geographical distribution limitation excluding}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 those countries, so that distribution is permitted only in or among}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 countries not thus excluded.  In such case, this License incorporates}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the limitation as if written in the body of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 9. The Free Software Foundation may publish revised and/or new versions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of the General Public License from time to time.  Such new versions will}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be similar in spirit to the present version, but may differ in detail to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 address new problems or concerns.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Each version is given a distinguishing version number.  If the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 specifies a version number of this License which applies to it and "any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 later version", you have the option of following the terms and conditions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either of that version or of any later version published by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation.  If the Program does not specify a version number of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, you may choose any version ever published by the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 10. If you wish to incorporate parts of the Program into other free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 programs whose distribution conditions are different, write to the author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to ask for permission.  For software which is copyrighted by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation, write to the Free Software Foundation; we sometimes}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 make exceptions for this.  Our decision will be guided by the two goals}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of preserving the free status of all derivatives of our free software and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of promoting the sharing and reuse of software generally.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REPAIR OR CORRECTION.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 POSSIBILITY OF SUCH DAMAGES.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                      }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 END OF TERMS AND CONDITIONS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 How to Apply These Terms to Your New Programs}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If you develop a new program, and you want it to be of the greatest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 possible use to the public, the best way to achieve this is to make it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 free software which everyone can redistribute and change under these terms.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To do so, attach the following notices to the program.  It is safest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to attach them to the start of each source file to most effectively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 convey the exclusion of warranty; and each file should have at least}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the "copyright" line and a pointer to where the full notice is found.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <one line to give the program's name and a brief idea of what it does.>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) <year>  <name of author>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is free software; you can redistribute it and/or modify}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 it under the terms of the GNU General Public License as published by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Free Software Foundation; either version 2 of the License, or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (at your option) any later version.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is distributed in the hope that it will be useful,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU General Public License for more details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should have received a copy of the GNU General Public License along}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with this program; if not, write to the Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also add information on how to contact you by electronic and paper mail.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If the program is interactive, make it output a short notice like this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when it starts in an interactive mode:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision version 69, Copyright (C) year name of author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This is free software, and you are welcome to redistribute it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under certain conditions; type `show c' for details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The hypothetical commands `show w' and `show c' should show the appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parts of the General Public License.  Of course, the commands you use may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be called something other than `show w' and `show c'; they could even be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 mouse-clicks or menu items--whatever suits your program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should also get your employer (if you work as a programmer) or your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 school, if any, to sign a "copyright disclaimer" for the program, if}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 necessary.  Here is a sample; alter the names:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright interest in the program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 `Gnomovision' (which makes passes at compilers) written by James Hacker.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <signature of Ty Coon>, 1 April 1989}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Ty Coon, President of Vice}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This General Public License does not permit incorporating your program into}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 proprietary programs.  If your program is a subroutine library, you may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 consider it more useful to permit linking proprietary applications with the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 library.  If this is what you want to do, use the GNU Lesser General}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Public License instead of this License.}
 \par }
\ No newline at end of file
diff --git a/doc/License-gpl-2.rtf b/doc/License-gpl-2.rtf
index a88a409..aef99d3 100644
--- a/doc/License-gpl-2.rtf
+++ b/doc/License-gpl-2.rtf
@@ -1,356 +1,356 @@
-{\rtf1\ansi\deff1\adeflang1025
-{\fonttbl{\f0\froman\fprq2\fcharset128 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Bitstream Vera Sans;}{\f3\fnil\fprq0\fcharset128 Palatino Linotype;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fswiss\fprq2\fcharset0 Arial;}{\f6\fmodern\fprq1\fcharset0 Bitstream Vera Sans Mono;}{\f7\fmodern\fprq1\fcharset0 Bitstream Vera Sans;}}
-{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
-{\stylesheet{\s1\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\snext1 Normal;}
-{\s2\sb240\sa120\keepn\rtlch\af5\afs28\lang1081\ltrch\dbch\af1\langfe2052\hich\f5\fs28\lang1031\loch\f5\fs28\lang1031\sbasedon1\snext3 Heading;}
-{\s3\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext3 Body Text;}
-{\s4\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon3\snext4 List;}
-{\s5\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\f3\fs24\lang1031\i\loch\f3\fs24\lang1031\i\sbasedon1\snext5 caption;}
-{\s6\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext6 Index;}
-{\s7\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\i\loch\fs24\lang1031\i\sbasedon1\snext7 caption;}
-{\s8\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031\sbasedon1\snext8 Preformatted Text;}
-}
-{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern3200}}\deftab709
-{\*\pgdsctbl
-{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
-{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
-\pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                        }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Version 2, June 1991}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Everyone is permitted to copy and distribute verbatim copies}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of this license document, but changing it is not allowed.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Preamble}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The licenses for most software are designed to take away your}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 freedom to share and change it.  By contrast, the GNU General Public}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License is intended to guarantee your freedom to share and change free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software--to make sure the software is free for all its users.  This}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 General Public License applies to most of the Free Software}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation's software and to any other program whose authors commit to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 using it.  (Some other Free Software Foundation software is covered by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the GNU Lesser General Public License instead.)  You can apply it to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your programs, too.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 When we speak of free software, we are referring to freedom, not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 price.  Our General Public Licenses are designed to make sure that you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 have the freedom to distribute copies of free software (and charge for}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this service if you wish), that you receive source code or can get it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 if you want it, that you can change the software or use pieces of it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 in new free programs; and that you know you can do these things.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To protect your rights, we need to make restrictions that forbid}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anyone to deny you these rights or to ask you to surrender the rights.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These restrictions translate to certain responsibilities for you if you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute copies of the software, or if you modify it.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 For example, if you distribute copies of such a program, whether}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 gratis or for a fee, you must give the recipients all the rights that}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you have.  You must make sure that they, too, receive or can get the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code.  And you must show them these terms so they know their}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 rights.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 We protect your rights with two steps: (1) copyright the software, and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (2) offer you this license which gives you legal permission to copy,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute and/or modify the software.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also, for each author's protection and ours, we want to make certain}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that everyone understands that there is no warranty for this free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software.  If the software is modified by someone else and passed on, we}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 want its recipients to know that what they have is not the original, so}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that any problems introduced by others will not reflect on the original}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 authors' reputations.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Finally, any free program is threatened constantly by software}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents.  We wish to avoid the danger that redistributors of a free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program will individually obtain patent licenses, in effect making the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program proprietary.  To prevent this, we have made it clear that any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patent must be licensed for everyone's free use or not licensed at all.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The precise terms and conditions for copying, distribution and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modification follow.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch    }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 0. This License applies to any program or other work which contains}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a notice placed by the copyright holder saying it may be distributed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under the terms of this General Public License.  The "Program", below,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refers to any such program or work, and a "work based on the Program"}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 means either the Program or any derivative work under copyright law:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that is to say, a work containing the Program or a portion of it,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either verbatim or with modifications and/or translated into another}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 language.  (Hereinafter, translation is included without limitation in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the term "modification".)  Each licensee is addressed as "you".}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Activities other than copying, distribution and modification are not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 covered by this License; they are outside its scope.  The act of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 running the Program is not restricted, and the output from the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 is covered only if its contents constitute a work based on the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program (independent of having been made by running the Program).}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Whether that is true depends on what the Program does.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1. You may copy and distribute verbatim copies of the Program's}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code as you receive it, in any medium, provided that you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conspicuously and appropriately publish on each copy an appropriate}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyright notice and disclaimer of warranty; keep intact all the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notices that refer to this License and to the absence of any warranty;}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and give any other recipients of the Program a copy of this License}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 along with the Program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You may charge a fee for the physical act of transferring a copy, and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you may at your option offer warranty protection in exchange for a fee.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2. You may modify your copy or copies of the Program or any portion}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of it, thus forming a work based on the Program, and copy and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute such modifications or work under the terms of Section 1}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 above, provided that you also meet all of these conditions:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) You must cause the modified files to carry prominent notices}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 stating that you changed the files and the date of any change.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) You must cause any work that you distribute or publish, that in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 whole or in part contains or is derived from the Program or any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 part thereof, to be licensed as a whole at no charge to all third}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties under the terms of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) If the modified program normally reads commands interactively}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when run, you must cause it, when started running for such}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 interactive use in the most ordinary way, to print or display an}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 announcement including an appropriate copyright notice and a}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notice that there is no warranty (or else, saying that you provide}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a warranty) and that users may redistribute the program under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these conditions, and telling the user how to view a copy of this}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License.  (Exception: if the Program itself is interactive but}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 does not normally print such an announcement, your work based on}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program is not required to print an announcement.)}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These requirements apply to the modified work as a whole.  If}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 identifiable sections of that work are not derived from the Program,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and can be reasonably considered independent and separate works in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 themselves, then this License, and its terms, do not apply to those}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 sections when you distribute them as separate works.  But when you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the same sections as part of a whole which is a work based}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 on the Program, the distribution of the whole must be on the terms of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, whose permissions for other licensees extend to the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 entire whole, and thus to each and every part regardless of who wrote it.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Thus, it is not the intent of this section to claim rights or contest}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your rights to work written entirely by you; rather, the intent is to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exercise the right to control the distribution of derivative or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 collective works based on the Program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In addition, mere aggregation of another work not based on the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with the Program (or with a work based on the Program) on a volume of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a storage or distribution medium does not bring the other work under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the scope of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3. You may copy and distribute the Program (or a work based on it,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under Section 2) in object code or executable form under the terms of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Sections 1 and 2 above provided that you also do one of the following:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) Accompany it with the complete corresponding machine-readable}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code, which must be distributed under the terms of Sections}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1 and 2 above on a medium customarily used for software interchange; or,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) Accompany it with a written offer, valid for at least three}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 years, to give any third party, for a charge no more than your}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 cost of physically performing source distribution, a complete}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 machine-readable copy of the corresponding source code, to be}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distributed under the terms of Sections 1 and 2 above on a medium}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 customarily used for software interchange; or,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) Accompany it with the information you received as to the offer}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute corresponding source code.  (This alternative is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 allowed only for noncommercial distribution and only if you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 received the program in object code or executable form with such}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 an offer, in accord with Subsection b above.)}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The source code for a work means the preferred form of the work for}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 making modifications to it.  For an executable work, complete source}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 code means all the source code for all modules it contains, plus any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 associated interface definition files, plus the scripts used to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 control compilation and installation of the executable.  However, as a}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 special exception, the source code distributed need not include}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anything that is normally distributed (in either source or binary}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 form) with the major components (compiler, kernel, and so on) of the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 operating system on which the executable runs, unless that component}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 itself accompanies the executable.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If distribution of executable or object code is made by offering}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy from a designated place, then offering equivalent}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy the source code from the same place counts as}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribution of the source code, even though third parties are not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 compelled to copy the source along with the object code.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 4. You may not copy, modify, sublicense, or distribute the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 except as expressly provided under this License.  Any attempt}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise to copy, modify, sublicense or distribute the Program is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 void, and will automatically terminate your rights under this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 However, parties who have received copies, or rights, from you under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License will not have their licenses terminated so long as such}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties remain in full compliance.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 5. You are not required to accept this License, since you have not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 signed it.  However, nothing else grants you permission to modify or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the Program or its derivative works.  These actions are}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 prohibited by law if you do not accept this License.  Therefore, by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modifying or distributing the Program (or any work based on the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), you indicate your acceptance of this License to do so, and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all its terms and conditions for copying, distributing or modifying}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program or works based on it.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 6. Each time you redistribute the Program (or any work based on the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), the recipient automatically receives a license from the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original licensor to copy, distribute or modify the Program subject to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these terms and conditions.  You may not impose any further}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 restrictions on the recipients' exercise of the rights granted herein.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You are not responsible for enforcing compliance by third parties to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 7. If, as a consequence of a court judgment or allegation of patent}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 infringement or for any other reason (not limited to patent issues),}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions are imposed on you (whether by court order, agreement or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise) that contradict the conditions of this License, they do not}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 excuse you from the conditions of this License.  If you cannot}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute so as to satisfy simultaneously your obligations under this}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License and any other pertinent obligations, then as a consequence you}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may not distribute the Program at all.  For example, if a patent}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license would not permit royalty-free redistribution of the Program by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all those who receive copies directly or indirectly through you, then}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the only way you could satisfy both it and this License would be to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refrain entirely from distribution of the Program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If any portion of this section is held invalid or unenforceable under}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 any particular circumstance, the balance of the section is intended to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 apply and the section as a whole is intended to apply in other}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 circumstances.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 It is not the purpose of this section to induce you to infringe any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents or other property right claims or to contest validity of any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 such claims; this section has the sole purpose of protecting the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 integrity of the free software distribution system, which is}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 implemented by public license practices.  Many people have made}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 generous contributions to the wide range of software distributed}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 through that system in reliance on consistent application of that}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 system; it is up to the author/donor to decide if he or she is willing}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute software through any other system and a licensee cannot}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 impose that choice.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This section is intended to make thoroughly clear what is believed to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be a consequence of the rest of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 8. If the distribution and/or use of the Program is restricted in}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 certain countries either by patents or by copyrighted interfaces, the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original copyright holder who places the Program under this License}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may add an explicit geographical distribution limitation excluding}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 those countries, so that distribution is permitted only in or among}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 countries not thus excluded.  In such case, this License incorporates}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the limitation as if written in the body of this License.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 9. The Free Software Foundation may publish revised and/or new versions}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of the General Public License from time to time.  Such new versions will}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be similar in spirit to the present version, but may differ in detail to}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 address new problems or concerns.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Each version is given a distinguishing version number.  If the Program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 specifies a version number of this License which applies to it and "any}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 later version", you have the option of following the terms and conditions}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either of that version or of any later version published by the Free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation.  If the Program does not specify a version number of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, you may choose any version ever published by the Free Software}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 10. If you wish to incorporate parts of the Program into other free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 programs whose distribution conditions are different, write to the author}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to ask for permission.  For software which is copyrighted by the Free}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation, write to the Free Software Foundation; we sometimes}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 make exceptions for this.  Our decision will be guided by the two goals}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of preserving the free status of all derivatives of our free software and}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of promoting the sharing and reuse of software generally.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 NO WARRANTY}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REPAIR OR CORRECTION.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 POSSIBILITY OF SUCH DAMAGES.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                      }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 END OF TERMS AND CONDITIONS}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 How to Apply These Terms to Your New Programs}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If you develop a new program, and you want it to be of the greatest}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 possible use to the public, the best way to achieve this is to make it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 free software which everyone can redistribute and change under these terms.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To do so, attach the following notices to the program.  It is safest}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to attach them to the start of each source file to most effectively}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 convey the exclusion of warranty; and each file should have at least}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the "copyright" line and a pointer to where the full notice is found.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <one line to give the program's name and a brief idea of what it does.>}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) <year>  <name of author>}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is free software; you can redistribute it and/or modify}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 it under the terms of the GNU General Public License as published by}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Free Software Foundation; either version 2 of the License, or}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (at your option) any later version.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is distributed in the hope that it will be useful,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU General Public License for more details.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should have received a copy of the GNU General Public License along}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with this program; if not, write to the Free Software Foundation, Inc.,}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also add information on how to contact you by electronic and paper mail.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If the program is interactive, make it output a short notice like this}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when it starts in an interactive mode:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision version 69, Copyright (C) year name of author}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This is free software, and you are welcome to redistribute it}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under certain conditions; type `show c' for details.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The hypothetical commands `show w' and `show c' should show the appropriate}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parts of the General Public License.  Of course, the commands you use may}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be called something other than `show w' and `show c'; they could even be}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 mouse-clicks or menu items--whatever suits your program.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should also get your employer (if you work as a programmer) or your}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 school, if any, to sign a "copyright disclaimer" for the program, if}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 necessary.  Here is a sample; alter the names:}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright interest in the program}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 `Gnomovision' (which makes passes at compilers) written by James Hacker.}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <signature of Ty Coon>, 1 April 1989}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Ty Coon, President of Vice}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This General Public License does not permit incorporating your program into}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 proprietary programs.  If your program is a subroutine library, you may}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 consider it more useful to permit linking proprietary applications with the}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 library.  If this is what you want to do, use the GNU Lesser General}
-\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Public License instead of this License.}
-\par }
+{\rtf1\ansi\deff1\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset128 Times New Roman;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Bitstream Vera Sans;}{\f3\fnil\fprq0\fcharset128 Palatino Linotype;}{\f4\froman\fprq2\fcharset0 Times New Roman;}{\f5\fswiss\fprq2\fcharset0 Arial;}{\f6\fmodern\fprq1\fcharset0 Bitstream Vera Sans Mono;}{\f7\fmodern\fprq1\fcharset0 Bitstream Vera Sans;}}
+{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
+{\stylesheet{\s1\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\snext1 Normal;}
+{\s2\sb240\sa120\keepn\rtlch\af5\afs28\lang1081\ltrch\dbch\af1\langfe2052\hich\f5\fs28\lang1031\loch\f5\fs28\lang1031\sbasedon1\snext3 Heading;}
+{\s3\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext3 Body Text;}
+{\s4\sa120\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon3\snext4 List;}
+{\s5\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\f3\fs24\lang1031\i\loch\f3\fs24\lang1031\i\sbasedon1\snext5 caption;}
+{\s6\rtlch\afs24\lang1081\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\loch\fs24\lang1031\sbasedon1\snext6 Index;}
+{\s7\sb120\sa120\rtlch\afs24\lang1081\ai\ltrch\dbch\af2\langfe2052\hich\fs24\lang1031\i\loch\fs24\lang1031\i\sbasedon1\snext7 caption;}
+{\s8\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031\sbasedon1\snext8 Preformatted Text;}
+}
+{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment StarWriter}{\vern3200}}\deftab709
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse195\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}}
+{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+\pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                        }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Version 2, June 1991}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Everyone is permitted to copy and distribute verbatim copies}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch  }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of this license document, but changing it is not allowed.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Preamble}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The licenses for most software are designed to take away your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 freedom to share and change it.  By contrast, the GNU General Public}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License is intended to guarantee your freedom to share and change free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software--to make sure the software is free for all its users.  This}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 General Public License applies to most of the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation's software and to any other program whose authors commit to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 using it.  (Some other Free Software Foundation software is covered by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the GNU Lesser General Public License instead.)  You can apply it to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your programs, too.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 When we speak of free software, we are referring to freedom, not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 price.  Our General Public Licenses are designed to make sure that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 have the freedom to distribute copies of free software (and charge for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this service if you wish), that you receive source code or can get it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 if you want it, that you can change the software or use pieces of it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 in new free programs; and that you know you can do these things.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To protect your rights, we need to make restrictions that forbid}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anyone to deny you these rights or to ask you to surrender the rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These restrictions translate to certain responsibilities for you if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute copies of the software, or if you modify it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 For example, if you distribute copies of such a program, whether}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 gratis or for a fee, you must give the recipients all the rights that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you have.  You must make sure that they, too, receive or can get the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code.  And you must show them these terms so they know their}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 rights.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 We protect your rights with two steps: (1) copyright the software, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (2) offer you this license which gives you legal permission to copy,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute and/or modify the software.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also, for each author's protection and ours, we want to make certain}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that everyone understands that there is no warranty for this free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 software.  If the software is modified by someone else and passed on, we}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 want its recipients to know that what they have is not the original, so}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that any problems introduced by others will not reflect on the original}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 authors' reputations.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Finally, any free program is threatened constantly by software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents.  We wish to avoid the danger that redistributors of a free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program will individually obtain patent licenses, in effect making the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 program proprietary.  To prevent this, we have made it clear that any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patent must be licensed for everyone's free use or not licensed at all.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The precise terms and conditions for copying, distribution and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modification follow.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU GENERAL PUBLIC LICENSE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch    }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 0. This License applies to any program or other work which contains}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a notice placed by the copyright holder saying it may be distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under the terms of this General Public License.  The "Program", below,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refers to any such program or work, and a "work based on the Program"}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 means either the Program or any derivative work under copyright law:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 that is to say, a work containing the Program or a portion of it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either verbatim or with modifications and/or translated into another}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 language.  (Hereinafter, translation is included without limitation in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the term "modification".)  Each licensee is addressed as "you".}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Activities other than copying, distribution and modification are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 covered by this License; they are outside its scope.  The act of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 running the Program is not restricted, and the output from the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 is covered only if its contents constitute a work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program (independent of having been made by running the Program).}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Whether that is true depends on what the Program does.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1. You may copy and distribute verbatim copies of the Program's}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code as you receive it, in any medium, provided that you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conspicuously and appropriately publish on each copy an appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 copyright notice and disclaimer of warranty; keep intact all the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notices that refer to this License and to the absence of any warranty;}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and give any other recipients of the Program a copy of this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 along with the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You may charge a fee for the physical act of transferring a copy, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 you may at your option offer warranty protection in exchange for a fee.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 2. You may modify your copy or copies of the Program or any portion}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of it, thus forming a work based on the Program, and copy and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute such modifications or work under the terms of Section 1}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 above, provided that you also meet all of these conditions:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) You must cause the modified files to carry prominent notices}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 stating that you changed the files and the date of any change.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) You must cause any work that you distribute or publish, that in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 whole or in part contains or is derived from the Program or any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 part thereof, to be licensed as a whole at no charge to all third}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties under the terms of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) If the modified program normally reads commands interactively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when run, you must cause it, when started running for such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 interactive use in the most ordinary way, to print or display an}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 announcement including an appropriate copyright notice and a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 notice that there is no warranty (or else, saying that you provide}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a warranty) and that users may redistribute the program under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these conditions, and telling the user how to view a copy of this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License.  (Exception: if the Program itself is interactive but}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 does not normally print such an announcement, your work based on}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program is not required to print an announcement.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 These requirements apply to the modified work as a whole.  If}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 identifiable sections of that work are not derived from the Program,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 and can be reasonably considered independent and separate works in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 themselves, then this License, and its terms, do not apply to those}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 sections when you distribute them as separate works.  But when you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the same sections as part of a whole which is a work based}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 on the Program, the distribution of the whole must be on the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, whose permissions for other licensees extend to the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 entire whole, and thus to each and every part regardless of who wrote it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Thus, it is not the intent of this section to claim rights or contest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 your rights to work written entirely by you; rather, the intent is to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 exercise the right to control the distribution of derivative or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 collective works based on the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 In addition, mere aggregation of another work not based on the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with the Program (or with a work based on the Program) on a volume of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a storage or distribution medium does not bring the other work under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the scope of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 3. You may copy and distribute the Program (or a work based on it,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under Section 2) in object code or executable form under the terms of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Sections 1 and 2 above provided that you also do one of the following:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 a) Accompany it with the complete corresponding machine-readable}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 source code, which must be distributed under the terms of Sections}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 1 and 2 above on a medium customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 b) Accompany it with a written offer, valid for at least three}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 years, to give any third party, for a charge no more than your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 cost of physically performing source distribution, a complete}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 machine-readable copy of the corresponding source code, to be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distributed under the terms of Sections 1 and 2 above on a medium}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 customarily used for software interchange; or,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 c) Accompany it with the information you received as to the offer}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute corresponding source code.  (This alternative is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 allowed only for noncommercial distribution and only if you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 received the program in object code or executable form with such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 an offer, in accord with Subsection b above.)}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The source code for a work means the preferred form of the work for}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 making modifications to it.  For an executable work, complete source}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 code means all the source code for all modules it contains, plus any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 associated interface definition files, plus the scripts used to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 control compilation and installation of the executable.  However, as a}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 special exception, the source code distributed need not include}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 anything that is normally distributed (in either source or binary}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 form) with the major components (compiler, kernel, and so on) of the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 operating system on which the executable runs, unless that component}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 itself accompanies the executable.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If distribution of executable or object code is made by offering}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy from a designated place, then offering equivalent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 access to copy the source code from the same place counts as}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribution of the source code, even though third parties are not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 compelled to copy the source along with the object code.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 4. You may not copy, modify, sublicense, or distribute the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 except as expressly provided under this License.  Any attempt}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise to copy, modify, sublicense or distribute the Program is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 void, and will automatically terminate your rights under this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 However, parties who have received copies, or rights, from you under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License will not have their licenses terminated so long as such}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parties remain in full compliance.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 5. You are not required to accept this License, since you have not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 signed it.  However, nothing else grants you permission to modify or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute the Program or its derivative works.  These actions are}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 prohibited by law if you do not accept this License.  Therefore, by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 modifying or distributing the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), you indicate your acceptance of this License to do so, and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all its terms and conditions for copying, distributing or modifying}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Program or works based on it.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 6. Each time you redistribute the Program (or any work based on the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Program), the recipient automatically receives a license from the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original licensor to copy, distribute or modify the Program subject to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 these terms and conditions.  You may not impose any further}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 restrictions on the recipients' exercise of the rights granted herein.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You are not responsible for enforcing compliance by third parties to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 7. If, as a consequence of a court judgment or allegation of patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 infringement or for any other reason (not limited to patent issues),}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 conditions are imposed on you (whether by court order, agreement or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 otherwise) that contradict the conditions of this License, they do not}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 excuse you from the conditions of this License.  If you cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 distribute so as to satisfy simultaneously your obligations under this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 License and any other pertinent obligations, then as a consequence you}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may not distribute the Program at all.  For example, if a patent}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 license would not permit royalty-free redistribution of the Program by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 all those who receive copies directly or indirectly through you, then}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the only way you could satisfy both it and this License would be to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 refrain entirely from distribution of the Program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If any portion of this section is held invalid or unenforceable under}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 any particular circumstance, the balance of the section is intended to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 apply and the section as a whole is intended to apply in other}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 circumstances.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 It is not the purpose of this section to induce you to infringe any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 patents or other property right claims or to contest validity of any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 such claims; this section has the sole purpose of protecting the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 integrity of the free software distribution system, which is}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 implemented by public license practices.  Many people have made}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 generous contributions to the wide range of software distributed}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 through that system in reliance on consistent application of that}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 system; it is up to the author/donor to decide if he or she is willing}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to distribute software through any other system and a licensee cannot}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 impose that choice.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This section is intended to make thoroughly clear what is believed to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be a consequence of the rest of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 8. If the distribution and/or use of the Program is restricted in}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 certain countries either by patents or by copyrighted interfaces, the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 original copyright holder who places the Program under this License}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 may add an explicit geographical distribution limitation excluding}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 those countries, so that distribution is permitted only in or among}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 countries not thus excluded.  In such case, this License incorporates}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the limitation as if written in the body of this License.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 9. The Free Software Foundation may publish revised and/or new versions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of the General Public License from time to time.  Such new versions will}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be similar in spirit to the present version, but may differ in detail to}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 address new problems or concerns.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Each version is given a distinguishing version number.  If the Program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 specifies a version number of this License which applies to it and "any}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 later version", you have the option of following the terms and conditions}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 either of that version or of any later version published by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation.  If the Program does not specify a version number of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 this License, you may choose any version ever published by the Free Software}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Foundation.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 10. If you wish to incorporate parts of the Program into other free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 programs whose distribution conditions are different, write to the author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to ask for permission.  For software which is copyrighted by the Free}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Software Foundation, write to the Free Software Foundation; we sometimes}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 make exceptions for this.  Our decision will be guided by the two goals}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of preserving the free status of all derivatives of our free software and}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 of promoting the sharing and reuse of software generally.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REPAIR OR CORRECTION.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 POSSIBILITY OF SUCH DAMAGES.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch                      }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 END OF TERMS AND CONDITIONS}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch             }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 How to Apply These Terms to Your New Programs}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If you develop a new program, and you want it to be of the greatest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 possible use to the public, the best way to achieve this is to make it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 free software which everyone can redistribute and change under these terms.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 To do so, attach the following notices to the program.  It is safest}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 to attach them to the start of each source file to most effectively}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 convey the exclusion of warranty; and each file should have at least}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the "copyright" line and a pointer to where the full notice is found.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <one line to give the program's name and a brief idea of what it does.>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Copyright (C) <year>  <name of author>}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is free software; you can redistribute it and/or modify}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 it under the terms of the GNU General Public License as published by}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 the Free Software Foundation; either version 2 of the License, or}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 (at your option) any later version.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This program is distributed in the hope that it will be useful,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 but WITHOUT ANY WARRANTY; without even the implied warranty of}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 GNU General Public License for more details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should have received a copy of the GNU General Public License along}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 with this program; if not, write to the Free Software Foundation, Inc.,}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Also add information on how to contact you by electronic and paper mail.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 If the program is interactive, make it output a short notice like this}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 when it starts in an interactive mode:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision version 69, Copyright (C) year name of author}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This is free software, and you are welcome to redistribute it}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch     }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 under certain conditions; type `show c' for details.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 The hypothetical commands `show w' and `show c' should show the appropriate}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 parts of the General Public License.  Of course, the commands you use may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 be called something other than `show w' and `show c'; they could even be}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 mouse-clicks or menu items--whatever suits your program.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 You should also get your employer (if you work as a programmer) or your}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 school, if any, to sign a "copyright disclaimer" for the program, if}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 necessary.  Here is a sample; alter the names:}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Yoyodyne, Inc., hereby disclaims all copyright interest in the program}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 `Gnomovision' (which makes passes at compilers) written by James Hacker.}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 <signature of Ty Coon>, 1 April 1989}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch   }{\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Ty Coon, President of Vice}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 This General Public License does not permit incorporating your program into}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 proprietary programs.  If your program is a subroutine library, you may}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 consider it more useful to permit linking proprietary applications with the}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 library.  If this is what you want to do, use the GNU Lesser General}
+\par \pard\plain \ltrpar\s8\ql\rtlch\af6\afs20\lang1081\ltrch\dbch\af7\langfe2052\hich\f6\fs20\lang1031\loch\f6\fs20\lang1031 {\rtlch \ltrch\loch\f6\fs20\lang1031\i0\b0 Public License instead of this License.}
+\par }
diff --git a/doc/VBox-CodingGuidelines.cpp b/doc/VBox-CodingGuidelines.cpp
index daa7c18..e102e4a 100644
--- a/doc/VBox-CodingGuidelines.cpp
+++ b/doc/VBox-CodingGuidelines.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -522,7 +522,7 @@
  *                  pvBar = RTMemAlloc(sizeof(*pvBar));
  *                  if (!pvBar)
  *                     rc = VERR_NO_MEMORY;
- *              }   
+ *              }
  *              if (RT_SUCCESS(rc))
  *              {
  *                  buzz = foo;
diff --git a/doc/VBox-MakefileGuidelines.cpp b/doc/VBox-MakefileGuidelines.cpp
index 1e6e674..90def6c 100644
--- a/doc/VBox-MakefileGuidelines.cpp
+++ b/doc/VBox-MakefileGuidelines.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2010 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/doc/VBox-doc.c b/doc/VBox-doc.c
index 94a0610..4af8db7 100644
--- a/doc/VBox-doc.c
+++ b/doc/VBox-doc.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/doc/kBuild-tricks.txt b/doc/kBuild-tricks.txt
index 5c4cdbe..d7a0fe2 100644
--- a/doc/kBuild-tricks.txt
+++ b/doc/kBuild-tricks.txt
@@ -7,14 +7,14 @@ Introduction
 ------------
 
 This document is written in reStructuredText (rst) which just happens to
-be used by Python, the primary language for this revamp.  For more information 
+be used by Python, the primary language for this revamp.  For more information
 on reStructuredText: http://docutils.sourceforge.net/rst.html
 
 
 Changing the output directory
 -----------------------------
 
-When switch between different VBox build settings it can be nice to have 
+When switch between different VBox build settings it can be nice to have
 different output directories to avoid having to rebuild the whole source tree
 everything.  One typical example is hardening, another is guest additions using
 crossbuild gcc w/ SDK.  The latter is is simpler so that's the first example:
diff --git a/doc/manual/.scm-settings b/doc/manual/.scm-settings
new file mode 100644
index 0000000..3924eb0
--- /dev/null
+++ b/doc/manual/.scm-settings
@@ -0,0 +1,23 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the manual.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/string.xsl:             --external-copyright --no-convert-tabs
+/titlepage-htmlhelp.xml: --external-copyright --no-convert-tabs
+
+--filter-out-dirs  /texfiles/.
+
diff --git a/doc/manual/ChangeLog.xml b/doc/manual/ChangeLog.xml
deleted file mode 100644
index cfd30a0..0000000
--- a/doc/manual/ChangeLog.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
-<!ENTITY __ChangeLog__et8f0z3c SYSTEM "../user_ChangeLogImpl_1.xml">
-]>
-<book>
-  
-  <xi:include href="../user_ChangeLogImpl.xml" xpointer="element(/1)"
-    xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-</book>
diff --git a/doc/manual/Config.kmk b/doc/manual/Config.kmk
index f9099de..6f23f1e 100644
--- a/doc/manual/Config.kmk
+++ b/doc/manual/Config.kmk
@@ -14,15 +14,6 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
-# The contents of this file may alternatively be used under the terms
-# of the Common Development and Distribution License Version 1.0
-# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-# VirtualBox OSE distribution, in which case the provisions of the
-# CDDL are applicable instead of those of the GPL.
-#
-# You may elect to license modified versions of this file under the
-# terms and conditions of either the GPL or the CDDL or both.
-#
 
 ifndef VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED
 VBOX_DOC_MANUAL_CONFIG_KMK_INCLUDED = 1
@@ -186,7 +177,6 @@ ifdef VBOX_XML_CATALOG
 		'<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">' \
 		'  <public publicId="-//OASIS//ELEMENTS DocBook XML Information Pool V4.3//EN"          uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbpoolx.mod"/>' \
 		'  <public publicId="-//OASIS//DTD DocBook XML V4.3//EN"                                uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd"/>' \
-		'  <public publicId="-//OASIS//DTD DocBook XML V4.4//EN"                                uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/docbookx.dtd"/>' \
 		'  <public publicId="-//OASIS//ENTITIES DocBook XML Character Entities V4.3//EN"        uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbcentx.mod"/>' \
 		'  <public publicId="-//OASIS//ENTITIES DocBook XML Notations V4.3//EN"                 uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbnotnx.mod"/>' \
 		'  <public publicId="-//OASIS//ENTITIES DocBook XML Additional General Entities V4.3//EN" uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/dbgenent.mod"/>' \
@@ -195,8 +185,6 @@ ifdef VBOX_XML_CATALOG
 		'  <public publicId="-//OASIS//DTD DocBook XML CALS Table Model V4.3//EN"               uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/calstblx.dtd"/>' \
 		'  <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/xml/4.3" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>' \
 		'  <rewriteURI         uriStartString="http://www.oasis-open.org/docbook/xml/4.3" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>' \
-		'  <rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/xml/4.4" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>' \
-		'  <rewriteURI         uriStartString="http://www.oasis-open.org/docbook/xml/4.4" rewritePrefix="file:///$(VBOX_PATH_DOCBOOK_DTD)"/>' \
 		'  <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN"   uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsa.ent"/>' \
 		'  <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN"  uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsb.ent"/>' \
 		'  <public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN"        uri="file:///$(VBOX_PATH_DOCBOOK_DTD)/ent/iso-amsc.ent"/>' \
diff --git a/doc/manual/Makefile.kmk b/doc/manual/Makefile.kmk
index c5f4abe..0e39a64 100644
--- a/doc/manual/Makefile.kmk
+++ b/doc/manual/Makefile.kmk
@@ -462,7 +462,7 @@ $(VBOX_PATH_MANUAL_OUTBASE)/user_VBoxManage_CommandsOverview.xml: $(VBOXMANAGEHE
 	$(QUIET)$(RM) -f $@ $@.dumpopts
 	$(QUIET)$(APPEND) -tn "$@" \
 		'<?xml version="1.0" encoding="UTF-8"?>' \
-               '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">' \
+               '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">' \
                '<sect1> <!-- this will be skipped via xpointer in the include. --> '
 	$(QUIET)$(REDIRECT) -wo $@.dumpopts -E 'VBOX_LOG_FLAGS=disabled' -E 'VBOX_LOG_DEST=nofile' \
 		$(if $(eq $(KBUILD_TARGET),darwin), -E 'DYLD_FALLBACK_LIBRARY_PATH=$(dir $(LIB_RUNTIME))') \
@@ -648,7 +648,7 @@ $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.pdf: \
 
 # Handy aliases.
 validate-sdkref:: $(VBOX_PATH_MANUAL_OUTBASE)/en_US/SDKRef.xml
-sdkref:: $(VBOX_PATH_SDK)/docs/SDKRef.pdf
+sdkref:: $(PATH_STAGE_BIN)/sdk/docs/SDKRef.pdf
 
 
 
diff --git a/doc/manual/common-html-formatcfg.xsl b/doc/manual/common-html-formatcfg.xsl
index 0fa3aec..fcaad2f 100644
--- a/doc/manual/common-html-formatcfg.xsl
+++ b/doc/manual/common-html-formatcfg.xsl
@@ -31,7 +31,7 @@
    {
      text-align: left;
    }
-   .warning 
+   .warning
    {
      padding: 5px;
      border: 1px solid #ff0011;
@@ -40,7 +40,7 @@
    }
    .warning .title { margin: 0px 0px 5px 0px; }
    .warning p { margin: 1px; }
-   .note 
+   .note
    {
      padding: 1px 5px 1px;
      border: 1px solid #84c43b;
diff --git a/doc/manual/docbook-changelog-formatcfg.xsl b/doc/manual/docbook-changelog-formatcfg.xsl
index 38bbbcd..b6b0cec 100644
--- a/doc/manual/docbook-changelog-formatcfg.xsl
+++ b/doc/manual/docbook-changelog-formatcfg.xsl
@@ -32,7 +32,7 @@
      position: absolute;
      margin: 0px 0 0 0;
    }
-   h2 
+   h2
    {
      text-decoration: none;
      font-size: 1.2em;
@@ -43,19 +43,19 @@
      -moz-border-radius: 0.3em;
      background: #e6edff;  /* #d7e9a7; */
    }
-   #watermark 
-   { 
-     margin: 0; 
-     position: fixed; 
+   #watermark
+   {
+     margin: 0;
+     position: fixed;
      top: 40%;
-     color: #eeeeee; 
-     width: 100%; 
-     height: 100%; 
-     text-align: center; 
-     vertical-align: middle; 
+     color: #eeeeee;
+     width: 100%;
+     height: 100%;
+     text-align: center;
+     vertical-align: middle;
      font-size: 9em;
-     font-weight: bold; 
-     z-index:-1; 
+     font-weight: bold;
+     z-index:-1;
    }
    -->
   </xsl:comment>
diff --git a/doc/manual/docbook2latex.xsl b/doc/manual/docbook2latex.xsl
index 015bd70..c5489c2 100644
--- a/doc/manual/docbook2latex.xsl
+++ b/doc/manual/docbook2latex.xsl
@@ -566,7 +566,7 @@
       <xsl:text> \setlength{\parskip}{0pt}&#x0a;</xsl:text>
       <xsl:text> \setlength{\itemsep}{0pt}&#x0a;</xsl:text>
       <xsl:text> \setlength{\topsep}{0pt}&#x0a;</xsl:text>
-      <xsl:text> \setlength{\parsep}{0pt}&#x0a;</xsl:text> 
+      <xsl:text> \setlength{\parsep}{0pt}&#x0a;</xsl:text>
       <xsl:text> \setlength{\partopsep}{0pt}&#x0a;</xsl:text>
     </xsl:if>
     <xsl:apply-templates />
diff --git a/doc/manual/en_US/UserManual.xml b/doc/manual/en_US/UserManual.xml
index 2942c12..3f0c834 100644
--- a/doc/manual/en_US/UserManual.xml
+++ b/doc/manual/en_US/UserManual.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <book>
   <bookinfo>
     <title>@VBOX_PRODUCT@<superscript>®</superscript></title>
diff --git a/doc/manual/en_US/man_VBoxManage-debugvm.xml b/doc/manual/en_US/man_VBoxManage-debugvm.xml
index a9335b3..e9ea68b 100644
--- a/doc/manual/en_US/man_VBoxManage-debugvm.xml
+++ b/doc/manual/en_US/man_VBoxManage-debugvm.xml
@@ -12,11 +12,11 @@
     VirtualBox OSE distribution. VirtualBox OSE is distributed in the
     hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  -->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <refentry id="vboxmanage-debugvm" lang="en">
 
   <refentryinfo>
-    <pubdate>$Date: 2016-06-29 18:53:05 +0200 (Wed, 29 Jun 2016) $</pubdate>
+    <pubdate>$Date: 2017-11-09 19:13:13 +0100 (Thu, 09 Nov 2017) $</pubdate>
     <title>VBoxManage debugvm</title>
   </refentryinfo>
 
@@ -613,4 +613,3 @@
 
 </refentry>
 
-
diff --git a/doc/manual/en_US/man_VBoxManage-extpack.xml b/doc/manual/en_US/man_VBoxManage-extpack.xml
index adae3ef..4e06187 100644
--- a/doc/manual/en_US/man_VBoxManage-extpack.xml
+++ b/doc/manual/en_US/man_VBoxManage-extpack.xml
@@ -12,11 +12,11 @@
     VirtualBox OSE distribution. VirtualBox OSE is distributed in the
     hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  -->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <refentry id="vboxmanage-extpack" lang="en">
 
   <refentryinfo>
-    <pubdate>$Date: 2015-06-18 20:15:51 +0200 (Thu, 18 Jun 2015) $</pubdate>
+    <pubdate>$Date: 2017-11-09 19:13:13 +0100 (Thu, 09 Nov 2017) $</pubdate>
     <title>VBoxManage extpack</title>
   </refentryinfo>
 
diff --git a/doc/manual/en_US/man_VBoxManage-unattended.xml b/doc/manual/en_US/man_VBoxManage-unattended.xml
index 5c3b5ef..e59627d 100644
--- a/doc/manual/en_US/man_VBoxManage-unattended.xml
+++ b/doc/manual/en_US/man_VBoxManage-unattended.xml
@@ -12,11 +12,11 @@
     VirtualBox OSE distribution. VirtualBox OSE is distributed in the
     hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  -->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <refentry id="vboxmanage-unattended" lang="en">
 
   <refentryinfo>
-    <pubdate>$Date: 2017-08-02 18:09:49 +0200 (Wed, 02 Aug 2017) $</pubdate>
+    <pubdate>$Date: 2017-11-09 19:13:13 +0100 (Thu, 09 Nov 2017) $</pubdate>
     <title>VBoxManage unattended</title>
   </refentryinfo>
 
diff --git a/doc/manual/en_US/user_AdvancedTopics.xml b/doc/manual/en_US/user_AdvancedTopics.xml
index 8fe22e4..02cef45 100644
--- a/doc/manual/en_US/user_AdvancedTopics.xml
+++ b/doc/manual/en_US/user_AdvancedTopics.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="AdvancedTopics">
   <title>Advanced topics</title>
 
diff --git a/doc/manual/en_US/user_BasicConcepts.xml b/doc/manual/en_US/user_BasicConcepts.xml
index e0489a2..bb9833d 100644
--- a/doc/manual/en_US/user_BasicConcepts.xml
+++ b/doc/manual/en_US/user_BasicConcepts.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="BasicConcepts">
   <title>Configuring virtual machines</title>
 
diff --git a/doc/manual/en_US/user_ChangeLog.xml b/doc/manual/en_US/user_ChangeLog.xml
index aa564d8..f8a2cbd 100644
--- a/doc/manual/en_US/user_ChangeLog.xml
+++ b/doc/manual/en_US/user_ChangeLog.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="ChangeLog">
   <title>Change log</title>
 
diff --git a/doc/manual/en_US/user_Frontends.xml b/doc/manual/en_US/user_Frontends.xml
index 3795c86..2518e9e 100644
--- a/doc/manual/en_US/user_Frontends.xml
+++ b/doc/manual/en_US/user_Frontends.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
-<chapter>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<chapter id="remotevm">
   <title>Remote virtual machines</title>
 
   <sect1 id="vrde">
diff --git a/doc/manual/en_US/user_Glossary.xml b/doc/manual/en_US/user_Glossary.xml
index f81db3e..0e11e53 100644
--- a/doc/manual/en_US/user_Glossary.xml
+++ b/doc/manual/en_US/user_Glossary.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <glossary id="Glossary">
   <glossdiv>
     <title>A</title>
diff --git a/doc/manual/en_US/user_GuestAdditions.xml b/doc/manual/en_US/user_GuestAdditions.xml
index 71267e1..b377f22 100644
--- a/doc/manual/en_US/user_GuestAdditions.xml
+++ b/doc/manual/en_US/user_GuestAdditions.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="guestadditions">
   <title>Guest Additions</title>
 
diff --git a/doc/manual/en_US/user_Installation.xml b/doc/manual/en_US/user_Installation.xml
index d0f1dd0..c159c75 100644
--- a/doc/manual/en_US/user_Installation.xml
+++ b/doc/manual/en_US/user_Installation.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="installation">
   <title>Installation details</title>
 
diff --git a/doc/manual/en_US/user_Introduction.xml b/doc/manual/en_US/user_Introduction.xml
index 9059b98..0887903 100644
--- a/doc/manual/en_US/user_Introduction.xml
+++ b/doc/manual/en_US/user_Introduction.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="Introduction">
   <title>First steps</title>
 
diff --git a/doc/manual/en_US/user_KnownIssues.xml b/doc/manual/en_US/user_KnownIssues.xml
index f90de94..9e8d0b6 100644
--- a/doc/manual/en_US/user_KnownIssues.xml
+++ b/doc/manual/en_US/user_KnownIssues.xml
@@ -1,21 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="KnownIssues">
   <title>Known limitations</title>
     <sect1 id="ExperimentalFeatures">
         <title>Experimental Features</title>
-        <para>Some VirtualBox features are labeled as experimental. Such 
-            features are provided on an "as-is" basis and are not formally 
-            supported. However, feedback and suggestions about such features are 
+        <para>Some VirtualBox features are labeled as experimental. Such
+            features are provided on an "as-is" basis and are not formally
+            supported. However, feedback and suggestions about such features are
             welcome. A comprehensive list of experimental features follows:</para>
         <itemizedlist>
             <listitem>
-                <para>Hardware 3D acceleration support for Windows, Linux, and Solaris 
+                <para>Hardware 3D acceleration support for Windows, Linux, and Solaris
                 guests</para>
             </listitem>
             <listitem>
-                <para>Hardware 2D video playback acceleration support for Windows 
+                <para>Hardware 2D video playback acceleration support for Windows
                 guests</para>
             </listitem>
             <listitem>
@@ -43,7 +43,7 @@
       <para>The following section describes known problems with VirtualBox
       @VBOX_VERSION_STRING at . Unless marked otherwise, these issues are planned to
       be fixed in later releases.</para>
-    
+
       <itemizedlist>
         <listitem>
           <para>The following <emphasis role="bold">Guest SMP (multiprocessor)
@@ -55,7 +55,7 @@
                 solved in 3.0.6 for 32 bits Windows NT, 2000, XP and 2003 guests.
                 Requires 3.0.6 or higher Guest Additions to be installed.</para>
               </listitem>
-    
+
               <listitem>
                 <para><emphasis role="bold">Poor performance</emphasis> with
                 32-bit guests on certain Intel CPU models that do not include
@@ -74,7 +74,7 @@
           or guests running on 32-bit hosts with PAE enabled and requires that
           hardware virtualization be enabled.</para>
         </listitem>
-    
+
         <listitem>
           <para>For <emphasis role="bold">basic Direct3D support in Windows
           guests</emphasis> to work, the Guest Additions must be installed in
@@ -88,14 +88,14 @@
           shipped with VirtualBox 4.1.</para>
           </note></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Guest control.</emphasis> On Windows guests,
           a process lauched via the guest control execute support will not be able
           to display a graphical user interface <emphasis>unless</emphasis> the
           user account under which it is running is currently logged in and has a
           desktop session.</para>
-    
+
           <para>Also, to use accounts without or with an empty password, the
           guest's group policy must be changed. To do so, open the group policy
           editor on the command line by typing
@@ -105,7 +105,7 @@
           of <emphasis>Accounts: Limit local account use of blank passwords to
           console logon only</emphasis> to <emphasis>Disabled</emphasis>.</para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Compacting virtual disk images is limited to
           VDI files.</emphasis> The <code>VBoxManage modifyhd --compact</code>
@@ -114,68 +114,68 @@
           (VMDK, VHD) is to clone the image and then use the cloned image in the
           VM configuration.</para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">OVF import/export:</emphasis><itemizedlist>
               <listitem>
                 <para>OVF localization (multiple languages in one OVF file) is not
                 yet supported.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Some OVF sections like StartupSection,
                 DeploymentOptionSection and InstallSection are ignored.</para>
               </listitem>
-    
+
               <listitem>
                 <para>OVF environment documents, including their property sections
                 and appliance configuration with ISO images, are not yet
                 supported.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Remote files via HTTP or other mechanisms are not yet
                 supported.</para>
               </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para>Neither <emphasis role="bold">scale mode</emphasis> nor <emphasis
           role="bold">seamless mode</emphasis> work correctly with guests using
           OpenGL 3D features (such as with compiz-enabled window managers).</para>
         </listitem>
-    
+
         <listitem>
           <para>The RDP server in the VirtualBox extension pack supports only
           audio streams in format 22.05kHz stereo 16 bit. If the RDP client
           requests any other audio format there will be no audio.</para>
         </listitem>
-    
+
         <listitem>
           <para>Preserving the aspect ratio in scale mode works only on Windows
           hosts and on Mac OS X hosts.</para>
         </listitem>
-    
+
         <listitem>
           <para>On <emphasis role="bold">Mac OS X hosts,</emphasis> the following
           features are not yet implemented:</para>
-    
+
           <para><itemizedlist>
               <listitem>
                 <para>Numlock emulation</para>
               </listitem>
-    
+
               <listitem>
                 <para>CPU frequency metric</para>
               </listitem>
-    
+
               <listitem>
                 <para>Memory ballooning</para>
               </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Mac OS X guests:</emphasis>
           <itemizedlist>
@@ -185,31 +185,31 @@
                 see <xref linkend="intro-macosxguests" /> and check the Apple
                 software license conditions.</para>
               </listitem>
-    
+
               <listitem>
                 <para>VirtualBox does not provide Guest Additions for Mac OS X
                 at this time.</para>
               </listitem>
-    
+
               <listitem>
                 <para>The graphics resolution currently defaults to 1024x768 as
                 Mac OS X falls back to the built-in EFI display support. See
                 <xref linkend="efividmode" /> for more information on how to
                 change EFI video modes.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Mac OS X guests only work with one CPU assigned to the
                 VM. Support for SMP will be provided in a future release.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Depending on your system and version of Mac OS X, you
                 might experience guest hangs after some time. This can be fixed
                 by turning off energy saving (set timeout to "Never") in the
                 system preferences.</para>
               </listitem>
-    
+
               <listitem>
                 <para>By default, the VirtualBox EFI enables debug output of the
                 Mac OS X kernel to help you diagnose boot problems. Note that
@@ -225,14 +225,14 @@
               </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Solaris hosts:</emphasis> <itemizedlist>
               <listitem>
                 <para>There is no support for USB devices connected to Solaris 10
                 hosts.</para>
               </listitem>
-    
+
               <listitem>
                 <para>USB support on Solaris hosts requires Solaris 11 version
                 snv_124 or higher. Webcams and other isochronous devices are known
@@ -244,17 +244,17 @@
                 20 frames per second due to limitations in the Solaris V4L2 API.
                 This may be addressed in a future Solaris release.</para>
               </listitem>
-    
+
               <listitem>
                 <para>No ACPI information (battery status, power source) is
                 reported to the guest.</para>
               </listitem>
-    
+
               <listitem>
                 <para>No support for using wireless adapters with bridged
                 networking.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Crossbow-based bridged networking on Solaris 11 hosts does
                 not work directly with aggregate links. However, you can manually
@@ -264,25 +264,25 @@
               </listitem>
             </itemizedlist></para>
         </listitem>
-        
+
         <listitem>
           <para><emphasis role="bold">Guest Additions of version 4.1, 4.1.2 and 4.1.4 for Windows</emphasis>
-          Thus VirtualBox WDDM Video driver may be installed and kept in guest system 
-          if Guest additions uninstallation is performed. 
+          Thus VirtualBox WDDM Video driver may be installed and kept in guest system
+          if Guest additions uninstallation is performed.
           This is caused by a bug in Guest Additions uninstaller.
           <note>
-            <para>This does <emphasis role="bold">not</emphasis> apply to Guest Additions update, 
+            <para>This does <emphasis role="bold">not</emphasis> apply to Guest Additions update,
             i.e. installing a one version of Guest Additions on top of another works correctly.</para>
           </note>
           To solve this problem, one should uninstall the VirtualBox WDDM Video driver manually.
-          To do that open Device Manager, and check whether the Display Adapter is named 
-          "VirtualBox Graphics Adapter ..". If no - there is nothing to be done. If yes - right-click 
+          To do that open Device Manager, and check whether the Display Adapter is named
+          "VirtualBox Graphics Adapter ..". If no - there is nothing to be done. If yes - right-click
           the VirtualBox Graphics Adapter in Device Manager, select "Uninstall", check "Delete the driver software for this device"
-          and click "OK". Once uninstallation is done - in Device Manager go to menu "Action" and select 
+          and click "OK". Once uninstallation is done - in Device Manager go to menu "Action" and select
           "Scan for hardware changes" to make the propper (Windows default) driver be picked up for the Graphics adapter.
           </para>
         </listitem>
-    
+
         <listitem>
           <para>Neither <emphasis>virtio</emphasis> nor <emphasis>Intel PRO/1000
             </emphasis> drivers for <emphasis role="bold">Windows XP guests
@@ -291,7 +291,7 @@
             guest types. Refer to MS Knowledge base article 842264 for additional
             information.</para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Guest Additions for OS/2.</emphasis> Shared
           folders are not yet supported with OS/2 guests. In addition, seamless
diff --git a/doc/manual/en_US/user_Networking.xml b/doc/manual/en_US/user_Networking.xml
index 021ff81..6c92ff2 100644
--- a/doc/manual/en_US/user_Networking.xml
+++ b/doc/manual/en_US/user_Networking.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="networkingdetails">
   <title>Virtual networking</title>
 
diff --git a/doc/manual/en_US/user_PrivacyPolicy.xml b/doc/manual/en_US/user_PrivacyPolicy.xml
index dcf1f4e..e9f354e 100644
--- a/doc/manual/en_US/user_PrivacyPolicy.xml
+++ b/doc/manual/en_US/user_PrivacyPolicy.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <appendix id="privacy">
   <title>VirtualBox privacy information</title>
 
diff --git a/doc/manual/en_US/user_Security.xml b/doc/manual/en_US/user_Security.xml
index 8ae4f51..2fd29a5 100644
--- a/doc/manual/en_US/user_Security.xml
+++ b/doc/manual/en_US/user_Security.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="Security">
   <title>Security guide</title>
 
diff --git a/doc/manual/en_US/user_Storage.xml b/doc/manual/en_US/user_Storage.xml
index 1894681..0eb7924 100644
--- a/doc/manual/en_US/user_Storage.xml
+++ b/doc/manual/en_US/user_Storage.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="storage">
   <title>Virtual storage</title>
 
diff --git a/doc/manual/en_US/user_Technical.xml b/doc/manual/en_US/user_Technical.xml
index d1d399f..0691eb2 100644
--- a/doc/manual/en_US/user_Technical.xml
+++ b/doc/manual/en_US/user_Technical.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="TechnicalBackground">
   <title>Technical background</title>
 
diff --git a/doc/manual/en_US/user_ThirdParty.xml b/doc/manual/en_US/user_ThirdParty.xml
index 5327a2c..8835396 100644
--- a/doc/manual/en_US/user_ThirdParty.xml
+++ b/doc/manual/en_US/user_ThirdParty.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <appendix id="ThirdParty">
   <title>Third-party materials and licenses</title>
 
diff --git a/doc/manual/en_US/user_Troubleshooting.xml b/doc/manual/en_US/user_Troubleshooting.xml
index 20d39e6..666f1c5 100644
--- a/doc/manual/en_US/user_Troubleshooting.xml
+++ b/doc/manual/en_US/user_Troubleshooting.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="Troubleshooting">
   <title>Troubleshooting</title>
 
@@ -493,7 +493,7 @@
       <para>The value [x] that selects the disk for IDE is 0 for the master
       device on the first channel, 1 for the slave device on the first
       channel, 2 for the master device on the second channel or 3 for the
-      master device on the second channel. For SATA use values between 0 and
+      slave device on the second channel. For SATA use values between 0 and
       29. Only disks support this configuration option; it must not be set for
       CD/DVD drives.</para>
 
diff --git a/doc/manual/en_US/user_VBoxManage.xml b/doc/manual/en_US/user_VBoxManage.xml
index 93242ee..09a403a 100644
--- a/doc/manual/en_US/user_VBoxManage.xml
+++ b/doc/manual/en_US/user_VBoxManage.xml
@@ -16,8 +16,8 @@
     VirtualBox OSE distribution. VirtualBox OSE is distributed in the
     hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  -->
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="vboxmanage">
   <title>VBoxManage</title>
 
@@ -2861,6 +2861,7 @@ Virtual system 0:
                             [--encodedlun <lun>]
                             [--username <username>]
                             [--password <password>]
+                            [--passwordfile <file>]
                             [--initiator <initiator>]
                             [--intnet]</screen>
 
@@ -3153,7 +3154,7 @@ Virtual system 0:
         </glossentry>
 
         <glossentry>
-          <glossterm><computeroutput>--username, --password</computeroutput></glossterm>
+          <glossterm><computeroutput>--username, --password, --passwordfile</computeroutput></glossterm>
 
           <glossdef>
             <para>Username and password (initiator secret) for target
@@ -3162,7 +3163,9 @@ Virtual system 0:
                 encryption (i.e. in clear text) in the XML machine
                 configuration file if no settings password is provided.
                 When a settings password was specified the first time,
-                the password is stored encrypted.</para>
+                the password is stored encrypted. Alternatively to providing the password
+                on the command line, a reference to a file containing the text
+                can be provided instead via the passwordfile option.</para>
               </note></para>
           </glossdef>
         </glossentry>
@@ -3588,7 +3591,7 @@ Virtual system 0:
 
                             [--format VDI|VMDK|VHD|RAW|<other>]
                             [--variant Standard,Fixed,Split2G,Stream,ESX]
-			    [--existing]</screen>
+                            [--existing]</screen>
 
 
     <para>The medium to clone as well as the target image must be described
@@ -3632,7 +3635,7 @@ Virtual system 0:
         </glossentry>
       </glosslist> <note>
         <para>For compatibility with earlier versions of VirtualBox, the
- 	"clonevdi" and "clonehd" commands are still supported and mapped
+        "clonevdi" and "clonehd" commands are still supported and mapped
         internally to the "clonehd disk" command.</para>
       </note></para>
   </sect1>
diff --git a/doc/manual/en_US/user_VirtualBoxAPI.xml b/doc/manual/en_US/user_VirtualBoxAPI.xml
index f2a6188..315308e 100644
--- a/doc/manual/en_US/user_VirtualBoxAPI.xml
+++ b/doc/manual/en_US/user_VirtualBoxAPI.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="VirtualBoxAPI">
   <title>VirtualBox programming interfaces</title>
 
@@ -22,4 +22,4 @@
   particular, the SDK comes with a "Programming Guide and Reference" in PDF
   format, which contains, among other things, the information that was
   previously in this chapter of the User Manual.</para>
-</chapter>
\ No newline at end of file
+</chapter>
diff --git a/doc/manual/fr_FR/UserManual.xml b/doc/manual/fr_FR/UserManual.xml
index 3ba8ce5..3b10a0d 100644
--- a/doc/manual/fr_FR/UserManual.xml
+++ b/doc/manual/fr_FR/UserManual.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <book>
   <bookinfo>
     <title>@VBOX_PRODUCT@<superscript>®</superscript></title>
diff --git a/doc/manual/fr_FR/user_AdvancedTopics.xml b/doc/manual/fr_FR/user_AdvancedTopics.xml
index 6c47315..a4293c3 100644
--- a/doc/manual/fr_FR/user_AdvancedTopics.xml
+++ b/doc/manual/fr_FR/user_AdvancedTopics.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="AdvancedTopics">
   <title>Sujets avancés</title>
 
@@ -10,8 +10,8 @@
     <sect2>
       <title>Introduction</title>
 
-      <para>VBoxSDL est une interface graphique (GUI) simple qui élimine le 
-      support du clicodrome fourni par VirtualBox, notre principale GUI. 
+      <para>VBoxSDL est une interface graphique (GUI) simple qui élimine le
+      support du clicodrome fourni par VirtualBox, notre principale GUI.
       VBoxSDL est utilisé actuellement d'abord pour déboguer VirtualBox, donc
       il n'est pas officiellement supporté. Vous pouvez quand même le trouver
       utile pour des environnements où les machines virtuelles ne sont pas
@@ -32,7 +32,7 @@
         </mediaobject></para>
 
       <para>Pour démarrer une machine virtuelle avec VBoxSDL au lieu de l'interface
-      graphique de VirtualBox, tapez ce qui suit sur une ligne de 
+      graphique de VirtualBox, tapez ce qui suit sur une ligne de
       commandes&#xA0;:<screen>VBoxSDL --startvm <vm></screen></para>
 
       <para>où <computeroutput><vm></computeroutput> est, comme d'habitude
@@ -53,10 +53,10 @@
 
       <para>Afin de protéger l'utilisateur contre les risques de sécurité précités,
       on a développpé la fonction d'étiquetage de sécurité. L'étiquetage de sécurité
-      n'est actuellement disponible que pour VBoxSDL. S'il est activé, 
+      n'est actuellement disponible que pour VBoxSDL. S'il est activé,
       une partie de la zone d'affichage est réservée à une étiquette où est affiché
       un message défini par l'utilisateur. La hauteur de l'étiquette est définie à
-      20 pixels dans VBoxSDL. La couleur de la police et de l'arrière-plan de 
+      20 pixels dans VBoxSDL. La couleur de la police et de l'arrière-plan de
       l'étiquette peuvent éventuellement être définies en valeurs de couleurs
       RGB hexadécimales. On utilise la syntaxe suivante pour activer l'étiquettage
       de sécurité&#xA0;:</para>
@@ -72,14 +72,14 @@
       <para>Vous pouvez définir le texte de l'étiquette avec <screen>VBoxManage setextradata "nom VM" "VBoxSDL/SecureLabel" "L étiquette"</screen>
       Une modification de cette étiquette prendra effet immédiatement.</para>
 
-      <para>En général, les résolutions du plein écran sont limitées à 
+      <para>En général, les résolutions du plein écran sont limitées à
       certaines géométries "standards" telles que 1024 x 768. Une augmentation
       de vingt lignes n'est en général pas faisable, donc dans la plupart des
-      cas, VBoxSDL choisira la résolution suivante la plus élevée comme 1280 x 1024 
-      et l'écran de l'invité ne couvrira pas toute la zone d'affichage. Si VBoxSDL 
+      cas, VBoxSDL choisira la résolution suivante la plus élevée comme 1280 x 1024
+      et l'écran de l'invité ne couvrira pas toute la zone d'affichage. Si VBoxSDL
       ne peut pas choisir de résolution plus élevée, l'étiquette de sécurité sera
-      dessinée en haut de la zone de l'écran de l'invité. Pour surmonter le 
-      problème selon lequel le bas de l'écran de l'invité est caché, VBoxSDL 
+      dessinée en haut de la zone de l'écran de l'invité. Pour surmonter le
+      problème selon lequel le bas de l'écran de l'invité est caché, VBoxSDL
       peut fournir des modes graphiques personnalisés à l'invité, réduits par
       la hauteur de l'étiquette. Pour les invités Windows et les
       Solaris et Linux récents, les suppléments invité de VirtualBox fournissent
@@ -112,11 +112,11 @@ vga = 839</screen>
       <title>Libérer les modificateurs avec VBoxSDL sur Linux</title>
 
       <para>Quand vous basculez d'un terminal virtuel (VT) X à un autre en utilisant
-      Ctrl-Alt-Fx pendant que la fenêtre VBoxSDL contient le focus d'entrée, 
+      Ctrl-Alt-Fx pendant que la fenêtre VBoxSDL contient le focus d'entrée,
       l'invité recevra les événements d'appui sur Ctrl et Alt sans recevoir les événements
       de relâchement correspondant de la touche. C'est une limite liée à
       l'architecture de Linux. Pour réinitialiser les touches modificatrices,
-      il est possible d'envoyer 
+      il est possible d'envoyer
       <computeroutput>SIGUSR1</computeroutput> au fil principal de VBoxSDL (première
       entrée de la liste <computeroutput>ps</computeroutput>). Par exemple, quand
       vous basculez vers un autre VT et quand vous enregistrez la machine virtuelle
@@ -134,7 +134,7 @@ VBoxManage controlvm "Windows 2000" savestate</screen></para>
     <para>VirtualBox fournit des modules invité supplémentaires pour Windows, Linux
     et Solaris pour activer l'identification automatique dans l'invité.</para>
 
-    <para>Quand on lance un système d'exploitation dans une machine virtuelle, 
+    <para>Quand on lance un système d'exploitation dans une machine virtuelle,
     il pourrait être souhaitable d'effectuer des identifications automatiques et
     coordonnées en utilisant des autorisations issues d'un système d'identification
     maître. (Avec les "autorisations", on se réfère aux informations d'identification
@@ -149,11 +149,11 @@ VBoxManage controlvm "Windows 2000" savestate</screen></para>
       des modules GINA (Graphical Identification and Authentication).
       Avec Windows Vista et Windows 7, les modules GINA ont été remplacés par un
       nouveau mécanisme appelé "fournisseurs d'autorisations". Les suppléments
-      invité de VirtualBox pour Windows sont fournis à la fois avec un module 
+      invité de VirtualBox pour Windows sont fournis à la fois avec un module
       GINA et un fournisseur d'autorisations, ils permettent donc à n'importe quel
       invité Windows d'effectuer des identifications automatiques.</para>
 
-      <para>Pour activer le module GINA ou fournisseur d'autorisations des 
+      <para>Pour activer le module GINA ou fournisseur d'autorisations des
       suppléments invité de VirtualBox, installez les suppléments invité en
       utilisant le paramètre <computeroutput>/with_autologon</computeroutput> en
       ligne de commande. Toutes les étapes manuelles suivantes exigés pour installer
@@ -185,7 +185,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
 
 HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</screen></para>
 
-      <para>avec pour valeurs celles par défault (la clé nommée 
+      <para>avec pour valeurs celles par défault (la clé nommée
       <computeroutput>(Default)</computeroutput> dans chaque clé) définies sur
       <computeroutput>VBoxCredProv</computeroutput>. Après quoi, il faut créer
       une nouvelle chaîne nommée <screen>HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32\ThreadingModel</screen>
@@ -214,8 +214,8 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
       <para>Selon la variante particulière de votre invité Windows, les restrictions
       suivantes s'appliquent&#xA0;: <orderedlist>
           <listitem>
-            <para>Pour les <emphasis role="bold">invités Windows XP,</emphasis> 
-            le sous-système d'identification doit être configuré pour utiliser 
+            <para>Pour les <emphasis role="bold">invités Windows XP,</emphasis>
+            le sous-système d'identification doit être configuré pour utiliser
             la boîte de dialogue classique d'identification car le module GINA
             de VirtualBox ne supporte pas la boîte de dialogue de bienvenue à
             la XP.</para>
@@ -225,7 +225,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
             <para>Pour les <emphasis role="bold">invités Windows Vista, Windows 7
             et Windows 8,</emphasis>
             le sous-système d'identification ne supporte pas ce qu'on appelle la
-            Secure Attention Sequence (<computeroutput>CTRL+ALT+DEL</computeroutput>). 
+            Secure Attention Sequence (<computeroutput>CTRL+ALT+DEL</computeroutput>).
             Il s'en suit que les paramètres des règles du groupe de l'invité
             doivent être modifiés pour ne pas utiliser la Secure Attention Sequence.
             De plus, le nom d'utilisateur donné n'est comparé qu'au vrai nom d'utilisateur,
@@ -275,7 +275,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
       autorisations passées à l'OS invité&#xA0;; il s'appuie plutôt sur d'autres
       modules tels que <computeroutput>pam_unix.so</computeroutput> ou
       <computeroutput>pam_unix2.so</computeroutput> dans la pile PAM pour faire
-      la validation effective en utilisant les autorisations récupérées par 
+      la validation effective en utilisant les autorisations récupérées par
       <computeroutput>pam_vbox.so</computeroutput>. Dès lors, il faut que
       <computeroutput>pam_vbox.so</computeroutput> soit en haut de la liste d'authentification
       du service PAM.</para>
@@ -315,7 +315,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
           dans <computeroutput>/etc/pam.d/gdm</computeroutput>, en ajoutant la
           ligne <computeroutput>auth requisite pam_vbox.so</computeroutput> au
           début. En outre, dans la plupart des distributions Linux, il existe
-          un fichier appelé <computeroutput>/etc/pam.d/common-auth</computeroutput>. 
+          un fichier appelé <computeroutput>/etc/pam.d/common-auth</computeroutput>.
           Ce fichier est inclu dans de nombreux services (comme le fichier GDM
           indiqué ci-dessus). Vous devez y ajouter la ligne <computeroutput>auth
           requisite pam_vbox.so</computeroutput>.</para>
@@ -346,7 +346,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
 
       <para>Pour faciliter le déploiement, vous pouvez passer l'argument
       <computeroutput>debug</computeroutput> juste après la ligne
-      <computeroutput>pam_vbox.so</computeroutput>. La sortie du journal de 
+      <computeroutput>pam_vbox.so</computeroutput>. La sortie du journal de
       débogage sera enregistrée en utilisant syslog.</para>
 
       <para><note>
@@ -395,7 +395,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
         </listitem>
       </orderedlist>
 
-      <para>Pour personnaliser davantage pam_vbox, il existe les propriétés 
+      <para>Pour personnaliser davantage pam_vbox, il existe les propriétés
       invité suivantes&#xA0;:</para>
 
       <orderedlist>
@@ -449,7 +449,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
         <para>Pour une installation manuelle ou différée, le fichier
         <computeroutput>vbox-greeter.desktop</computeroutput> doit être copié
         de <computeroutput>/opt/VBoxGuestAdditions-<version>/shared/VBoxGuestAdditions/</computeroutput>
-        dans le répertoire <computeroutput>xgreeters</computeroutput>, 
+        dans le répertoire <computeroutput>xgreeters</computeroutput>,
         généralement <computeroutput>/usr/share/xgreeters/</computeroutput>.
         Merci de vous reporter à la documentation de votre OS invité pour le
         bon répertoire de LightDM greeter.</para>
@@ -517,7 +517,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
 
           <listitem>
             <para><computeroutput>Theme/BackgroundColor</computeroutput> :
-            Couleur RRGGBB hexadécimale du fond. Vous devez définir cette 
+            Couleur RRGGBB hexadécimale du fond. Vous devez définir cette
             propriété en lecture seule pour l'invité
             (<computeroutput>RDONLYGUEST</computeroutput>).</para>
           </listitem>
@@ -531,7 +531,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
 
           <listitem>
             <para><computeroutput>Theme/LogonDialog/BackgroundColor</computeroutput>:
-            Couleur en RRGGBB hexadécimale du fond de la boîte de dialogue 
+            Couleur en RRGGBB hexadécimale du fond de la boîte de dialogue
             d'identification.
             Vous devez définir cette propriété en lecture seule pour l'invité
             (<computeroutput>RDONLYGUEST</computeroutput>).</para>
@@ -540,14 +540,14 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
           <listitem>
             <para><computeroutput>Theme/LogonDialog/ButtonColor</computeroutput> :
             Couleur de fond RRGGBB hexadécimale du bouton de la boîte de dialogue
-            d'identification. Vous devez définir cette propriété en lecture 
+            d'identification. Vous devez définir cette propriété en lecture
             seule pour l'invité
             (<computeroutput>RDONLYGUEST</computeroutput>).</para>
           </listitem>
         </orderedlist>
 
         <note><para>Les mêmes restrictions des propriétés invité ci-dessus
-        s'appliquent comme celles indiquées dans la section 
+        s'appliquent comme celles indiquées dans la section
         pam_vbox.</para></note>
       </sect3>
 
@@ -564,7 +564,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
       (en bref&#xA0;: Sysprep) pour préparer un système Windows à être déployé ou
       redistribué. Si Windows 2000 et XP sont inclus avec Sysprep sur leur média
       d'installation, l'outil est également disponible en téléchargement sur le
-      site Internet de Microsoft. Dans une installation standard de Windows Vista 
+      site Internet de Microsoft. Dans une installation standard de Windows Vista
       et 7, Sysprep est déjà inclu. Sysprep consiste principalement dans un
       exécutable qui s'appelle <computeroutput>sysprep.exe</computeroutput> qui
       est appelé par l'utilisateur pour passer l'installation Windows en mode
@@ -655,7 +655,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
           </listitem>
 
           <listitem>
-            <para>Serveur X.Org versions 1.3 et later (vboxvideo_drv_13.so et vboxmouse_drv_13.so et 
+            <para>Serveur X.Org versions 1.3 et later (vboxvideo_drv_13.so et vboxmouse_drv_13.so et
             ainsi de suite).</para>
           </listitem>
         </itemizedlist> Par défaut, vous pouvez trouver ces pilotes dans le
@@ -668,13 +668,13 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
 
       <para>Pour que l'intégration graphique fonctionne correctement, le serveur
       X doit charger le pilote vboxvideo (beaucoup de versions récentes du serveur
-      X le cherchent automatiquement si elles voient qu'elles sont sur VirtualBox) 
+      X le cherchent automatiquement si elles voient qu'elles sont sur VirtualBox)
       et pour une expérience utilisateur optimale,  les pilotes du noyau invité
       doivent être chargés et l'outil des suppléments invité VBoxClient doit être
       en fonction en tant que client dans la session X. Pour que l'intégration de
       la souris fonctionne correctement, les pilotes du noyau invité doivent
       être chargés et, au surplus, dans les serveurs X de X.Org X11R6.8
-      à X11R7.1 et dans XFree86 version 4.3, le bon pilote vboxmouse doit être 
+      à X11R7.1 et dans XFree86 version 4.3, le bon pilote vboxmouse doit être
       chargé et associé à /dev/mouse ou /dev/psaux&#xA0;; dans le serveur X.Org
       1.3 ou supérieur, un pilote de souris PS/2 doit être chargé et le bon
       pilote vboxmouse doit être associé à /dev/vboxguest.</para>
@@ -696,7 +696,7 @@ HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</s
       <para>Avec les serveurs X pre-1.3, vous pouvez également ajouter vos propres
       modes dans le fichier de configuration du serveur X. Vous devez simplement
       les ajouter à la liste des "Modes" de la sous-section "Display" de la
-      section "Screen". Par exemple, la section affichée ici a un mode de 
+      section "Screen". Par exemple, la section affichée ici a un mode de
       résolution personnalisé de 2048x800&#xA0;:</para>
 
       <screen>Section "Screen"
@@ -782,7 +782,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
     de pilote pour ce périphérique particulier. Tant les cartes PCI normales que
     certaines cartes PCI express sont supportées. L'AGP et certaines cartes PCI
     Express ne sont pas supportées pour l'instant si elles s'appuient sur la
-    programmation d'unités GART (Graphics Address Remapping Table) pour la gestion 
+    programmation d'unités GART (Graphics Address Remapping Table) pour la gestion
     des textures vu qu'il fait plutôt des opérations non triviales avec l'association
     de pages qui s'interfacent avec IOMMU. Il se peut que cette limite soit
     surmontée dans les prochaines versions.</para>
@@ -807,7 +807,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
     avertissement au démarrage et l'exécution de la VM s'achèvera si le pilote
     invité essaie d'activer le bus mastering de la carte.</para>
 
-    <para>Très couramment, le BIOS ou 
+    <para>Très couramment, le BIOS ou
     l'OS hôte désactive par défaut l'IOMMU. Donc avant d'essayer de l'utiliser,
     merci de vous assurer que
     <orderedlist>
@@ -830,8 +830,8 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
 
         <listitem>
           <para>Votre noyau Linux a été compilé avec le support IOMMU (y compris
-          la réassociation du DMA, voir l'option de compilation 
-          <computeroutput>CONFIG_DMAR</computeroutput>). Le pilote PCI stub 
+          la réassociation du DMA, voir l'option de compilation
+          <computeroutput>CONFIG_DMAR</computeroutput>). Le pilote PCI stub
           (<computeroutput>CONFIG_PCI_STUB</computeroutput>) est requis aussi.</para>
         </listitem>
 
@@ -847,7 +847,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
     Pour visualiser la liste des périphériques PCI disponibles, utilisez
     la commande <computeroutput>lspci</computeroutput>. La sortie ressemblera à
     ceci :</para>
-   
+
     <screen>01:00.0 VGA compatible controller: ATI Technologies Inc Cedar PRO [Radeon HD 5450]
 01:00.1 Audio device: ATI Technologies Inc Manhattan HDMI Audio [Mobility Radeon HD 5000 Series]
 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit
@@ -872,7 +872,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
     <para>Si la machine virtuelle a un périphérique PCI attaché, certaines
     limitations s'appliquent&#xA0;: <orderedlist>
         <listitem>
-           <para>Seules les cartes PCI aux interruptions non partagées (telles que 
+           <para>Seules les cartes PCI aux interruptions non partagées (telles que
            l'utilisation de MSI sur l'hôte) sont supportées pour le moment.</para>
         </listitem>
 
@@ -900,7 +900,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
     <sect2 id="webcam-passthrough">
       <title>Utilisation d'une webcam hôte dans l'invité</title>
 
-      <para>VirtualBox 4.3 inclut une fonction expérimentale permettant à un 
+      <para>VirtualBox 4.3 inclut une fonction expérimentale permettant à un
       invité d'utiliser une webcam hôte. Ceci complète le support général du
       passthrough USB qui était la façon dont on utilisait généralement les webcams
       dans les anciennes versions. Le support de webcam passthrough peut gérer
@@ -933,12 +933,12 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
             L'alias '.0' signifie le périphérique d'entrée vidéo par défaut sur
             l'hôte, '.1', '.2', etc renvoient au premier, au deuxième, etc.
             périphérique d'entrée vidéo. L'ordre des périphériques dépend de
-            l'hôte. 
+            l'hôte.
           </para></listitem>
           <listitem><para>Connecter une webcam à une VM en fonction :
             <screen>VBoxManage controlvm "nom VM" webcam attach [chemin_hôte_|alias [paramètres]]</screen>
             Ceci connectera une webcam à l'invité. Le paramètre
-            <computeroutput>settings</computeroutput> est une chaîne 
+            <computeroutput>settings</computeroutput> est une chaîne
             <computeroutput>Paramètre1=Valeur1;Paramètre2=Valeur2</computeroutput>, qui
             permet de configurer la webcam émulée. Les paramètres suivants
             sont supportés :</para>
@@ -954,7 +954,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
               <listitem>
                 <para><computeroutput>MaxPayloadTransferSize</computeroutput> Combien d'octets
                 à la fois peut envoyer la webcam à l'invité. La valeur par défaut
-                est de 3060 octets, ce qu'utilisent certaines 
+                est de 3060 octets, ce qu'utilisent certaines
                 webcams. Des valeurs supérieures réduisent légèrement la charge du
                 processeur si l'invité peut utiliser des tampons plus gros. Cependant,
                 il se pourrait qu'un <computeroutput>MaxPayloadTransferSize</computeroutput>
@@ -1016,7 +1016,7 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
       <para>Outre les résolutions VESA standards, le BIOS VESA de VirtualBox
       vous permet d'ajouter jusqu'à 16 modes graphiques personnalisés qui seront
       signalés au système d'exploitation invité. Quand on utilise des invités
-      Windows avec les suppléments invité de VirtualBox, un pilote graphique 
+      Windows avec les suppléments invité de VirtualBox, un pilote graphique
       personnalisé sera utilisé à la place de la solution VESA de repli, donc
       ces informations ne s'appliquent pas.</para>
 
@@ -1024,14 +1024,14 @@ VBoxManage controlvm "nom VM" unplugcpu 3</screen></para>
       chaque VM en utilisant la fonction de données supplémentaires. La clé des
       données supplémentaires s'appelle
       <literal>CustomVideoMode<x></literal> avec <literal>x</literal> étant
-      un numéro de 1 à 16. Merci de remarquer que les modes seront lus de 1 au 
+      un numéro de 1 à 16. Merci de remarquer que les modes seront lus de 1 au
       numéro suivant non défini ou jusqu'à 16. L'exemple suivant ajoute un mode
       graphique correspondant à la résolution d'affichage native de nombreux
       ordinateurs notebook&#xA0;:</para>
 
       <screen>VBoxManage setextradata "nom VM" "CustomVideoMode1" "1400x1050x16"</screen>
 
-      <para>Les IDs du mode VESA pour les modes graphiques personnalisés commencent 
+      <para>Les IDs du mode VESA pour les modes graphiques personnalisés commencent
       à <literal>0x160</literal>. Afin d'utiliser le mode graphique personnalisé
       ci-dessus, vous devez donner à Linux la ligne de commande suivante&#xA0;:</para>
 
@@ -1047,7 +1047,7 @@ vga = 864</screen>
       <title>Configuration de la résolution maximum des invités quand on utilise
       l'interface graphique</title>
 
-      <para>Quand on démarre des systèmes invités ayant les suppléments invité 
+      <para>Quand on démarre des systèmes invités ayant les suppléments invité
       installés en utilisant l'interface graphique (l'application normale de
       VirtualBox), ils ne seront pas autorisés à utiliser des résolutions d'écran
       supérieures à la taille de l'écran de l'hôte sauf si l'utilisateur les
@@ -1067,7 +1067,7 @@ vga = 864</screen>
 
       <screen>VBoxManage setextradata global GUI/MaxGuestResolution auto</screen>
 
-      <para>restaure les paramètres par défaut. Remarquez que ces paramètres 
+      <para>restaure les paramètres par défaut. Remarquez que ces paramètres
       s'appliquent globalement à tous les systèmes invités, pas seulement à une
       seule machine.</para>
     </sect2>
@@ -1081,12 +1081,12 @@ vga = 864</screen>
 
       <para>À partir de la version 1.4, plutôt que d'utiliser des images de disques
       virtuels (comme décrit en détail au <xref linkend="storage" />),
-      VirtualBox peut aussi présenter aux machines virtuelles soit des disques 
+      VirtualBox peut aussi présenter aux machines virtuelles soit des disques
       durs entiers, soit des partitions sélectionnées, comme des disques virtuels.</para>
 
       <para>Avec VirtualBox, ce type d'accès s'appelle "l'accès au disque dur brut"&#xA0;;
       il permet à un système d'exploitation invité d'accéder à son disque dur
-      virtuel sans passer par le système de fichiers de l'OS hôte. La 
+      virtuel sans passer par le système de fichiers de l'OS hôte. La
       différence de performance finale entre les fichiers images et les disques
       bruts varie beaucoup selon l'overhead du système de fichiers hôte et le
       dynamisme de la croissance des images, et enfin des stratégies de mise en
@@ -1140,7 +1140,7 @@ vga = 864</screen>
         que si aucun volume n'est monté à partir de là.</para>
 
         <para>La création de l'image exige un accès en lecture/écriture au
-        périphérique donné. L'accès en lecture/écriture sera aussi nécessaire 
+        périphérique donné. L'accès en lecture/écriture sera aussi nécessaire
         plus tard lors de l'utilisation de l'image d'une machine virtuelle. Sur
         certaines plateformes hôtes (comme Windows Vista et supérieur), l'accès
         au disque brut peut être restreint et non autorisé par l'OS hôte dans
@@ -1182,10 +1182,10 @@ vga = 864</screen>
 
         <para>VirtualBox utilise la même numérotation de partitions que l'hôte Linux.
         Il s'en suit que les numéros donnés dans l'exemple ci-dessus se référeraient
-        respectivement à la première partition primaire et au premier lecteur 
+        respectivement à la première partition primaire et au premier lecteur
         logique de la partition étendue.</para>
 
-        <para>Sur un hôte Windows, au lieu de spécifier le périphérique comme 
+        <para>Sur un hôte Windows, au lieu de spécifier le périphérique comme
         ci-dessus, utilisez par exemple <code>\\.\PhysicalDrive0</code>. Sur un
         hôte Mac OS X, utilisez plutôt par exemple <code>/dev/disk1</code>.
         Remarquez que sur OS X, vous ne pouvez utiliser que des partitions non
@@ -1212,7 +1212,7 @@ vga = 864</screen>
         image, utilisez<screen>VBoxManage internalcommands createrawvmdk -filename /chemin/vers/fichier.vmdk
       -rawdisk /dev/sda -partitions 1,5 -relative</screen>Utilisée depuis une
       machine virtuelle, l'image ne se réfèrera pas à tout le disque mais seulement
-      aux partitions individuelles (dans l'exemple 
+      aux partitions individuelles (dans l'exemple
         <code>/dev/sda1</code> et <code>/dev/sda5</code>). Par conséquent, l'accès
         en lecture/écriture n'est requis que pour les partitions concernées, pas
         pour tout le disque. Mais lors de la création, un accès en lecture seule
@@ -1222,7 +1222,7 @@ vga = 864</screen>
         <para>Dans certaines configurations, il peut être nécessaire de modifier
         le code du MBR de l'image créée, par exemple pour remplacer le chargeur
         de démarrage Linux utilisé sur l'hôte par un autre chargeur de démarrage.
-        Cela permet, par exemple, à l'invité, de démarrer directement sur Windows, 
+        Cela permet, par exemple, à l'invité, de démarrer directement sur Windows,
         alors que l'hôte démarre sur Linux sur le "même" disque. Pour obtenir cela,
         le paramètre <computeroutput>-mbr</computeroutput> vous est offert. Il
         spécifie un nom de fichier à partir duquel il faut prendre le code du MBR.
@@ -1303,7 +1303,7 @@ VBoxManage setextradata "nom VM"
       machine virtuelle qui accède à la cible iSCSI. Vous devez choisir une
       IP statique libre et une adresse MAC non utilisée par d'autres machines
       virtuelles. Dans l'exemple ci-dessous, adaptez le nom de la  machine virtuelle,
-      l'adresse MAC, la configuration IP et le nom du réseau interne ("MyIntNet") 
+      l'adresse MAC, la configuration IP et le nom du réseau interne ("MyIntNet")
       selon vos besoins. Les huit commandes suivantes doivent être d'abord
       lancées&#xA0;:<screen>VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/Trusted 1
 VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/Config/MAC 08:00:27:01:02:0f
@@ -1324,7 +1324,7 @@ VBoxManage setextradata "nom VM" VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/Is
       numérique, vu qu'il n'y a pas de résolveur DNS pour le réseau interne.</para>
 
       <para>La machine virtuelle ayant la cible iSCSI devrait être démarrée avant
-      que la VM qui l'utilise ne soit allumée. Si vous démarrez une machine 
+      que la VM qui l'utilise ne soit allumée. Si vous démarrez une machine
       virtuelle qui utilise un disque iSCSI sans que la cible iSCSI ne poit allumée,
       elle peut mettre jusqu'à 200 secondes avant de détecter cette situation.
       La VM ne pourra pas s'allumer.</para>
@@ -1377,7 +1377,7 @@ VBoxManage setextradata "nom VM"
     s'appliquent les mêmes paramètres de configuration, sauf que vous pouvez choisir
     le nom du chemin de <computeroutput>Location</computeroutput> plus librement.
     Les sockets du domaine local se mettent n'importe où, pourvu que l'utilisateur
-    qui exécute VirtualBox ait le droit de créer un nouveau fichier dans le 
+    qui exécute VirtualBox ait le droit de créer un nouveau fichier dans le
     répertoire. La dernière commande ci-dessus définit que VirtualBox agit comme
     un serveur, c'est-à-dire qu'il crée lui-même le tuyau nommé au lieu de se
     connecter à un autre qui existe déjà.</para>
@@ -1390,7 +1390,7 @@ VBoxManage setextradata "nom VM"
       <title>Configurer l'adresse d'une interface réseau NAT</title>
 
       <para>En mode NAT, on affecte à l'interface réseau de l'invité une plage
-      IPv4 <computeroutput>10.0.x.0/24</computeroutput> par défaut, où 
+      IPv4 <computeroutput>10.0.x.0/24</computeroutput> par défaut, où
       <computeroutput>x</computeroutput> correspond à l'instance d'une interface
       NAT +2. Donc, <computeroutput>x</computeroutput> vaut 2 quand il n'y a
       qu'une instance NAT d'active. Dans ce cas, l'invité se voit affecter l'adresse
@@ -1405,7 +1405,7 @@ VBoxManage setextradata "nom VM"
 
       <para>Cette commande réserverait les adresses réseaux de
       <computeroutput>192.168.0.0</computeroutput> à
-      <computeroutput>192.168.254.254</computeroutput> à la première instance 
+      <computeroutput>192.168.254.254</computeroutput> à la première instance
       réseau NAT de "nom VM". On affecterait à l'invité l'IP
       <computeroutput>192.168.0.15</computeroutput> et on pourrait trouver la
       passerelle par défaut sur <computeroutput>192.168.0.2</computeroutput>.</para>
@@ -1453,7 +1453,7 @@ VBoxManage modifyvm "nom VM" --nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe</screen
       raison technique en est que le moteur NAT utilise des sockets pour la
       communication.) Si, pour une raison quelconque, vous voulez changer ce
       comportement, vous pouvez dire au moteur NAT d'associer à une interface en
-      particulier une adresse IP. Utilisez la commande suivante&#xA0;: 
+      particulier une adresse IP. Utilisez la commande suivante&#xA0;:
       <screen>VBoxManage modifyvm "nom VM" --natbindip1 "10.45.0.2"</screen></para>
 
       <para>Après cela, le trafic sortant sera envoyé par interface ayant l'adresse
@@ -1495,7 +1495,7 @@ VBoxManage modifyvm "nom VM" --nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe</screen
           à l'utilisateur d'associer non seulement un hôte, mais aussi des
           domaines et même des conventions de nommage plus complexes si nécessaire.</para>
             <para>
-              La commande suivante définit la règle d'association d'un nom et 
+              La commande suivante définit la règle d'association d'un nom et
               d'une IP spécifiée&#xA0;:</para>
             <screen>VBoxManage setextradata "nom VM" \
       "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
@@ -1522,7 +1522,7 @@ VBoxManage setextradata "nom VM" \
       "VBoxInternal/Devices/e1000/0/LUN#0/Config/HostResolverMappings/ \
       all_blocked_site/HostNamePattern" "*.blocked-site.*|*.fb.org"</screen>
            <note><para>Le mécanisme de résolution de l'hôte devrait être activé
-           pour utiliser les règles d'association définies par l'utilisateur 
+           pour utiliser les règles d'association définies par l'utilisateur
            (merci de voir <xref linkend="nat_host_resolver_proxy" /> pour plus
            de détails).</para></note>
         </sect3>
@@ -1534,7 +1534,7 @@ VBoxManage setextradata "nom VM" \
       <para>Par défaut, le c&#x153;ur de NAT utilise des alias et des ports
       aléatoires quand il génère un alias pour la connexion. Cela fonctionne bien
       pour la plupart des protocoles comme SSH, FTP et ainsi de suite. Mais
-      certains protocoles pourraient nécessiter un comportement plus transparent 
+      certains protocoles pourraient nécessiter un comportement plus transparent
       ou dépendre du vrai numéro de port pour envoyer un paquet. Il est possible
       de modifier le mode NAT avec l'interface VBoxManage avec les commandes
       suivantes&#xA0;: <screen>VBoxManage modifyvm "nom VM" --nataliasmode1 proxyonly</screen>
@@ -1597,7 +1597,7 @@ VBoxManage setextradata "nom VM"
                                                "9852bf98-b83c-49db-a8de-182c42c7226b"</screen>
         </glossdef>
       </glossentry>
- 
+
       <glossentry>
         <glossterm>Informations carte mère DMI</glossterm>
         <glossdef>
@@ -1817,7 +1817,7 @@ VBoxManage setextradata "nom VM"
 
             <glossdef>
               <para>Début du débit absolu donné en millisecondes, où doit commencer
-              le réglage de l'heure, plutôt que d'essayer de l'ajuster tout 
+              le réglage de l'heure, plutôt que d'essayer de l'ajuster tout
               simplement. Il s'agit par défaut de 20 minutes.</para>
             </glossdef>
           </glossentry>
@@ -1864,7 +1864,7 @@ VBoxManage setextradata "nom VM"
   </sect1>
 
   <sect1 id="vboxbowsolaris11">
-    <title>Installer le pilote du réseau bridgé alternatif sur les invités 
+    <title>Installer le pilote du réseau bridgé alternatif sur les invités
     Solaris 11</title>
 
     <para>À partir de VirtualBox 4.1, VirtualBox inclut un nouveau pilote de
@@ -1879,7 +1879,7 @@ VBoxManage setextradata "nom VM"
     <screen>touch /etc/vboxinst_vboxflt</screen>
 
     <para>Pour obliger l'installation du pilote de filtre réseau basé sur Crossbow,
-    exécutez en tant qu'administrateur la commande suivante avant d'installer 
+    exécutez en tant qu'administrateur la commande suivante avant d'installer
     le paquet VirtualBox&#xA0;:</para>
 
     <screen>touch /etc/vboxinst_vboxbow</screen>
@@ -1927,10 +1927,10 @@ vboxvnic_template0 nge0   1000   2:8:20:25:12:75   random              23</scree
 
     <para>Une fois que l'échantillon VNIC est créé, toutes les VMs ayant besoin
     de faire partie du VLAN 23 par l'interface physique "nge0" pourront utiliser
-    le même échantillon VNIC. Cela simplifie et rend plus efficace la gestion des 
+    le même échantillon VNIC. Cela simplifie et rend plus efficace la gestion des
     VMs sur des VLANs car les détails du VLAN ne sont pas stockés dans la
     configuration de chaque VM mais récupérés dans le modèle VNIC qve vous pouvez
-    modifier n'importe quand en utilisant 
+    modifier n'importe quand en utilisant
     <computeroutput>dladm</computeroutput>. Outre l'ID du VLAN, des patrons de
     VNIC peuvent être créées avec des propriétés supplémentaires telles que les
     limites de bande passante, le fanout du processeur, etc. Reportez-vous à
@@ -1943,8 +1943,8 @@ vboxvnic_template0 nge0   1000   2:8:20:25:12:75   random              23</scree
     <title>Configurer plusieurs interfaces réseaux host-only sur les hôtes
     Solaris</title>
 
-    <para>Par défaut, VirtualBox vous offre une interface réseau host-only 
-    L'ajout de davantage d'interfaces réseaux host-only sur les hôtes Solaris 
+    <para>Par défaut, VirtualBox vous offre une interface réseau host-only
+    L'ajout de davantage d'interfaces réseaux host-only sur les hôtes Solaris
     exige une configuration manuelle. Voici comment ajouter deux interfaces
     réseaux host-only supplémentaires.</para>
 
@@ -1957,7 +1957,7 @@ vboxvnic_template0 nge0   1000   2:8:20:25:12:75   random              23</scree
     <para>Après vous être assuré que toutes les interfaces vboxnet sont
     désactivées, supprimez le pilote en utilisant&#xA0;:</para>
 
-    <para><screen>rem_drv vboxnet</screen>puis éditez le fichier 
+    <para><screen>rem_drv vboxnet</screen>puis éditez le fichier
     <computeroutput>/platform/i86pc/kernel/drv/vboxnet.conf</computeroutput> et
     ajoutez une ligne pour les nouvelles interfaces&#xA0;:</para>
 
@@ -1976,7 +1976,7 @@ de façon unique. Ensuite, rechargez le pilote vboxnet en utilisant&#xA0;:</para
     <computeroutput>/etc/netmasks</computeroutput>, utilisez NWAM
     <computeroutput>/etc/nwam/llp</computeroutput> et ajoutez les entrées adéquates
     pour définir le masque réseau et l'IP statique de chacune de ces interfaces.
-    L'installeur de VirtualBox ne met à jour ces fichiers de configuration que 
+    L'installeur de VirtualBox ne met à jour ces fichiers de configuration que
     pour l'interface "vboxnet0" qu'il crée par défaut.</para>
   </sect1>
 
@@ -2074,7 +2074,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
         <para>Pour désactiver toutes les personnalisations du gestionnaire de
         VM, faites <screen>VBoxManage setextradata global GUI/Customizations</screen></para>
       </sect2>
-      <sect2>      
+      <sect2>
         <title>Personnalisation du sélecteur de VM</title>
       <para>Les paramètres de données supplémentaires suivants sont disponibles,
       par machine, pour modifier le comportement de la fenêtre du sélecteur de VM
@@ -2122,7 +2122,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
     <para>Merci de remarquer que ces paramètres n'empêchent pas l'utilisateur de
   reconfigurer la VM avec <computeroutput>VBoxManage modifyvm</computeroutput>.</para>
   </sect2>
-                                                                                                                                                                                                                                                                                                                                                                                           
+
   <sect2>
     <title>Configurer les entrées du menu de sélection de VM</title>
 
@@ -2204,7 +2204,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
     <para>Vous pouvez désactiver (c'est-à-dire inhiber) certaines actions
     du menu dans la fenêtre de la VM :</para>
     <screen>VBoxManage setextradata "nom VM" GUI/RestrictedRuntimeMenus OPTION[,OPTION...]</screen>
-    
+
     <para>où <computeroutput>OPTION</computeroutput> est l'un des mots-clés
     suivants :</para><glosslist>
     <glossentry>
@@ -2229,7 +2229,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
        VM.</para>
    </glossdef>
   </glossentry>
-                                        
+
   <glossentry>
     <glossterm><computeroutput>Devices</computeroutput></glossterm>
     <glossdef>
@@ -2248,7 +2248,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
     <glossentry>
       <glossterm><computeroutput>Debug</computeroutput></glossterm>
       <glossdef>
-        <para>N'affiche pas le menu <emphasis>Débogage</emphasis> dans la fenêtre 
+        <para>N'affiche pas le menu <emphasis>Débogage</emphasis> dans la fenêtre
         de la VM. Le menu de débogage n'est visible que si on démarre la GUI avec
         des paramètres spécial en ligne de commandes ou des paramètres de
         variables d'environnement particulières.</para>
@@ -2283,7 +2283,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
         <glossterm><computeroutput>OpticalDisks</computeroutput></glossterm>
         <glossdef>
           <para>N'affiche pas l'icône du CD dans la barre d'état de la fenêtre
-          de la VM. Par défaut, l'icône du CD ne s'affiche que si la configuration 
+          de la VM. Par défaut, l'icône du CD ne s'affiche que si la configuration
           de la VM contient un ou plusieurs lecteurs CD.</para>
         </glossdef>
       </glossentry>
@@ -2305,7 +2305,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
           configuration de la VM contient un ou plusieurs adaptateurs réseaux.</para>
         </glossdef>
       </glossentry>
-      
+
       <glossentry>
         <glossterm><computeroutput>USB</computeroutput></glossterm>
         <glossdef>
@@ -2347,7 +2347,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
       </glossentry>
 
     </glosslist>
-    
+
     <para>C'est un paramètre individuel à chaque VM. Toutes les combinaisons de
     ce qui précède est possible. Si vous spécifiez toutes les options, aucune
     icône n'est affichée dans la barre d'état de la fenêtre de la VM. Pour
@@ -2383,7 +2383,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
             <para>Ne pas autoriser le passage de la VM en mode échelonné.</para>
           </glossdef>
         </glossentry>
-      
+
       </glosslist>
 
       <para>C'est un paramètre individuel à chaque VM. Vous pouvez combiner
@@ -2398,8 +2398,8 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
       <sect2>
         <title>Personnalisation de la touche hôte</title>
 
-        <para>Pour désactiver toutes les combinaisons de touches de l'hôte, 
-        ouvrez les préférences et modifiez la touche hôte sur <emphasis>Aucune</emphasis>. 
+        <para>Pour désactiver toutes les combinaisons de touches de l'hôte,
+        ouvrez les préférences et modifiez la touche hôte sur <emphasis>Aucune</emphasis>.
         Cela pourrait être utile lors de l'utilisation de VirtualBox en mode
         kiosque.</para>
 
@@ -2408,7 +2408,7 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
 
         <screen>VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=F,...."</screen>
 
-        <para>La liste suivante montre les actions possibles avec la touche 
+        <para>La liste suivante montre les actions possibles avec la touche
         hôte ainsi que leur raccourci par défaut avec la touche hôte. Le paramétrage
         d'une action sur <emphasis>Aucune</emphasis> désactivera cette action
         de la touche hôte.</para>
@@ -2597,10 +2597,10 @@ passer au moins une des deux commandes ci-dessus si vous avez activé les CoreDu
   <sect1 id="vboxwebsrv-daemon">
     <title>Démarrer le service Web de VirtualBox automatiquement</title>
 
-    <para>Le service Web de VirtualBox 
+    <para>Le service Web de VirtualBox
     (<computeroutput>vboxwebsrv</computeroutput>) est utilisé pour contrôler
     VirtualBox à distance. Il est documenté en détails dans le Software
-    Development Kit (SDK) de VirtualBox&#xA0;; merci de voir <xref linkend="VirtualBoxAPI" />. 
+    Development Kit (SDK) de VirtualBox&#xA0;; merci de voir <xref linkend="VirtualBoxAPI" />.
     Comme la base client qui utilise cette interface grossit, nous avons ajouté
     des scripts de démarrage pour les systèmes d'exploitation que nous supportons.
     Les sections suivantes décrivent la manière de les utiliser. Le service
@@ -2754,7 +2754,7 @@ svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=roo
       <para>Sur Mac OS X, on utilise launchd pour démarrer le service web de
       VirtualBox. Vous pouvez trouver un fichier exemple de configuration dans
       <computeroutput>$HOME/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</computeroutput>.
-      Vous pouvez l'activer en changeant la clé 
+      Vous pouvez l'activer en changeant la clé
       <computeroutput>Disabled</computeroutput> de
       <computeroutput>true</computeroutput> en
       <computeroutput>false</computeroutput>. Pour démarrer manuellement
@@ -2798,12 +2798,12 @@ svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=roo
 
     <para>
     Vous pouvez spécifier toutes les valeurs de configuration soit en ligne
-    de commande, soit par des données supplémentaires globales, tandis que 
+    de commande, soit par des données supplémentaires globales, tandis que
     les valeurs en ligne de commandes ont toujours une priorité élevée si on
     les définit. Certaines des valeurs de configuration peuvent être également
     spécifiées sur une base individuelle par VM. Donc, l'ordre pour regarder
     les paramètres est&#xA0;: ligne de comande, données supplémentaires pour
-    chaque VM (s'il y en a), données supplémentaires globales. 
+    chaque VM (s'il y en a), données supplémentaires globales.
     </para>
 
     <sect2 id="vboxwatchdog-ballonctrl">
@@ -2841,7 +2841,7 @@ svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=roo
         vous n'indiquez rien.</para>
 
         <para>Pour définir la limite inférieure d'un ballon en Mo, c'est en
-        ligne de commande avec <screen>--balloon-lower-limit <Taille en Mo></screen> 
+        ligne de commande avec <screen>--balloon-lower-limit <Taille en Mo></screen>
         ou par une donnée supplémentaire globale avec
         <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonLowerLimitMB <Taille en Mo></screen>.
         La limite inférieure par défaut est de 128 si vous n'indiquez rien.</para>
@@ -2860,7 +2860,7 @@ svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=roo
         VMs du serveur seront gérées lorsqu'aucune réponse hôte ne sera reçue
         dans les 30 secondes.</para>
 
-        <para>Pour définir en ligne de commandes les groupes gérés par la 
+        <para>Pour définir en ligne de commandes les groupes gérés par la
         détection de l'isolement de l'hôte&#xA0;:
         <screen>--apimon-groups=<string[,stringN]></screen> ou utilisez
         une donnée supplémentaire globale avec
@@ -2876,7 +2876,7 @@ svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=roo
 
         <para>Pour régler la réponse d'isolement finale en ligne de commandes&#xA0;:
         <screen>--apimon-isln-response=<cmd></screen> ou en utilisant
-        une donnée supplémentaire globale avec 
+        une donnée supplémentaire globale avec
         <screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationResponse <cmd></screen>
         Les commandes de réponse suivantes sont disponibles&#xA0;:
         <itemizedlist>
@@ -3034,7 +3034,7 @@ svccfg -s svc:/application/virtualbox/balloonctrl:default setprop config/balloon
     grande partie du code est issue de contributions d'utilisateurs et elle
     n'est en aucun cas supportée par Oracle.</para>
 
-    <para>La gestion du clavier est très sérieusement limitée et seul la couche 
+    <para>La gestion du clavier est très sérieusement limitée et seul la couche
     du clavier américain fonctionne. Les autres plans de clavier auront au
     moins quelques touches, qui produiront de mauvais résultats (avec des
     effets souvent très surprenants), et pour les plans ayant des différences
@@ -3069,7 +3069,7 @@ svccfg -s svc:/application/virtualbox/balloonctrl:default setprop config/balloon
   <sect1 id="autostart">
     <title>Démarrer des machines virtuelles lors de l'amorçage du système</title>
 
-    <para>À partir de VirtualBox 4.2.0, il est possible de démarrer des VMs 
+    <para>À partir de VirtualBox 4.2.0, il est possible de démarrer des VMs
     automatiquement à l'amorçage du système sur Linux, Solaris et Mac OS X,
     pour tous les utilisateurs. </para>
 
@@ -3144,7 +3144,7 @@ alice = {
 
       <para>Sur Mac OS X, on utilise launchd pour démarrer le service autostart
       de VirtualBox. Vous pouvez trouver un fichier de configuration exemple
-      dans 
+      dans
       <computeroutput>/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist</computeroutput>.
       Pour activer le service, copiez le fichier dans <computeroutput>/Library/LaunchDaemons</computeroutput>
       et passez la clé <computeroutput>Disabled</computeroutput> de
@@ -3183,7 +3183,7 @@ alice = {
   <sect1 id="hostpowertweaks">
     <title>Prise en charge des événements de gestion de l'énergie de l'hôte</title>
 
-    <para>Certains événements de la gestion d'énergie de l'hôte sont gérés par 
+    <para>Certains événements de la gestion d'énergie de l'hôte sont gérés par
     VirtualBox. Le comportement dépend en fait de la plateforme :</para>
 
     <para>
@@ -3197,7 +3197,7 @@ alice = {
                de stockage non volatile puis s'éteint.
              </para>
              <para>
-               Cet événement n'est actuellement géré que sur les hôtes Windows 
+               Cet événement n'est actuellement géré que sur les hôtes Windows
                et Mac OS X. Quand il est généré, VirtualBox mettra en pause toutes
                les VMs en fonction.
              </para>
@@ -3211,10 +3211,10 @@ alice = {
                prolongée.
              </para>
              <para>
-               Cet événement n'est actuellement géré que sur les hôtes Windows 
+               Cet événement n'est actuellement géré que sur les hôtes Windows
                et Mac OS X.
                Quand cet événement est généré, VirtualBox réveillera les VMs qui
-               ont été mises en pause. 
+               ont été mises en pause.
              </para>
            </glossdef>
          </glossentry>
@@ -3226,11 +3226,11 @@ alice = {
                moins de 5 pour cent de sa charge).
              </para>
              <para>
-               Cet événement n'est actuellement géré que sur les hôtes Windows 
+               Cet événement n'est actuellement géré que sur les hôtes Windows
                et Mac OS X.
                Quand cet événement est généré, VirtualBox sauvegardera l'état et
                terminera toutes les VMs pour préparer une coupure potentielle de
-               l'hôte 
+               l'hôte
          </para>
              <para>Ce comportement est configurable. En utilisant la commande
              suivante, aucune VM n'est sauvegardé :</para>
diff --git a/doc/manual/fr_FR/user_BasicConcepts.xml b/doc/manual/fr_FR/user_BasicConcepts.xml
index 64cf967..cee1822 100644
--- a/doc/manual/fr_FR/user_BasicConcepts.xml
+++ b/doc/manual/fr_FR/user_BasicConcepts.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="BasicConcepts">
   <title>Configurer des machines virtuelles</title>
 
@@ -10,9 +10,9 @@
   machines virtuelles.</para>
 
   <para>Vous disposez d'une latitude considérable dans la décision sur le matériel
-  qui sera donné à l'invité. Le matériel virtuel peut être utilisé pour 
+  qui sera donné à l'invité. Le matériel virtuel peut être utilisé pour
   communiquer avec le système hôte ou avec d'autres invités. Par exemple, si vous
-  fournissez à VirtualBox l'image d'un CD-ROM dans un fichier ISO, VirtualBox 
+  fournissez à VirtualBox l'image d'un CD-ROM dans un fichier ISO, VirtualBox
   peut présenter cette image à un système invité comme s'il s'agissait d'un
   CD-ROM physique. De la même façon, vous pouvez donner à un système invité
   un accès au réseau par sa carte réseau virtuelle, si tel est votre choix,
@@ -32,7 +32,7 @@
           <glossterm>Windows NT 4.0</glossterm>
 
           <glossdef>
-            <para>Toutes les versions, les éditions et les packs service sont 
+            <para>Toutes les versions, les éditions et les packs service sont
             complètement supportés&#xA0;; cependant, il y a des problèmes avec
             les anciens packs service. Nous recommandons d'installer le pack
             service 6a. Les suppléments invité sont disponibles avec des fonctionnalités
@@ -153,7 +153,7 @@
       <title>Invités Mac OS X</title>
 
       <para>À partir de la version 3.2, VirtualBox a un support expérimental des
-      invités Mac OS X. Il vous permet d'installer et d'exécuter des 
+      invités Mac OS X. Il vous permet d'installer et d'exécuter des
       versions non modifiées de Mac OS X sur du matériel hôte supporté.</para>
 
       <para>Si les solutions concurrentes offrent des modifications des
@@ -166,8 +166,8 @@
           <listitem>
             <para>Mac OS X est un logiciel propriétaire sous licence et il contient
             <emphasis role="bold">des restrictions juridiques et techniques</emphasis>
-            limitant son utilisation à certains matériels et scénarios 
-            d'utilisations. Il est important que vous compreniez et que vous 
+            limitant son utilisation à certains matériels et scénarios
+            d'utilisations. Il est important que vous compreniez et que vous
             respectiez ces restrictions.</para>
 
             <para>En particulier, pour la plupart des versions de Mac OS X, Apple
@@ -208,7 +208,7 @@
     <sect2 id="intro-64bitguests">
       <title>Invités 64 bits</title>
 
-      <para>VirtualBox supporte les systèmes d'exploitation invités 64 bits, 
+      <para>VirtualBox supporte les systèmes d'exploitation invités 64 bits,
       même sur des systèmes d'exploitation hôtes 32 bits,<footnote>
           <para>Le support des invités 64 bits a été ajouté avec VirtualBox 2.0&#xA0;;
           le support des invités 64 bits sur des hôtes 32 bits a été ajouté avec
@@ -220,7 +220,7 @@
           </listitem>
 
           <listitem>
-            <para>Vous devez activer la virtualisation matérielle pour la VM 
+            <para>Vous devez activer la virtualisation matérielle pour la VM
             particulière où vous voulez le support du 64 bits&#xA0;; la virtualisation
             logicielle n'est pas supportée pour les VMs 64 bits.</para>
           </listitem>
@@ -229,7 +229,7 @@
             <para>Si vous voulez utiliser un invité 64 bits sur un système
             d'exploitation hôte 32 bits, vous devez aussi sélectionner un système
             d'exploitation 64 bits pour la VM en particulier. Comme le support
-            du 64 bits sur des hôtes 32 bits  implique des dépassements 
+            du 64 bits sur des hôtes 32 bits  implique des dépassements
             supplémentaires, VirtualBox n'active ce support qu'à la demande expresse.</para>
 
             <para>Sur des hôtes 64 bits (fournis en général avec le support de la
@@ -270,7 +270,7 @@
           périphériques sont supportés par presque tous les systèmes d'exploitation
           passés et actuels.</para>
 
-          <para>En outre, VirtualBox peut fournir des périphériques d'entrée 
+          <para>En outre, VirtualBox peut fournir des périphériques d'entrée
           virtuels pour éviter de devoir capturer la souris et un clavier, comme
           décrit au <xref
           linkend="keyb_mouse_normal" />.</para>
@@ -308,7 +308,7 @@
           d'hôte USB, EHCI et OHCI. Deux contrôleurs hôtes sont nécessaires car
           l'OHCI ne gère que les périphériques USB à faible ou grande vitesse
           (USB 1.x et 2.0), alors que l'EHCI ne gère que les périphériques à
-          très haute vitesse (USB 2.0 seulement). Les contrôleurs USB émulés 
+          très haute vitesse (USB 2.0 seulement). Les contrôleurs USB émulés
           ne communiquent pas directement avec les périphériques sur l'hôte,
           mais plutôt avec une couche USB virtuelle qui rend abstrait le protocole USB et qui
           permet d'utiliser des périphériques USB distants.</para>
@@ -379,7 +379,7 @@
             <glossterm>Dossier d'instantané</glossterm>
 
             <glossdef>
-              <para>Par défaut, VirtualBox enregistre les données de l'instantané 
+              <para>Par défaut, VirtualBox enregistre les données de l'instantané
               avec vos autres données de configuration de VirtualBox&#xA0;; voir <xref
               linkend="vboxconfigdata" />. Avec ce paramètre, vous pouvez spécifier
               un autre dossier pour chaque VM.</para>
@@ -397,7 +397,7 @@
               sélectionnez "Hôte vers invité" ou "Invité vers hôte", VirtualBox
               copiera les données du presse-papier dans une direction.</para>
 
-              <para>Le partage du presse-papier nécessite que les suppléments 
+              <para>Le partage du presse-papier nécessite que les suppléments
               invité de VirtualBox soient installés. Il s'en suit que ce paramètre
               n'a aucun effet sans cela&#xA0;; voir <xref linkend="guestadditions" /> pour
               les détails.</para>
@@ -438,7 +438,7 @@
 
             <glossdef>
               <para>Si ceci est coché, VirtualBox enregistrera l'état des médias
-              montés entre deux exécutions d'une 
+              montés entre deux exécutions d'une
               machine virtuelle.</para>
             </glossdef>
           </glossentry>
@@ -452,7 +452,7 @@
               normalement dans la barre de menus de la machine virtuelle. Cette
               barre d'outils se réduit à une ligne grise, sauf si vous déplacez
               la souris dessus. Avec la barre d'outils, vous pouvez basculer entre
-              le mode plein écran et transparent, contrôler l'exécution de la 
+              le mode plein écran et transparent, contrôler l'exécution de la
               machine ou activer certains périphériques. Si vous ne voulez pas voir
               la barre d'outils, désactivez ce paramètre.</para>
               <para>Le deuxième paramètre permet d'afficher la barre d'outil en haut
@@ -468,7 +468,7 @@
       <para>Ici, vous pouvez taper une description pour votre machine virtuelle si
       vous le voulez. Cela n'a aucun effet sur le fonctionnement de la machine,
       mais vous pourriez trouver cet espace utile pour y noter des choses comme
-      la configuration d'une machine virtuelle et le logiciel 
+      la configuration d'une machine virtuelle et le logiciel
       installé dedans.</para>
       <para>Pour insérer un saut de ligne dans la zone de texte de la
       description, appuyez sur <emphasis>Majuscule+Entrée</emphasis>.</para>
@@ -482,7 +482,7 @@
     base présenté à la machine virtuelle.<note>
         <para>Le mécanisme d'activation de Microsoft Windows étant sensible aux
         modifications matérielles, si vous modifiez les paramètres matériels pour
-        un invité Windows, certains de ces changements peuvent provoquer la 
+        un invité Windows, certains de ces changements peuvent provoquer la
         demande d'une nouvelle activation de Microsoft.</para>
       </note></para>
 
@@ -496,7 +496,7 @@
 
             <glossdef>
               <para>Ceci définit la quantité de RAM affectée et donnée à la VM
-              quand elle est en fonction. La quantité de mémoire spécifiée 
+              quand elle est en fonction. La quantité de mémoire spécifiée
               sera récupérée sur le système d'exploitation hôte, donc il faut
               qu'elle soit disponible ou rendue disponible comme mémoire libre
               sur l'hôte au moment du démarrage de la VM et elle ne sera pas
@@ -538,12 +538,12 @@
               <para>Vous pouvez sélectionner ici le chipset qui sera présenté
               à la machine virtuelle. Avant VirtualBox 4.0, PIIX3 était ici la
               seule option disponible. Pour les systèmes d'exploitation invités
-              modernes tels que Mac OS X, ce vieux chipset n'est plus bien 
+              modernes tels que Mac OS X, ce vieux chipset n'est plus bien
               supporté. Du coup, VirtualBox 4.0 a introduit une émulation du
               chipset ICH9, plus moderne, qui supporte le PCI express, trois bus
               PCI, des ponts PCI-à-PCI et des Message Signaled Interrupts
-              (MSI). Cela permet aux systèmes d'exploitation modernes de gérer 
-              davantage de périphériques PCI sans besoin d'un partage d'IRQ. 
+              (MSI). Cela permet aux systèmes d'exploitation modernes de gérer
+              davantage de périphériques PCI sans besoin d'un partage d'IRQ.
               Remarquez que le support ICH9 est expérimental et non recommandé
               pour les systèmes d'exploitation invités qui n'en ont pas besoin.</para>
             </glossdef>
@@ -553,12 +553,12 @@
             <glossterm>Pointage de périphériques</glossterm>
 
             <glossdef>
-              <para>Le périphérique de pointage par défaut des invités anciens 
+              <para>Le périphérique de pointage par défaut des invités anciens
               est une souris PS/2 traditionnelle. Avec <emphasis>USB tablet</emphasis>,
               VirtualBox indique à la machine virtuelle qu'une tablette USB est
               connectée et il envoie les événements de souris à la machine
               virtuelle via ce périphérique. Le troisième paramètre est un
-              <emphasis>USB Multi-Touch Tablet</emphasis> adapté aux invités 
+              <emphasis>USB Multi-Touch Tablet</emphasis> adapté aux invités
               Windows récents.</para>
 
               <para>L'utilisation de la tablette USB virtuelle a l'avantage que les
@@ -569,7 +569,7 @@
               comme décrit au
 <xref
               linkend="keyb_mouse_normal" />. Cela rend l'utilisation de la
-              VM moins pénible même si les suppléments invité ne sont pas 
+              VM moins pénible même si les suppléments invité ne sont pas
               installés.<footnote>
                   <para>La tablette USB virtuelle a été ajoutée avec VirtualBox
                    3.2. Selon le système d'exploitation choisi, elle est maintenant
@@ -591,7 +591,7 @@
               pour une meilleure fiabilité.<note>
                   <para>L'activation de I/O APIC est <emphasis>requis</emphasis>
                   pour les systèmes d'exploitation invités 64 bits, surtout Windows
-                  Vista&#xA0;; il est aussi nécessaire si vous voulez utiliser 
+                  Vista&#xA0;; il est aussi nécessaire si vous voulez utiliser
                   plus d'un processeur virtuel dans une machine virtuelle.</para>
                 </note></para>
 
@@ -601,7 +601,7 @@
               virtualisation et donc, cela ralentit un peu l'OS invité.<warning>
                   <para>Tous les systèmes d'exploitation Windows à partir de Windows
                   2000 installent des noyaux différents en fonction de la
-                  disponibilité de l'I/O APIC. Comme avec l'ACPI, l'I/O APIC 
+                  disponibilité de l'I/O APIC. Comme avec l'ACPI, l'I/O APIC
                   <emphasis>ne doit pas être désactivé après
                   l'installation</emphasis> d'un OS invité Windows. Son
                   activation après l'installation n'aura par contre aucun effet.</para>
@@ -624,7 +624,7 @@
             <glossterm>Horloge matérielle en temps UTC</glossterm>
 
             <glossdef>
-              <para>Si ceci est coché, VirtualBox indiquera à l'invité l'heure 
+              <para>Si ceci est coché, VirtualBox indiquera à l'invité l'heure
               du système au format UTC plutôt qu'en temps local (hôte). Cela
               change la façon dont agit l'horloge en temps réel virtuelle (RTC)
               et peut être utile pour des systèmes d'exploitation invité de type
@@ -639,7 +639,7 @@
       par défaut au système d'exploitation invité. L'ACPI est le standard industriel
       actuel permettant au système d'exploitation de reconnaître le matériel, de
       configurer les cartes mères et d'autres périphériques, et de gérer l'énergie.
-      Comme tous les PCs modernes contiennent cette fonctionnalité et Windows 
+      Comme tous les PCs modernes contiennent cette fonctionnalité et Windows
       et Linux le supportent depuis des années, il est activé par défaut dans
       VirtualBox. On ne peut le désactiver qu'en ligne de commande&#xA0;; voir <xref
       linkend="vboxmanage-modifyvm" />.<warning>
@@ -654,10 +654,10 @@
     <sect2 id="settings-processor">
       <title>Onglet "Processeur"</title>
 
-      <para>Dans l'onglet "Processeur", vous pouvez définir le nombre de 
+      <para>Dans l'onglet "Processeur", vous pouvez définir le nombre de
       <emphasis
       role="bold">c&#x153;urs de processeur</emphasis> virtuels que devrait voir
-      le système d'exploitation invité. À partir de la version 3.0, VirtualBox 
+      le système d'exploitation invité. À partir de la version 3.0, VirtualBox
       supporte le symmetrical multiprocessing (SMP) et peut présenter jusqu'à 32
      c&#x153;urs de processeur virtuels à chaque machine virtuelle.</para>
 
@@ -690,12 +690,12 @@
 
     <sect2>
       <title>Onglet "Accélération"</title>
-      
+
       <para>Dans cet onglet, vous pouvez déterminer si VirtualBox devrait utiliser
       les extensions de virtualisation matérielle que peut supporter votre hôte
       et comment. C'est le cas avec la plupart des processeurs fabriqués après 2006.</para>
 
-      <para>Vous pouvez sélectionner individuellement pour chaque machine virtuelle 
+      <para>Vous pouvez sélectionner individuellement pour chaque machine virtuelle
       si VirtualBox devrait utiliser la virtualisation logicielle ou matérielle.<footnote>
           <para>Avant VirtualBox version 2.2, la virtualisation logicielle était
           par défaut&#xA0;; à partir de la version 2.2, VirtualBox activera la
@@ -719,7 +719,7 @@
 
       <para>Si votre processeur hôte supporte les fonctions <emphasis role="bold">pagination
       nested</emphasis> (AMD-V) ou <emphasis role="bold">EPT</emphasis> (Intel
-      VT-x), vous pouvez compter sur une augmentation significative des 
+      VT-x), vous pouvez compter sur une augmentation significative des
       performances en activant la pagination nested en plus de la virtualisation
       matérielle. Pour des détails techniques, voir <xref linkend="imbriquéepaging" />.</para>
     </sect2>
@@ -745,7 +745,7 @@
           de la résolution de l'écran et de la profondeur des couleurs sur l'affichage
           hôte, ainsi que de l'activation de <emphasis>l'accélération 3D</emphasis>
           et de <emphasis>l'accélération graphique 2D</emphasis>. Une ébauche
-          d'estimation est <emphasis>profondeur des couleurs</emphasis> / 8) x 
+          d'estimation est <emphasis>profondeur des couleurs</emphasis> / 8) x
           <emphasis>nombre de pixels verticalement</emphasis> x
                     <emphasis>nombre de pixels horizontalement</emphasis> x
           <emphasis>nombre d'écrans</emphasis> = <emphasis>nombre de bytes</emphasis>.
@@ -788,7 +788,7 @@
         <glossdef>
           <para>Si vous avez installé les Suppléments invité sur une machine
           virtuelle, vous pouvez ici sélectionner si l'invité devrait supporter
-          la vidéo accélérée 3D. Merci de vous reporter à <xref linkend="guestadd-3d" /> 
+          la vidéo accélérée 3D. Merci de vous reporter à <xref linkend="guestadd-3d" />
           pour des détails.</para>
         </glossdef>
       </glossentry>
@@ -812,11 +812,11 @@
           VirtualBox Remote Display Extension (VRDE), vous pouvez activer le serveur
           VRDP construit dans VirtualBox. Cela vous permet de vous connecter à
           la console de la machine virtuelle à distance avec n'importe quel
-          client RDP standard tel que <computeroutput>mstsc.exe</computeroutput> 
+          client RDP standard tel que <computeroutput>mstsc.exe</computeroutput>
           fourni avec Microsoft Windows. Sur les systèmes Linux et Solaris,
           vous pouvez utiliser le programme standard open-source
           <computeroutput>rdesktop</computeroutput>. Ces fonctionnalités sont
-          décrites en détail au 
+          décrites en détail au
           <xref linkend="vrde" />.</para>
         </glossdef>
       </glossentry>
@@ -854,7 +854,7 @@
         linkend="storage" />.</para>
       </note></para>
 
-    <para>Si vous avez utilisé l'assistant "Créer une VM" pour créer une machine, 
+    <para>Si vous avez utilisé l'assistant "Créer une VM" pour créer une machine,
     vous verrez normalement quelque chose comme suit&#xA0;:</para>
 
     <para><mediaobject>
@@ -875,7 +875,7 @@
 
         <listitem>
           <para>Vous verrez aussi un <emphasis role="bold">contrôleur SATA
-          controller,</emphasis> qui est un type plus moderne de contrôleur de 
+          controller,</emphasis> qui est un type plus moderne de contrôleur de
           stockage pour un transport de données du disque dur plus rapide, où
           on a rattaché les disques durs virtuels. Au départ, vous aurez en
           principe un disque comme celui-ci, mais comme vous pouvez le voir dans
@@ -886,11 +886,11 @@
       </itemizedlist></para>
 
     <para>Si vous avez créé votre VM avec une version antérieure de VirtualBox,
-    la présentation des stockages par défaut peut varier. Il se peut donc 
+    la présentation des stockages par défaut peut varier. Il se peut donc
    que vous ayez qu'un contrôleur IDE auquel on a connecté le lecteur CD/DVD et
    les disques durs. Cela pourrait aussi être le cas si vous avez sélectionné un
    ancien type de système d'exploitation quand vous avez créé la VM. Comme les
-   anciens systèmes d'exploitation ne supportent pas 
+   anciens systèmes d'exploitation ne supportent pas
     le SATA sans pilotes supplémentaires, VirtualBox veillera à ce qu'aucun
     périphérique de ce type ne soit présent au départ. Merci de voir <xref
     linkend="harddiskcontrollers" /> pour des informations supplémentaires.</para>
@@ -938,14 +938,14 @@
                       <para>Pour les disques durs virtuels, un ascenseur en liste
                       déroulante apparaît à droite, vous offrant la sélection
                       soit de <emphasis role="bold">fichier de disque dur virtuel
-                      </emphasis> en utilisant une boîte de dialogue fichier standard 
-                      soit de 
+                      </emphasis> en utilisant une boîte de dialogue fichier standard
+                      soit de
                       <emphasis role="bold">créer un nouveau disque dur</emphasis>
                       (fichier image), qui ouvrira l'assistant "Créer un nouveau
                       disque", décrite au <xref
                       linkend="gui-createvm" />.</para>
 
-                      <para>Pour des détails sur les types de fichiers images 
+                      <para>Pour des détails sur les types de fichiers images
                       supportés, merci de voir <xref
                       linkend="vdidetails" />.</para>
                     </listitem>
@@ -1008,7 +1008,7 @@
   <sect1 id="settings-audio">
     <title>Paramètres de son</title>
 
-    <para>La section "Son" de la fenêtre de paramètres d'une machine virtuelle 
+    <para>La section "Son" de la fenêtre de paramètres d'une machine virtuelle
     détermine si la VM verra une carte son connectée et si la sortie son se fait
     en dur sur le système hôte.</para>
 
@@ -1065,23 +1065,23 @@
     Computers) étaient équipés d'un ou deux ports série (appelés aussi des ports
     COM par DOS et Windows). Les ports série sont généralement utilisés avec des
     modems et certaines souris se connectaient en port série avant que l'USB ne
-    ne devienne omnipotent. 
+    ne devienne omnipotent.
     </para>
 
     <para>Si les ports série ne sont plus aussi omniprésents qu'avant, il leur
     reste encore des cas d'usage importants. Par exemple, on peut utiliser des
     ports série pour paramétrer un réseau primitif par un câble null-modem,
-    au cas où Ethernet n'est pas disponible. De plus, les ports série sont 
+    au cas où Ethernet n'est pas disponible. De plus, les ports série sont
     indispensables pour les programmeurs système ayant besoin de faire du débogage de noyau,
     car les logiciels de débogage de noyaux interagissent avec les développeurs
-    par le port série. Avec les ports série virtuels, les programmeurs système 
+    par le port série. Avec les ports série virtuels, les programmeurs système
     peuvent faire du débogage de noyau sur une machine virtuelle plutôt qu'un vrai
     ordinateur où ils se connecteraient.</para>
 
     <para>Si un port série virtuel est activé, le système d'exploitation invité
     voit un périphérique UART 16550A compatible standard. La réception et la
     transmission de données est supportée. La manière dont le port série virtuel
-    est alors connecté à l'hôte peut se configurer et les détails dépendent de 
+    est alors connecté à l'hôte peut se configurer et les détails dépendent de
     votre système d'exploitation hôte.
     </para>
 
@@ -1131,7 +1131,7 @@
               <listitem>
                 <para>Vous pouvez choisir que le port série virtuel soit
                 "déconnecté", ce qui signifie que l'invité verra le périphérique
-                mais il se comportera comme si aucun câble n'y avait été 
+                mais il se comportera comme si aucun câble n'y avait été
                 connecté.</para>
               </listitem>
 
@@ -1152,20 +1152,20 @@
                     <listitem>
                       <para>Sur un hôte Windows, les données seront envoyées et
                       reçues par un tunnel nommé. Le nom du tunnel doit être au
-                      format 
-                      <computeroutput>\\.\pipe\<nom></computeroutput> 
+                      format
+                      <computeroutput>\\.\pipe\<nom></computeroutput>
                       où <computeroutput><name></computeroutput> devrait
                       identifier la machine virtuelle mais vous êtes libre dans
-                      votre choix.</para> 
+                      votre choix.</para>
                       <para>Pour rediriger du trafic série, vous pouvez utiliser
                       un programme d'aide appelé VMware Serial Line Gateway,
                       disponible en téléchargement sur
                                   <literal> <ulink
                       url="http://www.l4ka.org/91.php">http://www.l4ka.org/91.php</ulink>
-                      </literal>. Cet outil fournit un mode serveur fixé 
-                      nommé tunnel sur 
+                      </literal>. Cet outil fournit un mode serveur fixé
+                      nommé tunnel sur
                       <computeroutput>\\.\pipe\vmwaredebug</computeroutput>
-                      et il connecte les connexions TCP entrantes sur le port 567 
+                      et il connecte les connexions TCP entrantes sur le port 567
                       avec le tunnel nommé.</para>
                     </listitem>
 
@@ -1241,7 +1241,7 @@
             </listitem>
 
             <listitem>
-              <para>Les hôtes Solaris ont quelques limites connues avec le 
+              <para>Les hôtes Solaris ont quelques limites connues avec le
               support USB&#xA0;; merci de voir <xref linkend="KnownIssues" />.</para>
             </listitem>
           </orderedlist>
@@ -1252,7 +1252,7 @@
       USB distants en utilisant le VirtualBox Remote Desktop Extension (VRDE).
       Pour des détails sur cela, voir <xref linkend="usb-over-rdp" />.</para>
 
-      <para>Dans la boîte de dialogue des paramètres, vous pouvez d'abord 
+      <para>Dans la boîte de dialogue des paramètres, vous pouvez d'abord
       configurer si l'USB est disponible dans l'invité et éventuellement activer
       le contrôleur USB 2.0 (EHCI) pour l'invité. Si tel est le cas, vous pouvez
       déterminer en détail les périphériques disponibles. Pour ce faire, vous
@@ -1284,7 +1284,7 @@
           produits se voit affecté un numéro "ID de produit". Les deux numéros
           sont écrits en général en hexadécimal (c'est-à-dire qu'ils se composent
           des chiffres 0 à 9 et des lettres A à F), et deux-points sépare l'ID
-          du fabricant et du produit. Par exemple, 
+          du fabricant et du produit. Par exemple,
           <computeroutput>046d:c016</computeroutput> signifie le fabricant
           Logitech et le produit Souris optique à roulette M-UV69a".</para>
 
@@ -1292,7 +1292,7 @@
           role="bold">"fabricant"</emphasis> et de <emphasis
           role="bold">"Produit"</emphasis>.</para>
 
-          <para>Pour lister tous les périphériques USB connectés à votre 
+          <para>Pour lister tous les périphériques USB connectés à votre
           machine hôte avec leurs IDs de fabricant et de produit respectifs, vous
           pouvez utiliser la commande suivante (voir <xref linkend="vboxmanage" />): <screen>VBoxManage list usbhost</screen></para>
 
@@ -1312,7 +1312,7 @@
         </listitem>
 
         <listitem>
-          <para><emphasis role="bold">Distant.</emphasis> Ce paramètre 
+          <para><emphasis role="bold">Distant.</emphasis> Ce paramètre
           spécifie si le périphérique est seulement en local, distant (par VRDP),
           ou autrement.</para>
         </listitem>
@@ -1340,7 +1340,7 @@
       <para>Sur les hôtes Windows, un pilote de périphérique en mode noyau fournit
       un support proxy USB. Il implémente un moniteur USB, qui permet à VirtualBox
       de capturer des périphériques quand ils sont branchés et un pilote de
-      périphérique USB qui amène les périphériques USB à une machine virtuelle 
+      périphérique USB qui amène les périphériques USB à une machine virtuelle
       VirtualBox antérieures à 1.4.0, un redémarrage du systme n'est plus nécessaire
       après l'installation du pilote. De plus, vous n'avez plus besoin de rebrancher
       des périphériques pour que VirtualBox les gère.</para>
@@ -1348,7 +1348,7 @@
       <para>Sur les hôtes Linux récents, VirtualBox accède aux périphériques USB
       par des fichiers spéicaux du système de fichiers. Quand VirtualBox est
       installé, ils sont rendus disponibles pour tous les utilisateurs dans le
-      groupe système 
+      groupe système
       <computeroutput>vboxusers</computeroutput>. Pour pouvoir accéder à l'USB
       à partir de systèmes invités, assurez-vous d'être membre de ce groupe.</para>
 
@@ -1364,7 +1364,7 @@
       <computeroutput>Driver=</computeroutput> de
       <computeroutput>/proc/bus/usb/devices</computeroutput> vous montrera les
       périphériques actuellement reconnus. Merci de vous reporter aussi à <xref
-      linkend="ts_usb-linux" /> pour des détails sur 
+      linkend="ts_usb-linux" /> pour des détails sur
       <computeroutput>usbfs</computeroutput>.</para>
     </sect2>
   </sect1>
@@ -1373,9 +1373,9 @@
     <title>Dossiers partagés</title>
 
     <para>Les dossiers partagés vous permettent d'échanger facilement des données
-    entre une machine virtuelle et votre hôte. Cette fonctionnalité exige que 
+    entre une machine virtuelle et votre hôte. Cette fonctionnalité exige que
     les suppléments invité de VirtualBox soient installés dans une machine
-    virtuelle et ceci est décrit en détail au 
+    virtuelle et ceci est décrit en détail au
     <xref linkend="sharedfolders" />.</para>
   </sect1>
 
@@ -1383,7 +1383,7 @@
     <title>Autre firmware (EFI)</title>
 
     <para>À partir de la version 3.1, VirtualBox inclut un support expérimental
-    pour l'Extensible Firmware Interface (EFI), qui est un nouveau 
+    pour l'Extensible Firmware Interface (EFI), qui est un nouveau
     standard industriel conçu pour remplacer éventuellement, à terme, le BIOS traditionnel
     comme interface pour les ordinateurs faisant du bootstrapping et certains
     services système.</para>
@@ -1391,7 +1391,7 @@
     <para>Par défaut, VirtualBox utilise le firmware BIOS pour les machines virtuelles.
     Pour utiliser l'EFI pour une machine virtuelle donnée, vous pouvez activer l'EFI
     dans la boîte de dialogue "Paramètres" de la machine (voir <xref linkend="settings-motherboard" />).
-    Sinon, utilisez l'interface en ligne de commande <computeroutput>VBoxManage</computeroutput> 
+    Sinon, utilisez l'interface en ligne de commande <computeroutput>VBoxManage</computeroutput>
     comme ceci&#xA0;: <screen>VBoxManage modifyvm "nom VM" --firmware efi</screen>
     Pour revenir à l'utilisation du BIOS, utilisez&#xA0;: <screen>VBoxManage modifyvm "nom VM" --firmware bios</screen>Un
     utilisateur notable de l'EFI est Mac OS X d'Apple, mais les Linux
@@ -1412,7 +1412,7 @@
 
       <para>EFI fournit deux interfaces graphiques distinctes&#xA0;: GOP (Graphics Output
       Protocol) et UGA (Universal Graphics Adapter). Mac OS X utilise GOP, tandis
-      que Linux a tendance à utiliser UGA. VirtualBox fournit une option de 
+      que Linux a tendance à utiliser UGA. VirtualBox fournit une option de
       configuration pour contrôler la taille du framebuffer pour les deux interfaces.</para>
 
       <para>Pour contrôler GOP, utilisez la commande
diff --git a/doc/manual/fr_FR/user_ChangeLog.xml b/doc/manual/fr_FR/user_ChangeLog.xml
index 2ec31ec..156d5a4 100644
--- a/doc/manual/fr_FR/user_ChangeLog.xml
+++ b/doc/manual/fr_FR/user_ChangeLog.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="ChangeLog">
   <title>Historique des changements</title>
 
@@ -83,7 +83,7 @@
       </listitem>
 
       <listitem>
-        <para>VMM : correction d'une Guru Meditation <emphasis>VERR_INVALID_RPL</emphasis> 
+        <para>VMM : correction d'une Guru Meditation <emphasis>VERR_INVALID_RPL</emphasis>
           lors du démarrage de certains invités (bogue #11350)</para>
       </listitem>
 
@@ -109,7 +109,7 @@
       </listitem>
 
       <listitem>
-        <para>GUI : on s'assure qu'un inviqé minimisé (en utilisant la mini 
+        <para>GUI : on s'assure qu'un inviqé minimisé (en utilisant la mini
           barre d'outils en mode plein écran ou transparent) reste minimisé (bogue #12199)</para>
       </listitem>
 
@@ -200,7 +200,7 @@
       </listitem>
 
       <listitem>
-        <para>OVF : correction de la lecture de l'élément de section d'OVF 0.9 
+        <para>OVF : correction de la lecture de l'élément de section d'OVF 0.9
           (régression 4.3 ; bogue #12345)</para>
       </listitem>
 
@@ -371,9 +371,9 @@
       </listitem>
 
       <listitem>
-        <para>VMM correction d'une erreur a <emphasis>VERR_SSM_STRUCTURE_MAGIC</emphasis> 
+        <para>VMM correction d'une erreur a <emphasis>VERR_SSM_STRUCTURE_MAGIC</emphasis>
           quand on essaie de charger un état sauvegardé établi par VBox 4.3.4
-          quand VT-x/AMD-V est désactivé. Malheureusement, 
+          quand VT-x/AMD-V est désactivé. Malheureusement,
           VBox 4.3.4 produisait des états sauvegardé cassés dans cette
           configuration, donc vous devez désactiver ces états (bogue #12414)</para>
       </listitem>
@@ -420,7 +420,7 @@
 
       <listitem>
         <para>Stockage : correction d'erreurs à l'exécution de
-        <emphasis>BLKCACHE_IOERR</emphasis> 
+        <emphasis>BLKCACHE_IOERR</emphasis>
           dans de rares circonstances (bogue #11030)</para>
       </listitem>
 
@@ -480,7 +480,7 @@
 
       <listitem>
         <para>VMM : correction de l'activation d'un correctif TPR pour les
-        invités 32 bits même quand le type d'invité choisi était un 32 bit 
+        invités 32 bits même quand le type d'invité choisi était un 32 bit
         (régression 4.3.0 ; AMD-V seulement)</para>
       </listitem>
 
@@ -562,7 +562,7 @@
 
       <listitem>
         <para>Accélération graphique 2D : correction de plantages lors des
-        changements de modes d'affichage 
+        changements de modes d'affichage
           (bogue #9194)</para>
       </listitem>
 
@@ -587,7 +587,7 @@
       </listitem>
       <listitem>
         <para>OVF : correction d'une logique importation pour les applicatifs OVF
-        contenant plusieurs 
+        contenant plusieurs
           VMs</para>
       </listitem>
 
@@ -628,7 +628,7 @@
 
       <listitem>
         <para>Hôtes Windows : nouvelle tentative de correction de la forte latence
-        DPC 
+        DPC
           (bogue #6242)</para>
       </listitem>
 
@@ -708,7 +708,7 @@
           mieux contenter l'invité sur certains hôtes</para>
        </listitem>
       <listitem>
-        <para>VMM : correction de la détection de VT-x sur certaines machines 
+        <para>VMM : correction de la détection de VT-x sur certaines machines
         où le BIOS ne définirait pas le bit de la fonction VMX LOCK, ce qui
         concernait les paramètres de la VM dans la GUI</para>
       </listitem>
@@ -742,7 +742,7 @@
 
       <listitem>
         <para>GUI : désactivation de la synchronisation de la LED du défilement
-        par rapport à la synchronisation des LEDs HID 
+        par rapport à la synchronisation des LEDs HID
           (hôtes Mac OS X seulement)</para>
       </listitem>
 
@@ -788,7 +788,7 @@
 
       <listitem>
         <para>Stockage : correction d'un accroc du processus de VM quand le disque
-        est plein dans certaines 
+        est plein dans certaines
           circonstances</para>
       </listitem>
 
@@ -897,7 +897,7 @@
       </listitem>
 
       <listitem>
-        <para>Contrôle de l'invité : les sessions de l'invité s'exécutent 
+        <para>Contrôle de l'invité : les sessions de l'invité s'exécutent
         maintenant dans des processus de sessions dédiés et individualisés (avec
         les supplément invité au moins 4.3 installés)</para>
       </listitem>
@@ -930,7 +930,7 @@
       </listitem>
 
       <listitem>
-        <para>VMM : changement de l'ordre des actions dans la bascule de l'émulated 
+        <para>VMM : changement de l'ordre des actions dans la bascule de l'émulated
         de tâches (bogue #10532)</para>
       </listitem>
       <listitem>
@@ -962,7 +962,7 @@
         l'invité</para>
       </listitem>
       <listitem>
-        <para>Instantanés : les instantanés en direct fonctionnent de nouveau 
+        <para>Instantanés : les instantanés en direct fonctionnent de nouveau
         (bogue #9255)</para>
       </listitem>
 
@@ -1006,7 +1006,7 @@
       <listitem>
         <para>Principal : élimination des sémaphores SysV sur tous les OS hôtes
         autres que Windows, à savoir Linux, Solaris et Mac OS X, d'où il s'ensuit
-        qu'aucune reconfiguration du système n'est nécessaire pour lancer 
+        qu'aucune reconfiguration du système n'est nécessaire pour lancer
         environ plus de 100 VMs</para>
       </listitem>
       <listitem>
@@ -1022,7 +1022,7 @@
       </listitem>
       <listitem>
         <para>VBoxManage : listage de davantage d'informations sur le disque
-        dur//DVD/amovible et support de l'option 
+        dur//DVD/amovible et support de l'option
           <computeroutput>--long</computeroutput> pour afficher véritablement
           tous les détails disponibles</para>
       </listitem>
@@ -1072,7 +1072,7 @@
       <listitem>
         <para>Support 3D : plusieurs corrections pour les hôtes Mac OS X</para>
        </listitem>
- 
+
        <listitem>
         <para>OVF : plusieurs corrections</para>
       </listitem>
@@ -1117,7 +1117,7 @@
          sur certains hôtes ; a encore besoin d'améliorations ; bogue #6242)</para>
        </listitem>
        <listitem>
-         <para>Hôtes Windows : prise en compte des liens symboliques dans la 
+         <para>Hôtes Windows : prise en compte des liens symboliques dans la
          récupération des informations sur le volume (bogue #11962)</para>
        </listitem>
 
@@ -1133,7 +1133,7 @@
          (bogue #12072)</para>
        </listitem>
        <listitem>
-         <para>Invités Windows : possibilité de repérer les moments d'inactivité 
+         <para>Invités Windows : possibilité de repérer les moments d'inactivité
          de l'utilisateur dans l'invité grâce à l'événement
          IGuestUserStateChangedEvent, introduit récemment.</para>
        </listitem>
@@ -1156,7 +1156,7 @@
     <itemizedlist>
 
       <listitem>
-        <para>GUI : hôte Mac OS X : introduction de la donnée externe "GUI/HidLedsSync" 
+        <para>GUI : hôte Mac OS X : introduction de la donnée externe "GUI/HidLedsSync"
         destinée à activer la synchronisation des LEDs HID (fonction désactivée
         par défaut)</para>
       </listitem>
@@ -1177,7 +1177,7 @@
       </listitem>
 
       <listitem>
-        <para>Stockage : correction d'erreurs <emphasis>BLKCACHE_IOERR</emphasis> 
+        <para>Stockage : correction d'erreurs <emphasis>BLKCACHE_IOERR</emphasis>
           à l'exécution dans de rares circonstances (bogue #11030)</para>
       </listitem>
 
@@ -1235,7 +1235,7 @@
     <itemizedlist>
 
       <listitem>
-        <para>GUI : on signale toujours les résolutions recommandées pour tous 
+        <para>GUI : on signale toujours les résolutions recommandées pour tous
         les écrans (craa ne se faisait pas toujours depuis la 4.2.12)</para>
       </listitem>
 
@@ -1250,7 +1250,7 @@
       </listitem>
 
       <listitem>
-        <para>NAT : ne tombe pas en boucle infinie si l'hôte ne peut pas 
+        <para>NAT : ne tombe pas en boucle infinie si l'hôte ne peut pas
           accéder à un serveur de DNS (régression 4.3.0 ; bogue #12300)</para>
       </listitem>
 
@@ -1260,7 +1260,7 @@
       </listitem>
 
       <listitem>
-        <para>Principal : sauvegarde correcte du drapeau <emphasis>passthrough</emphasis> 
+        <para>Principal : sauvegarde correcte du drapeau <emphasis>passthrough</emphasis>
           pour les lecteurs DVD sans média inséré</para>
       </listitem>
 
@@ -1366,7 +1366,7 @@
       </listitem>
 
       <listitem>
-        <para>Suppléments Linux : correction de la compilation avec Linux 3.11 
+        <para>Suppléments Linux : correction de la compilation avec Linux 3.11
         pour les dossiers partagés (bogues #11946, #12128)</para>
       </listitem>
 
@@ -1524,7 +1524,7 @@
 
   <sect1>
     <title>Version 4.2.16 (04-07-2013)</title>
- 
+
     <para>C'est une version de maintenance. Les éléments suivants ont été
     corrigés et/ou ajoutés :</para>
 
@@ -1625,7 +1625,7 @@
       </listitem>
 
       <listitem>
-        <para>USB : correction d'un accroc lors d'un transfert asynchrone avec 
+        <para>USB : correction d'un accroc lors d'un transfert asynchrone avec
         certains périphériques (régression 4.1 ; hôtes Windows seulement ; bogues #11839)</para>
       </listitem>
 
@@ -1680,7 +1680,7 @@
       </listitem>
 
       <listitem>
-        <para>Principal/propriétés : n'oublie pas de rendre permanentes les 
+        <para>Principal/propriétés : n'oublie pas de rendre permanentes les
         propriéés après l'extinction d'une VM (bogue #11719)</para>
       </listitem>
 
@@ -1717,7 +1717,7 @@
 
       <listitem>
         <para>VBoxManage : correction de la définition de l'UUID parent sur
-        les images de différenciation qui utilisent 
+        les images de différenciation qui utilisent
           <emphasis>sethdparentuuid</emphasis></para>
       </listitem>
 
@@ -1744,12 +1744,12 @@
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : corrections du mode transparent et du 
+        <para>Suppléments Windows : corrections du mode transparent et du
         redimensionnement automatique</para>
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : correction de la tentative de récupération 
+        <para>Suppléments Windows : correction de la tentative de récupération
         des nouvelles autorisations d'identification automatique si celles actuelles
         n'étaient pas encore traitées</para>
       </listitem>
@@ -1762,8 +1762,8 @@
 
       <listitem>
         <para>Suppléments Linux : correction du paramétrage du délai maximale
-        propre et des textes annulés 
-          dans les informations d'étiquette du greeter 
+        propre et des textes annulés
+          dans les informations d'étiquette du greeter
       lightdm</para>
       </listitem>
 
@@ -1917,7 +1917,7 @@
       </listitem>
 
       <listitem>
-        <para>VBoxHeadless : ne filtre pas les événements de propriétés invité 
+        <para>VBoxHeadless : ne filtre pas les événements de propriétés invité
         car cela toucherait tous les clients (bogue #11644)</para>
       </listitem>
 
@@ -1927,7 +1927,7 @@
       </listitem>
 
       <listitem>
-        <para>Hôtes / invités Linux : correction d'erreurs de construction sur 
+        <para>Hôtes / invités Linux : correction d'erreurs de construction sur
         les noyaux Linux 3.5 et plus récent si on a activé l'option de configuration
         <emphasis>CONFIG_UIDGID_STRICT_TYPE_CHECKS</emphasis> (bogue #11664)</para>
       </listitem>
@@ -1948,7 +1948,7 @@
 
       <listitem>
         <para>Suppléments Linux : ajout du support de l'identification automatique
-        pour les invités Linux qui utilisent 
+        pour les invités Linux qui utilisent
           LightDM comme gestionnaire d'affichage</para>
       </listitem>
 
@@ -2063,7 +2063,7 @@
       </listitem>
 
       <listitem>
-        <para>Principal/Affichage : correction d'une violation d'accès dans 
+        <para>Principal/Affichage : correction d'une violation d'accès dans
         certaines conditions avec des configurations multiécrans (bogue #10539)</para>
       </listitem>
 
@@ -2095,12 +2095,12 @@
       </listitem>
 
       <listitem>
-        <para>Stockage : correction d'une incompatibilité des images de 
+        <para>Stockage : correction d'une incompatibilité des images de
           différenciation VHD avec Hyper-V (bogue #5990)</para>
       </listitem>
 
       <listitem>
-        <para>Réseau bridgé : correction du calcul de la somme de contrôle d'une pseudo 
+        <para>Réseau bridgé : correction du calcul de la somme de contrôle d'une pseudo
         en-tête TCP pour IPv6 (bogue #9380)</para>
       </listitem>
 
@@ -2124,13 +2124,13 @@
       </listitem>
 
       <listitem>
-        <para>Hôtes Linux : contournement du bogue 55940 de gcc qui pourrait 
+        <para>Hôtes Linux : contournement du bogue 55940 de gcc qui pourrait
         conduire à un faux code de module de noyau si on utilise gcc 4.7 pour
         compiler le noyau 32 bits de l'hôte Linux (bogue #11035)</para>
       </listitem>
 
       <listitem>
-        <para>Hôtes Linux : correction d'un état de verrouillage incohérent et 
+        <para>Hôtes Linux : correction d'un état de verrouillage incohérent et
         d'avertissements deadlock de la charge du module et au démarrage de la VM
         quand CONFIG_PROVE_LOCKING est activé (bogue #11318)</para>
       </listitem>
@@ -2179,7 +2179,7 @@
 
       <listitem>
         <para>Suppléments X11 : correction des SIGALRM bloqués dans les sessions
-        du bureau 3D 
+        du bureau 3D
           (bogue #10987)</para>
       </listitem>
 
@@ -2313,7 +2313,7 @@
       </listitem>
 
      <listitem>
-        <para>Dossiers partagés : si l'association d'un dossier de l'hôte à un 
+        <para>Dossiers partagés : si l'association d'un dossier de l'hôte à un
         dossier partagé n'existe pas, on le laisse actif mais on le note comme
         invalide pour empêcher une incohérence des états sauvegardés (bogue #11147)</para>
       </listitem>
@@ -2358,7 +2358,7 @@
       </listitem>
 
       <listitem>
-        <para>OVF : correction de l'imroqtation de fichiers OVF créés par 
+        <para>OVF : correction de l'imroqtation de fichiers OVF créés par
         un VMware récent (bogue #10905)</para>
       </listitem>
 
@@ -2403,7 +2403,7 @@
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : correction du démarrage des suppléments 
+        <para>Suppléments Windows : correction du démarrage des suppléments
         invité sur les invités Windows 2000 (bogue #11253)</para>
       </listitem>
 
@@ -2452,7 +2452,7 @@
       </listitem>
 
       <listitem>
-        <para>EFI : correction de la perte de la élection du mode graphique au 
+        <para>EFI : correction de la perte de la élection du mode graphique au
         redémarrage de la VM (#10983)</para>
       </listitem>
 
@@ -2564,7 +2564,7 @@
       </listitem>
 
       <listitem>
-        <para>Souris USB : garantie que le dernier événement de souris ne se perde pa 
+        <para>Souris USB : garantie que le dernier événement de souris ne se perde pa
           si aucune adresse n'est disponible</para>
       </listitem>
 
@@ -2691,7 +2691,7 @@
 
       <listitem>
         <para>Contrôle des ressources : ajout du support de la limitation
-        de la bande passante E/S du réseau virtuel ; voir <xref linkend="network_bandwidth_limit" /> 
+        de la bande passante E/S du réseau virtuel ; voir <xref linkend="network_bandwidth_limit" />
         (bogue #3653)</para>
       </listitem>
 
@@ -2746,7 +2746,7 @@
       </listitem>
 
       <listitem>
-        <para>VMM : ajout du support des fonctions <emphasis>FlushByASID</emphasis> 
+        <para>VMM : ajout du support des fonctions <emphasis>FlushByASID</emphasis>
         des processeurs AMD (Bulldozer et plus récents)</para>
       </listitem>
 
@@ -2820,7 +2820,7 @@
 
       <listitem>
         <para>GUI : prise en compte des valeurs DPI échelonnées lors de l'affichage
-        des polices sur des hôtes Windows 
+        des polices sur des hôtes Windows
           (bogue #9864)</para>
       </listitem>
 
@@ -2832,7 +2832,7 @@
 
       <listitem>
         <para>Instantanés : correction d'un plantage lors de la restauration d'un
-        ancien instantané au moment de l'extinction d'une VM (bogues 
+        ancien instantané au moment de l'extinction d'une VM (bogues
           #9364, #9604, #10491)</para>
       </listitem>
 
@@ -2843,7 +2843,7 @@
       </listitem>
 
       <listitem>
-        <para>Paramètres : mettoyage du nom des dossiers de VMs et du fichier 
+        <para>Paramètres : mettoyage du nom des dossiers de VMs et du fichier
         des paramètres (bogue #10549)</para>
       </listitem>
 
@@ -2866,7 +2866,7 @@
       </listitem>
 
       <listitem>
-        <para>Stockage : implémentation de la gravure de CDs audio en mode 
+        <para>Stockage : implémentation de la gravure de CDs audio en mode
         passthrough</para>
       </listitem>
 
@@ -2877,7 +2877,7 @@
 
       <listitem>
         <para>Stockage : implémentation du support de la désactivation des
-        blocs inusités d'une image via TRIM pour SATA et IDE, et via UNMAP 
+        blocs inusités d'une image via TRIM pour SATA et IDE, et via UNMAP
         pour SCSI lorsqu'on utilise des images VDI</para>
       </listitem>
 
@@ -2973,7 +2973,7 @@
       <listitem>
         <para>Hôtes Linux / Réseau bridgé : correction du problème de déchargement
         du pilote de périphérique sur les noyaux 3.2.18 et supérieur, du fait
-        d'un compteur de références invalide 
+        d'un compteur de références invalide
           (bogue #10624)</para>
       </listitem>
 
@@ -3027,13 +3027,13 @@
       </listitem>
 
       <listitem>
-        <para>Support 3D : plusieurs corrections de plantages des pilotes 
+        <para>Support 3D : plusieurs corrections de plantages des pilotes
         graphiques WDDM de Windows</para>
       </listitem>
 
       <listitem>
         <para>NAT : correction d'un plantage quand on essaie de traiter des
-        diagrammes (datagram) ICMP dans certaines 
+        diagrammes (datagram) ICMP dans certaines
           circonstances (bogue #10527)</para>
       </listitem>
 
@@ -3113,7 +3113,7 @@
     <itemizedlist>
 
       <listitem>
-        <para>Réseau : correction du problème avec les paquets plus gres que 
+        <para>Réseau : correction du problème avec les paquets plus gres que
         MTU-4 quand PCnet ou PRO/1000 ont été reliés à certains types d'adaptateurs
         sur les hôtes OS X
           (bogue #3783)</para>
@@ -3194,7 +3194,7 @@
       </listitem>
 
       <listitem>
-        <para>VBoxManage : renvoi du bon code d'erreur si 
+        <para>VBoxManage : renvoi du bon code d'erreur si
           <emphasis>controlvm savestate</emphasis> a échoué (bogue #10134)</para>
       </listitem>
 
@@ -3230,7 +3230,7 @@
     <itemizedlist>
 
       <listitem>
-        <para>GUI : si le support 3D n'est pas disponible sur l'hôte pour une 
+        <para>GUI : si le support 3D n'est pas disponible sur l'hôte pour une
         raison quelconque, non seulement on désactive ce paramètre de la VM,
         mais on décoche aussi la case</para>
       </listitem>
@@ -3241,8 +3241,8 @@
       </listitem>
 
       <listitem>
-        <para>VMM : correction d'un problème potentiel de corruption de la 
-        mémoire de l'invité 
+        <para>VMM : correction d'un problème potentiel de corruption de la
+        mémoire de l'invité
         avec la fusion de page</para>
       </listitem>
 
@@ -3259,7 +3259,7 @@
 
       <listitem>
         <para>Principal : pas de dépendance du mot de passe pour certaines
-        opérations de contrôle de l'invité 
+        opérations de contrôle de l'invité
           (bogue #10030)</para>
       </listitem>
 
@@ -3274,7 +3274,7 @@
       </listitem>
 
       <listitem>
-        <para>Support 3D : correction de problèmes de l'état 
+        <para>Support 3D : correction de problèmes de l'état
         sauvegardé (régression de la 4.1.8 ; bogue #10126)</para>
       </listitem>
 
@@ -3459,7 +3459,7 @@
       </listitem>
 
       <listitem>
-        <para>VBoxSVC : correction d'un plantage dans de rares circonstances 
+        <para>VBoxSVC : correction d'un plantage dans de rares circonstances
         (comme un plantage du client)</para>
       </listitem>
 
@@ -3488,7 +3488,7 @@
         les cartes ATI (bogue #9775), de l'affichage dans
           Windows Media Player avec le support Direct3D basé sur XPDM (bogue# 8341).
           Plusieurs corrections du support 3D basé sur XPDM et WDDM pour
-          les invités Windows et pour le support 3D en 
+          les invités Windows et pour le support 3D en
           général</para>
       </listitem>
 
@@ -3589,7 +3589,7 @@
       </listitem>
 
       <listitem>
-        <para>Suppléments Solaris : ajout des options directory, file mode et 
+        <para>Suppléments Solaris : ajout des options directory, file mode et
         mask pour les dossiers partagés</para>
       </listitem>
 
@@ -3616,7 +3616,7 @@
 
       <listitem>
         <para>VMM : correction du PAE sur l'invité sur des hôtes 32 bits (régression
-        4.0 ; 
+        4.0 ;
           bogue #9458)</para>
       </listitem>
 
@@ -3703,7 +3703,7 @@
       </listitem>
 
       <listitem>
-        <para>Principal : correction du non détachement du stockage virtuel 
+        <para>Principal : correction du non détachement du stockage virtuel
         après la restauration d'un instantané
           (bogue #8296)</para>
       </listitem>
@@ -3752,7 +3752,7 @@
 
       <listitem>
         <para>Hôtes Mac OS X : correction de problèmes d'installation lors d'une
-        installation en tant qu'administrateur 
+        installation en tant qu'administrateur
           (bogue #1578)</para>
       </listitem>
 
@@ -3770,7 +3770,7 @@
 
       <listitem>
         <para>Hôtes Solaris : correction du démarrage des invités EFI à cause
-        de fichiers ROM EFI manquants 
+        de fichiers ROM EFI manquants
           (bogue #9535)</para>
       </listitem>
 
@@ -3807,7 +3807,7 @@
       </listitem>
 
       <listitem>
-        <para>Suppléments Linux : suppression d'un message d'erreur incorrect 
+        <para>Suppléments Linux : suppression d'un message d'erreur incorrect
         et possibilité de monter un dossier partagé à plusieurs endroits
            (bogue #9627)
           </para>
@@ -3857,7 +3857,7 @@
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : correction d'accrocs de l'invité quand 
+        <para>Suppléments Windows : correction d'accrocs de l'invité quand
 on quitte le mode plein écran avec des
           applications en mode texte (bogue #9636)</para>
       </listitem>
@@ -3889,7 +3889,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>GUI : correction de la vérification d'erreurs lors du changement 
+        <para>GUI : correction de la vérification d'erreurs lors du changement
         des paraçtres du contrôleur de la VM (régression 4.1.0 ; bogue #9246)</para>
       </listitem>
 
@@ -3954,7 +3954,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VBoxManage : possibilité de démarrer plusieurs VMs avec 
+        <para>VBoxManage : possibilité de démarrer plusieurs VMs avec
           <emphasis>startvm</emphasis></para>
       </listitem>
 
@@ -3981,7 +3981,7 @@ on quitte le mode plein écran avec des
       <listitem>
         <para>USB : correction de problèmes de reconnaissance de périphérique
         (bogues #9299) et correction de plusieurs problèmes de captation du
-        périphérique (hôtes 
+        périphérique (hôtes
         Windows ; bogue #9299)</para>
       </listitem>
 
@@ -4047,7 +4047,7 @@ on quitte le mode plein écran avec des
   <sect1>
     <title>Version 4.1.0 (19-07-2011)</title>
 
-    <para>Cette version est une mise à jour majeure. Les nouvelles fonctions 
+    <para>Cette version est une mise à jour majeure. Les nouvelles fonctions
     majeures suivantes ont été ajoutées :</para>
 
     <itemizedlist>
@@ -4078,7 +4078,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Support expérimental du passthrough PCI pour les hôtes Linux, 
+        <para>Support expérimental du passthrough PCI pour les hôtes Linux,
         voir <xref linkend="pcipassthrough"/></para>
       </listitem>
 
@@ -4152,14 +4152,14 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>GUI : ajout d'un paramètre pour les règles du mode promiscuous 
+        <para>GUI : ajout d'un paramètre pour les règles du mode promiscuous
         pour les réseaux interne, bridgé et host-only</para>
       </listitem>
 
       <listitem>
         <para>GUI : ajout d'une glissière pour régler le volume d'exécution du
         processeur, permettant de limiter la quantité de temps processeur consacrée
-        à l'exécution de l'invité, voir 
+        à l'exécution de l'invité, voir
           <xref linkend="settings-processor"/></para>
       </listitem>
 
@@ -4190,7 +4190,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VBoxManage : modification de la syntaxe du groupe de commande
-        <emphasis>guestcontrol</emphasis>, correction de divers bogues, 
+        <emphasis>guestcontrol</emphasis>, correction de divers bogues,
         suppression d'options obsolètes</para>
       </listitem>
 
@@ -4237,7 +4237,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Stockage : correction d'une corruption possible des données dans
-        certaines circonstances avec VDE et les images parallèles 
+        certaines circonstances avec VDE et les images parallèles
           (bogue #9150)</para>
       </listitem>
 
@@ -4247,7 +4247,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Stockage : correction du code de détection pour gérer des 
+        <para>Stockage : correction du code de détection pour gérer des
         fichiers vides pour le format VDI et VMDK</para>
       </listitem>
 
@@ -4320,7 +4320,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VBoxSVC : correction d'une régression quand plusieurs clients 
+        <para>VBoxSVC : correction d'une régression quand plusieurs clients
         démarrent en décalé automatiquement et simultanément</para>
       </listitem>
 
@@ -4512,7 +4512,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Hôtes Mac OS X : correction de problèmes d'installation lorsqu'on
-        installe en tant qu'administrateur 
+        installe en tant qu'administrateur
           (bogue #1578)</para>
       </listitem>
 
@@ -4572,7 +4572,7 @@ on quitte le mode plein écran avec des
         <para>VBoxManage : configuration plus pratique des connexions des
         contrôleurs de stockage en déterminant automatiquement le paramètre du
         port et du périphérique quand un contrôleur de stockage n'a qu'un port
-        ou qu'un périphérique par port 
+        ou qu'un périphérique par port
           (bogue #9188)</para>
       </listitem>
 
@@ -4647,7 +4647,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Instantanés : aucune connexion de disque dur ne doit être rattachée 
+        <para>Instantanés : aucune connexion de disque dur ne doit être rattachée
         à une autre VM en mode normal lors de la création d'un instantané</para>
       </listitem>
 
@@ -4657,7 +4657,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>USB : détection correcte de périphérique sur les invités RHEL/OEL/CentOS 5 
+        <para>USB : détection correcte de périphérique sur les invités RHEL/OEL/CentOS 5
           (correction partielle du bogue #8978)</para>
       </listitem>
 
@@ -4677,7 +4677,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>OVF : dans de rares circonstances, certaines données en fin 
+        <para>OVF : dans de rares circonstances, certaines données en fin
         de fichier VMDK ne s'écrivait pas à l'export</para>
       </listitem>
 
@@ -4995,7 +4995,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>NAT : correction du traitement des annonces ARP pour les invités 
+        <para>NAT : correction du traitement des annonces ARP pour les invités
         ayant des IPs affectées de façon statiques (bogue #8609)</para>
       </listitem>
 
@@ -5006,7 +5006,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Dossiers partagés : n'échoue pas le démarrage d'une VM si un
-        chemin n'est pas absolu, par exemple lors de l'importation d'une OVF 
+        chemin n'est pas absolu, par exemple lors de l'importation d'une OVF
         d'un hôte différent (bogue #7941)</para>
       </listitem>
 
@@ -5038,19 +5038,19 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>rdesktop-vrdp : correction d'une déclaration décalée dans 
+        <para>rdesktop-vrdp : correction d'une déclaration décalée dans
         certaines conditions
           (bogue #8593)</para>
       </listitem>
 
       <listitem>
-        <para>Hôtes Windows : correction d'accrocs occasionnels à l'extinction de 
+        <para>Hôtes Windows : correction d'accrocs occasionnels à l'extinction de
         la VM du fait que, parfois, COM n'était pas bien désinitialisé</para>
       </listitem>
 
       <listitem>
         <para>Hôtes Mac OS X : on empêche la souris de quitter la fenêtre de la
-        VM lorsqu'elle est 
+        VM lorsqu'elle est
           capturée</para>
       </listitem>
 
@@ -5088,7 +5088,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : correction de la gestion du paramètre 
+        <para>Suppléments Windows : correction de la gestion du paramètre
         Sysprep</para>
       </listitem>
 
@@ -5252,12 +5252,12 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Principal : amélioration de la vérification de propreté lorsqu'on
-        prend une impression écran de la VM 
+        prend une impression écran de la VM
           (bogue #7966)</para>
       </listitem>
 
       <listitem>
-        <para>Principal : correction d'un plantage dans de rares circonstances 
+        <para>Principal : correction d'un plantage dans de rares circonstances
         si une VM n'a pas pu démarrer</para>
       </listitem>
 
@@ -5314,7 +5314,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Stockage : correction d'erreurs d'écriture d'instantanés si le
-        cache de l'hôte est désactivé (régression 4.0 ; 
+        cache de l'hôte est désactivé (régression 4.0 ;
           bogue #8221)</para>
       </listitem>
 
@@ -5374,7 +5374,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : correction de la gestion de Security 
+        <para>Suppléments Windows : correction de la gestion de Security
         Attention Sequence (SAS) avec VBoxGINA</para>
       </listitem>
 
@@ -5391,7 +5391,7 @@ on quitte le mode plein écran avec des
     <itemizedlist>
 
       <listitem>
-        <para>GUI : ne plante pas si un lecteur amovible de l'hôte auquel se 
+        <para>GUI : ne plante pas si un lecteur amovible de l'hôte auquel se
         réfère les paramètres de la VM a disparu</para>
       </listitem>
 
@@ -5417,13 +5417,13 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>PackExt : amélioration de l'expérience utilisateur sur Vista / Windows 7 
+        <para>PackExt : amélioration de l'expérience utilisateur sur Vista / Windows 7
         lors de l'installation d'un pack d'extension</para>
       </listitem>
 
       <listitem>
-        <para>PackExt : correction d'un problème avec les caractères non ascii 
-        dans des noms de chemins au moment de l'installation d'un pack 
+        <para>PackExt : correction d'un problème avec les caractères non ascii
+        dans des noms de chemins au moment de l'installation d'un pack
           d'extension (bogue #9717)</para>
       </listitem>
 
@@ -5509,7 +5509,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Principal : correction de problèmes avec les instantanés et les
-        caractères non ASCII dans les chemins de la 
+        caractères non ASCII dans les chemins de la
           machine (bogue #8024)</para>
       </listitem>
 
@@ -5526,7 +5526,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Paramètres : correction d'un problème où le changement de nom ou 
+        <para>Paramètres : correction d'un problème où le changement de nom ou
         de description des instantanés n'était pas enregistré dans le XML de
         la machine</para>
       </listitem>
@@ -5550,7 +5550,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Hôtes Linux : tentative de compliquer un peu l'affectation de
-        mémoire (bogue #8035 ; 
+        mémoire (bogue #8035 ;
           régression 4.0)</para>
       </listitem>
 
@@ -5688,7 +5688,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Stockage : support du redimensionnement des images VDI et VHD ; 
+        <para>Stockage : support du redimensionnement des images VDI et VHD ;
         voir <xref linkend="vboxmanage-modifyvdi" /></para>
       </listitem>
 
@@ -5710,7 +5710,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VMM : Activation par défaut du support des grandes pages sur les
-        hôtes 64 bits (cela s'applique seulement à la pagination 
+        hôtes 64 bits (cela s'applique seulement à la pagination
         imbriquée)</para>
       </listitem>
 
@@ -5770,7 +5770,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Support 3D : corruption de la pile d'application de l'invité
-        lors de l'utilisation de 
+        lors de l'utilisation de
           glGetVertexAttrib[ifd]v (bogue #7395)</para>
       </listitem>
 
@@ -5848,12 +5848,12 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Support USB avec hôte Linux : introduction d'une manière moins
-        intrusive d'accéder aux périphériques USB en brut 
+        intrusive d'accéder aux périphériques USB en brut
            (bogues #1093, #5345, #7759)</para>
        </listitem>
 
        <listitem>
-         <para>Hôtes Linux : support des noyaux Linux récents avec 
+         <para>Hôtes Linux : support des noyaux Linux récents avec
            <emphasis>CONFIG_DEbogue_SET_MODULE_RONX</emphasis> activé</para>
        </listitem>
 
@@ -5864,7 +5864,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Linux : Les dossiers partagés supportent maintenant 
+        <para>Suppléments Linux : Les dossiers partagés supportent maintenant
         les liens symboliques (bogue #818)</para>
       </listitem>
 
@@ -5897,7 +5897,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : correction de redémarrages de l'hôte dans de rares circonstances 
+        <para>VMM : correction de redémarrages de l'hôte dans de rares circonstances
         du fait du retardement de NMIs par des mesureurs de performance actifs
         (hôtes Linux en mode non-VT-x/AMD-V seulement ; bogue #4529)</para>
       </listitem>
@@ -5953,7 +5953,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Souris : n'envoie pas d'événements de souris relatifs en même temps 
+        <para>Souris : n'envoie pas d'événements de souris relatifs en même temps
         que des çvénements absolus (régression 3.2.10 ; bogue #7571)</para>
       </listitem>
 
@@ -5987,7 +5987,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>USB : correction d'un plantage dans de rares circonstances (bogue #7409 ; 
+        <para>USB : correction d'un plantage dans de rares circonstances (bogue #7409 ;
         hôtes Windows seulement)</para>
       </listitem>
 
@@ -6010,12 +6010,12 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Accélération graphique 2D : correction d'un deadlock potentiel 
+        <para>Accélération graphique 2D : correction d'un deadlock potentiel
         lors de la sauvegarde de l'état d''une VM (bogue #4124)</para>
       </listitem>
 
        <listitem>
-         <para>Hôtes Windows : autre correction de BSODs dans certaines circonstances 
+         <para>Hôtes Windows : autre correction de BSODs dans certaines circonstances
          dans VBoxNetFlt.sys (bogue #7601)</para>
        </listitem>
 
@@ -6091,7 +6091,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : améliorations de performance des VMs ayant plus de 
+        <para>VMM : améliorations de performance des VMs ayant plus de
           2Go de RAM (bogue #6928)</para>
       </listitem>
 
@@ -6152,7 +6152,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>SATA : meilleure gestion de l'espace disque et des conditions 
+        <para>SATA : meilleure gestion de l'espace disque et des conditions
         équivalentes</para>
       </listitem>
 
@@ -6187,7 +6187,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>NAT : dans de rares conditions, le moteur NAT consommait 100% 
+        <para>NAT : dans de rares conditions, le moteur NAT consommait 100%
         de la charge processeur (hôtes non Windows seulement)</para>
       </listitem>
 
@@ -6210,7 +6210,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VBoxHeadless : correction de problèmes de traitement de la queue 
+        <para>VBoxHeadless : correction de problèmes de traitement de la queue
         d'événements qui provoquait des accrocs si la VM ne réussissait pas à
         démarrer</para>
       </listitem>
@@ -6255,7 +6255,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>OVF : correction d'un bogue lors de l'exportation d'une VM avec
-        plusieurs disques connectés 
+        plusieurs disques connectés
           (bogue #7366)</para>
       </listitem>
 
@@ -6289,7 +6289,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Son : correction d'une corruption de mémoire de l'invité lors
-        d'une capture à partir de la fondation audio 
+        d'une capture à partir de la fondation audio
           NULL (bogue #6911)</para>
       </listitem>
 
@@ -6363,7 +6363,7 @@ on quitte le mode plein écran avec des
        </listitem>
 
        <listitem>
-         <para>Hôtes Windows : correction d'un BSOD dans certaines circonstances 
+         <para>Hôtes Windows : correction d'un BSOD dans certaines circonstances
          dans VBoxNetFlt.sys (bogue #7448)</para>
        </listitem>
 
@@ -6405,7 +6405,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>GUI : n'utilise pas les boîtes de dialogue de fichier natives sur
-        les hôtes KDE (hôtes Linux seulement ; 
+        les hôtes KDE (hôtes Linux seulement ;
           bogue #6809)</para>
       </listitem>
 
@@ -6474,7 +6474,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Disques durs : correction d'une réinitialisation automatique d'un
-        disque immuable au démarrage de la VM 
+        disque immuable au démarrage de la VM
           (bogue #6832)</para>
       </listitem>
 
@@ -6568,7 +6568,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VMM : correction d'un plantage de l'hôte lors de l'exécution d'invités
-        64 bits sur des hôtes 32 bits avec certains processeurs Intel (VT-x 
+        64 bits sur des hôtes 32 bits avec certains processeurs Intel (VT-x
         seulement ; bogue #6166) </para>
       </listitem>
 
@@ -6654,7 +6654,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Stockage : correction des disques bruts sur les hôtes Windows 
+        <para>Stockage : correction des disques bruts sur les hôtes Windows
         (régression 3.2.0 ; bogue #6987)</para>
       </listitem>
 
@@ -6714,7 +6714,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>OVF : mise à jour des définitions des types d'OS vers CIM 2.25.0 
+        <para>OVF : mise à jour des définitions des types d'OS vers CIM 2.25.0
         pour que Windows 7 et d'autres OS soient marqués correctement lors de
         l'exportation</para>
       </listitem>
@@ -6780,7 +6780,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : l'identification automatique sur Windows Vista/Windows 7 
+        <para>Suppléments Windows : l'identification automatique sur Windows Vista/Windows 7
         est maintenant capable de gérer les comptes utilisateur renommés et
         principaux ; ajout de diverses corrections de bogues</para>
       </listitem>
@@ -6942,7 +6942,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Stockage : correction d'un accroc sporadique des invités SMP 
+        <para>Stockage : correction d'un accroc sporadique des invités SMP
         utilisant SATA ou LSI Logic SCSI et les E/S asynchrones</para>
       </listitem>
 
@@ -7043,7 +7043,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>OVF : correction d'une régression 3.2.0 dans l'importation de 
+        <para>OVF : correction d'une régression 3.2.0 dans l'importation de
         fichiers OVF 0.9 primitifs</para>
       </listitem>
 
@@ -7101,7 +7101,7 @@ on quitte le mode plein écran avec des
         hôtes 64 bits, l'utilisation de grandes pages peut améliorer les
         performances (voir <xref linkend="imbriquéepaging"/>) ; en outre, sur
           VT-x, l'exécution sans restriction de l'invité est maintenant supportée
-          (si la pagination imbriquée est activée avec VT-x, le mode réel et le mode 
+          (si la pagination imbriquée est activée avec VT-x, le mode réel et le mode
           protégé sans code de pagination fonctionnent plus vite, ce qui accélère
           considérablement le démarrage de l'OS invité)</para>
       </listitem>
@@ -7142,7 +7142,7 @@ on quitte le mode plein écran avec des
       <listitem>
         <para>Suppléments invité : ajout du support de l'exécuting des applications
         invitées depuis le système hôte (remplace la fonction de préparation
-        automatique du système ; voir 
+        automatique du système ; voir
         <xref linkend="guestadd-guestcontrol" />)</para>
       </listitem>
 
@@ -7175,7 +7175,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>GUI : ajout d'un paramètre de VM pour que le temps passe en UTC
-        et ne passe pas l'heure de l'hôte locale à l'invité 
+        et ne passe pas l'heure de l'hôte locale à l'invité
           (bogue #1310)</para>
       </listitem>
 
@@ -7210,12 +7210,12 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Mac OS X : réécriture du pilote CoreAudio et ajout du support 
+        <para>Mac OS X : réécriture du pilote CoreAudio et ajout du support
         de l'entrée audio (bogue #5869)</para>
       </listitem>
 
       <listitem>
-        <para>Mac OS X : support du module 'authentification externe VRDP 
+        <para>Mac OS X : support du module 'authentification externe VRDP
         (bogue #3106)</para>
       </listitem>
 
@@ -7364,7 +7364,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>ATA : correction de plantages sporadiques avec les invités Linux 
+        <para>ATA : correction de plantages sporadiques avec les invités Linux
         lorsqu'il y a un disque dur et un lecteur DVD sur le même canal
         (bogue #6079)</para>
       </listitem>
@@ -7385,7 +7385,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>SCSI : correction de plantages de l'invité dans certaines circonstances 
+        <para>SCSI : correction de plantages de l'invité dans certaines circonstances
         quand on démarre à partir de périphériques SCSI</para>
       </listitem>
 
@@ -7533,13 +7533,13 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VMM : correction d'une guru meditation
-        <emphasis>PGMDynMapHCPage</emphasis> 
+        <emphasis>PGMDynMapHCPage</emphasis>
           (Mac OS X ; VT-x seulement ; bogue #6095)</para>
       </listitem>
 
       <listitem>
         <para>VMM : correction d'une guru meditation
-        <emphasis>pgmPoolTrackFlushGCPhysPTInt</emphasis> 
+        <emphasis>pgmPoolTrackFlushGCPhysPTInt</emphasis>
           (Mac OS X ; VT-x seulement ; bogues #6095 & #6125)</para>
       </listitem>
 
@@ -7571,7 +7571,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Support 3D : correction d'erreurs de l'éditeur de liens lors de
-        l'exécution avec les bibliothèques OpenQL de l'invité 
+        l'exécution avec les bibliothèques OpenQL de l'invité
           (bogue #5297)</para>
       </listitem>
 
@@ -7785,7 +7785,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>GUI : correction du bouton "Recharger" cassé qui recharge le XML 
+        <para>GUI : correction du bouton "Recharger" cassé qui recharge le XML
         de la machine lorsqu'une machine est inaccessible</para>
       </listitem>
 
@@ -7898,7 +7898,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>USB : correction d'un écran bleu à l'ex!inction (hôtes Windows 
+        <para>USB : correction d'un écran bleu à l'ex!inction (hôtes Windows
         Seulement ; bogue #5885)</para>
       </listitem>
 
@@ -7933,7 +7933,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Suppléments invité : correction d'un mauvais ajustement de l'heure
-        de l'invité si l'horloge de l'invité est en avance (régression 3.1 ; 
+        de l'invité si l'horloge de l'invité est en avance (régression 3.1 ;
         invités non Windows seulement)</para>
       </listitem>
 
@@ -8060,7 +8060,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Installeur sur hôtes Windows : correction du démarrage de VBox 
+        <para>Installeur sur hôtes Windows : correction du démarrage de VBox
         avec de mauvais privilèges juste après l'installation (bogue #4162)</para>
       </listitem>
 
@@ -8170,7 +8170,7 @@ on quitte le mode plein écran avec des
   <sect1>
     <title>Version 3.1.0 (30-11-2009)</title>
 
-    <para>Cette version est une mise à jour majeure. Les nouvelles fonctions 
+    <para>Cette version est une mise à jour majeure. Les nouvelles fonctions
     majeures suivantes ont été ajoutées :</para>
 
     <itemizedlist>
@@ -8195,7 +8195,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Connexions de stockage plus flexible : les lecteurs CD/DVD peuvent
-        désormais être connectés aux contrôleurs de stockage de votre choix et 
+        désormais être connectés aux contrôleurs de stockage de votre choix et
         il peut y en avoir plusieurs (<xref linkend="storage" />)</para>
       </listitem>
 
@@ -8301,7 +8301,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>NAT : ajout du proxy DNS du résolveur de l'hôte 
+        <para>NAT : ajout du proxy DNS du résolveur de l'hôte
           (voir <xref linkend="nat_host_resolver_proxy" />)</para>
       </listitem>
 
@@ -8335,7 +8335,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Périphérique de souris : cinq boutons sont désormais passés à 
+        <para>Périphérique de souris : cinq boutons sont désormais passés à
         l'invité (bogue #3773)</para>
       </listitem>
 
@@ -8430,7 +8430,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Dossiers partagés et invités Linux : possibilité de monter un 
+        <para>Dossiers partagés et invités Linux : possibilité de monter un
         dossier partagé si un fichier du même nom que le dossier existe dans
         le répertoire actuel (bogue #928)</para>
       </listitem>
@@ -8520,12 +8520,12 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Linux : correction de l'écriture dans des fichiers 
+        <para>Suppléments Linux : correction de l'écriture dans des fichiers
         ouverts en mode <emphasis>O_APPEND</emphasis> (bogue #3805)</para>
       </listitem>
 
       <listitem>
-        <para>Suppléments Solaris : correction d'une régression dans le pilote 
+        <para>Suppléments Solaris : correction d'une régression dans le pilote
         des suppléments invité qui provoquait, entre autres, la perte des mises
         à jour des propriétés invité et des messages d'erreur périodiques dans
         les journaux système</para>
@@ -8606,7 +8606,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Hôtes Linux : correction de la  compilation du module dans 
+        <para>Hôtes Linux : correction de la  compilation du module dans
         Linux 2.6.32rc4 et supérieur</para>
       </listitem>
 
@@ -8637,7 +8637,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Linux : <emphasis>sendfile()</emphasis> renvoyait 
+        <para>Suppléments Linux : <emphasis>sendfile()</emphasis> renvoyait
           <emphasis>-EOVERFLOW</emphasis> lorsqu'il était exécuté sur un
           dossier partagé (bogue #2921)</para>
       </listitem>
@@ -8893,7 +8893,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : petites améliorations de performances sur Solaris/OpenSolaris 
+        <para>VMM : petites améliorations de performances sur Solaris/OpenSolaris
         (VT-x seulement) </para>
       </listitem>
 
@@ -8903,7 +8903,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : accrocs du CD de NetBSD 5.0.1 lors du démarrage (VT-x 
+        <para>VMM : accrocs du CD de NetBSD 5.0.1 lors du démarrage (VT-x
         seulement ; bogue #3947) </para>
       </listitem>
 
@@ -9075,7 +9075,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Réseau HostOnly : correction du problème de listage des 
+        <para>Réseau HostOnly : correction du problème de listage des
           interfaces host-only sur Mac OS X quand toutes les interfaces physiques
           sont inactives (bogues #4698, #4790)</para>
       </listitem>
@@ -9105,7 +9105,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Réseau bridgé : correction d'un problème dans la queue des paquets
-        qui pourrait causer des BSOD 
+        qui pourrait causer des BSOD
           DRIVER_POWER_STATE_FAILURE pour les hôtes Windows (bogue #4821)</para>
       </listitem>
 
@@ -9262,7 +9262,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Dossiers partagés : correction de la sélection d'un répertoire 
+        <para>Dossiers partagés : correction de la sélection d'un répertoire
         racine du lecteur comme chemin d'hôte du dossier partagé dans VirtualBox
         (hôte Windows seulement)</para>
       </listitem>
@@ -9298,7 +9298,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Hôtes Solaris et Linux : contournement des problèmes de gestion 
+        <para>Hôtes Solaris et Linux : contournement des problèmes de gestion
         des couleurs dans Qt (bogue #4353)</para>
       </listitem>
 
@@ -9560,7 +9560,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : correction d'un accroc et de processus de VM non tuables 
+        <para>VMM : correction d'un accroc et de processus de VM non tuables
         (bogue #4040)</para>
       </listitem>
 
@@ -9570,7 +9570,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : améliorations des performances pour l'E/S réseau (VT-x/AMD-V 
+        <para>VMM : améliorations des performances pour l'E/S réseau (VT-x/AMD-V
         seulement)</para>
       </listitem>
 
@@ -9670,7 +9670,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VBoxManage : correction d'une mauvaise destion de la table de
-       partitions lors de la création de fichiers VMDK, donnant un accès brut 
+       partitions lors de la création de fichiers VMDK, donnant un accès brut
        aux partitions (bogue #3510)</para>
       </listitem>
 
@@ -9849,7 +9849,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : la restauration d'un état sauvegardé échouait parfois 
+        <para>VMM : la restauration d'un état sauvegardé échouait parfois
           (bogues #3984 et #2742)</para>
       </listitem>
 
@@ -10031,7 +10031,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VMM : correction d'une guru meditation liée à la gestion de la
-        mémoire 
+        mémoire
               (virtualisation logicielle seulement)
         </para>
       </listitem>
@@ -10047,7 +10047,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>GUI : affichage correct de la boîte de dialogue détaillée des 
+        <para>GUI : affichage correct de la boîte de dialogue détaillée des
        paramètres des réseaux NAT (bogue #3702)</para>
       </listitem>
 
@@ -10226,7 +10226,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : correction IOPL en mode réel pour des invités DOS (VT-x 
+        <para>VMM : correction IOPL en mode réel pour des invités DOS (VT-x
         seulement) </para>
       </listitem>
 
@@ -10271,7 +10271,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Disque dur : support de davantage de variantes de fichiers VMDK 
+        <para>Disque dur : support de davantage de variantes de fichiers VMDK
         (y compris les images de serveur ESX à taille fixe)</para>
       </listitem>
 
@@ -10458,7 +10458,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>PXE : correction d'accrocs au démarrage quand la virtualisation 
+        <para>PXE : correction d'accrocs au démarrage quand la virtualisation
         matérielle est utilisée (bogue #2536)</para>
       </listitem>
 
@@ -10509,7 +10509,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Hôtes Linux : déplacement des règles udev de redirection USB 
+        <para>Hôtes Linux : déplacement des règles udev de redirection USB
         pour qu'elles n'écrasent pas celles existantes sur le système (bogue #3143)</para>
       </listitem>
 
@@ -10572,7 +10572,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>GUI : suppress,on des événements de relâche des touches 
+        <para>GUI : suppress,on des événements de relâche des touches
         supplémentaires envoyés par les hôtes X11 quand les touches se répètent
         automatiquement (bogue #1296)</para>
       </listitem>
@@ -10597,7 +10597,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>NAT : correction de téléchargements tronqués (hôtes Windows 
+        <para>NAT : correction de téléchargements tronqués (hôtes Windows
         seulement, bogue #3257)</para>
       </listitem>
 
@@ -10768,7 +10768,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : correction d'une corruption occasionnelle de l'état XMM 
+        <para>VMM : correction d'une corruption occasionnelle de l'état XMM
         avec les invités 64 bits </para>
       </listitem>
 
@@ -10828,7 +10828,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Réseau : correction de kernel panics à cuse d'un déréférencement 
+        <para>Réseau : correction de kernel panics à cuse d'un déréférencement
         du pointeur NULL dans les noyaux Linux kernels < 2.6.20 (hôtes Linux seulement ; bogue #2827)</para>
       </listitem>
 
@@ -10928,7 +10928,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VBoxManage <computeroutput>guestproperty</computeroutput>: 
+        <para>VBoxManage <computeroutput>guestproperty</computeroutput>:
         correction de l'énumération des propriétés (mauvais paramètres/exception)</para>
       </listitem>
 
@@ -10977,7 +10977,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Hôtes Mac OS X : ajout d'une option graphique pour désactiver 
+        <para>Hôtes Mac OS X : ajout d'une option graphique pour désactiver
         l'icône système de la vue du temps réel dans l'interface graphique, afin
         de diminuer la charge du processeur de vhôte quand l'invité fait de la 3D</para>
       </listitem>
@@ -11007,7 +11007,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Installeur des suppléments Windows : ajout de l'option /extract 
+        <para>Installeur des suppléments Windows : ajout de l'option /extract
         pour n'extraire (sans installer) que les fichiers dans un répertoire (on
         peut la spécifier avec /D=chemin)</para>
       </listitem>
@@ -11070,7 +11070,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-       <para>Ajout du support des améliorations de virtualisation d'Intel 
+       <para>Ajout du support des améliorations de virtualisation d'Intel
        Nehalem (EPT et VPID ; voir <xref linkend="hwvirt" />)</para>
       </listitem>
 
@@ -11088,7 +11088,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Nouveau moteur NAT avec des performances beaucoup plus appréciables,
-        une meilleure fiabilité et le support de l'écho (ping) ICMP 
+        une meilleure fiabilité et le support de l'écho (ping) ICMP
           (bogues #1046, #2438, #2223, #1247)</para>
       </listitem>
 
@@ -11155,7 +11155,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VMM : correction d'un écran noir au démarrage d'OS/2 1.x (AMD-V 
+        <para>VMM : correction d'un écran noir au démarrage d'OS/2 1.x (AMD-V
         seulement) </para>
       </listitem>
 
@@ -11303,7 +11303,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>ATA : correction d'un verrou quand on met une VM en pause, à cause
-        de problèmes de disque virtuel (comme le disque plein, cible iSCSI 
+        de problèmes de disque virtuel (comme le disque plein, cible iSCSI
         indisponilable)</para>
       </listitem>
 
@@ -11319,7 +11319,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>VBoxHeadless : ne démarre véritablement pas les services X11
-        (service presse-papier, accélération 3D ; hôtes Solaris & Darwin 
+        (service presse-papier, accélération 3D ; hôtes Solaris & Darwin
         seulement ; bogue #3199)</para>
       </listitem>
 
@@ -11434,7 +11434,7 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Hôtes Linux : correction d'une déclaration assertion sur les
-        fortes charges réseaux (hôtes AMD64 correction pour les distributions 
+        fortes charges réseaux (hôtes AMD64 correction pour les distributions
         Linux ayant glibc 2.6 et supérieur (bogue #616)</para>
       </listitem>
 
@@ -11569,7 +11569,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Hôtes Solaris : ajout du support de l'utilisation d'interfaces 
+        <para>Hôtes Solaris : ajout du support de l'utilisation d'interfaces
         réseaux non actives et des Crossbow Virtual
           Network Interfaces (VNICs) avec l'interface réseau de l'hôte</para>
       </listitem>
@@ -11595,7 +11595,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>Suppléments Windows : correction du code d'erreur de 
+        <para>Suppléments Windows : correction du code d'erreur de
           <computeroutput>MoveFile()</computeroutput> si la cible existe (bogue #2350)</para>
       </listitem>
 
@@ -11688,7 +11688,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>GUI : correction des entrées de menu standards pour les versions 
+        <para>GUI : correction des entrées de menu standards pour les versions
         NLS (hôtes Mac OS X seulement)</para>
       </listitem>
 
@@ -11698,7 +11698,7 @@ on quitte le mode plein écran avec des
       </listitem>
 
       <listitem>
-        <para>VBoxManage : correction d'un plantage pendant 
+        <para>VBoxManage : correction d'un plantage pendant
           <computeroutput>internalcommands createrawvmdk</computeroutput>
           (bogue #2184)</para>
       </listitem>
@@ -11736,13 +11736,13 @@ on quitte le mode plein écran avec des
 
       <listitem>
         <para>Hôtes Linux : correction d'un bogue dans vboxdrv.ko qui
-       pourrait corrompre la mémoire du noyau et entraîner un kernel panic 
+       pourrait corrompre la mémoire du noyau et entraîner un kernel panic
        (bogue #2078)
         </para>
       </listitem>
 
       <listitem>
-        <para>Hôtes Linux : corrections de compilation du module du noyau sur 
+        <para>Hôtes Linux : corrections de compilation du module du noyau sur
         Linux 2.6.27</para>
       </listitem>
 
@@ -11871,7 +11871,7 @@ on quitte le mode plein écran avec des
         </listitem>
 
         <listitem>
-          <para>Ajout de l'E/S asynchrone SATA (NCQ: Native Command Queuing) 
+          <para>Ajout de l'E/S asynchrone SATA (NCQ: Native Command Queuing)
           lors de l'accès à des disques/partitions bruts (gain majeur de
           performances)</para>
         </listitem>
diff --git a/doc/manual/fr_FR/user_Frontends.xml b/doc/manual/fr_FR/user_Frontends.xml
index 233daa3..982f398 100644
--- a/doc/manual/fr_FR/user_Frontends.xml
+++ b/doc/manual/fr_FR/user_Frontends.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter>
   <title>Machines virtuelles distantes</title>
 
@@ -34,7 +34,7 @@
     <para>Même quand l'extension est installée, le serveur VRDP est désactivé par
     défaut. On peut l'activer facilement pour chaque VM, soit dans le gestionnaire
     VirtualBox des paramètres d'"Affichage" (voir <xref
-    linkend="settings-display" />), soit avec 
+    linkend="settings-display" />), soit avec
    )s <computeroutput>VBoxManage</computeroutput>:<screen>VBoxManage modifyvm "nom VM" --vrde on</screen></para>
 
     <para>Si vous utilisez <computeroutput>VBoxHeadless</computeroutput> (décrit
@@ -80,7 +80,7 @@
       distante (des exemples figurent ci-dessous). Pour que cela fonctionne, vous
       devez spécifier <emphasis role="bold">l'adresse IP</emphasis> de votre
       système <emphasis>hôte</emphasis> (pas celle de la machine virtuelle&#xA0;!)
-      l'adresse du serveur auquel se connecter, ainsi que le 
+      l'adresse du serveur auquel se connecter, ainsi que le
       <emphasis role="bold">numéro du port</emphasis> qu'utilise le serveur RDP.</para>
 
       <para>Voici des exemples de visualiseurs RDP les plus courants&#xA0;:<itemizedlist>
@@ -93,7 +93,7 @@
             -> "Connexion bureau distant". Si vous utilisez la boîte de dialogue
             "Exécuter", vous pouvez y entrer des options directement&#xA0;:<screen>mstsc 1.2.3.4:3389</screen></para>
 
-            <para>Remplacez <computeroutput>1.2.3.4</computeroutput> par l'adresse IP de l'hôte et 
+            <para>Remplacez <computeroutput>1.2.3.4</computeroutput> par l'adresse IP de l'hôte et
             <computeroutput>3389</computeroutput> par un
             autre port si nécessaire.</para>
 
@@ -101,19 +101,19 @@
               <para>Il faut entourer les adresses IPv6 de crochets pour spécifier
               un port. Par exemple, <computeroutput>mstsc [fe80::1:2:3:4]:3389</computeroutput></para>
             </note>
-            
-            <note>  
+
+            <note>
               <para>Lors d'une connexion à localhost pour tester la connexion, les
               adresses <computeroutput>localhost</computeroutput> et
               <computeroutput>127.0.0.1</computeroutput> pourraient ne pas
-              fonctionner en utilisant 
+              fonctionner en utilisant
               <computeroutput>mstsc.exe</computeroutput>. L'adresse
               <computeroutput>127.0.0.2[:3389]</computeroutput> doit être utilisée à la place.</para>
             </note>
           </listitem>
 
           <listitem>
-            <para>Sur les autres systèmes, vous pouvez utiliser  le programme 
+            <para>Sur les autres systèmes, vous pouvez utiliser  le programme
             libre standard <computeroutput>rdesktop</computeroutput>. Celui-ci
             est inclu avec la plupart des distributions Linux, mais VirtualBox
             est fourni avec une variante modifiée de rdesktop pour un support de
@@ -144,7 +144,7 @@
           </listitem>
 
           <listitem>
-            <para>Avec les clients Sun Ray thin, vous pouvez utiliser 
+            <para>Avec les clients Sun Ray thin, vous pouvez utiliser
             <computeroutput>uttsc</computeroutput>,  qui fait partie du paquet
             Sun Ray Windows Connector. Voir la documentation correspondante pour
             des détails.</para>
@@ -177,7 +177,7 @@
           exécutable avec ce nom.</para>
         </footnote></para>
 
-      <para>Pour démarrer une machine virtuelle avec <computeroutput>VBoxHeadless</computeroutput>, 
+      <para>Pour démarrer une machine virtuelle avec <computeroutput>VBoxHeadless</computeroutput>,
       vous avez trois options&#xA0;:</para>
 
       <itemizedlist>
@@ -189,7 +189,7 @@
         </listitem>
 
         <listitem>
-          <para>Une alternative est d'utiliser 
+          <para>Une alternative est d'utiliser
           <computeroutput>VBoxHeadless</computeroutput> directement, comme
           suit&#xA0;:<screen>VBoxHeadless --startvm <uuid|name></screen></para>
 
@@ -250,7 +250,7 @@
 
           <listitem>
             <para>Une connexion en terminal à l'hôte par lequel vous pouvez accéder
-            à une ligne de commande (par exemple via 
+            à une ligne de commande (par exemple via
             <computeroutput>ssh</computeroutput>).</para>
           </listitem>
 
@@ -268,7 +268,7 @@
 
             <screen>VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register</screen>
 
-            <para>Remarquez que si vous ne spécifiez pas 
+            <para>Remarquez que si vous ne spécifiez pas
             <computeroutput>--register</computeroutput>, vous devrez utiliser
             manuellement la commande <computeroutput>registervm</computeroutput>
             plus tard.</para>
@@ -305,7 +305,7 @@
           </listitem>
 
           <listitem>
-            <para>Attachez le fichier ISO contenant l'installeur du système 
+            <para>Attachez le fichier ISO contenant l'installeur du système
             d'exploitation que vous voudrez installer plus tard sur la
             machine virtuelle, pour que la machine puisse démarrer dessus&#xA0;:<screen>VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
       --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso</screen></para>
@@ -321,11 +321,11 @@
 
           <listitem>
             <para>Sur la machine client, ouvrez le visualiseur RDP et essayez
-            de vous connecter au serveur (voir <xref linkend="rdp-viewers" /> 
+            de vous connecter au serveur (voir <xref linkend="rdp-viewers" />
             ci-dessus pour voir comment utiliser les divers visualiseurs RDP
             classiques).</para>
 
-            <para>Vous devriez voir maintenant le processus d'installation 
+            <para>Vous devriez voir maintenant le processus d'installation
             de votre système d'exploitation invité, à distance dans le visualiseur RDP.</para>
           </listitem>
         </orderedlist></para>
@@ -335,12 +335,12 @@
       <title>USB distant</title>
 
       <para>Une fonction très spéciale du support VRDP de VirtualBox est qu'il
-      supporte les périphériques USB distants également via le réseau. C'est-à-dire que 
+      supporte les périphériques USB distants également via le réseau. C'est-à-dire que
       l'invité de VirtualBox en fonction sur l'ordinateur peut accéder à des
       périphériques USB de l'ordinateur distant sur lequel sont affichées les données
       VRDP de la même manière que des périphériques USB connectés à l'hôte actuel.
       Cela permet d'exécuter des machines virtuelles sur un hôte VirtualBox qui
-      agit comme serveur, où un client peut se connecter de n'importe où avec 
+      agit comme serveur, où un client peut se connecter de n'importe où avec
       simplement un adaptateur réseau et un dispositif d'affichage capable de
       lancer un visualiseur RDP. Quand on branche des périphériques USB
       dans le client, le serveur VirtualBox distant peut y accéder.</para>
@@ -352,10 +352,10 @@
 
       <para>L'accès à des périphériques USB n'est possible que si le client RDP
       supporte cette extension. Sur les hôtes Linux et Solaris, l'installation
-      de VirtualBox fournit un client VRDP convenable appelé 
+      de VirtualBox fournit un client VRDP convenable appelé
       <computeroutput>rdesktop-vrdp</computeroutput>. Les versions récentes de
       <computeroutput>uttsc</computeroutput>, un client taillé pour être utilisé
-      avec des clients Sun Ray thin et qui supporte l'accès aux périphériques 
+      avec des clients Sun Ray thin et qui supporte l'accès aux périphériques
       USB distants. Les clients RDP pour d'autres plateformes seront fournis dans de
       futures versions de VirtualBox.</para>
 
@@ -399,7 +399,7 @@
                   des droits de l'utilisateur sur l'hôte. Selon la plateforme hôte,
                   cela signifie&#xA0;:<itemizedlist>
                       <listitem>
-                        <para>Sur les hôtes Linux, 
+                        <para>Sur les hôtes Linux,
                         <computeroutput>VBoxAuth.so</computeroutput>
                         authentifie les utilisateurs à partir du système PAM de
                         l'hôte.</para>
@@ -413,7 +413,7 @@
                       </listitem>
 
                       <listitem>
-                        <para>Sur les hôtes Mac OS X, 
+                        <para>Sur les hôtes Mac OS X,
                         <computeroutput>VBoxAuth.dylib</computeroutput>
                         authentifie les utilisateurs à partir du service répertoire
                         de l'hôte.<footnote>
@@ -459,7 +459,7 @@
                       </listitem>
 
                       <listitem>
-                        <para>Vous devrez alors configurer les utilisateurs et 
+                        <para>Vous devrez alors configurer les utilisateurs et
                         les mots de passe en écrivant ces éléments dans les
                         extradata de la machine. Comme le fichier XML des paramètres
                         de la machine, dans lequel il faut écrire le mot de
@@ -472,7 +472,7 @@
                         ou l'UUID de la VM,
                         <computeroutput><utilisateur></computeroutput> par
                         le nom d'utilisateur qui devrait être autorisé à se connecter
-                        et 
+                        et
                         <computeroutput><hash></computeroutput> par le mot
                         de passe chiffré. Par exemple, pour avoir la valeur
                         hachée du mot de passe "secret", vous pouvez utiliser la
@@ -519,7 +519,7 @@
       <title>Chiffrement RDP</title>
 
       <para>Le chiffrement du flux de données des fonctions RDP se base sur le
-      chiffrage symétrique RC4 (avec des clés jusqu'à 128bit). Les clés RC4 
+      chiffrage symétrique RC4 (avec des clés jusqu'à 128bit). Les clés RC4
       sont remplacées à intervalles réguliers (tous les 4096 paquets).</para>
 
       <para>RDP fournit différentes méthodes d'authentification&#xA0;:<orderedlist>
@@ -553,10 +553,10 @@
             connexion. Les valeurs valides sont&#xA0;:<itemizedlist>
               <listitem>
                 <para>
-                  <computeroutput>Negotiate</computeroutput> - les connexions 
+                  <computeroutput>Negotiate</computeroutput> - les connexions
                   sécurisées améliorées (TLS) et RDP standards sont autorisées.
                   La méthode de sécurité se négocie avec le client. C'est le réglage
-                  par défaut. 
+                  par défaut.
                 </para>
               </listitem>
 
@@ -582,7 +582,7 @@
             <computeroutput>TLS</computeroutput>, le protocole TLS sera automatiquement
             utilisé par le serveur si le client supporte TLS. Cependant, pour
             utiliser TLS, le serveur doit posséder le certificat du serveur, la
-            clé privée du serveur et l'autorité du certificat (Certificate 
+            clé privée du serveur et l'autorité du certificat (Certificate
             Authority (CA)). L'exemple suivant montre comment générer un
             certificat de serveur.<orderedlist>
                 <listitem>
@@ -641,20 +641,20 @@ openssl req -new -key server_key_private.pem -out server_req.pem</screen></para>
 
       <para>Le client RDP peut sélectionner le numéro du moniteur virtuel auquel
       se connecter en utilisant le paramètre d'identification <computeroutput>domain</computeroutput>
-      (<computeroutput>-d</computeroutput>). Si le paramètre se termine par 
+      (<computeroutput>-d</computeroutput>). Si le paramètre se termine par
       <computeroutput>@</computeroutput> suivi d'un numéro, VirtualBox
-      interprète ce numéro comme l'index des écrans. On sélectionne l'écran invité 
+      interprète ce numéro comme l'index des écrans. On sélectionne l'écran invité
       primaire  avec <computeroutput>@1</computeroutput>, le premier écran secondaire
       avec <computeroutput>@2</computeroutput>, etc.</para>
 
       <para>Le client Microsoft RDP6 ne pous permet pas de sécifier un nom de
       domaine distinct. Utilisez plutôt
       <computeroutput>domaine\nom_utilisateur</computeroutput> dans le champ
-      <computeroutput>Nom d'utilisateur :</computeroutput> -- par exemple, 
+      <computeroutput>Nom d'utilisateur :</computeroutput> -- par exemple,
       <computeroutput>@2\name</computeroutput>.
       <computeroutput>nom</computeroutput> doit être renseigné et il doit être
       le nom utilisé pour vous identifier si le serveur VRDP est configuré pour
-      demander une autorisation. Sinon, vous pouvez utiliser n'importe quel texte 
+      demander une autorisation. Sinon, vous pouvez utiliser n'importe quel texte
       comme nom d'utilisateur.</para>
     </sect2>
 
@@ -662,20 +662,20 @@ openssl req -new -key server_key_private.pem -out server_req.pem</screen></para>
       <title>Redirection graphique VRDP</title>
 
       <para>À partir de VirtualBox 3.2, le serveur VRDP peut rediriger les flux
-      graphiques de l'hôte vers le client RDP. Les frames graphiques sont 
+      graphiques de l'hôte vers le client RDP. Les frames graphiques sont
       compressés en utilisant l'algorithme JPEG, ce qui permet un ratio de compression
       plus fort que les méthodes de compression bitmap RDP standards. Il est
       possible d'augmenter le ratio de compression en diminuant la qualité de l'image.</para>
 
-      <para>Le serveur VRDP détecte automatiquement les flux vidéos dans un 
+      <para>Le serveur VRDP détecte automatiquement les flux vidéos dans un
       invité au fur et à mesure que les zones rectangulaires se mettent à jour
       fréquemment. Il s'en suit que cette méthode fonctionne avec n'importe quel
       système d'exploitation invité, sans devoir installer de logiciels supplémentaires
-      dans l'invité&#xA0;; en particulier, les suppléments invité ne sont pas 
+      dans l'invité&#xA0;; en particulier, les suppléments invité ne sont pas
       requis.</para>
 
       <para>Par contre, côté client, seul le client de connexion Connexion bureau
-      à distance de Windows 7 supporte actuellement cette fonctionnalité. Si un 
+      à distance de Windows 7 supporte actuellement cette fonctionnalité. Si un
       client ne supporte pas la redirection graphique, le serveur VRDP se rabat
       sur le rafraîchissement régulier des bitmap.</para>
 
@@ -718,7 +718,7 @@ VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableUSB" 1
 VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableAudio" 1
 VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1</screen>
 
-      <para>Pour réactiver une fonction, utilisez une commande identique 
+      <para>Pour réactiver une fonction, utilisez une commande identique
       sans l'argument 1. Par exemple&#xA0;: <screen>VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableDisplay"</screen></para>
     </sect2>
   </sect1>
@@ -726,7 +726,7 @@ VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1</scree
   <sect1 id="teleporting">
     <title>Téléportation</title>
 
-    <para>À partir de la version 3.1, VirtualBox supporte la "téléportation" -- 
+    <para>À partir de la version 3.1, VirtualBox supporte la "téléportation" --
     à savoir qu'il peut déplacer une machine sur un réseau d'un hôte VirtualBox
     à l'autre, pendant que la machine est en fonction. Cela fonctionne indépendamment
     du système d'exploitation hôte&#xA0;: vous pouvez téléporter des machines
@@ -741,15 +741,15 @@ VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1</scree
     un temps nimimum.</para>
 
     <para>La téléportation est possible sur n'importe quel réseau TCP/IP&#xA0;;
-    la source et la cible n'ont besoin que de s'entendre sur un port TCP/IP 
+    la source et la cible n'ont besoin que de s'entendre sur un port TCP/IP
     spécifié dans les paramètres de téléportation.</para>
 
-    <para>Cependant, pour l'instant, il y a quelques prérequis pour que cela 
+    <para>Cependant, pour l'instant, il y a quelques prérequis pour que cela
     fonctionne&#xA0;:<orderedlist>
         <listitem>
           <para>Sur l'hôte cible, vous devez configurer une machine virtuelle dans
           VirtualBox avec exactement les mêmes paramètres matériels que la machine
-          sur la source que vous voulez téléporter. Cela ne s'applique pas aux 
+          sur la source que vous voulez téléporter. Cela ne s'applique pas aux
           paramètres purement descriptifs tels que le nom de la VM, mais bien sûr,
           pour que la téléportation fonctionne, la machine cible doit avoir la
           même quantité de mémoire et les autres paramètres matériels. Sans cela,
@@ -770,7 +770,7 @@ VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1</scree
 
     <para>Puis, suivez les étapes suivantes&#xA0;:<orderedlist>
         <listitem>
-          <para>Sur l'hôte <emphasis>cible</emphasis>, configurez la machine 
+          <para>Sur l'hôte <emphasis>cible</emphasis>, configurez la machine
           virtuelle pour attendre qu'une demande de téléportation arrive quand
           elle sera démarrée, plutôt que d'essayer de démarrer réellement la machine.
           Cela se fait avec la commande VBoxManage suivante&#xA0;:<screen>VBoxManage modifyvm <nomvmcible> --teleporter on --teleporterport <port></screen></para>
@@ -811,9 +811,9 @@ VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1</scree
         <para>Dans de rares cas, si les processeurs de la source et de la cible
         sont très différents, la téléportation peut échouer avec un message d'erreur
         ou la cible peut planter. Cela peut arriver surtout si la VM exécute des
-        logiciels très optimisés pour fonctionner sur un processeur particulier 
+        logiciels très optimisés pour fonctionner sur un processeur particulier
         sans vérifier correctement que certaines fonctions du processeur sont
-        bien présentes. VirtualBox filtre les capacités du processeur présenté 
+        bien présentes. VirtualBox filtre les capacités du processeur présenté
         au système d'exploitation invité. Les utilisateurs avancés peuvent essayer de
         restreindre les possibilités de ces processeurs virtuels avec la commande
         <computeroutput>VBoxManage --modifyvm
diff --git a/doc/manual/fr_FR/user_Glossary.xml b/doc/manual/fr_FR/user_Glossary.xml
index 570f24e..f698b8c 100644
--- a/doc/manual/fr_FR/user_Glossary.xml
+++ b/doc/manual/fr_FR/user_Glossary.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <glossary id="Glossary">
   <glossdiv>
     <title>A</title>
@@ -52,7 +52,7 @@
         de l'ancienne PIC (programmable interrupt controller). La plupart des
         CPUs récents incorporent un APIC ("local APIC"). Beaucoup de systèmes intègrent
         aussi un I/O APIC (input output APIC) dans une puce à part qui fournit plus de
-        16 IRQs. Windows 2000 et ultérieur utilise un noyau différent si il est 
+        16 IRQs. Windows 2000 et ultérieur utilise un noyau différent si il est
         détecté un I/O APIC à l'installation. De ce fait un I/O APIC ne doit pas être
         supprimé après l'installation.</para>
       </glossdef>
@@ -162,7 +162,7 @@
       <glossterm>GUI</glossterm>
 
       <glossdef>
-        <para>Graphical User Interface. Communément employé en opposition à 
+        <para>Graphical User Interface. Communément employé en opposition à
         "interface en ligne de commande", dans le contexte VirtualBox, nous nous
         référons au programme graphique principal de
         <computeroutput>VirtualBox</computeroutput> en tant que "GUI", pour le
@@ -231,7 +231,7 @@
         tel que le ICH9; voir <xref linkend="settings-motherboard" />.
         Contrairement aux traditionnelles interruptions pin-based, avec MSI, une petite
         quantité de données peut accompagner le véritable message d'interruption. Ceci réduit la
-        quantité requise de broches sur le matériel, permet plus d'interruptions avec de 
+        quantité requise de broches sur le matériel, permet plus d'interruptions avec de
         meilleures performances.</para>
       </glossdef>
     </glossentry>
diff --git a/doc/manual/fr_FR/user_GuestAdditions.xml b/doc/manual/fr_FR/user_GuestAdditions.xml
index ad2b6c7..f1d21eb 100644
--- a/doc/manual/fr_FR/user_GuestAdditions.xml
+++ b/doc/manual/fr_FR/user_GuestAdditions.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="guestadditions">
   <title>Les suppléments invité</title>
 
@@ -25,7 +25,7 @@
 
     <para>Les suppléments invité de VirtualBox pour tous les systèmes d'exploitation
     invités supportés sont fournis sous forme d'un fichier unique d'image de
-    CD-ROM qui s'appelle 
+    CD-ROM qui s'appelle
     <computeroutput>VBoxGuestAdditions.iso</computeroutput>. Ce fichier image se
     trouve dans le répertoire d'installation de VirtualBox. Pour installer les
     suppléments invité sur une VM en particulier, vous montez ce fichier ISO dans
@@ -93,7 +93,7 @@
             <para>Avec cette fonctionnalité, les fenêtres individuelles affichées
             sur le bureau de la machine virtuelle peuvent se placer sur le bureau
             de l'hôte comme si l'application à leur origine fonctionnait vraiment
-            sur l'hôte. Voir <xref linkend="seamlesswindows" /> pour les 
+            sur l'hôte. Voir <xref linkend="seamlesswindows" /> pour les
             détails.</para>
           </glossdef>
         </glossentry>
@@ -123,17 +123,17 @@
             s'assurer que l'horloge système de l'invité est mieux synchronisée avec
             celle de l'hôte.</para>
 
-            <para>Pour plusieurs raisons, il se peut que l'horloge de l'invité 
+            <para>Pour plusieurs raisons, il se peut que l'horloge de l'invité
             tourne à un rythme légèrement plus lent que celle de l'hôte. L'hôte
-            pourrait recevoir des mises à jour par NTP et sa propre horloge 
+            pourrait recevoir des mises à jour par NTP et sa propre horloge
             pourrait ne pas tourner de manière rectiligne. Une VM pourrait aussi
-            être mise en pause, ce qui arrête le cours du temps dans l'invité 
+            être mise en pause, ce qui arrête le cours du temps dans l'invité
             pendant une durée plus ou moins longue. Quand le temps des horloges
             séparées entre l'invité et l'hôte ne diffère que légèrement, le service de
             synchronisation du temps essaie d'ajuster progressivement et
             doucement l'heure de l'invité, par petites accélérations, soit pour
             "rattraper", soit pour "perdre" du temps. Quand la différence est trop
-            importante (par exemple si la VM a été mise en pause pendant des 
+            importante (par exemple si la VM a été mise en pause pendant des
             heures puis restaurée d'un état sauvegardé), l'heure de l'invité est
             modifiée immédiatement sans ajustement progressif.</para>
 
@@ -148,8 +148,8 @@
 
           <glossdef>
             <para>Quand les suppléments invité sont installés, le presse-papier
-            du système d'exploitation invité peut être éventuellement partagé 
-            avec votre système d'exploitation hôte&#xA0;; voir 
+            du système d'exploitation invité peut être éventuellement partagé
+            avec votre système d'exploitation hôte&#xA0;; voir
             <xref linkend="generalsettings" />.</para>
           </glossdef>
         </glossentry>
@@ -164,7 +164,7 @@
       </glosslist></para>
 
     <para>Chaque version de VirtualBox, même celles mineures, inclut sa propre
-    version des suppléments invité. Si les interfaces par lesquelles le c&#x153;ur 
+    version des suppléments invité. Si les interfaces par lesquelles le c&#x153;ur
     de VirtualBox communique avec les suppléments invité sont stables pour que
     les suppléments invité déjà installés dans une VM continuent de fonctionner,
     quand VirtualBox est mis à jour sur l'hôte, pour de meilleurs résultats, il
@@ -178,7 +178,7 @@
 
     <para>Pour désactiver cette vérification des mises à jour des suppléments invité
     dans une machine virtuelle donnée, définissez la valeur de la propriété
-    invité 
+    invité
     <computeroutput>/VirtualBox/GuestAdd/CheckHostVersion</computeroutput>
     à <computeroutput>0</computeroutput>&#xA0;; voir <xref
     linkend="guestadd-guestprops" /> pour des détails.</para>
@@ -230,7 +230,7 @@
         <listitem>
           <para>Microsoft Windows 8 (toutes les éditions)</para>
         </listitem>
-        
+
         <listitem>
           <para>Microsoft Windows Server 2012</para>
         </listitem>
@@ -243,9 +243,9 @@
         <para>Dans le menu "Périphériques" de la barre de menu de la machine
         virtuelle, VirtualBox a un élément de menu tout prêt nommé "Insérer l'image
         du CD des suppléments invité", qui monte le fichier ISO des suppléments invité
-        dans votre machine virtuelle. L'invité Windows devrait alors démarrer 
+        dans votre machine virtuelle. L'invité Windows devrait alors démarrer
         automatiquement l'installeur des suppléments invité qui installe les
-        suppléments invité dans votre invité Windows. Les autres systèmes 
+        suppléments invité dans votre invité Windows. Les autres systèmes
         d'exploitation invités (ou si le démarrage automatique d'un logiciel sur
         CD est désactivé) exigent un démarrage manuel de l'installeur.</para>
 
@@ -326,7 +326,7 @@
         votre invité Windows, Windows démarrera automatiquement le programme
         d'installation des suppléments invité de VirtualBox depuis l'ISO
         Additions. Si vous avez désactivé la fonction d'exécution automatique,
-        choisissez 
+        choisissez
         <computeroutput>VBoxWindowsAdditions.exe</computeroutput> dans le lecteur
         CD/DVD dans l'invité pour démarrer l'installeur.</para>
 
@@ -339,7 +339,7 @@
         les confirmer afin qde continuer l'installation et d'installer correctement
         les suppléments.</para>
 
-        <para>Après l'installation, redémarrez votre système d'exploitation 
+        <para>Après l'installation, redémarrez votre système d'exploitation
         invité pour activer les suppléments.</para>
       </sect3>
 
@@ -347,7 +347,7 @@
         <title>Mettre à jour les suppléments invité Windows</title>
 
         <para>Les suppléments invité Windows peuvent être mis à jour en lançant
-        de nouveau le programme d'installation comme décrit précédemment. 
+        de nouveau le programme d'installation comme décrit précédemment.
         Ceci remplacera les pilotes des suppléments précédents par des versions
         mises à jour.</para>
 
@@ -364,7 +364,7 @@
           </listitem>
         </orderedlist>
 
-        <para>Pour chacun d'eux, choisissez de fournir votre propre pilote et 
+        <para>Pour chacun d'eux, choisissez de fournir votre propre pilote et
         utilisez "Vous avez un disque" pour orienter l'assistant sur le lecteur
         de CD-ROM contenant les suppléments invité.</para>
       </sect3>
@@ -428,8 +428,8 @@
           <glossentry>
             <glossterm>VeriSign Code Signing CA</glossterm>
             <glossdef>
-              <para>Dans l'explorateur Windows, faites un clic droit sur 
-              VBoxWindowsAdditions-<Architecture>.exe, cliquez sur 
+              <para>Dans l'explorateur Windows, faites un clic droit sur
+              VBoxWindowsAdditions-<Architecture>.exe, cliquez sur
               "Propriétés"</para>
               <itemizedlist>
                 <listitem>
@@ -512,7 +512,7 @@
         Windows 7 ou 8, un pilote graphique XPDM va s'installer. Ce pilote
         graphique ne supporte pas Windows Aero / Direct3D de l'invité - il faut
         donc installer à la place le pilote graphique expérimental WDDM. Pour
-        sélectionner ce pilote par défaut, ajoutez le paramètre 
+        sélectionner ce pilote par défaut, ajoutez le paramètre
         <computeroutput>/with_wddm</computeroutput> de la ligne de commande quand
         vous appelez l'installeur des suppléments invité Windows.</para></note></para>
 
@@ -538,7 +538,7 @@
         <para>Pour extraire explicitement les suppléments invité Windows pour
         une autre plateforme que celle où vous êtes (par exemple des fichiers 64
         bits sur une plateforme 32 bits), vous devez exécuter l'installeur pour
-        la plateforme adéquate 
+        la plateforme adéquate
         (<computeroutput>VBoxWindowsAdditions-x86.exe</computeroutput> ou
         <computeroutput>VBoxWindowsAdditions-amd64.exe</computeroutput>) avec
         le paramètre <computeroutput>/extract</computeroutput>.</para>
@@ -580,21 +580,21 @@
       les suppléments invité.</para>
 
       <para>La version du noyau Linux fournie par défaut dans SUSE et
-      openSUSE 10.2, dans Ubuntu 6.10 (toutes les versions) et Ubuntu 6.06 
+      openSUSE 10.2, dans Ubuntu 6.10 (toutes les versions) et Ubuntu 6.06
       (édition serveur) contient un bogue qui peut le faire planter au démarrage
       quand il tourne sur une machine virtuelle. Les suppléments invité fonctionnent
       dans ces distributions.</para>
 
       <para>Remarquez que certaines distributions Linux sont déjà fournies avec
       tout ou partie des suppléments invité VirtualBox. Vous pouvez choisir
-      de garder la version des suppléments invité de votre distribution, mais 
+      de garder la version des suppléments invité de votre distribution, mais
       ils sont souvent obsolètes et limités dans leurs fonctionnalités, donc nous
       recommandons de les remplacer par les
-      suppléments invité fournis avec VirtualBox. L'installeur des suppléments 
+      suppléments invité fournis avec VirtualBox. L'installeur des suppléments
       invité de VirtualBox pour Linux essaie de détecter l'installation existante
       et de les remplacer, mais selon la façon dont votre distribution intègre
-      les suppléments invité, cela peut exiger un peu d'intervention manuelle. 
-      Il est fortement 
+      les suppléments invité, cela peut exiger un peu d'intervention manuelle.
+      Il est fortement
       recommandé de prendre un instantané de la machine virtuelle avant de
       remplacer les suppléments invité préinstallés.</para>
 
@@ -612,7 +612,7 @@
 
         <orderedlist>
           <listitem>
-            <para>Avant d'installer les suppléments invité, vous devrez 
+            <para>Avant d'installer les suppléments invité, vous devrez
             préparer votre système invité à construire les modules externes du
             noyau. Ceci fonctionne comme décrit au <xref
             linkend="externalkernelmodules" />, sauf que cette étape doit être
@@ -627,10 +627,10 @@
 
             <para>Assurez-vous d'installer DKMS <emphasis>avant</emphasis>
             d'installer les suppléments invité Linux. Si DKMS n'est pas disponible
-            ou pas installé, il faudra recréer à la main les modules noyau de 
+            ou pas installé, il faudra recréer à la main les modules noyau de
             l'invité à chaque fois que le noyau invité sera mis à jour en utilisant
             la commande <screen>/etc/init.d/vboxadd setup</screen> en tant
-            qu'administrateur. 
+            qu'administrateur.
             </para>
           </listitem>
 
@@ -643,7 +643,7 @@
           </listitem>
 
           <listitem>
-            <para>Rendez-vous dans le répertoire où est monté votre lecteur CD-ROM 
+            <para>Rendez-vous dans le répertoire où est monté votre lecteur CD-ROM
             et exécutez, en tant qu'administrateur&#xA0;:</para>
 
             <screen>sh ./VBoxLinuxAdditions.run</screen>
@@ -651,11 +651,11 @@
           </listitem>
         </orderedlist>
 
-        <para>Pour votre confort, nous fournissons les 
+        <para>Pour votre confort, nous fournissons les
         instructions pas à pas suivantes pour les copies fraîchement installées
         des versions récentes des distributions Linux les plus populaires.
-        Après ces étapes préparatoires, vous pouvez 
-        exécuter l'installeur des suppléments invité VirtualBox comme décrit 
+        Après ces étapes préparatoires, vous pouvez
+        exécuter l'installeur des suppléments invité VirtualBox comme décrit
         ci-dessus.</para>
 
         <sect4>
@@ -751,7 +751,7 @@
               </listitem>
 
               <listitem>
-                <para>Installez le compilateur the GNU C en utilisant 
+                <para>Installez le compilateur the GNU C en utilisant
                 <screen>zypper install gcc</screen></para>
               </listitem>
 
@@ -799,8 +799,8 @@
               </listitem>
 
               <listitem>
-                <para>Installez DKMS en utilisant <screen>urpmi dkms</screen> 
-                et assurez-vous de choisir le bon paquet kernel-devel quand 
+                <para>Installez DKMS en utilisant <screen>urpmi dkms</screen>
+                et assurez-vous de choisir le bon paquet kernel-devel quand
                 l'installeur vous le demande (utilisez <computeroutput>uname -a</computeroutput>
                 pour comparer).</para>
               </listitem>
@@ -812,7 +812,7 @@
 
           <para><orderedlist>
               <listitem>
-                <para>Pour les versions antérieures à 6, ajoutez 
+                <para>Pour les versions antérieures à 6, ajoutez
                 <computeroutput>divider=10</computeroutput> aux options de démarrage
                 du noyau dans
                 <computeroutput>/etc/grub.conf</computeroutput> pour réduire la
@@ -884,7 +884,7 @@
         <para>Dans les invités Linux et Solaris, l'intégration graphique de la
         souris de VirtualBox passe par le système X Window.  VirtualBox peut
         utiliser la variante X.Org du système (ou XFree86 version 4.3 qui est
-        identique à la première version de X.Org). Au cours du processus 
+        identique à la première version de X.Org). Au cours du processus
         d'installation, le serveur d'affichage X.Org sera paramétré pour utiliser
         les pilotes graphiques et de souris fournis avec les suppléments invité.</para>
 
@@ -902,7 +902,7 @@
         système X Window version 11) ou une version supérieure. La présentation
         des écrans invités peut être ajustée au besoin en utilisant les outils
         fournis avec le système d'exploitation invité.</para>
-        
+
         <para>Si vous voulez mieux comprendre les détails de la manière dont les pilotes
         X.Org sont paramétrés (en particulier si vous souhaitez les utiliser dans
         un réglage non géré correctement par notre installeur), vous devriez lire
@@ -913,7 +913,7 @@
         <title>Metter à jour les suppléments invité Linux</title>
 
         <para>Les suppléments invité peuvent être mis à jour simplement en refaisant
-        la procédure d'installation avec une image de CD-ROM mise à jour. Ceci 
+        la procédure d'installation avec une image de CD-ROM mise à jour. Ceci
         remplacera les pilotes par des versions mises à jour. Vous devriez
         redémarrer après avoir mis à jour les suppléments invité.</para>
       </sect3>
@@ -921,24 +921,24 @@
       <sect3>
         <title>Désinstaller les suppléments invité Linux</title>
 
-        <para>Si vous avez une version des suppléments invité installée sur 
+        <para>Si vous avez une version des suppléments invité installée sur
         votre machine virtuelle et si vous souhaitez l'enlever sans en installer
-        d'autres, vous pouvez le faire en insérant l'image CD des suppléments 
-        invité dans le lecteur de CD-ROM virtuel comme décrit ci-dessus et en 
+        d'autres, vous pouvez le faire en insérant l'image CD des suppléments
+        invité dans le lecteur de CD-ROM virtuel comme décrit ci-dessus et en
         lançant l'installeur des suppléments invité actuels avec le paramètre
-        "uninstall" à partir de l'endroit où est monté l'image du CD sur 
+        "uninstall" à partir de l'endroit où est monté l'image du CD sur
         l'invité&#xA0;: <screen>sh ./VBoxLinuxAdditions.run uninstall</screen></para>
 
         <para>Si cela fonctionnera en principe sans problème, il se peut que vous
         deviez faire certains nettoyages à la main sur l'invité (en particulier
         du fichier XFree86Config ou xorg.conf) dans certains cas, surtout si la
-        version installée des suppléments ou le système d'exploitation invité 
+        version installée des suppléments ou le système d'exploitation invité
         étaient très anciens ou si vous avez fait vos propres modifications du
         paramétrage des suppléments invité après les avoir installé.</para>
 
-        <para>À partir de la version 3.1.0, vous pouvez désinstaller les 
+        <para>À partir de la version 3.1.0, vous pouvez désinstaller les
         suppléments en appelant <screen>/opt/VBoxGuestAdditions- at VBOX_VERSION_STRING@/uninstall.sh</screen>Merci
-        de remplacer 
+        de remplacer
         <computeroutput>/opt/VBoxGuestAdditions- at VBOX_VERSION_STRING@</computeroutput>
         par le bon répertoire d'installation des suppléments invité.</para>
       </sect3>
@@ -972,7 +972,7 @@
         <title>Installer les suppléments invité Solaris</title>
 
         <para>Les suppléments invité de VirtualBox pour Solaris sont fournis
-        sur le même ISO de CD-ROM que les suppléments pour Windows et Linux 
+        sur le même ISO de CD-ROM que les suppléments pour Windows et Linux
         décrits ci-dessus. Ils sont aussi fournis avec un programme d'installation
         qui vous guide à travers le processus d'initialisation.</para>
 
@@ -986,7 +986,7 @@
             expliqué pour un invité Windows au <xref
             linkend="mountingadditionsiso" />.</para>
 
-            <para>Au cas où le lecteur de CD-ROM de l'invité ne se monte pas 
+            <para>Au cas où le lecteur de CD-ROM de l'invité ne se monte pas
             (ce qu'on a constaté avec certaines versions de Solaris 10), exécutez
             en tant qu'administrateur&#xA0;:</para>
 
@@ -1001,7 +1001,7 @@
           </listitem>
 
           <listitem>
-            <para>Choisissez "1" et confirmez l'installation du paquet des 
+            <para>Choisissez "1" et confirmez l'installation du paquet des
             suppléments invité. Après la fin de l'installation, reconnectez-vous
             au serveur X de votre invité pour activer suppléments invité de X11.</para>
           </listitem>
@@ -1042,7 +1042,7 @@
       directory <computeroutput>\32bit\OS2</computeroutput>.</para>
 
       <para>Comme on ne fournit pas pour le moment d'installeur automatique,
-      merci de vous reporter au fichier <computeroutput>readme.txt</computeroutput> 
+      merci de vous reporter au fichier <computeroutput>readme.txt</computeroutput>
       de ce répertoire, qui décrit la façon d'installer les suppléments invité
       OS/2 à la main.</para>
     </sect2>
@@ -1101,8 +1101,8 @@
       </listitem>
 
       <listitem>
-        <para>Partages inter-VM, qui peuvent être ajoutés et supprimés pendant 
-        l'exécution et qui ne durent pas après l'arrêt d'une VM&#xA0;; ajoutez 
+        <para>Partages inter-VM, qui peuvent être ajoutés et supprimés pendant
+        l'exécution et qui ne durent pas après l'arrêt d'une VM&#xA0;; ajoutez
         pour eux l'option <computeroutput>--transient</computeroutput> à la ligne
         de commande ci-dessus.</para>
       </listitem>
@@ -1147,7 +1147,7 @@
             <para>Dans un invité Windows, on peut naviguer dans les dossiers
             partagés qui apparaissent donc dans l'explorateur Windows. Donc,
             pour connecter un dossier partagé à votre invité Windows, ouvrez
-            l'explorateur Windows et cherchez-le dans "Favoris réseaux" -> 
+            l'explorateur Windows et cherchez-le dans "Favoris réseaux" ->
             "Tout le réseau" -> "Dossier partagé VirtualBox". En effectuant
             un clic droit sur un dossier partagé et en sélectionnant "Connecter
             un lecteur réseau" dans le menu qui apparaît, vous pouvez affecter
@@ -1202,7 +1202,7 @@ sharedfile1.mp3 sharedfile2.txt
 $</screen>
 
             <para>Par-delà les options standard fournies par la commande
-            <computeroutput>mount</computeroutput>, celles suivantes sont 
+            <computeroutput>mount</computeroutput>, celles suivantes sont
             disponibles&#xA0;:</para>
 
             <screen>iocharset CHARSET</screen>
@@ -1232,7 +1232,7 @@ $</screen>
     <sect2 id="sf_mount_auto">
       <title>Montage automatique</title>
 
-      <para>À partir de la version 4.0, VirtualBox peut monter automatiquement 
+      <para>À partir de la version 4.0, VirtualBox peut monter automatiquement
       des dossiers partagés avec vos options. Si le montage automatique est activé
       pour un dossier partagé spécifique, les suppléments invité monteront
       automatiquement ce dossier dès qu'un utilisateur se connecte à l'OS invité. Les
@@ -1250,7 +1250,7 @@ $</screen>
 
           <listitem>
             <para>Avec des <emphasis role="bold">invités Linux,</emphasis>, les
-            dossiers partagés montés automatiquement sont montés dans 
+            dossiers partagés montés automatiquement sont montés dans
             le répertoire <computeroutput>/media</computeroutput>, avec le préfixe
             <computeroutput>sf_</computeroutput>. Par exemple, le dossier partagé
             <computeroutput>myfiles</computeroutput> serait monté dans
@@ -1264,8 +1264,8 @@ $</screen>
             valeur différente de "sf" pour changer ce préfixe&#xA0;; voir <xref
             linkend="guestadd-guestprops" /> pour les détails.<note>
                 <para>L'accès aux dossiers partagés montés automatiquement n'est
-                autorisé que pour le groupe utilisateur 
-                <computeroutput>vboxsf</computeroutput>, créé par l'installeur des 
+                autorisé que pour le groupe utilisateur
+                <computeroutput>vboxsf</computeroutput>, créé par l'installeur des
                 suppléments invité de VirtualBox. Donc les utilisateurs de l'invité
                 doivent être membres de ce groupe pour avoir un accès en lecture/écriture
                 ou en lecture seule si le dossier n'est pas inscriptible.</para>
@@ -1284,8 +1284,8 @@ $</screen>
           </listitem>
         </itemizedlist></para>
 
-      <para>Pour effectuer des changements sur les dossiers partagés montés 
-      automatiquement pendant qu'une VM est en fonction, l'OS invité doit être 
+      <para>Pour effectuer des changements sur les dossiers partagés montés
+      automatiquement pendant qu'une VM est en fonction, l'OS invité doit être
       relancé. (Cela ne vaut que pour les dossiers partagés montés automatiquement,
       pas pour coux montés à la main.)</para>
     </sect2>
@@ -1409,7 +1409,7 @@ $</screen>
     <sect2 id="guestadd-3d">
       <title>Accélération 3D matérielle (OpenGL and Direct3D 8/9)</title>
 
-      <para>Les suppléments invité de VirtualBox contiennent un support 3D 
+      <para>Les suppléments invité de VirtualBox contiennent un support 3D
       matériel  expérimental pour les invités Windows, Linux et Solaris.<footnote>
           <para>Le support OpenGL pour les invités Windows a été ajouté avec
           VirtualBox 2.1&#xA0;; le support pour Linux et Solaris a suivi avec
@@ -1433,8 +1433,8 @@ $</screen>
            et Solaris. En particulier&#xA0;:<itemizedlist>
                 <listitem>
                   <para>L'accélération 3D des invités Windows exige Windows
-                  2000, Windows XP, Vista ou Windows 7. OpenGL et Direct3D 8/9 
-                  (pas avec Windows 2000) sont supportés 
+                  2000, Windows XP, Vista ou Windows 7. OpenGL et Direct3D 8/9
+                  (pas avec Windows 2000) sont supportés
                   (expérimental).</para>
                 </listitem>
 
@@ -1468,38 +1468,38 @@ $</screen>
 
           <listitem>
             <para>Le support 3D étant pour l'instant expérimental, il est désactivé par
-            défaut et il faut <emphasis role="bold">l'activer à la main</emphasis> 
+            défaut et il faut <emphasis role="bold">l'activer à la main</emphasis>
             dans les paramètres de la VM (voir <xref
             linkend="generalsettings" />).<note>
             <para>
               Les systèmes invité douteux ne devraient pas être autorisés à utiliser
               les fonctions d'accélération 3D de VirtualBox tout comme les logiciels
-              douteux de l'hôte ne devraient pas être autorisés à utiliser 
+              douteux de l'hôte ne devraient pas être autorisés à utiliser
               l'accélération 3D. Les pilotes du matériel 3D sont en général trop
-              complexes pour être parfaitement sécurisés et tout logiciel 
+              complexes pour être parfaitement sécurisés et tout logiciel
               autorisé à y accéder peut être en mesure de compromettre le système
               d'exploitation qui les exécute. En outre, l'activation de l'accélération
               3D donne à l'invité un accès direct à une grande étendue de code
               informatique supplémentaire du processus hôte de VirtualBox, donc
               il pourrait être concevable de l'utiliser pour planter la machine
-              virtuelle. 
+              virtuelle.
             </para>
             </note></para>
           </listitem>
         </orderedlist></para>
 
       <para>Avec VirtualBox 4.1, le support du thème Windows Aero est ajouté pour
-      les invités Windows Vista et Windows. Pour activer le support du thème 
+      les invités Windows Vista et Windows. Pour activer le support du thème
       Aero, le pilote graphique expérimental WDDM de VirtualBox doit être installé,
       il est disponible avec l'installation des suppléments invité. Comme le pilote
       graphique WDDM est pour l'instant expérimental, il n'est pas installé par
-      défaut et il faut <emphasis role="bold">le sélectionner à la main</emphasis> 
+      défaut et il faut <emphasis role="bold">le sélectionner à la main</emphasis>
       dans l'installeur des suppléments invité en répondant "Non" dans la boîte
       de dialogue "Voulez-vous installer le support Direct3D de base" qui s'affiche
       quand la fonction Direct3D est sélectionnée.</para>
 
       <para><note><para>Contrairement au support Direct3D de base actuel, l'installation
-      du pilote graphique WDDM <emphasis role="bold">n'exige pas</emphasis> 
+      du pilote graphique WDDM <emphasis role="bold">n'exige pas</emphasis>
       le "Mode sans échec".</para></note></para>
 
       <para>Le thème Aero n'est pas activé par défaut. Pour l'activer
@@ -1539,13 +1539,13 @@ $</screen>
 
       <para>Avec cette fonctionnalité, si une application (comme un lecteur de
       vidéos) de votre VM Windows utilise les couches graphiques 2D pour lire un clip
-      vidéo, VirtualBox essaiera d'utiliser l'accélération graphique matérielle de 
+      vidéo, VirtualBox essaiera d'utiliser l'accélération graphique matérielle de
       votre hôte plutôt que de faire de l'interprétation de couches ni conversion
       de couleurs dans le logiciel (ce qui serait lent). Cela fonctionne actuellement
       avec les plateformes hôtes Windows, Linux et Mac, pourvu que votre système
       d'exploitation hôte puisse utiliser l'accélération graphique 2D au premier plan.</para>
 
-      <para>L'accélération graphique 2D est possible aujourd'hui sous les 
+      <para>L'accélération graphique 2D est possible aujourd'hui sous les
       conditions suivantes&#xA0;:<orderedlist>
           <listitem>
             <para>Elle n'est disponible que pour des invités Windows (XP ou
@@ -1584,14 +1584,14 @@ $</screen>
         </listitem>
 
         <listitem>
-          <para>Les invités supportés Linux ou Solaris exécutant le système X 
+          <para>Les invités supportés Linux ou Solaris exécutant le système X
           Window (ajouté avec VirtualBox 1.6).</para>
         </listitem>
       </itemizedlist></para>
 
     <para>Après que les fenêtres transparentes ait été activées (voir ci-dessous), VirtualBox
     supprime l'affichage de l'arrière-plan du bureau de votre invité, ce qui
-    vous permet de lancer les fenêtres de votre système d'exploitation invité 
+    vous permet de lancer les fenêtres de votre système d'exploitation invité
     de manière transparente à côté des fenêtres de votre hôte&#xA0;:</para>
 
     <para><mediaobject>
@@ -1614,7 +1614,7 @@ $</screen>
     sont installés et si la VM est en fonction. C'est intéressant pour deux
     choses&#xA0;:<orderedlist>
         <listitem>
-          <para>Un certain nombre de caractéristiques prédéfinies de la VM sont maintenues 
+          <para>Un certain nombre de caractéristiques prédéfinies de la VM sont maintenues
           automatiquement par VirtualBox et peuvent être répercutées sur l'hôte,
           par exemple, pour gérer les performances de la VM et les statistiques.</para>
         </listitem>
@@ -1639,7 +1639,7 @@ $</screen>
     intéressantes de l'invité telles que le système exact de l'invité et le niveau
     du service pack, la version installée des suppléments invité, les utilisateurs
     connectés à l'OS invité, les statistiques réseau et davantage. Ces propriétés
-    prédéfinies ont toutes pour préfixe 
+    prédéfinies ont toutes pour préfixe
     <computeroutput>/VirtualBox/</computeroutput> et sont organisées en arborescence
     hiérarchique de clés.</para>
 
@@ -1650,7 +1650,7 @@ $</screen>
     <para>Une manière plus flexible d'utiliser ce canal est de passer par la commande
     <computeroutput>VBoxManage guestproperty</computeroutput>&#xA0;; voir
     <xref linkend="vboxmanage-guestproperty" /> pour les détails. Par exemple,
-    pour voir <emphasis>toutes</emphasis> les propriétés invité disponible pour 
+    pour voir <emphasis>toutes</emphasis> les propriétés invité disponible pour
     une Vm donnée en fonction, listées avec leurs valeurs respectives, utilisez
     ceci&#xA0;:<screen>$ VBoxManage guestproperty enumerate "Windows Vista III"
 VirtualBox Command Line Management Interface Version @VBOX_VERSION_MAJOR at .@VBOX_VERSION_MINOR at .@VBOX_VERSION_BUILD@
@@ -1733,14 +1733,14 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
     timestamp: 1265813265836305000, flags: <NULL>
       ...</screen></para>
 
-    <para>Pour des besoins plus complexes, vous pouvez utiliser l'interface de 
+    <para>Pour des besoins plus complexes, vous pouvez utiliser l'interface de
     programmation de VirtualBox&#xA0;; voir <xref linkend="VirtualBoxAPI" />.</para>
   </sect1>
 
   <sect1 id="guestadd-guestcontrol">
     <title>Contrôle de l'invité</title>
 
-    <para>À partir de la version 3.2, les suppléments invité de VirtualBox 
+    <para>À partir de la version 3.2, les suppléments invité de VirtualBox
     permettent de démarrer les applications d'une VM à partir du système hôte.</para>
 
     <para>Pour que cela fonctionne, l'application doit être installée dans l'invité&#xA0;;
@@ -1758,7 +1758,7 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
     supérieurs sont déjà installés). En outre, la copie de fichiers de l'hôte vers
     l'invité ainsi que la création à distance de répertoires invités est disponible.</para>
 
-    <para>Pour utiliser ces fonctionnalités, utilisez la ligne de commande de 
+    <para>Pour utiliser ces fonctionnalités, utilisez la ligne de commande de
     VirtualBox, voir <xref
     linkend="vboxmanage-guestcontrol" />.</para>
   </sect1>
@@ -1767,7 +1767,7 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
     <title>Transfert de mémoire</title>
 
     <para>Dans des environnements serveur ayant beaucoup de VMs&#xA0;; les suppléments invité
-    peuvent être utilisés pour partager de la mémoire physique de l'hôte entre 
+    peuvent être utilisés pour partager de la mémoire physique de l'hôte entre
     plusieurs VMs, réduisant la quantité totale de mémoire utilisée par les VMs.
     Si l'utilisation de la mémoire est le facteur limitatif et que des ressources
     processeur sont encore disponibles, cela peut aider à empaqueter davantage
@@ -1782,14 +1782,14 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
       elle s'appelle le "jeu de ballon de mémoire".</para>
 
       <note>
-        <para>VirtualBox ne supporte le jeu de ballons avec la mémoire que sur 
+        <para>VirtualBox ne supporte le jeu de ballons avec la mémoire que sur
         les hôtes 64 bits et il n'est pas supporté sur les hôtes Mac OS X.</para>
       </note>
 
       <para>En principe, pour changer la quantité de mémoire affectée à une
       machine virtuelle, il faut éteindre la machine virtuelle complètement
       et modifier ses paramètres. Avec le jeu de ballon de mémoire, la mémoire
-      affectée à une machine virtuelle peut être donnée à une autre machine 
+      affectée à une machine virtuelle peut être donnée à une autre machine
       virtuelle sans devoir arrêter la machine.</para>
 
       <para>Quand on veut faire du ballon avec la mémoire, les suppléments invité
@@ -1815,7 +1815,7 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
       que via VBoxManage. Utilisez la commande suivante pour agrandir ou réduire
       la taille du ballon de mémoire dans une machine virtuelle en fonction où
       les suppléments invité sont installés: <screen>VBoxManage controlvm "nom VM" guestmemoryballoon <n></screen>où
-      <computeroutput>"nom VM"</computeroutput> est le nom ou l'UUID de la machine 
+      <computeroutput>"nom VM"</computeroutput> est le nom ou l'UUID de la machine
       virtuelle en question et <computeroutput><n></computeroutput> est
       la quantité de mémoire à affecté à partir de l'invité, en mégaoctets. Voir <xref
       linkend="vboxmanage-controlvm" /> pour plus d'informations.</para>
@@ -1833,13 +1833,13 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
     <sect2 id="guestadd-pagefusion">
       <title>Fusion de page</title>
 
-      <para>Alors que le jeu de ballon avec la mémoire réduit simplement la 
+      <para>Alors que le jeu de ballon avec la mémoire réduit simplement la
       quantité de RAM disponible pour une VM, la fusion de page fonctionne différemment&#xA0;:
       elle évite les doublons de mémoire entre plusieurs VMs identiques et en
       fonction.</para>
 
-      <para>Dans un environnement serveur qui exécute plusieurs VMs identiques 
-      (comme avec des systèmes d'exploitation identiques) sur le même hôte, 
+      <para>Dans un environnement serveur qui exécute plusieurs VMs identiques
+      (comme avec des systèmes d'exploitation identiques) sur le même hôte,
       beaucoup de pages de mémoire sont identiques. La technologie de fusion
       de page de VirtualBox, introduite avec VirtualBox 3.2, est une technique
        pour identifier efficacement ces pages de mémoire identiques et les
@@ -1868,7 +1868,7 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
       très différente des autres solutions, dont les approches ont plusieurs
       inconvénients&#xA0;:<orderedlist>
           <listitem>
-            <para>Les hyperviseurs traditionnels analysent <emphasis>toute</emphasis> 
+            <para>Les hyperviseurs traditionnels analysent <emphasis>toute</emphasis>
             la mémoire invité et calculent les sommes de contrôle (hachages) pour
             chaque page de mémoire individuelle. Puis ils cherchent des endroits
             avec des hachages identiques et comparent tout le contenu
@@ -1902,10 +1902,10 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
       pour une VM, utilisez
       la commande suivante:<screen>VBoxManage modifyvm "nom VM" --pagefusion on</screen></para>
 
-      <para>Vous pouvez voir l'opération de fusion de page en utilisant des 
-      métriques. 
+      <para>Vous pouvez voir l'opération de fusion de page en utilisant des
+      métriques.
       <computeroutput>RAM/VMM/Shared</computeroutput> affiche la quantité totale
-      de pages fusionnées, tandis que la métrique par VM 
+      de pages fusionnées, tandis que la métrique par VM
       <computeroutput>Guest/RAM/Usage/Shared</computeroutput> renverra la quantité
       de mémoire fusionnée d'une VM donnée. Merci de vous reporter à <xref
       linkend="metrics" /> pour des informations sur la manière de demander des
diff --git a/doc/manual/fr_FR/user_Installation.xml b/doc/manual/fr_FR/user_Installation.xml
index 32580e8..c8998bf 100644
--- a/doc/manual/fr_FR/user_Installation.xml
+++ b/doc/manual/fr_FR/user_Installation.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="installation">
   <title>Détails sur l'installation</title>
 
@@ -35,7 +35,7 @@
           <listitem>
             <para>soit en entrant <screen>VirtualBox.exe -extract</screen></para>
 
-            <para>sur la ligne de commande. Cela va extraire les deux installeurs 
+            <para>sur la ligne de commande. Cela va extraire les deux installeurs
             dans un répertoire temporaire où vous trouverez ensuite les fichiers
             .MSI habituels. Puis vous pouvez faire un
             <screen>msiexec /i VirtualBox-<version>-MultiArch_<x86|amd64>.msi</screen>
@@ -192,14 +192,14 @@
           </listitem>
 
           <listitem>
-            <para>Une fenêtre s'ouvrira, vous disant de cliquer deux fois 
+            <para>Une fenêtre s'ouvrira, vous disant de cliquer deux fois
             sur le fichier de l'installeur
             <computeroutput>VirtualBox.mpkg</computeroutput> affiché dans cette
             fenêtre.</para>
           </listitem>
 
           <listitem>
-            <para>Ceci démarrera l'installeur, qui vous permettra de 
+            <para>Ceci démarrera l'installeur, qui vous permettra de
             sélectionner où installer VirtualBox.</para>
           </listitem>
         </orderedlist></para>
@@ -256,10 +256,10 @@
 
       <note>
         <para>Pour être précis, ces paquets ne sont requis que si voulez lancer
-        les interfaces graphiques de VirtualBox. En particulier, 
+        les interfaces graphiques de VirtualBox. En particulier,
         <computeroutput>VirtualBox</computeroutput>, le gestionnaire graphique
         de VirtualBox, a besoin de Qt et de SDL&#xA0;;
-        <computeroutput>VBoxSDL</computeroutput>, notre interface graphique 
+        <computeroutput>VBoxSDL</computeroutput>, notre interface graphique
         simplifiée, exige seulement SDL. Inversement, si vous ne voulez que
         <computeroutput>VBoxHeadless</computeroutput>, ni Qt ni SDL ne sont
         requis.</para>
@@ -308,24 +308,24 @@
           </listitem>
         </itemizedlist></para>
 
-      <para>Si DKMS est disponible et installé, le module du noyau VirtualBox 
+      <para>Si DKMS est disponible et installé, le module du noyau VirtualBox
       devrait toujours fonctionner automatiquement et il sera automatiquement
       reconstruit si vous mettez à jour le noyau de votre hôte.</para>
 
       <para>Sinon, il n'y a que deux situations où vous devrez vous préoccuper
       du module noyau&#xA0;:<orderedlist>
           <listitem>
-            <para>L'installation échoue dès le départ. Cela signifie probablement 
+            <para>L'installation échoue dès le départ. Cela signifie probablement
             que votre système Linux n'est pas prêt à construire des modules noyau
             externes.</para>
 
-            <para>La plupart des distributions Linux peuvent être paramétrées 
+            <para>La plupart des distributions Linux peuvent être paramétrées
             simplement en installant les bons paquets - en principe il s'agit
             du compilateur GNU (GCC), GNU Make (make) et des paquets contenant
             les fichiers d'en-tête de votre noyau - et en s'assurant que toutes
             les mises à jour du système sont installées et que le système
             exécute le noyau le plus récent proposé par la distribution.
-            <emphasis>Les numéros de version des paquets des fichiers d'en-tête 
+            <emphasis>Les numéros de version des paquets des fichiers d'en-tête
             doivent être les mêmes que celui du noyau que vous utilisez.</emphasis></para>
 
             <itemizedlist>
@@ -334,7 +334,7 @@
                 la bonne version de
                 <computeroutput>linux-headers</computeroutput> et s'il existe,
                 le paquet <computeroutput>linux-kbuild</computeroutput>. Les
-                versions actuelles d'Ubuntu devraient avoir installé les bons 
+                versions actuelles d'Ubuntu devraient avoir installé les bons
                 paquets par défaut.</para>
               </listitem>
 
@@ -345,7 +345,7 @@
               </listitem>
 
               <listitem>
-                <para>Sur les systèmes Fedora et Redhat, le paquet est 
+                <para>Sur les systèmes Fedora et Redhat, le paquet est
                 <computeroutput>kernel-devel</computeroutput>.</para>
               </listitem>
 
@@ -369,7 +369,7 @@
 
           <listitem>
             <para>Le noyau de votre hôte Linux a été mis à jour et DKMS n'est
-            pas installé. Dans ce cas, le module du noyau devra être 
+            pas installé. Dans ce cas, le module du noyau devra être
             réinstallé en exécutant (en tant qu'administrateur)&#xA0;:</para>
 
             <screen>/etc/init.d/vboxdrv setup</screen>
@@ -382,14 +382,14 @@
 
       <para>VirtualBox est disponible de base dans un certain nombre de formats
       de paquet pour diverses distributions Linux classiques (voir <xref linkend="hostossupport" />
-      pour les détails). En outre, un installeur générique alternatif 
+      pour les détails). En outre, un installeur générique alternatif
       (.run) devrait fonctionner sur la plupart des distributions Linux.</para>
 
       <sect3>
         <title>Installer VirtualBox à partir d'un paquet Debian/Ubuntu</title>
 
         <para>Tout d'abord, téléchargez le paquet adapté à votre distribution.
-        Les exemples suivants supposent que vous installez sur un système 
+        Les exemples suivants supposent que vous installez sur un système
         Ubuntu Raring 32 bits. Utilisez <computeroutput>dpkg</computeroutput>
         pour installer le paquet Debian&#xA0;:</para>
 
@@ -413,7 +413,7 @@
         démarrera un nouvel essai de construction du module.</para>
 
         <para>Si un module de noyau convenable a été trouvé dans le paquet, ou
-        si le module a été construit avec succès, le script d'installation 
+        si le module a été construit avec succès, le script d'installation
         essaiera de charger ce module. Si ceci échoue, merci de voir <xref
         linkend="ts_linux-kernelmodule-fails-to-load" /> pour plus
         d'informations.</para>
@@ -435,7 +435,7 @@
           </listitem>
 
           <listitem>
-            <para>Il construit les modules noyau de VirtualBox 
+            <para>Il construit les modules noyau de VirtualBox
             (<computeroutput>vboxdrv</computeroutput>,
             <computeroutput>vboxnetflt</computeroutput> et
             <computeroutput>vboxnetadp</computeroutput>) et il les installe.</para>
@@ -473,7 +473,7 @@
           </listitem>
 
           <listitem>
-            <para>Il écrit le répertoire d'installation 
+            <para>Il écrit le répertoire d'installation
             <computeroutput>/etc/vbox/vbox.cfg</computeroutput>.</para>
           </listitem>
         </itemizedlist>
@@ -522,7 +522,7 @@
 
         <para>Ceci déballera tous les fichiers nécessaires à l'installation dans le
         répertoire <computeroutput>install</computeroutput> sous le répertoire
-        actuel. Les fichiers de l'application VirtualBox sont contenus dans 
+        actuel. Les fichiers de l'application VirtualBox sont contenus dans
         <computeroutput>VirtualBox.tar.bz2</computeroutput> que vous pouvez
         déballer dans n'importe quel répertoire de votre système. Par exemple&#xA0;:</para>
 
@@ -547,10 +547,10 @@ tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox</screen></para>
         <screen>make install</screen></para>
 
         <para>Le module de noyau VirtualBox a besoin d'un n&#x153;ud de périphérique
-        pour fonctionner. La commande make ci-dessus vous dira comment créer 
+        pour fonctionner. La commande make ci-dessus vous dira comment créer
         le n&#x153;ud de périphérique selon votre système Linux. La procédure
         est légèrement différente pour une installation Linux classique avec le
-        répertoire <computeroutput>/dev</computeroutput>, un système avec 
+        répertoire <computeroutput>/dev</computeroutput>, un système avec
         <computeroutput>devfs</computeroutput>, maintenant obsolète, et un
         système Linux moderne avec <computeroutput>udev</computeroutput>.</para>
 
@@ -565,7 +565,7 @@ tar jxf ./install/VirtualBox.tar.bz2 -C /opt/VirtualBox</screen></para>
         à root:root et n'être autorisé en lecture/écriture que pour l'utilisateur.</para>
 
         <para>Ensuite, vous devrez installer le script d'initialisation du système
-        pour le module du noyau&#xA0;:<screen>cp /opt/VirtualBox/vboxdrv.sh /etc/init.d/vboxdrv</screen>(en supposant que 
+        pour le module du noyau&#xA0;:<screen>cp /opt/VirtualBox/vboxdrv.sh /etc/init.d/vboxdrv</screen>(en supposant que
         vous avez installé VirtualBox dans le répertoire
         <computeroutput>/opt/VirtualBox</computeroutput>) et activé le script
         d'initialisation en utilisant la méthode adaptée à votre distribution.
@@ -584,13 +584,13 @@ ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxSDL</screen>
 
         <para>Avant de mettre à jour ou de désinstaller VirtualBox, vous devez
         fermer toutes les machines virtuelles actuellement en fonction et quitter
-        les applications VirtualBox ou VBoxSVC. Pour mettre à jour VirtualBox, 
+        les applications VirtualBox ou VBoxSVC. Pour mettre à jour VirtualBox,
         lancez simplement l'installeur de la version à jour. Pour désinstaller
         VirtualBox, appelez  l'installeur comme ceci&#xA0;: <screen>sudo ./VirtualBox.run uninstall</screen>
-       ou, en tant qu'administrateur<screen>./VirtualBox.run uninstall</screen>. 
+       ou, en tant qu'administrateur<screen>./VirtualBox.run uninstall</screen>.
        À partir de la version 2.2.2, vous pouvez désinstaller le paquet .run en
        appelant <screen>/opt/VirtualBox/uninstall.sh</screen>Pour désinstaller
-       VirtualBox à la main, inversez simplement les étapes de l'installation 
+       VirtualBox à la main, inversez simplement les étapes de l'installation
        manuelle.</para>
       </sect3>
 
@@ -600,7 +600,7 @@ ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxSDL</screen>
         <para>Les paquets Debian solliciteront une intervention de l'utilisateur
         lors de la première installation. On utilise le système debconf pour
         effectuer cette tâche. Pour empêcher toute intervention de l'utilisateur
-        pendant l'installation, vous pouvez définir des valeurs par défaut. Un 
+        pendant l'installation, vous pouvez définir des valeurs par défaut. Un
         fichier <computeroutput>vboxconf</computeroutput> peut contenir les
         paramètres de debconf suivants&#xA0;: <screen>virtualbox virtualbox/module-compilation-allowed boolean true
 virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
@@ -609,7 +609,7 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
        pour le noyau actuel. La deuxième ligne permet au paquet d'effacer
        les anciens modules vboxdrv compilés par des installations précédentes.</para>
 
-        <para>Ces paramètres par défaut peuvent être appliqués avec 
+        <para>Ces paramètres par défaut peuvent être appliqués avec
         <screen>debconf-set-selections vboxconf</screen> avant l'installation du
         paquet Debian VirtualBox.</para>
 
@@ -650,7 +650,7 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
       <computeroutput>vboxusers</computeroutput> pendant l'installation. Tous les
       utilisateurs du szstème qui vont utiliser les périphériques USB depuis des
       invités VirtualBox doivent être membres de ce groupe. Un utilisateur peut
-      devenir membre du groupe 
+      devenir membre du groupe
       <computeroutput>vboxusers</computeroutput> via l'outil graphique de gestion
       des utilisateurs/groupes ou en ligne de commande avec</para>
 
@@ -665,7 +665,7 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
       <computeroutput>VBoxManage</computeroutput>,
       <computeroutput>VBoxSDL</computeroutput> ou
       <computeroutput>VBoxHeadless</computeroutput>) à partir d'un terminal. Ce
-      sont des liens symboliques vers <computeroutput>VBox.sh</computeroutput> 
+      sont des liens symboliques vers <computeroutput>VBox.sh</computeroutput>
       qui démarrent pour vous le programme nécessaire.</para>
 
       <para>Les instructions détaillées suivantes ne devraient vous intéresser que
@@ -675,16 +675,16 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
       le noyau Linux. VirtualBox consiste en un démon de service (<computeroutput>VBoxSVC</computeroutput>)
       et plusieurs applications. Le démon est démarré automatiquement si nécessaire.
       Toutes les applications VirtualBox communiqueront avec le démon par les
-      sockets du démon local d'Unix. Il peut y avoir plusieurs 
+      sockets du démon local d'Unix. Il peut y avoir plusieurs
       instances de démon sous différents comptes utilisateurs et les applications
       peuvent ne communiquer qu'avec le démon en fonction sous le compte utilisateur
       en tant qu'application. La socket de domaine locale réside dans un
-      sous-répertoire du répertoire des fichiers temporaires de votre ystème, 
+      sous-répertoire du répertoire des fichiers temporaires de votre ystème,
       appelé <computeroutput>.vbox-<username>-ipc</computeroutput>. En cas
       de problèmes de communication ou de problèmes au démarrage du serveur, vous
       pouvez essayer de supprimer ce répertoire.</para>
 
-      <para>Toutes les applications de VirtualBox 
+      <para>Toutes les applications de VirtualBox
       (<computeroutput>VirtualBox</computeroutput>,
       <computeroutput>VBoxSDL</computeroutput>,
       <computeroutput>VBoxManage</computeroutput> et
@@ -745,7 +745,7 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
 
       <para>Une fois que le script postinstall a été exécuté, votre installation
       est maintenant terminée. Vous pouvez maintenant effacer en toute sécurité
-      de votre système le paquet décompressé et les fichiers 
+      de votre système le paquet décompressé et les fichiers
       <computeroutput>autoresponse</computeroutput>.
       VirtualBox devrait être installé dans
       <computeroutput>/opt/VirtualBox</computeroutput>.</para>
@@ -756,10 +756,10 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
 
       <para>À partir de VirtualBox 4.1, l'installeur crée un groupe d'utilisateurs
       système <computeroutput>vboxuser</computeroutput> pendant l'installation
-      sur les hôtes Solaris qui supportent les fonctionnalités USB exigées par 
+      sur les hôtes Solaris qui supportent les fonctionnalités USB exigées par
       VirtualBox. Tous les utilisateurs système qui vont utiliser des périphériques
       USB à partir des invités dans VirtualBox doivent faire partie de ce groupe.
-      Un utilisateur peut devenir membre de ce 
+      Un utilisateur peut devenir membre de ce
       groupe avec les outils de gestion graphiques des utilisateurs/groupes ou,
       en ligne de commande, en exécutant en tant qu'administrateur&#xA0;:</para>
 
@@ -778,7 +778,7 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
       <computeroutput>VBoxManage</computeroutput>,
       <computeroutput>VBoxSDL</computeroutput> ou
       <computeroutput>VBoxHeadless</computeroutput>) à partir d'un terminal. Ce
-      sont des liens symboliques vers <computeroutput>VBox.sh</computeroutput> 
+      sont des liens symboliques vers <computeroutput>VBox.sh</computeroutput>
       qui démarre pour vous le programme requis.</para>
 
       <para>Vous pouvez aussi appeler directement les programmes souhaités depuis
@@ -787,7 +787,7 @@ virtualbox virtualbox/delete-old-modules boolean true</screen>La première ligne
 
       <para>Vous pouvez configurer certains éléments de l'interface graphique
       <computeroutput>VirtualBox</computeroutput> en Qt tels que la police et
-      les couleurs en exécutant <computeroutput>VBoxQtconfig</computeroutput> 
+      les couleurs en exécutant <computeroutput>VBoxQtconfig</computeroutput>
       à partir du terminal.</para>
     </sect2>
 
@@ -855,7 +855,7 @@ zonecfg:vboxzone>verify
 zonecfg:vboxzone>exit</screen>
 
       <para>Si vous exécutez VirtualBox 2.2.0 ou supérieur sur des hôtes Solaris
-      11 ou supérieur, vous pouvez aussi ajouter un périphérique pour 
+      11 ou supérieur, vous pouvez aussi ajouter un périphérique pour
       <computeroutput>/dev/vboxusbmon</computeroutput>, identique à ce qui est
       indiqué ci-dessus. Cela ne s'applique pas aux hôtes Solaris 10 à cause de
       l'absence du support USB.</para>
diff --git a/doc/manual/fr_FR/user_Introduction.xml b/doc/manual/fr_FR/user_Introduction.xml
index 30691b8..285dc04 100644
--- a/doc/manual/fr_FR/user_Introduction.xml
+++ b/doc/manual/fr_FR/user_Introduction.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="Introduction">
   <title>Premiers pas</title>
 
@@ -42,14 +42,14 @@
 
   <para>Vous pouvez trouver un résumé des possibilités de VirtualBox au <xref
   linkend="features-overview" />. Pour ceux qui utilisent déjà VirtualBox et qui
-  voudraient seulement voir les nouveautés de cette version, une liste détaillée 
+  voudraient seulement voir les nouveautés de cette version, une liste détaillée
   existe au <xref
   linkend="ChangeLog" />.</para>
 
   <sect1>
     <title>À quoi sert la virtualisation&#xA0;?</title>
 
-    <para>Les techniques et les fonctionnalités offertes par VirtualBox servent dans    
+    <para>Les techniques et les fonctionnalités offertes par VirtualBox servent dans
     plusieurs scenarii&#xA0;:</para>
 
     <itemizedlist>
@@ -59,7 +59,7 @@
         système d'exploitation en même temps. De cette façon, vous pouvez
         lancer des logiciels écrits pour un système d'exploitation dans un autre
         (par exemple un logiciel Windows sur Linux ou Mac) sans devoir
-        redémarrer pour l'utiliser. Comme vous pouvez 
+        redémarrer pour l'utiliser. Comme vous pouvez
         configurer les types de matériels "virtuels" connectés à chaque système
         d'exploitation, vous pouvez installer un vieux système d'exploitation tel que
         DOS ou OS/2 même si le matériel de votre machine physique n'est plus
@@ -80,7 +80,7 @@
 
       <listitem>
         <para><emphasis role="bold">Tester et réparer en cas d'accident.</emphasis>
-        Une fois installés, on peut considérer une machine virtuelle et ses 
+        Une fois installés, on peut considérer une machine virtuelle et ses
         disques durs virtuels comme un "conteneur" qu'on peut, au choix, geler,
         réveiller, copier, sauvegarder et transporter entre hôtes.</para>
 
@@ -93,7 +93,7 @@
         revenir à un instantané récent et éviter de sauvegarder et de
         restaurer fréquemment.</para>
 
-        <para>On peut créer autant d'instantanés que vous voulez, ce qui permet 
+        <para>On peut créer autant d'instantanés que vous voulez, ce qui permet
         de voyager dans le temps des machines virtuelles en arrière et en avant.
         Vous pouvez effacer des instantanés alors qu'une machine virtuelle est
         en fonction pour gagner de l'espace disque.</para>
@@ -107,7 +107,7 @@
         charge système moyenne. On gaspille donc beaucoup de ressources
         matérielles et énergétiques. Au lieu de lancer autant d'ordinateurs physiques,
         qui ne sont que partiellement utilisés, on peut emballer de nombreuses
-        machines virtuelles sur quelques hôtes puissants et équilibrer les 
+        machines virtuelles sur quelques hôtes puissants et équilibrer les
         charges entre elles.</para>
       </listitem>
     </itemizedlist>
@@ -125,7 +125,7 @@
         <glossterm>Système d'exploitation hôte (OS hôte).</glossterm>
 
         <glossdef>
-          <para>C'est le système d'exploitation de l'ordinateur physique sur 
+          <para>C'est le système d'exploitation de l'ordinateur physique sur
           lequel VirtualBox a été installé. Il existe des versions de VirtualBox
           pour des hôtes Windows, Mac OS X, Linux et Solaris&#xA0;; pour des
           détails, merci de voir le
@@ -147,7 +147,7 @@
           pour s'approcher le plus possible de la performance d'origine du code
           invité sur votre machine, nous avons dû faire beaucoup d'optimisations
           qui sont spécifiques à certains systèmes d'exploitation. Donc si votre
-          système d'exploitation favori 
+          système d'exploitation favori
           <emphasis>peut</emphasis> être un invité, nous en supportons et optimisons
           officiellement quelques-uns sélectionnés (cependant, cela inclut ceux
           les plus courants).</para>
@@ -169,7 +169,7 @@
 
           <para>De manière plus abstraite, en interne, VirtualBox conçoit une VM
           comme un ensemble de paramètres qui déterminent son comportement.
-          Parmi eux, on a les paramètres matériels (combien de mémoire devrait 
+          Parmi eux, on a les paramètres matériels (combien de mémoire devrait
           avoir la VM, quels disques durs devrait virtualiser VirtualBox via
           quels fichiers conteneurs, quels CDs, lesquels sont montés, etc.)
           ainsi que des informations d'état (si la machine est en fonction,
@@ -187,8 +187,8 @@
 
         <glossdef>
           <para>Ceci renvoie aux paquets logiciels spéciaux qui sont inclus
-          avec VirtualBox mais conçus pour être installés 
-          <emphasis>à l'intérieur</emphasis> d'une VM pour améliorer les 
+          avec VirtualBox mais conçus pour être installés
+          <emphasis>à l'intérieur</emphasis> d'une VM pour améliorer les
           performances de l'OS invité et pour ajouter des fonctionnalités
           supplémentaires. C'est décrit en détails au <xref
           linkend="guestadditions" />.</para>
@@ -206,10 +206,10 @@
       <listitem>
         <para><emphasis role="bold">Portabilité.</emphasis> VirtualBox se
         lance sur un grand nombre de systèmes d'exploitation hôtes 32 et 64 bits
-        (de nouveau, voir 
+        (de nouveau, voir
         <xref linkend="hostossupport" /> pour les détails).</para>
 
-        <para>VirtualBox est ce qu'on appelle un hyperviseur "hébergé" 
+        <para>VirtualBox est ce qu'on appelle un hyperviseur "hébergé"
         (parfois désigné comme un hyperviseur de "type 2"). Alors qu'un hyperviseur
         "bare-metal" ou de "type 1" se lancerait directement sur le matériel,
         VirtualBox exige l'installation d'un système d'exploitation. Il peut alors
@@ -245,7 +245,7 @@
         <para><emphasis role="bold">Suppléments invité&#xA0;: dossiers partagés,
         fenêtres transparentes (seamless), virtualisation 3D.</emphasis> Les
         suppléments invité de VirtualBox sont des paquets logiciels qu'on peut
-        installer 
+        installer
         <emphasis>à l'intérieur</emphasis> des systèmes invités supportés pour
         améliorer leurs performances et effectuer une intégration et une
         communication accrues avec le système hôte. Après avoir installé les
@@ -267,8 +267,8 @@
 
         <itemizedlist>
           <listitem>
-            <para><emphasis role="bold">Le multiprocesseur invité 
-            (SMP).</emphasis> VirtualBox peut montrer jusqu'à 32 processeurs 
+            <para><emphasis role="bold">Le multiprocesseur invité
+            (SMP).</emphasis> VirtualBox peut montrer jusqu'à 32 processeurs
             virtuels à chaque machine virtuelle, indépendamment du nombre de
             c&#x153;urs présents sur votre hôte physiquement.</para>
           </listitem>
@@ -276,10 +276,10 @@
           <listitem>
             <para><emphasis role="bold">Support des périphériques USB.</emphasis>
             VirtualBox implémente un contrôleur USB virtuel et vous permet de
-            connecter des périphériques USB de votre choix à vos machines 
+            connecter des périphériques USB de votre choix à vos machines
             virtuelles sans devoir installer de pilotes spécifiques sur l'hôte.
             Le support USB n'est pas limité à certaines catégories de périphériques.
-            Pour des détails, voir 
+            Pour des détails, voir
             <xref linkend="settings-usb" />.</para>
           </listitem>
 
@@ -306,7 +306,7 @@
             unique, VirtualBox peut même signaler aux systèmes d'exploitation
             supportant l'ACPI l'état de l'alimentation de l'hôte. Pour les
             systèmes mobiles sur batterie, le système invité peut ainsi activer
-            l'économie d'énergie et signaler à l'utilisateur le temps restant 
+            l'économie d'énergie et signaler à l'utilisateur le temps restant
             (par exemple en mode plein écran).</para>
           </listitem>
 
@@ -338,7 +338,7 @@
       <listitem>
         <para><emphasis role="bold">Multigénération d'instantanés en branches.
         </emphasis> VirtualBox peut sauvegarder des instantanés de votre choix de
-       l'état de la machine virtuelle. Vous pouvez revenir dans le passé et 
+       l'état de la machine virtuelle. Vous pouvez revenir dans le passé et
        rétablir l'état de la machine virtuelle à n'importe quel instantané, puis
        démarrer une autre configuration de VM à partir de là, ce qui crée de fait
        une arborescence d'instantanés complète. Pour les
@@ -370,7 +370,7 @@
 
         <para>Du fait de son architecture modulaire, VirtualBox peut également
         présenter toutes ses fonctionnalités et sa flexibilité de configuration
-        dans un 
+        dans un
         <emphasis role="bold">kit de développement logiciel (SDK),</emphasis>
         cohérent qui permet d'intégrer tous les aspects de VirtualBox à d'autres
         logiciels. Merci de voir le <xref linkend="VirtualBoxAPI" /> pour les
@@ -385,7 +385,7 @@
         départ dans Microsoft Windows, avec des suppléments spéciaux pour
         un support complet de l'USB sur le client.</para>
 
-        <para>Le VRDE ne se base pas sur le serveur RDP construit dans 
+        <para>Le VRDE ne se base pas sur le serveur RDP construit dans
         Microsoft Windows&#xA0;; mais il est inclu directement dans la couche de
         virtualisation. Il s'en suit qu'il fonctionne avec les systèmes
         d'exploitation hôte différents de Windows (même en mode texte) et il
@@ -395,18 +395,18 @@
         <para>En plus de cette possibilité, VirtualBox vous
         offre les fonctionnalités uniques&#xA0;:<itemizedlist>
             <listitem>
-              <para><emphasis role="bold">Authentification RDP Extensible.</emphasis> 
+              <para><emphasis role="bold">Authentification RDP Extensible.</emphasis>
               VirtualBox supporte déjà Winlogon
               sur Windows et PAM sur Linux pour l'anthentification RDP.
-              En outre, il inclut un SDK facile à utiliser qui vous permet de 
-             créer des interfaces de votre choix pour d'autres méthodes 
+              En outre, il inclut un SDK facile à utiliser qui vous permet de
+             créer des interfaces de votre choix pour d'autres méthodes
              d'authentification&#xA0;; voir
               <xref linkend="vbox-auth" /> pour des détails.</para>
             </listitem>
 
             <listitem>
               <para><emphasis role="bold">USB via RDP.</emphasis> Via le support
-              RDP de canaux virtuels, VirtualBox vous permet aussi de connecter 
+              RDP de canaux virtuels, VirtualBox vous permet aussi de connecter
               des périphériques USB de votre choix en local sur une machine
               virtuelle en fonction à distance sur un serveur RDP VirtualBox&#xA0;;
               voir le <xref
@@ -420,7 +420,7 @@
   <sect1 id="hostossupport">
     <title>Systèmes d'exploitation hôtes supportés</title>
 
-    <para>Actuellement, VirtualBox fonctionne sur les systèmes d'exploitation 
+    <para>Actuellement, VirtualBox fonctionne sur les systèmes d'exploitation
     hôtes suivants&#xA0;:</para>
 
     <itemizedlist>
@@ -582,7 +582,7 @@
     <xref linkend="installation" /> pour des détails sur les différentes
     méthodes d'installation.</para>
 
-    <para>À partir de la version 4.0, VirtualBox est divisé en plusieurs 
+    <para>À partir de la version 4.0, VirtualBox est divisé en plusieurs
     composants.<orderedlist>
         <listitem>
           <para>Le paquet de base contient tous les composants libres et il est
@@ -591,7 +591,7 @@
 
         <listitem>
           <para>Des packs d'extension supplémentaires peuvent être téléchargés,
-          qui rajoutent des fonctionnalités au paquet de base de VirtualBox. 
+          qui rajoutent des fonctionnalités au paquet de base de VirtualBox.
           Pour l'instant, Oracle fournit un seul pack d'extension, qu'on peut
           trouver sur <ulink
           url="http://www.virtualbox.org">http://www.virtualbox.org</ulink> et
@@ -603,7 +603,7 @@
 
               <listitem>
                 <para>Support de VirtualBox Remote Desktop Protocol (VRDP)&#xA0;;
-                voir le 
+                voir le
                 <xref linkend="vrde" />.</para>
               </listitem>
 
@@ -629,7 +629,7 @@
           vous guidant à travers les étapes nécessaires.</para>
 
           <para>Pour voir les paquets d'extension actuellement installés,
-          merci de démarrer le gestionnaire VirtualBox (voir la prochaine section). 
+          merci de démarrer le gestionnaire VirtualBox (voir la prochaine section).
           Dans le menu "Fichier", merci de sélectionner "Paramètres". Dans
           la fenêtre qui apparaît, allez à la catégorie "Extensions" qui
           affiche les extensions actuellement installées et vous permet de
@@ -670,7 +670,7 @@
           <para>Sur un hôte Linux ou Solaris, selon votre environnement de
           bureau, une icône "VirtualBox" peut avoir été mise soit dans le groupe
           "Système" soit dans "Outils système" de votre menu "Applications". Sinon
-          vous pouvez taper 
+          vous pouvez taper
           <computeroutput>VirtualBox</computeroutput> dans un terminal.</para>
         </listitem>
       </itemizedlist></para>
@@ -689,7 +689,7 @@
     n'en avez pas créées, la liste est vide. Une ligne de boutons au-dessus
     vous permet de créer de nouvelles VMs et de travailler sur celles existantes,
     lorsque vous en avez. Le panneau à droite affiche les propriétés de la
-    machine virtuelle actuellement sélectionnée s'il y en a une. De nouveau, 
+    machine virtuelle actuellement sélectionnée s'il y en a une. De nouveau,
     comme vous n'avez pas encore de machine, le panneau affiche un message de
     bienvenue.</para>
 
@@ -723,7 +723,7 @@
           <para>Le <emphasis role="bold">nom de la VM</emphasis> sera plus
           tard affiché dans la liste des VMs de la fenêtre du gestionnaire
           VirtualBox, et il sera utilisé pour les fichiers de la VM sur le disque.
-          Si vous pouvez utiliser n'importe quel nom, gardez en tête qu'après 
+          Si vous pouvez utiliser n'importe quel nom, gardez en tête qu'après
           avoir créé quelques VMs, vous apprécierez d'avoir donné à vos VMs des
           noms parlants&#xA0;; ainsi "Ma VM" serait moins utile que "Windows XP
           SP2 avec OpenOffice".</para>
@@ -732,7 +732,7 @@
         <listitem>
           <para>Pour le <emphasis role="bold">"Type de système d'exploitation",</emphasis>
           sélectionnez le système d'exploitation que vous voudrez installer plus
-          tard. Les systèmes d'exploitation supportés sont ici regroupés&#xA0;; 
+          tard. Les systèmes d'exploitation supportés sont ici regroupés&#xA0;;
           si vous voulez installer une chose très rare et non listé, sélectionnez
           "Autre". Selon votre sélection, VirtualBox activera ou désactivera
           certains paramètres de VM dont peut avoir besoin votre système d'exploitation invité.
@@ -759,7 +759,7 @@
               lancez deux VMs en même temps, encore plus de mémoire sera affectée
               à la deuxième VM (qui peut même ne pas démarrer si la mémoire n'est
               pas disponible). D'un autre côté, vous devriez spécifier autant que
-              votre système d'exploitation invité (et vos applications) ont besoin 
+              votre système d'exploitation invité (et vos applications) ont besoin
               pour s'exécuter correctement.</para>
             </note></para>
 
@@ -770,10 +770,10 @@
           pouvez avoir besoin de plus de RAM.</para>
 
           <para>La règle d'or est donc que si vous avez 1 Go de RAM voire plus
-          dans votre ordinateur hôte, il est sûr d'affecter 512 Mo à chaque 
+          dans votre ordinateur hôte, il est sûr d'affecter 512 Mo à chaque
           VM. Mais dans tous les cas, assurez-vous d'avoir au moins 256 à 512
           Mo de RAM sur votre système d'exploitation hôte. Sinon, il se peut que
-          l'OS hôte fasse un usage excessif de l'espace d'échange sur votre disque 
+          l'OS hôte fasse un usage excessif de l'espace d'échange sur votre disque
           dur, ce qui peut conduire à un plantage de votre système hôte.</para>
 
           <para>Comme avec les autres paramètres, vous pourrez modifier ce
@@ -785,7 +785,7 @@
           virtuel</emphasis> pour votre VM.</para>
 
           <para>Il existe de nombreuses façons, potentiellement compliquées, de
-          fournir de l'espace de disque dur à une VM avec 
+          fournir de l'espace de disque dur à une VM avec
           VirtualBox (voir le <xref
           linkend="storage" /> pour les détails), mais la manière la plus
           courante est d'utiliser un gros fichier image sur votre "vrai" disque
@@ -807,7 +807,7 @@
 
           <itemizedlist>
             <listitem>
-              <para>Pour créer un nouveau disque dur virtuel vierge, appuyez 
+              <para>Pour créer un nouveau disque dur virtuel vierge, appuyez
               sur le bouton <emphasis role="bold">"Nouveau"</emphasis>.</para>
             </listitem>
 
@@ -899,7 +899,7 @@
         </listitem>
 
         <listitem>
-          <para>sélectionnez son entrée dans la liste de la fenêtre 
+          <para>sélectionnez son entrée dans la liste de la fenêtre
           du gestionnaire et appuyez sur le bouton "Démarrer" en bas ou</para>
         </listitem>
 
@@ -944,7 +944,7 @@
           votre hôte.</para>
 
           <para>Puis dans la liste déroulante des médias d'installation de
-          l'assistant, 
+          l'assistant,
           sélectionnez <emphasis role="bold">"Lecteur hôte"</emphasis> avec
           la bonne lettre de lecteur (ou, en cas d'hôte Linux, le fichier de
           périphérique). Ceci permettra à votre VM d'accéder au média dans votre
@@ -966,7 +966,7 @@
           <para>Si votre média n'est pas dans la liste (surtout si vous utilisez
           VirtualBox pour la première fois), sélectionnez la petite icône de dossier
           à côté de la liste déroulante pour afficher une boîte de dialogue de
-          fichiers standard dans laquelle vous pouvez choisir le fichier image 
+          fichiers standard dans laquelle vous pouvez choisir le fichier image
           sur vos disques hôtes.</para>
         </listitem>
       </itemizedlist>
@@ -1001,7 +1001,7 @@
       le reste de votre ordinateur -- peut "détenir" le clavier et la souris.
       Vous verrez un
       <emphasis>deuxième</emphasis> pointeur de souris qui sera toujours enfermé
-      dans la fenêtre de la VM. De base, vous activez la VM en 
+      dans la fenêtre de la VM. De base, vous activez la VM en
       cliquant dedans.</para>
 
       <para>Pour rendre le clavier et la souris à votre système d'exploitation
@@ -1010,7 +1010,7 @@
       c'est la <emphasis>touche Contrôle droit</emphasis> de votre clavier&#xA0;;
       sur un hôte Mac, la touche hôte par défaut est la touche de commande
       gauche. Vous pouvez modifier ce réglage par défaut dans les paramètres
-      globaux de VirtualBox, voir <xref linkend="globalsettings" />. Dans tous 
+      globaux de VirtualBox, voir <xref linkend="globalsettings" />. Dans tous
       les cas, le paramétrage actuel de la
       touche hôte est toujours affiché <emphasis>en bas à droite de la fenêtre
       de la VM,</emphasis> au cas où vous l'auriez oublié&#xA0;:</para>
@@ -1102,13 +1102,13 @@
           role="bold">Ctrl+Alt+Effacement</emphasis> redémarrent en général le
           serveur X (pour relancer toute interface graphique en cas de problème).
           Comme le serveur X intercepte cette combinaison, l'appui sur ces touches
-          relancera en général votre interface graphique <emphasis>hôte</emphasis> 
+          relancera en général votre interface graphique <emphasis>hôte</emphasis>
           (et tuera tous les programmes, dont VirtualBox, dans l'opération).</para>
 
           <para>Par ailleurs, sur les hôtes Linux qui supportent les terminaux
           virtuels, la combinaison de touches <emphasis role="bold">Ctrl+Alt+Fx</emphasis>
-          (où Fx est une touche de fonctions entre F1 et F12) permet en principe 
-          de basculer entre des terminaux virtuels. Comme avec Ctrl+Alt+Supp, 
+          (où Fx est une touche de fonctions entre F1 et F12) permet en principe
+          de basculer entre des terminaux virtuels. Comme avec Ctrl+Alt+Supp,
           ces combinaisons sont interceptées par le système d'exploitation hôte
           et elles basculent donc toujours entre les terminaux de
           <emphasis>l'hôte</emphasis>.</para>
@@ -1143,7 +1143,7 @@
                   <listitem>
                     <para><emphasis role="bold">Touche hôte + F1</emphasis> (ou
                     autres touches de fonction) pour simuler Ctrl+Alt+F1 (ou
-                    d'autres touches de fonction, pour basculer entre les 
+                    d'autres touches de fonction, pour basculer entre les
                     terminaux virtuels d'un invité Linux).</para>
                   </listitem>
                 </itemizedlist></para>
@@ -1216,7 +1216,7 @@
           <listitem>
             <para>Si vous avez installé les Suppléments invité et s'ils supportent
             le <emphasis role="bold">redimensionnement</emphasis> automatique,
-            les suppléments invité ajusteront automatiquement la résolution de 
+            les suppléments invité ajusteront automatiquement la résolution de
             l'écran du système d'exploitation invité. Par exemple, si vous
             exécutez un invité Windows avec une résolution de 1024x768 pixels et
             si vous élargissez la fenêtre de la VM de 100 pixels, les suppléments
@@ -1238,7 +1238,7 @@
     <sect2>
       <title>Sauvegarder l'état de la machine</title>
 
-      <para>Quand vous cliquez sur le bouton "Fermer" de la fenêtre de votre 
+      <para>Quand vous cliquez sur le bouton "Fermer" de la fenêtre de votre
       machine virtuelle (en haut à droite de la fenêtre, exactement comme vous
       fermeriez n'importe quelle fenêtre de votre système), VirtualBox vous
       demande si vous voulez "sauvegarder" ou "couper" la VM. (Vous pouvez
@@ -1297,7 +1297,7 @@
       </itemizedlist>
 
       <para>Le bouton <emphasis role="bold">"Oublier"</emphasis> de la fenêtre
-      du gestionnaire de VirtualBox Manager désactive un état sauvegardé de la 
+      du gestionnaire de VirtualBox Manager désactive un état sauvegardé de la
       machine virtuelle. Cela a le même effet que de couper la machine, donc les
       mêmes avertissements s'appliquent.</para>
     </sect2>
@@ -1310,12 +1310,12 @@
     hoc de VMs, et de gérer et d'effectuer des fonctions de façon collective
     ou individuelle sur ceux-ci. Il existe un certain nombre de fonctions liées
     aux groupes&#xA0;:</para>
- 
+
     <orderedlist>
         <listitem>
           <para>
-            Créer un groupe en utilisant l'option de l'interface graphique 1) 
-            Remontez une VM au-dessus d'une autre VM. 
+            Créer un groupe en utilisant l'option de l'interface graphique 1)
+            Remontez une VM au-dessus d'une autre VM.
           </para>
           <para>
             Créer un groupe en utilisant l'option 2) Sélectionnez plusieurs VMs
@@ -1355,7 +1355,7 @@
         </listitem>
         <listitem>
           <para>
-          Résumé des commandes de groupes&#xA0;: Démarrer, mettre en pause, 
+          Résumé des commandes de groupes&#xA0;: Démarrer, mettre en pause,
           réinitialiser, fermer (sauvegarder l'état, envoyer un signal d'extinction,
           couper), désactiver l'état sauvegardé, afficher dans un système de
           fichiers, trier.
@@ -1417,7 +1417,7 @@
             <para>Dans tous les cas, une fenêtre apparaîtra et vous demandera un
             nom d'instantané. Ce nom a une finalité purement de référence pour
             vous aider à vous souvenir de l'état de l'instantané. Par exemple, un nom utile
-            serait "Installation neuve à partir de rien, pas de suppléments 
+            serait "Installation neuve à partir de rien, pas de suppléments
            invité", ou "Pack service à peine installé". Vous pouvez aussi ajouter
            un texte plus long dans le champ "Description" si vous le voulez.</para>
 
@@ -1493,7 +1493,7 @@
             instantané, effectuez un clic droit dessus dans l'arborescence des
             instantanés et sélectionnez "Effacer". À partir de VirtualBox 3.2,
             on peut même effacer des instantanés pendant qu'une machine fonctionne.<note>
-                <para>Si la prise et la restauration d'instantanés sont des 
+                <para>Si la prise et la restauration d'instantanés sont des
                 opérations très rapides, l'effacement d'un instantané peut mettre
                 un temps considérable car de grandes quantité de données peuvent être
                 copiées entre plusieurs fichiers images de disques. Il se peut
@@ -1528,7 +1528,7 @@
 
           <listitem>
             <para>L'état complet de tous les disques virtuels attachés à la
-            machine est préservé. Le retour en arrière sur un instantané signifie 
+            machine est préservé. Le retour en arrière sur un instantané signifie
             que toutes les modifications faites sur les disques de la machine
             -- fichier par fichier, bit par bit -- seront toutes annulées. Les
             fichiers créés entre-temps disparaîtront, les fichiers effacés seront
@@ -1542,7 +1542,7 @@
             techniquement, ce n'est pas le disque dur virtuel lui-même qui est
             restauré quand on restaure un instantané. En fait, quand on prend
             un instantané, VirtualBox crée des images de différenciation contenant
-            seulement les modifications depuis que l'instantané a été pris, puis 
+            seulement les modifications depuis que l'instantané a été pris, puis
             l'instantané est restauré, VirtualBox applique cette image de différenciation,
             revenant ainsi en arrière vers l'état précédent. Ceci est non seulement
             plus rapide, mais cela utilise moins d'espace disque. Pour les
@@ -1559,7 +1559,7 @@
 
           <listitem>
             <para>Enfin, si vous avez pris un instantané pendant que la machine était
-            en fonction, l'état de la mémoire de la machine est également 
+            en fonction, l'état de la mémoire de la machine est également
             sauvegardé dans l'instantané (tout comme la mémoire peut être sauvegardée
             quand vous fermez la fenêtre de la VM). Quand vous restaurez un tel
             instantané, l'exécution recommence exactement là où elle en était quand
@@ -1582,7 +1582,7 @@
 
     <para>Un clic sur le bouton "Paramètres" dans la barre d'outils en haut
     ouvre une fenêtre détaillée où vous pouvez configurer de nombreuses
-    propriétés de la VM sélectionnée. Mais attention, bien qu'il soit possible 
+    propriétés de la VM sélectionnée. Mais attention, bien qu'il soit possible
     de modifier tous les paramètres de la VM après avoir installé un système
     d'exploitation invité, certaines modifications pourraient empêcher un système
     d'exploitation invité de fonctionner correctement après l'installation.</para>
@@ -1627,7 +1627,7 @@
     d'OS invité ou sauvegarder une VM, VirtualBox peut créer une copie complète
     ou liée d'une VM existante.<footnote><para>Le support du clonage a été
     introduit avec VirtualBox 4.1.</para></footnote></para>
-    
+
     <para>Un assistant vous guidera dans le processus de clonage&#xA0;:</para>
 
     <mediaobject>
@@ -1636,7 +1636,7 @@
                    width="10cm" />
       </imageobject>
     </mediaobject>
-    
+
     <para>On peut appeler cet assistant à partir du menu contextuel de la liste
     des VMs du gestionnaire (en sélectionnant "Cloner") ou de la vue "Dépôts"
     de la VM sélectionnée. Choisissez d'abord un @ouveau nom pour le clone. Quand
@@ -1644,7 +1644,7 @@
     role="bold">Réinitialiser l'adresse MAC de toutes les cartes réseaux</emphasis>,
     toutes les cartes réseaux se voient affecter une nouvelle adresse MAC. Ceci
     est utile quand la VM source et celle clonée doivent fonctionner sur le même
-    réseau. Si vous ne changez rien, toutes les cartes réseaux auront la même 
+    réseau. Si vous ne changez rien, toutes les cartes réseaux auront la même
     adresse MAC que celle de la VM source. Selon comment vous appelez l'assistant,
     vous avez différents choix pour l'opération de clonage. Vous devez d'abord
     décider si le clone devrait être lié à la VM source ou être totalement indépendant&#xA0;:</para>
@@ -1666,7 +1666,7 @@
          </para>
       </listitem>
     </itemizedlist>
-        
+
     <para>Après avoir sélectionné le mode de clonage, vous devez décider ce que
     vous voulez exactement cloner. Vous pouvez toujours créer un clone de
      <emphasis role="italic">l'état actuel</emphasis> seulement, ou de
@@ -1700,7 +1700,7 @@
 
     <para>OVF est un standard de plateforme croisée supporté par de nombreux
     produits de virtualisation, permettant de créer des machines virtuelles prêtes
-    à l'emploi importables ensuite dans un virtualiseur tel que VirtualBox. VirtualBox 
+    à l'emploi importables ensuite dans un virtualiseur tel que VirtualBox. VirtualBox
     facilite l'exportation et l'importation d'OVF, en y donnant un accès et un
     support depuis la fenêtre du gestionnaire et son interface en ligne de
     commande. Cela permet d'empaqueter ce qu'on appelle des
@@ -1710,7 +1710,7 @@
     complet (incluant système d'exploitation et applications) qui n'a pas besoin de
     configuration ou d'installation autre que l'importation dans VirtualBox.<note>
         <para>Le standard OVF est complexe et son support dans VirtualBox est un
-        processus évolutif. En particulier, nous ne garantissons pas que 
+        processus évolutif. En particulier, nous ne garantissons pas que
         VirtualBox supporte tous les applicatifs créés par d'autres logiciels de
         virtualisation. Pour une liste des limites connues, merci de voir le
          <xref linkend="KnownIssues" />.</para>
@@ -1742,10 +1742,10 @@
         <para>À partir de la version 4.0, VirtualBox crée des associations de
         types de fichiers pour des fichiers OVF et OVA sur votre système
         d'exploitation hôte.</para>
-      </footnote> Sinon, sélectionnez "Fichier" -> "Importer un applicatif" 
+      </footnote> Sinon, sélectionnez "Fichier" -> "Importer un applicatif"
       à partir de la fenêtre du gestionnaire. Dans la boîte de dialogue de fichier
       qui apparaît, allez sur le fichier ayant soit l'extension
-      <computeroutput>.ovf</computeroutput>, soit 
+      <computeroutput>.ovf</computeroutput>, soit
     <computeroutput>.ova</computeroutput>.</para>
 
     <para>Si VirtualBox peut gérer le fichier, une boîte de dialogue ressemblant
@@ -1785,7 +1785,7 @@
     <para>Pour savoir comment exporter une image en ligne de commande, merci de
     voir <xref
     linkend="vboxmanage-export" />.<note>
-        <para>OVF ne peut pas décrire d'instantanés pris pour une 
+        <para>OVF ne peut pas décrire d'instantanés pris pour une
         machine virtuelle. Il s'en suit que lorsque vous exportez une machine
         virtuelle avec des instantanés, seul l'état actuel de la machine sera
         exporté et les images de disque de l'export seront dans l'état
@@ -1897,7 +1897,7 @@
           Window installé. Pour les détails, voir <xref
           linkend="vboxheadless" />.</para>
         </listitem>
-      </orderedlist>Si les interfaces ci-dessus ne satisfont pas encore vos 
+      </orderedlist>Si les interfaces ci-dessus ne satisfont pas encore vos
       besoins particuliers, il est possible de créer d'autres interfaces avec
       le moteur de virtualisation complexe au c&#x153;ur de VirtualBox, car le
       c&#x153;ur de VirtualBox présente ouvertement toutes ses foncitionnalités
diff --git a/doc/manual/fr_FR/user_KnownIssues.xml b/doc/manual/fr_FR/user_KnownIssues.xml
index 49de629..144b0a5 100644
--- a/doc/manual/fr_FR/user_KnownIssues.xml
+++ b/doc/manual/fr_FR/user_KnownIssues.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="KnownIssues">
   <title>Limites connues</title>
     <sect1 id="ExperimentalFeatures">
@@ -49,7 +49,7 @@
       <para>La section suivante décrit les problèmes connus avec VirtualBox
       @VBOX_VERSION_STRING at . Sauf autrement spécifié, il est prévu de corriger ces
       problèmes dans les prochaines versions.</para>
-    
+
       <itemizedlist>
         <listitem>
           <para>Les <emphasis role="bold">limites SMP (multiprocesseur) de
@@ -62,10 +62,10 @@
                 la 3.0.6 pour les invités Windows NT, 2000, XP et 2003 32 bits.
                 Exige l'installation des suppléments invité 3.0.6 ou supérieur.</para>
               </listitem>
-    
+
               <listitem>
                 <para><emphasis role="bold">Faibles performances</emphasis> avec
-                les invités 32 bits sur certains modèles de processeurs Intel 
+                les invités 32 bits sur certains modèles de processeurs Intel
                 qui n'incluent pas le support de l'optimisation matérielle APIC
                 virtuel. Cela concerne surtout les invités Windows et Solaris,
                 mais probablement également certaines révisions du noyau Linux.
@@ -75,7 +75,7 @@
           </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">NX (ne s'éxécute pas ou empêche le traitement de
           données)</emphasis> ne fonctionne que sur les invités en fonction
@@ -87,7 +87,7 @@
           les invités Windows</emphasis> fonctionne, il faut installer les suppléments
           invité en mode "sans échec" dans Windows. Appuyez sur F8 quand
           l'invité Windows démarre et sélectionnez "Mode sans échec", puis installez
-          les suppléments invité. Sans cela, le mécanisme de protection des 
+          les suppléments invité. Sans cela, le mécanisme de protection des
           fichiers de Windows interfèrera dans le remplacement des DLLs
           installés par VirtualBox et il restaurera les DLLs du système Windows
           d'origine. <note>
@@ -96,14 +96,14 @@
          et Windows 7 inclu avec VirtualBox 4.1.</para>
           </note></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">contrôle de l'invité.</emphasis> Sur les
           invités Windows, un processus lancé via le support d'exécution du
           contrôle de l'invité ne pourra pas afficher d'interface graphique,
           <emphasis>sauf</emphasis> si le compte utilisateur sous lequel il est
           lancé est connecté et s'il a une session de bureau.</para>
-    
+
           <para>En outre, pour utiliser des comptes avec ou sans mot de passe
           vide, vous devez modifier la politique de groupe de l'invité. Pour ce
           faire, ouvrez un éditeur des règles de groupes en ligne de commande
@@ -113,7 +113,7 @@
           valeur de <emphasis>Accounts: Limit local account use of blank passwords to
           console logon only</emphasis> en <emphasis>Disabled</emphasis>.</para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">La compression d'images de disques virtuels
           est limitée aux fichiers VDI.</emphasis> La commande <code>VBoxManage modifyhd --compact</code>
@@ -122,84 +122,84 @@
           dans d'autres formats (VMDK, VHD) est de cloner l'image puis d'utiliser
           l'image clonée dans la configuration de la VM.</para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">import/export d'OVF&#xA0;:</emphasis><itemizedlist>
               <listitem>
                 <para>La particularisation des OVF (plusieurs langues dans un fichier
                 OVF) n'est pas encore supportée.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Certaines sections OVF comme StartupSection,
                 DeploymentOptionSection et InstallSection sont ignorées.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Les documents d'environnement OVF, y compris leurs
                 sections de propriétés et la configuration d'applicatifs avec des
                 images ISO, ne sont pas encore supportés.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Les fichiers distants avec HTTP ou d'autres mécanismes ne
                 sont pas encore supportés.</para>
               </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para>Ni le <emphasis role="bold">mode échelonné</emphasis> ni <emphasis
           role="bold">le mode transparent</emphasis> ne fonctionnent bien avec les
-          invités qui utilisent les fonctions 3D d'OpenGL (telles que celles 
+          invités qui utilisent les fonctions 3D d'OpenGL (telles que celles
           avec les gestionnaires de fenêtres ayant activé compiz).</para>
         </listitem>
-    
+
         <listitem>
           <para>Le serveur RDP du pack d'extension de VirtualBox ne supporte que
           les flux audio au format 22.05kHz stereo 16 bit. Si le client RDP
           demande d'autres formats de son, ils ne seront pas sonores.</para>
         </listitem>
-    
+
         <listitem>
-          <para>La préservation de l'apparence de l'affichage en mode échelonné 
+          <para>La préservation de l'apparence de l'affichage en mode échelonné
           ne fonctionne que sur les hôtes Windows et sur les hôtes Mac OS X.</para>
         </listitem>
-    
+
         <listitem>
           <para>Sur les <emphasis role="bold">hôtes Mac OS X,</emphasis> les
           fonctions suivantes ne sont pas encore implémentées&#xA0;:</para>
-    
+
           <para><itemizedlist>
               <listitem>
                 <para>Émulation du verrouillage numérique</para>
               </listitem>
-    
+
               <listitem>
                 <para>Mesure de la fréquence du processeur</para>
               </listitem>
-    
+
               <listitem>
                 <para>Jeu de ballon avec la mémoire</para>
               </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Invités Mac OS X&#xA0;:</emphasis>
           <itemizedlist>
               <listitem>
                 <para>Les invités Mac OS X ne peuvent fonctionner que sur un
                 certain matériel hôte. Pour des détails sur les limites de la
-                licence et du matériel hôte, merci de voir <xref linkend="intro-macosxguests" /> 
+                licence et du matériel hôte, merci de voir <xref linkend="intro-macosxguests" />
                 et vérifiez les conditions de la licence logicielle d'Apple.</para>
               </listitem>
-    
+
               <listitem>
                 <para>VirtualBox n'offre pas de suppléments invité pour Mac OS X
                 pour l'instant.</para>
               </listitem>
-    
+
               <listitem>
                 <para>La résolution graphique est par défaut de 1024x768 car
                 Mac OS X se rabat sur le support d'affichage EFI intégré. Voir
@@ -211,19 +211,19 @@
                 sur une VM. Le support du SMP sera fourni dans une version
                 future.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Selon votre système et votre version de Mac OS X, vous pourriez
                 connaître des plantages de l'invité après quelque temps. Vous
                 pouvez corriger cela en désactivant l'économie d'énergie (passez
                 le timeout à "Never" (jamais)) dans les préférences du système.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Par défaut, l'EFI de VirtualBox active la sortie de débogage
                 du noyau Mac OS X pour vous aider à diagnostiquer les problèmes
                 de démarrage. Remarquez qu'il y a de nombreux messages et toutes
-                les erreurs ne sont pas fatales (elles s'afficheraient aussi 
+                les erreurs ne sont pas fatales (elles s'afficheraient aussi
                 sur votre Mac physique). Vous pouvez désactiver ces messages en
                 lançant cette commande&#xA0;:<screen>VBoxManage setextradata "nom VM" "VBoxInternal2/EfiBootArgs" "  "</screen>Pour
                 revenir à l'ancien comportement, utilisez :<screen>VBoxManage setextradata "nom VM" "VBoxInternal2/EfiBootArgs" ""</screen></para>
@@ -236,21 +236,21 @@
               </listitem>
             </itemizedlist></para>
         </listitem>
-    
+
         <listitem>
           <para><emphasis role="bold">Hôtes Solaris&#xA0;:</emphasis> <itemizedlist>
               <listitem>
                 <para>Il n'y a pas de support des périphériques USB connectés aux
                 hôtes Solaris 10.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Le support USB sur les hôtes Solaris exige Solaris version
                 11 snv_124 ou supérieur. Les Webcams et les autres périphériques
                 de temps (isochronous) sont connus pour donner de faibles
                 performances.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Le passthrough de la webcam hôte se limite aux résolutions
                 640x480 avec 20 images par secondes à cause de limites de l'API
@@ -261,11 +261,11 @@
                 <para>Aucune informations d'ACPI (état de la batterie, source
                 d'énergie) n'est signalée à l'invité.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Pas de support des adaptateurs wifi avec le réseau bridgé.</para>
               </listitem>
-    
+
               <listitem>
                 <para>Le réseau bridgé basé sur Crossbow sur les hôtes Solaris
                 ne fonctionne pas directement avec les liens agrégés. Cependant,
@@ -276,14 +276,14 @@
               </listitem>
             </itemizedlist></para>
         </listitem>
-        
+
         <listitem>
           <para><emphasis role="bold">Suppléments invité de la version 4.1, 4.1.2 et 4.1.4 pour Windows</emphasis>
-          Il se peut que le pilote graphique WDDM de VirtualBox ait été 
+          Il se peut que le pilote graphique WDDM de VirtualBox ait été
           installé et soit gardé dans le système invité après la désinstallation des
           suppléments invité. Cela vient d'un bogue du désinstalleur des suppléments
-          invité. 
-          
+          invité.
+
           <note>
             <para>Cela <emphasis role="bold">ne s'applique pas</emphasis> aux
             mises à jour des suppléments invité, c'est-à-dire que l'installation d'une
@@ -303,18 +303,18 @@
           pour l'adaptateur graphique.
           </para>
         </listitem>
-    
+
         <listitem>
           <para>Ni le pilote <emphasis>virtio</emphasis> ni <emphasis>Intel PRO/1000
-            </emphasis> des <emphasis role="bold">invités Windows XP</emphasis> 
+            </emphasis> des <emphasis role="bold">invités Windows XP</emphasis>
             ne supportent la segmentation hors charge (offloading). Donc,
             les invités Windows XP ont des vitesses de transmission plus lentes
             que d'autres types d'invités. Reportez-vous à l'article 842264
             du MS Knowledge base pour des informations supplémentaires.</para>
         </listitem>
-    
+
         <listitem>
-          <para><emphasis role="bold">Suppléments invité pour OS/2.</emphasis> 
+          <para><emphasis role="bold">Suppléments invité pour OS/2.</emphasis>
           Les dossiers partagés ne sont pas encore supportés avec les invités
           OS/2. De plus, les fenêtres transparentes et le redimensionnement de
           l'invité ne seront probablement jamais implémentés à cause de limites
diff --git a/doc/manual/fr_FR/user_Networking.xml b/doc/manual/fr_FR/user_Networking.xml
index 867b5aa..a6601ac 100644
--- a/doc/manual/fr_FR/user_Networking.xml
+++ b/doc/manual/fr_FR/user_Networking.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="networkingdetails">
   <title>Le réseau virtuel</title>
   <para>Comme indiqué brièvement au <xref linkend="settings-network" />,
   VirtualBox fournit jusqu'à huit cartes Ethernet PCI virtuelles pour chaque
-  machine virtuelle. Pour chaque carte, vous pouvez sélectionner 
+  machine virtuelle. Pour chaque carte, vous pouvez sélectionner
   individuellement<orderedlist>
       <listitem>
         <para>le matériel virtualisé ainsi que</para>
@@ -56,21 +56,21 @@
         </listitem>
       </itemizedlist></para>
 
-    <para>PCNet FAST III est celle par défaut parce qu'elle est supportée par 
+    <para>PCNet FAST III est celle par défaut parce qu'elle est supportée par
     presque tous les systèmes d'exploitation non inclus ainsi que par le chargeur
-    de démarrage GNU GRUB. Par exception, les adaptateurs de la famille Intel 
+    de démarrage GNU GRUB. Par exception, les adaptateurs de la famille Intel
     PRO/1000 ont été choisis pour certains types de systèmes d'exploitation invités
     qui n'incluent plus de pilotes pour la carte PCNet, tel que Windows Vista.</para>
 
     <para>Le type Intel PRO/1000 MT Desktop fonctionne avec Windows Vista et
-    les versions supérieures. La variante T Server de la carte Intel PRO/1000 
+    les versions supérieures. La variante T Server de la carte Intel PRO/1000
     est reconnue par les invités Windows XP sans installer de pilotes supplémentaires.
     La variante MT Server facilite les imports d'OVF à partir d'autres plateformes.</para>
 
-    <para><emphasis role="bold">"L'adaptateur réseau paravirtualisé (virtio-net)"</emphasis> 
-    est spécial. Si vous le sélectionnez, VirtualBox <emphasis>ne virtualise pas</emphasis> 
+    <para><emphasis role="bold">"L'adaptateur réseau paravirtualisé (virtio-net)"</emphasis>
+    est spécial. Si vous le sélectionnez, VirtualBox <emphasis>ne virtualise pas</emphasis>
     du matériel réseau classique (à savoir supporté par les systèmes d'exploitation
-    invités non intégrés). VirtualBox s'attend alors à ce qu'une interface 
+    invités non intégrés). VirtualBox s'attend alors à ce qu'une interface
     logicielle spéciale pour les environnements virtualisés provienne de l'invité,
     évitant ainsi la complexité de l'émulation du matériel réseau et de la
     performance d'importation du réseau. À partir de la version 3.1, VirtualBox
@@ -122,7 +122,7 @@
             présente, mais qu'il n'y a pas de connexion -- comme si aucun câble
             Ethernet n'était branché dans la carte. De cette façon, il est possible
             de "retirer" le câble réseau virtuel Ethernet et de couper la
-            connexion, ce qui peut être utile pour informer un système d'exploitation 
+            connexion, ce qui peut être utile pour informer un système d'exploitation
             invité qu'aucune connexion réseau n'est disponible et forcer une
             reconfiguration.</para>
           </glossdef>
@@ -132,11 +132,11 @@
           <glossterm>Network Address Translation (NAT)</glossterm>
 
           <glossdef>
-            <para>Si vous ne voulez que naviguer sur le Web, télécharger des 
+            <para>Si vous ne voulez que naviguer sur le Web, télécharger des
             fichiers et lire des messages dans l'invité, ce mode par défaut devrait
-            vous suffir et vous pouvez sauter sans souci le reste de cette 
+            vous suffir et vous pouvez sauter sans souci le reste de cette
             section. Merci de remarquer qu'il existe certaines limitations quand
-            on utilise le partage de fichiers Windows (voir <xref linkend="nat-limitations" /> 
+            on utilise le partage de fichiers Windows (voir <xref linkend="nat-limitations" />
             pour des détails).</para>
           </glossdef>
         </glossentry>
@@ -191,7 +191,7 @@
           <glossterm>Réseau générique</glossterm>
 
           <glossdef>
-            <para>Mode rarement utilisé, il partage la même interface réseau 
+            <para>Mode rarement utilisé, il partage la même interface réseau
             générique en permettant à l'utilisateur de sélectionner un pilote qui
             peut être inclu dans VirtualBox ou distribué dans un pack d'extension.</para>
 
@@ -246,9 +246,9 @@
     la sécurité puisque, par défaut, les machines virtuelles ne peuvent pas se
     parler.</para>
 
-    <para>L'inconvénient du mode NAT est que, comme dans un réseau privé, 
-    derrière un routeur, la machine virtuelle est invisible et injoignable 
-    depuis le réseau extérieur&#xA0;; vous ne pouvez pas lancer de serveur de 
+    <para>L'inconvénient du mode NAT est que, comme dans un réseau privé,
+    derrière un routeur, la machine virtuelle est invisible et injoignable
+    depuis le réseau extérieur&#xA0;; vous ne pouvez pas lancer de serveur de
     cette façon, sauf si vous réglez une redirection de ports (décrite ci-dessous).</para>
 
     <para>Les trames réseaux envoyés par le système d'exploitation invité sont reçus
@@ -275,7 +275,7 @@
 
       <para>Comme la machine virtuelle est connectée à un réseau privé interne
       de VirtualBox et invisible pour l'hôte, les services réseaux de l'invité
-      ne sont pas accessibles à la machine hôte ou à d'autres ordinateurs du 
+      ne sont pas accessibles à la machine hôte ou à d'autres ordinateurs du
       même réseau. Cependant, comme un routeur physique, VirtualBox peut rendre
       disponibles des services sélectionnés pour le monde extérieur à l'invité
       via la <emphasis role="bold">redirection de port.</emphasis> Cela veut
@@ -283,7 +283,7 @@
       paquets qui y arrivent vers l'invité, sur le même port ou sur un autre.</para>
 
       <para>Pour une application de l'hôte ou d'autres machines physiques (ou
-      virtuelles) du réseau, cela fonctionne comme si les services étaient 
+      virtuelles) du réseau, cela fonctionne comme si les services étaient
       derrière un proxy qui tournerait en fait sur l'hôte. Cela signifie également
       que vous ne pouvez pas lancer le même service sur les mêmes ports de
       l'hôte. Néanmoins, vous pouvez toujours tirer parti de lancer un service
@@ -307,7 +307,7 @@
       de l'invité et décider des ports à utiliser sur l'hôte (souvent, mais pas
       toujours, vous voudrez utiliser les mêmes ports sur l'invité et sur l'hôte).
       Vous pouvez utiliser n'importe quel port de l'hôte qui ne sont pas déjà
-      utilisés par un service. Par exemple, pour régler les connexions NAT 
+      utilisés par un service. Par exemple, pour régler les connexions NAT
       entrantes pour un serveur <computeroutput>ssh</computeroutput> de
       l'invité, utilisez la commande suivante&#xA0;: <screen>VBoxManage modifyvm "nom VM" --natpf1 "guestssh,tcp,,2222,,22"</screen>Avec
       l'exemple ci-dessus, tout le trafic TCP arrivant sur le port 2222 de
@@ -324,7 +324,7 @@
       la commande suivante&#xA0;:
       <screen>VBoxManage modifyvm "nom VM" --natpf1 delete "guestssh"</screen></para>
 
-      <para>Si, pour une raison quelconque, l'invité utilise une adresse IP 
+      <para>Si, pour une raison quelconque, l'invité utilise une adresse IP
      affectée de manière statique non gérée par le serveur DHCP interne, vous devez
      spécifier l'IP de l'invité lors de l'enregistrement de la règle de redirection&#xA0;:
      <screen>VBoxManage modifyvm "nom VM" --natpf1 "guestssh,tcp,,2222,10.0.2.19,22"</screen>Cet
@@ -346,10 +346,10 @@
 
       <para>Le démarrage avec PXE est désormais supporté en mode NAT. Le serveur
       DHCP de NAT fournit un fichier d'amorçage dont le nom ressemble à
-      <computeroutput>nomvm.pxe</computeroutput> si le répertoire 
+      <computeroutput>nomvm.pxe</computeroutput> si le répertoire
       <computeroutput>TFTP</computeroutput> existe dans le répertoire où se trouve
       le fichier <computeroutput>VirtualBox.xml</computeroutput> de l'utilisateur.
-      L'utilisateur est chargé de fournir 
+      L'utilisateur est chargé de fournir
       <computeroutput>nomvm.pxe</computeroutput>.</para>
     </sect2>
 
@@ -379,7 +379,7 @@
           <glossdef>
             <para>L'invité ne reçoit pas de broadcasts fiables car, pour économiser
             des ressources, il n'écoute qu'un certain temps après que l'invité a
-            envoyé des données UDP sur un port particulier. En conséquence, 
+            envoyé des données UDP sur un port particulier. En conséquence,
             la résolution de nom NetBios basée sur les broadcasts ne fonctionne
             pas toujours (mais WINS fonctionne toujours). Un contournement est
             d'utiliser l'IP numérique du serveur désiré en notation
@@ -391,8 +391,8 @@
           <glossterm>Les protocoles tels que GRE ne sont pas supportés&#xA0;:</glossterm>
 
           <glossdef>
-            <para>Les protocoles autres que TCP et UDP ne sont pas supportés. 
-            Cela signifie que certains produits VPN (comme PPTP de Microsoft) 
+            <para>Les protocoles autres que TCP et UDP ne sont pas supportés.
+            Cela signifie que certains produits VPN (comme PPTP de Microsoft)
             ne peuvent pas être utilisés. Il existe d'autres produits VPN qui
             utilisent simplement TCP et UDP.</para>
           </glossdef>
@@ -422,9 +422,9 @@
 
   <sect1 id="network_nat_service">
     <title>Network Address Translation Service (expérimental)</title>
-    
+
     <para>Le service Network Address Translation (NAT) fonctionne comme un
-    routeur domestique en regroupant les systèmes qui l'utilisent dans un réseau 
+    routeur domestique en regroupant les systèmes qui l'utilisent dans un réseau
     et en évitant que les systèmes extérieurs accèdent au sein du réseau
     tout en permettant aux systèmes qu'il contient de communiquer entre eux et
     avec l'extérieur via TCP et UDP en IPv4 et IPv6.</para>
@@ -448,7 +448,7 @@
     <para><screen>VBoxManage natnetwork modify -t nat-int-network -h on</screen></para>
     <para>Pour le désactiver à nouveau, utilisez :</para>
     <para><screen>VBoxManage natnetwork modify -t nat-int-network -h off</screen></para>
-    <para>Le serveur DHCP fournit la liste des noms de serveurs enregistrés 
+    <para>Le serveur DHCP fournit la liste des noms de serveurs enregistrés
     mais n'identifie pas les serveurs du réseau 127/8.</para>
 
     <para>Pour démarrer le service NAT, utilisez la commande suivante :</para>
@@ -462,7 +462,7 @@
     <para>Cette commande ne supprime pas le serveur DHCP s'il y en a un actif
     sur le réseau interne.</para>
     <para>La redirection de Ports est supportée (en utilisant le paramètre "-p"
-    pour 
+    pour
  switch for IPv4 et "-P" pour IPv6) :</para>
     <para><screen>VBoxManage natnetwork modify -t nat-int-network -p "ssh:tcp:[]:10022:[192.168.15.15]:22"</screen></para>
     <para>Ceci ajoute une règle de redirection de pots depuis le 10022 TCP de
@@ -478,7 +478,7 @@
   <sect1 id="network_bridged">
     <title>Réseau Bridgé</title>
 
-    <para>Avec le réseau bridgé, VirtualBox utilise un pilote de périphérique 
+    <para>Avec le réseau bridgé, VirtualBox utilise un pilote de périphérique
     sur votre système <emphasis>hôte</emphasis> qui filtre les données de votre
     adaptateur réseau physique. Ce pilote s'appelle donc un pilote "net filter".
     Il permet à VirtualBox d'intercepter les données du réseau physique et
@@ -494,7 +494,7 @@
     sur votre système hôte. La manière dont fonctionne le réseau bridgé a été
     complètement réécrite avec VirtualBox 2.0 et 2.1, selon le système d'exploitation
     hôte. Du point de vue utilisateur, la principale différence est qu'une
-    configuration complexe n'est plus nécessaire, quel que soit le système 
+    configuration complexe n'est plus nécessaire, quel que soit le système
     d'exploitation hôte supporté.<footnote>
         <para>Pour les hôtes Mac OS X et Solaris, les pilotes net filter étaient
         déjà ajoutés à VirtualBox 2.0 (vu que le support de Host Interface
@@ -525,7 +525,7 @@
     l'interface avec câble réseau.</para>
 
     <note><para>Créer un pont avec une interface sans fil se fait différemment
-    d'avec une interface filaire, car la plupart des adaptateurs sans fil ne 
+    d'avec une interface filaire, car la plupart des adaptateurs sans fil ne
         supportent pas le mode promiscuous. Tout le trafic doit utiliser l'adresse
         MAC de l'adaptateur sans fil de l'hôte, donc VirtualBox doit remplacer
         l'adresse MAC source dans l'en-tête Ethernet d'un paquet sortant pour
@@ -533,7 +533,7 @@
         voit un paquet entrant ayant pour adresse IP de destination celle
         appartenant à un des adaptateurs d'une machine virtuelle, il remplace
         l'adresse MAC de destination dans l'en-tête Ethernet par l'adresse MAC de
-        l'adaptateur de la VM et il l'envoie. 
+        l'adaptateur de la VM et il l'envoie.
         VirtualBox examine les paquets ARP et DHCP afin de découvrir les adresses
         IP des machines virtuelles.</para></note>
 
@@ -569,13 +569,13 @@
           <para>Sur les hôtes <emphasis role="bold">Solaris</emphasis>, il n'y
           a aucun support pour utiliser les interfaces sans fil. Le filtrage
           du trafic de l'invité par IPFilter n'est pas complètement supporté non
-          plus à cause de restrictions techniques du sous-système réseau de 
+          plus à cause de restrictions techniques du sous-système réseau de
           Solaris. Ces problèmes devraient être résolus dans la future version
           Solaris 11.</para>
 
           <para>À partir de VirtualBox 4.1, sur les hôtes Solaris 11 (construction
           159 et supérieur), il est possible d'utiliser les Crossbow Virtual Network
-          Interfaces (VNICs) de Solaris directement, avec VirtualBox, sans 
+          Interfaces (VNICs) de Solaris directement, avec VirtualBox, sans
           configuration dépassant l'exclusivité de chaque VNIC pour chaque
           interface réseau de l'invité.</para>
 
@@ -623,7 +623,7 @@
     <para>Les réseaux internes sont créés automatiquement au besoin
     c'est-à-dire qu'il n'y a pas de configuration centrale. Chaque réseau interne
     est identifié simplement par son nom. Une fois qu'il y a plus d'une carte
-    réseau virtuelle active avec le même ID réseau interne, le pilote 
+    réseau virtuelle active avec le même ID réseau interne, le pilote
     de VirtualBox "branchera" automatiquement les cartes et agira comme un switch.
     Les pilotes de VirtualBox implémentent un switch Ethernet complet
     et supportent les frames broadcast/multicast et le mode promiscuous.</para>
@@ -653,7 +653,7 @@
 
     <para>Sauf si vous configurez les cartes réseaux (virtuelles) dans les
     systèmes d'exploitation invités qui participent au réseau interne pour utiliser
-    des adresses IP statiques, vous pourriez vouloir utiliser le serveur DHCP 
+    des adresses IP statiques, vous pourriez vouloir utiliser le serveur DHCP
     qui est construit dans VirtualBox pour gérer des adresses IP pour le réseau
     interne. Merci de voir <xref linkend="vboxmanage-dhcpserver" /> pour des
     détails.</para>
@@ -696,7 +696,7 @@
     <para>Pour passer l'interface réseau d'une machine virtuelle en mode "host
     only"&#xA0;:<itemizedlist>
         <listitem>
-          <para>soit allez sur l'onglet "Réseau" de la boîte de dialogue 
+          <para>soit allez sur l'onglet "Réseau" de la boîte de dialogue
           des paramètres de la machine virtuelle dans l'interface graphique et
           sélectionnez "réseau host-only", soit</para>
         </listitem>
@@ -714,8 +714,8 @@
     vous devriez configurer toutes les adresses IP de manière statique.<itemizedlist>
         <listitem>
           <para>Dans l'interface graphique de VirtualBox, vous pouvez configurer
-          tous ces éléments dans les paramètres globaux via "Fichier" -> 
-          "Paramètres" -> "Réseau", qui liste tous les réseaux host-only 
+          tous ces éléments dans les paramètres globaux via "Fichier" ->
+          "Paramètres" -> "Réseau", qui liste tous les réseaux host-only
           qui sont actuellement utilisés. Cliquez sur le nom du réseau puis sur
           le bouton "Éditer" à droite, et vous pouvez modifier les paramètres
           de l'adaptateur et du DHCP.</para>
@@ -888,17 +888,17 @@ VBoxManage modifyvm "nom VM" --nicbandwidthgroup2 Limit</screen></para>
     Mo/s. Par contre, si un adaptateur n'a pas besoin de bande passante, l'autre
     peut utiliser le reste de bande passante de son groupe.</para>
 
-    <para>On peut modifier les limites de chaque groupe pendant que la VM 
+    <para>On peut modifier les limites de chaque groupe pendant que la VM
     est en fonction, les changements étant répercutés immédiatement.
-    L'exemple ci-dessous montre le passage de la limite du groupe créé dans 
+    L'exemple ci-dessous montre le passage de la limite du groupe créé dans
     l'exemple ci-dessus à 100 Ko/s&#xA0;:<screen>VBoxManage bandwidthctl "nom VM" set Limit --limit 100k</screen></para>
 
     <para>Pour désactiver complètement l'encadrement du premier adaptateur de la
     VM, utilisez la commande suivante&#xA0;:
       <screen>VBoxManage modifyvm "nom VM" --nicbandwidthgroup1 none</screen></para>
 
-    <para>Il est également possible de désactiver l'encadrement de tous les 
-    adaptateurs affectés à un groupe de bande passante alors que la VM est en 
+    <para>Il est également possible de désactiver l'encadrement de tous les
+    adaptateurs affectés à un groupe de bande passante alors que la VM est en
     fonction, en spécifiant la limite zéro pour le groupe. Par exemple,
     pour le groupe de bande passante nommé "Limit", utilisez&#xA0;:
       <screen>VBoxManage bandwidthctl "nom VM" set Limit --limit 0</screen></para>
@@ -906,7 +906,7 @@ VBoxManage modifyvm "nom VM" --nicbandwidthgroup2 Limit</screen></para>
   <sect1 id="network_performance">
     <title>Améliorer les performances réseaux</title>
 
-    <para>VirtualBox offre une variété d'adaptateurs réseaux virtuels qu'on peut 
+    <para>VirtualBox offre une variété d'adaptateurs réseaux virtuels qu'on peut
       "attacher" au réseau de l'hôte de diverses manières. Selon les
       types d'adaptateurs et d'attachements utilisés, les performances réseaux
       seront différentes. Dans une logique de performances, l'adaptateur réseau
@@ -916,7 +916,7 @@ VBoxManage modifyvm "nom VM" --nicbandwidthgroup2 Limit</screen></para>
       <emphasis>virtio</emphasis> que <emphasis>Intel PRO/1000
       </emphasis> profitent de la segmentation et de l'offloading de la
       vérification de somme. La segmentation offloading est essentielle pour de
-      hautes performances car elle permet moins de changements de contextes, 
+      hautes performances car elle permet moins de changements de contextes,
       augmentant drastiquement les tailles des paquets croisés entre VM et hôte.</para>
     <note><para>Ni les pilotes <emphasis>virtio</emphasis>, ni ceux
     <emphasis>Intel PRO/1000</emphasis> de Windows XP supportent la segmentation
@@ -926,7 +926,7 @@ VBoxManage modifyvm "nom VM" --nicbandwidthgroup2 Limit</screen></para>
     </note>
     <para>Trois types d'attachements&#xA0;: <emphasis>interne</emphasis>,
       <emphasis>bridgé</emphasis> et <emphasis>host-only</emphasis>, ont des
-      performances presque identiques, le type <emphasis>internal</emphasis> 
+      performances presque identiques, le type <emphasis>internal</emphasis>
       étant légèrement plus rapide et utilisant moins de cycles processeur puisque
       les paquets ne vont jamais dans la pile réseau de l'hôte. L'attachement
       <emphasis>NAT</emphasis> est le plus lent (et le plus sûr) de tous les
diff --git a/doc/manual/fr_FR/user_PrivacyPolicy.xml b/doc/manual/fr_FR/user_PrivacyPolicy.xml
index 65fc26a..450eed6 100644
--- a/doc/manual/fr_FR/user_PrivacyPolicy.xml
+++ b/doc/manual/fr_FR/user_PrivacyPolicy.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <appendix id="privacy">
   <title>Informations sur la confidentialité de VirtualBox</title>
 
@@ -11,7 +11,7 @@
    s'applique à vos données personnelles recueillies et utilisées par Oracle.
    Les informations suivantes décrivent en détails les informations qui sont
    échangées entre l'application VirtualBox et Oracle et celles recueillies par le site Internet virtualbox.org.</para>
-   
+
   <para><emphasis role="bold">§ 1 virtualbox.org.</emphasis> Le site Internet
   "virtualbox.org" enregistre les informations d'utilisation anonymes telles
   que votre adresse IP, votre situation géographique, votre navigateur, l'endroit
diff --git a/doc/manual/fr_FR/user_Security.xml b/doc/manual/fr_FR/user_Security.xml
index 5e00917..a733d20 100644
--- a/doc/manual/fr_FR/user_Security.xml
+++ b/doc/manual/fr_FR/user_Security.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="Security">
   <title>Guide de sécurité</title>
 
@@ -52,7 +52,7 @@
               de configuration, par exemple quand vous créez
               /etc/default/virtualbox, voir
               <xref linkend="linux_install_opts"/>. Le mode 0600 serait
-              idéal. 
+              idéal.
             </para>
           </glossdef>
         </glossentry>
@@ -93,9 +93,9 @@
       <title>Aperçu de l'installation</title>
       <para>
         Vous ne devriez télécharger le paquet de base de VirtualBox qu'à partir d'une
-        source de confiance, telle que le site Internet officiel 
+        source de confiance, telle que le site Internet officiel
         <ulink url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>.
-        Vous devriez vérifier l'intégrité du paquet avec la somme de contrôle 
+        Vous devriez vérifier l'intégrité du paquet avec la somme de contrôle
         SHA256 fournie sur le site officiel.
       </para>
       <para>
@@ -139,7 +139,7 @@
         VirtualBox n'est nécessaire. Cependant, sur les hôtes Solaris et Linux,
         il faut configurer les droits adaptés pour que les utilisateurs exécutent
         des VMs et puissent accéder à certaines ressources de l'hôte. Par exemple,
-        les utilisateurs Linux doivent faire partie du groupe <emphasis>vboxusers</emphasis> 
+        les utilisateurs Linux doivent faire partie du groupe <emphasis>vboxusers</emphasis>
         pour pouvoir donner des périphériques USB à un invité. Si vous devriez
         accéder à une interface série à partir d'une VM, il faut donner les bons
         droits à l'utilisateur pour qu'il puisse accéder à ce périphérique. La
@@ -157,21 +157,21 @@
     <sect2>
       <title>Le modèle de sécurité</title>
       <para>
-        Une des propriétés des gestionnaires de machines virtuels (VMMs) comme 
+        Une des propriétés des gestionnaires de machines virtuels (VMMs) comme
         VirtualBox est d'enfermer un invité en l'exécutant dans un environnement
         protégé, une machine virtuelle laquelle fonctionne en tant que processus
         d'un utilisateur du système d'exploitation hôte. L'invité ne peut pas
         communiquer directement avec le matériel hôte ou avec d'autres ordinateurs,
         mais uniquement via le VMM. Le VMM offre des ressources physiques et des
         périphériques émulés à l'invité, auxquels on accède par le système d'exploitation hôte pour effectuer les
-        tâches nécessaires. Les paramètres de la VM contrôlent les ressources 
+        tâches nécessaires. Les paramètres de la VM contrôlent les ressources
         fournies à l'invité, par exemple la quantité de mémoire de l'invité ou
-        le nombre de processeurs invités (voir <xref linkend="generalsettings"/>) 
+        le nombre de processeurs invités (voir <xref linkend="generalsettings"/>)
         et les fonctionnalités activées pour cet invité (par exemple le contrôle à distance, certains paramètres
         d'affichage et autres).
       </para>
     </sect2>
-    
+
     <sect2>
       <title>Configuration sécurisée des machines virtuelles</title>
       <para>
@@ -186,7 +186,7 @@
           <xref linkend="network_nat"/>. L'invité fait partie d'un sous-réseau
           privé appartenant à cette VM et l'adresse IP de l'invité n'est pas visible
           de l'extérieur. Ce mode réseau fonctionne sans paramétrage supplémentaire
-          et il suffit pour la plupart des besoins. 
+          et il suffit pour la plupart des besoins.
         </para>
         <para>
           Si vous utilisez le réseau bridgé, la VM se comporte comme un ordinateur
@@ -288,7 +288,7 @@
           <computeroutput>VBoxManage storageattach</computeroutput>. Tant que
           vous ne fournissez pas de réglage de mots de passe (l'option
           <screen>--settingspwfile</screen> en ligne de commande), ce mot
-          de passe secret est stocké <emphasis role="bold">sans chiffrement</emphasis> 
+          de passe secret est stocké <emphasis role="bold">sans chiffrement</emphasis>
           dans la configuration de la machine et il est donc potentiellement
           lisible sur l'hôte. Voir <xref
           linkend="storage-iscsi" /> et <xref
@@ -356,11 +356,11 @@
           sont contrôlables. Par défaut, le service sonde localhost, empêchant
           toute connexion distante.</para>
         </listitem>
-        
+
         <listitem>
           <para>Le trafic envoyé par une connexion réseau en tunnel UDP n'est
-          pas chiffré. Vous pouvez soit le chiffrer au niveau du réseau hôte 
-          (avec IPsec), soit utiliser des protocoles chiffrés dans le réseau 
+          pas chiffré. Vous pouvez soit le chiffrer au niveau du réseau hôte
+          (avec IPsec), soit utiliser des protocoles chiffrés dans le réseau
           invité (tel que SSH). Les propriétés de sécurité sont similaires à un Ethernet bridgé.</para>
         </listitem>
       </itemizedlist></para>
diff --git a/doc/manual/fr_FR/user_Storage.xml b/doc/manual/fr_FR/user_Storage.xml
index 0cc2f07..0604956 100644
--- a/doc/manual/fr_FR/user_Storage.xml
+++ b/doc/manual/fr_FR/user_Storage.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="storage">
   <title>Le stockage virtuel</title>
 
@@ -75,37 +75,37 @@
 
           <para>Donc, même si votre système d'exploitation invité ne supporte
           pas les périphériques SCSI ou SATA, il devrait toujours pouvoir voir
-          un contrôleur IDE. 
+          un contrôleur IDE.
           </para>
 
-          <para>Vous pouvez aussi sélectionner le type exact de contrôleur IDE 
+          <para>Vous pouvez aussi sélectionner le type exact de contrôleur IDE
           que VirtualBox devrait matériellement présenter à la machine virtuelle
           (PIIX3, PIIX4 ou ICH6). Il n'y a pas de différence en termes de performance,
-          mais si vous importez une machine virtuelle d'un autre produit de 
+          mais si vous importez une machine virtuelle d'un autre produit de
           virtualisation, le système d'exploitation de cette machine peut attendre
           un type de contrôleur particulier et planter s'il n'est pas trouvé.</para>
 
           <para>Après avoir créé une nouvelle machine virtuelle avec l'assistant
           "Nouvelle Machine virtuelle" de l'interface graphique, vous verrez généralement
           un contrôleur IDE dans les paramètres de "Stockage" de la machine, auquel
-          le lecteur CD/DVD sera connecté, sur un des quatre 
+          le lecteur CD/DVD sera connecté, sur un des quatre
           ports du contrôleur.</para>
         </listitem>
 
         <listitem>
-          <para><emphasis role="bold">Serial ATA (SATA)</emphasis> est un 
+          <para><emphasis role="bold">Serial ATA (SATA)</emphasis> est un
           standard récent introduit en 2003. Par rapport à l'IDE, il supporte
           plus de périphériques par contrôleur et à bien plus haute vitesse. De
           plus, avec du matériel physique, les périphériques peuvent être ajoutés
           et supprimés pendant que le système fonctionne. L'interface standard
-          des contrôleurs SATA est appelé 
+          des contrôleurs SATA est appelé
           Advanced Host Controller Interface (<emphasis
           role="bold">AHCI</emphasis>).</para>
 
           <para>Comme un vrai contrôleur SATA, le contrôleur SATA virtuel de
           VirtualBox travaille plus vite et consomme moins de ressources processeur
-          que le contrôleur IDE virtuel. De plus, il vous permet de connecter 
-          jusqu'à 30 disques durs virtuels à une machine au lieu de seulement 
+          que le contrôleur IDE virtuel. De plus, il vous permet de connecter
+          jusqu'à 30 disques durs virtuels à une machine au lieu de seulement
           trois comme avec le contrôleur IDE de VirtualBox (avec le lecteur DVD
           déjà connecté).</para>
 
@@ -124,7 +124,7 @@
               de l'IDE à SATA après l'installation en installant les pilotes SATA
               et en changeant le type de contrôleur dans la boîte de dialogue des
               paramètres de la VM.<footnote>
-                  <para>VirtualBox recommande les pilotes Intel Matrix Storage 
+                  <para>VirtualBox recommande les pilotes Intel Matrix Storage
                   qui sont téléchargeables sur <ulink
                   url="http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101">http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=2101</ulink>.</para>
                 </footnote></para>
@@ -132,8 +132,8 @@
 
           <para>Pour ajouter un contrôleur SATA à une machine pour laquelle il n'a
           pas été activé par défaut (soit parce qu'elle a été créée par une
-          version antérieure VirtualBox, soit parce que SATA n'est pas supporté 
-          par défaut par le système d'exploitation invité sélectionné), allez 
+          version antérieure VirtualBox, soit parce que SATA n'est pas supporté
+          par défaut par le système d'exploitation invité sélectionné), allez
           dans l'onglet "Stockage" de la boîte de dialogue des paramètres de la
           machine, cliquez sur le bouton "Ajouter un contrôleur" sous la case
           "Arborescence de stockage" puis sélectionnez "Ajouter un contrôleur
@@ -147,7 +147,7 @@
         </listitem>
 
         <listitem>
-          <para><emphasis role="bold">SCSI</emphasis> est un autre standard 
+          <para><emphasis role="bold">SCSI</emphasis> est un autre standard
           industriel signifiant "Small Computer System Interface".
           SCSI a été standardisé dès 1986 comme une interface générique pour
           transférer des données entre tous les types de périphériques, y compris
@@ -169,7 +169,7 @@
           dans la machine virtuelle.<warning>
               <para>Comme avec les autres types de contrôleurs, un contrôleur SCSI
               ne sera vu que par les systèmes d'exploitation ayant un support
-              de ce périphérique. 
+              de ce périphérique.
               Windows 2003 et supérieur incluent des pilotes pour le contrôleur
               LSI Logic, tandis que Windows NT 4.0 et Windows 2000 incluent
               des pilotes pour le contrôleur BusLogic. Windows XP n'inclut
@@ -182,7 +182,7 @@
           un autre standard de bus qui utilise le jeu de commandes SCSI. Mais
           contrairement au SCSI, avec les périphériques physiques, on utilise
           des câbles série au lieu de ceux parallèles, ce qui simplifie la
-          connexion de périphériques physiques. D'une certaine manière, SAS 
+          connexion de périphériques physiques. D'une certaine manière, SAS
           est donc au SCSI ce que SATA est à l'IDE: il permet des connexions
           plus fiables et plus rapides.</para>
 
@@ -201,11 +201,11 @@
         </listitem>
       </itemizedlist></para>
 
-    <para>En résumé, VirtualBox vous offre les catégories de connecteur (slot) de stockage 
+    <para>En résumé, VirtualBox vous offre les catégories de connecteur (slot) de stockage
     virtuels suivantes&#xA0;:<orderedlist>
         <listitem>
           <para>quatre slots attachés au contrôleur IDE traditionnel, qui sont
-          toujours présents (un d'eux est en général un lecteur de CD/DVD 
+          toujours présents (un d'eux est en général un lecteur de CD/DVD
           virtuel)&#xA0;;</para>
         </listitem>
 
@@ -252,7 +252,7 @@
 
     <para>VirtualBox supporte quatre variantes de fichiers images de disque&#xA0;:<itemizedlist>
         <listitem>
-          <para>Normalement, VirtualBox utilise son propre format de container 
+          <para>Normalement, VirtualBox utilise son propre format de container
           pour les disques durs invités -- des fichiers Virtual Disk Image (VDI).
           En particulier,ce format sera utilisé quand vous créerez une nouvelle
           machine virtuelle avec un nouveau
@@ -332,7 +332,7 @@
         <listitem>
           <para>les médias "enregistrés" pour la compatibilité avec les
           versions de VirtualBox inférieures à 4.0. Pour les détails sur les modalités
-          du changement de l'enregistrement des médias, avec la version 4.0, 
+          du changement de l'enregistrement des médias, avec la version 4.0,
           merci de vous reporter à <xref
           linkend="vboxconfigdata" />.</para>
         </listitem>
@@ -366,7 +366,7 @@
       </listitem>
     </itemizedlist>
 
-    <para>Comme vous pouvez le voir dans l'impression d'écran ci-dessus, pour 
+    <para>Comme vous pouvez le voir dans l'impression d'écran ci-dessus, pour
     chaque image, le gestionnaire de médias Virtuels vous montre le chemin complet
     vers le fichier image et d'autres informations, telles que la machine virtuelle
     à laquelle est attachée l'image, s'il y en a.</para>
@@ -387,8 +387,8 @@
     </itemizedlist>
 
     <para>À partir de la version 4.0, pour <emphasis role="bold">créer de
-    nouvelles images de disque,</emphasis> merci d'utiliser l'onglet "Stockage" 
-    dans la boîte de dialogue des paramètres d'une machine virtuelle, car les 
+    nouvelles images de disque,</emphasis> merci d'utiliser l'onglet "Stockage"
+    dans la boîte de dialogue des paramètres d'une machine virtuelle, car les
     images de disque sont désormais stockées par défaut dans le dossier de chaque
     machine.</para>
 
@@ -440,14 +440,14 @@
         n'est pas "réinitialisé". Quand un instantané est pris, VirtualBox "gèle"
         plutôt le fichier image et n'écrit plus dedans. Pour les opérations d'écriture
         de la VM, un deuxième fichier image de "différenciation" est créé, qui
-        ne reçoit que les modifications de l'image d'origine&#xA0;; voir la section 
+        ne reçoit que les modifications de l'image d'origine&#xA0;; voir la section
         suivante pour les détails.)</para>
 
-        <para>Si vous pouvez attacher une même image "normale" à plus d'une 
+        <para>Si vous pouvez attacher une même image "normale" à plus d'une
         machine virtuelle, une seule de ces machines virtuelles attachée au
         même fichier image peut être exécuté en même temps, sans quoi il y aurait
         des conflits si plusieurs machines écrivent dans le même fichier image.<footnote>
-            <para>Cette restriction est plus légère qu'avant 
+            <para>Cette restriction est plus légère qu'avant
             VirtualBox 2.2. Jadis, chaque image de disque "normale" ne pouvait
             être <emphasis>attachée</emphasis> qu'à une seule machine. Maintenant,
             elle peut être attachée à plus d'une machine du moment qu'une seule
@@ -465,7 +465,7 @@
       <listitem>
         <para>Les <emphasis role="bold">Disques durs partageables</emphasis> sont
         des variantes des disques durs write-through. En principe, ils se
-        comportent exactement de la même façon, à savoir que leur état 
+        comportent exactement de la même façon, à savoir que leur état
         <emphasis>n'est pas</emphasis> sauvegardé quand on prend l'instantané
         et il n'est pas restauré quand on le restaure. La
         différence n'apparaît que si vous attachez de tels disques à plusieurs
@@ -488,7 +488,7 @@
         que la machine est en fonction&#xA0;; tous les changements sont perdus
         quand la machine virtuelle est allumée la fois d'après. Il s'en suit qu'à
         l'inverse des images "normales", une même image immuable peut être utilisée
-        avec plusieurs machines virtuelles sans 
+        avec plusieurs machines virtuelles sans
         restrictions.</para>
 
         <para>La <emphasis>création</emphasis> d'une image immuable a peu de sens
@@ -498,7 +498,7 @@
         vous créeriez d'abord une image "normale" puis, quand vous estimez son
         contenu utile, vous la marquez plus tard comme immuable.</para>
 
-        <para>Si vous prenez l'instantané d'une machine avec des images immuables, 
+        <para>Si vous prenez l'instantané d'une machine avec des images immuables,
         sur chaque machine allumée, ces images sont réinitialisées à leur état du dernier
         instantané (actuel) (et non à l'état de l'image immuable d'origine).</para>
 
@@ -516,7 +516,7 @@
         <para>De nouveau, techniquement, VirtualBox n'écrit jamais directement
         sur l'image immuable. Toutes les opérations d'écriture de la machine seront
         envoyées dans une image de différenciation&#xA0;; la prochaine fois que
-        la VM sera allumée, l'image de différenciation sera rétablie à chaque 
+        la VM sera allumée, l'image de différenciation sera rétablie à chaque
         démarrage de la machine, ses images  immuables ont exactement le même
         contenu.<footnote>
             <para>Ce comportement a aussi changé avec VirtualBox 2.2. Jadis,
@@ -554,7 +554,7 @@
       </listitem>
 
       <listitem>
-        <para>Enfin, <emphasis role="bold">l'image en lecture seule</emphasis> 
+        <para>Enfin, <emphasis role="bold">l'image en lecture seule</emphasis>
         est utilisée automatiquement pour les images de CD/DVD, vu que les
         CDs/DVDs ne sont jamais inscriptibles.</para>
       </listitem>
@@ -592,7 +592,7 @@
     garde que les différences avec une autre image. En elle-même, une image de
     différenciation est inutile, elle doit toujours se référer à une autre image.
     On parle donc généralement d'une image de différenciation comme d'un "enfant"
-    qui garde les différences d'avec son 
+    qui garde les différences d'avec son
     "parent".</para>
 
     <para>Quand une image de différenciation est active, elle reçoit toutes les
@@ -610,7 +610,7 @@
     différenciation, il devient le "petit-fils" du parent d'origine. La première
     image de différenciation devient alors également en lecture seule et les
     opérations d'écriture ne vont que dans l'image de différenciation du second
-    niveau. Lors de la lecture à partir d'un disque virtuel, 
+    niveau. Lors de la lecture à partir d'un disque virtuel,
     VirtualBox a besoin de regarder d'abord dans la deuxième image de différenciation,
     puis dans la première si le secteur n'a pas été trouvé, puis dans
     l'image d'origine.</para>
@@ -620,7 +620,7 @@
     différenciation peuvent constituer une arborescence complexe avec des parents,
     des "fratries" et des enfants, en fonction de la complexité de la configuration
     de votre machine. Les opérations d'écriture vont toujours dans l'image de
-    différenciation "active" attachée à la machine, et pour les opérations de 
+    différenciation "active" attachée à la machine, et pour les opérations de
     lecture, VirtualBox peut avoir besoin de regarder jusqu'aux parents dans la
     chaîne, jusqu'à ce qu'il trouve le secteur en question. Vous pouvez regarder
     l'arborescence dans le gestionnaire de médias virtuels&#xA0;:<mediaobject>
@@ -630,7 +630,7 @@
         </imageobject>
       </mediaobject></para>
 
-    <para>Dans toutes ces situations, du point de vue de la machine virtuelle, 
+    <para>Dans toutes ces situations, du point de vue de la machine virtuelle,
     le disque dur virtuel se comporte comme n'importe quel autre disque.
     Pendant que la machine virtuelle est en fonction, il y a un léger ralentissement
     des E/S (overhead) car il se peut que VirtualBox doive regarder des
@@ -642,18 +642,18 @@
     suivantes&#xA0;:<orderedlist>
         <listitem>
           <para><emphasis role="bold">Les instantanés.</emphasis> Quand vous
-          créez un instantané comme expliqué dans la section précédente, VirtualBox 
+          créez un instantané comme expliqué dans la section précédente, VirtualBox
           "gèle" les images attachées à la machine virtuelle et crée des
-          images de différenciation pour chacun d'eux (pour être précis, une 
+          images de différenciation pour chacun d'eux (pour être précis, une
           par image qui n'est pas en mode "write-through"). Du point de vue de
           la machine virtuelle, les disques virtuels continuent d'agir comme
           avant, mais toutes les opérations d'écriture vont dans les images de
-          différenciation. Chaque fois que vous créez un autre instantané, pour 
+          différenciation. Chaque fois que vous créez un autre instantané, pour
           chaque disque dur attaché, une autre image de différenciation est
           créée et attachée, formant une chaîne ou une arborescence.</para>
 
           <para>Dans l'impression d'écran ci-dessus, vous voyez que l'image du
-          disque d'origine est maintenant attachée à un instantané, ce qui 
+          disque d'origine est maintenant attachée à un instantané, ce qui
           représente l'état du disque quand on a pris l'instantané.</para>
 
           <para>Si vous <emphasis role="bold">restaurez</emphasis> maintenant
@@ -661,7 +661,7 @@
           la machine stocké dans le dépôt --, il se produit la chose suivante&#xA0;:<orderedlist>
               <listitem>
                 <para>VirtualBox copie les paramètres de la machine virtuelle
-                mémorisés dans l'instantané vers la machine virtuelle. Du coup, si 
+                mémorisés dans l'instantané vers la machine virtuelle. Du coup, si
                 vous avez fait des modifications dans la configuration après avoir
                 pris l'instantané, elles sont annulées.</para>
               </listitem>
@@ -677,10 +677,10 @@
 
               <listitem>
                 <para>Pour chaque image de disque attachée, à la machine, l'image de
-                différenciation contenant les opérations d'écriture depuis que 
+                différenciation contenant les opérations d'écriture depuis que
                 l'instantané actuel a été pris est supprimée et l'image du parent
                 originel est réactivée. (Si vous avec restauré l'instantané "racine",
-                ce sera l'image de disque racine de tous les attachements&#xA0;; 
+                ce sera l'image de disque racine de tous les attachements&#xA0;;
                 sinon ce sera d'autres images de différenciation descendantes).
                 Cela restaure de fait l'ancien état de la machine.</para>
               </listitem>
@@ -688,14 +688,14 @@
 
           <para>Si vous <emphasis role="bold">effacez</emphasis> plus tard un
           instantané afin de gagner de l'espace disque, chaque attachement de
-          disque des images de différenciation devient obsolète. Dans ce cas, 
+          disque des images de différenciation devient obsolète. Dans ce cas,
           l'image de différenciation du disque ne peut pas être tout simplement
           effacée. VirtualBox doit plutôt regarder chaque secteur de l'image de
           différenciation et le copier dans le parent&#xA0;; ceci s'appelle des
-          images de "synchronisation" et cela peut être une procédure longue 
+          images de "synchronisation" et cela peut être une procédure longue
           selon la taille de l'image de différenciation. Il se peut qu'il faille
           temporairement une importante quantité d'espace disque supplémentaire
-          avant que l'image de différenciation rendue obsolète par l'opération 
+          avant que l'image de différenciation rendue obsolète par l'opération
           de synchronisation ne soit effacée.</para>
         </listitem>
 
@@ -729,7 +729,7 @@
 
     <para>Remarquez que les distributions Linux récentes identifient le disque
     dur de démarrage à partir de l'ID du disque. L'ID utilisé par VirtualBox pour
-    un lecteur est déterminé à partir de l'UUID de l'image du disque dur virtuel. 
+    un lecteur est déterminé à partir de l'UUID de l'image du disque dur virtuel.
     Donc si vous clonez une image de disque et si vous essayez de démarrer l'image,
     copiée il se peut que l'invité ne puisse pas déterminer son propre disque de
     démarrage car l'UUID a changé. Dans ce cas, vous devez adapter l'ID du disque
@@ -760,8 +760,8 @@
     aux données.</para>
 
     <para>Remarquez que cela ne s'applique qu'aux fichiers images&#xA0;; la
-    mise en tampon ne fonctionnait jamais pour les disques présents sur des 
-    supports iSCSI distants, ce qui est le 
+    mise en tampon ne fonctionnait jamais pour les disques présents sur des
+    supports iSCSI distants, ce qui est le
     scenario le plus classique dans les paramétrages du type enterprise (voir
     <xref linkend="storage-iscsi" />).</para>
 
@@ -770,7 +770,7 @@
     inconvénients&#xA0;:<orderedlist>
         <listitem>
           <para>L'écriture différée dans le cache de l'OS hôte est moins
-          sécurisée. Quand l'OS invité écrit des données, il considère que les 
+          sécurisée. Quand l'OS invité écrit des données, il considère que les
           données sont écrites même si elles ne sont pas encore arrivées sur le
           disque physique. Si, pour une raison quelconque, l'écriture n'a pas lieu
           (problème électrique, plantage de l'hôte), les chances de perdre des
@@ -791,7 +791,7 @@
         </listitem>
 
         <listitem>
-          <para>La mémoire physique est souvent gaspillée, car les systèmes 
+          <para>La mémoire physique est souvent gaspillée, car les systèmes
           d'exploitation hôtes ont en général leur propre système de mise en cache
           des E/S, ce qui aboutit à la mise en cache double des données (à la fois dans
           le cache de l'invité et de l'hôte), avec peu d'effet.
@@ -807,14 +807,14 @@
     files (thread) d'E/S.</para>
 
     <para>Les E/S asynchrones n'étant pas supportées par les contrôleurs IDE,
-    pour des raisons de performance, vous pourriez vouloir laisser la mise en 
+    pour des raisons de performance, vous pourriez vouloir laisser la mise en
     cache de l'hôte pour les contrôleurs IDE virtuels de votre VM.</para>
 
     <para>Pour cette raison, VirtualBox vous permet de configurer si la mise en cache
     des E/S est utilisée pour chaque contrôleur E/S, indépendamment. Soit décochez
     la case "Utiliser la mise en cache des E/S de l'hôte" des paramètres de stockage,
-    d'un contrôleur de stockage donné, soit utilisez la commande VBoxManage 
-    suivante pour désactiver la mise en cache des E/S de l'hôte pour un contrôleur 
+    d'un contrôleur de stockage donné, soit utilisez la commande VBoxManage
+    suivante pour désactiver la mise en cache des E/S de l'hôte pour un contrôleur
    de stockage virtuel&#xA0;:<screen>VBoxManage storagectl "nom VM" --name <nomcontrôleur> --hostiocache off</screen></para>
 
     <para>Voir <xref linkend="vboxmanage-storagectl" /> pour les détails.</para>
@@ -854,9 +854,9 @@ VBoxManage storageattach "nom VM" --storagectl "SATA" --port 1 --device 0 --type
   <sect1 id="storage-cds">
     <title>Support des CD/DVD</title>
 
-    <para>Le/les lecteur(s) CD/DVD virtuels ne supportent par défaut que la 
+    <para>Le/les lecteur(s) CD/DVD virtuels ne supportent par défaut que la
     lecture. Vous pouvez modifier la configuration d'un média pendant l'exécution.
-    Vous pouvez choisir entre trois options pour présenter les données d'un 
+    Vous pouvez choisir entre trois options pour présenter les données d'un
     média&#xA0;:<itemizedlist>
         <listitem>
           <para><emphasis role="bold">Lecteur hôte</emphasis> définit que l'invité
@@ -875,7 +875,7 @@ VBoxManage storageattach "nom VM" --storagectl "SATA" --port 1 --device 0 --type
         </listitem>
       </itemizedlist></para>
 
-    <para>La modification entre les situations ci-dessus, le changement de 
+    <para>La modification entre les situations ci-dessus, le changement de
     média dans le lecteur hôte ou de fichier image signalera un changement de média
     au système d'exploitation invité, lequel peut réagir au changement (par exemple,
     en démarrant un programme d'installation).</para>
@@ -890,13 +890,13 @@ VBoxManage storageattach "nom VM" --storagectl "SATA" --port 1 --device 0 --type
     mal se comporter. Utilisez ceci avec précaution.<note>
         <para>La chaîne d'identification du lecteur fournie à l'invité (qui serait
         affichée, dans l'invité, par les outils de configuration tels que le
-        gestionnaire de périphériques de Windows) est toujours "VBOX CD-ROM", 
+        gestionnaire de périphériques de Windows) est toujours "VBOX CD-ROM",
         indépendamment de la configuration actuelle du lecteur virtuel. Ceci pour
         empêcher la détection d'être faite en retard dans le système d'exploitation
         invité à chaque fois que la configuration change.</para>
       </note></para>
 
-    <para>L'émulation standard des CD/DVD ne permet de lire que des formats de 
+    <para>L'émulation standard des CD/DVD ne permet de lire que des formats de
     CD et de DVD de données standards. Une possibilité supplémentaire, expérimentale,
     est de donner un accès direct de l'invité au lecteur CD/DVD de l'hôte en
     activant le "Mode direct" (passthrough). Selon le matériel hôte, cela peut potentiellement
@@ -925,7 +925,7 @@ VBoxManage storageattach "nom VM" --storagectl "SATA" --port 1 --device 0 --type
     <para>Même si passthrough est activé, les commandes non sûres telles que
     la mise à jour du firmware du lecteur, seront bloquées. Les formats de CD
     vidéo ne sont pas du tout supportés, même pas en mode passthrough, et on
-    ne peut pas les lire à partir d'une 
+    ne peut pas les lire à partir d'une
     machine virtuelle.</para>
 
     <para>Sur les hôtes Solaris, passthrough exige de lancer VirtualBox avec de
@@ -942,7 +942,7 @@ VBoxManage storageattach "nom VM" --storagectl "SATA" --port 1 --device 0 --type
     d'attacher des serveurs de stockage iSCSI simplement comme des disques durs
      distants à un réseau d'ordinateurs. Dans la terminologie iSCSI, le serveur
      fournissant les ressources de stockage s'appelle la "cible iSCSI", tandis
-     que le client qui se connecte au serveur et qui accède à ses ressources 
+     que le client qui se connecte au serveur et qui accède à ses ressources
      s'appelle "l'initiateur iSCSIr".</para>
 
     <para>VirtualBox peut présenter de manière transparente du stockage distant
diff --git a/doc/manual/fr_FR/user_Technical.xml b/doc/manual/fr_FR/user_Technical.xml
index a49981c..5b77555 100644
--- a/doc/manual/fr_FR/user_Technical.xml
+++ b/doc/manual/fr_FR/user_Technical.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="TechnicalBackground">
   <title>Sous-bassements techniques</title>
 
@@ -61,7 +61,7 @@
       <para>Par exemple, quand vous créez une machine virtuelle qui s'appelle
       "VM Exemple", vous verrez que VirtualBox crée<orderedlist>
           <listitem>
-            <para>le dossier <computeroutput>$HOME/VirtualBox VMs/VM Exemple/</computeroutput> 
+            <para>le dossier <computeroutput>$HOME/VirtualBox VMs/VM Exemple/</computeroutput>
             et, dans ce dossier,</para>
           </listitem>
 
@@ -78,7 +78,7 @@
       une nouvelle machine virtuelle" comme décrit au <xref linkend="gui-createvm" />. Une fois que
       vous commencez à travailler avec la VM, des fichiers supplémentaires
       apparaîtront&#xA0;: vous trouverez des fichiers journaux dans un
-      sous-dossier qui s'appelle 
+      sous-dossier qui s'appelle
       <computeroutput>Logs</computeroutput>, et une fois que vous aurez pris
       des instantanés, ils apparaîtront dans un sous-dossier
       <computeroutput>Snapshots</computeroutput>. Pour chaque VM, vous pouvez
@@ -99,7 +99,7 @@
       <para>Si vous avez mis à jour vers VirtualBox 4.0 en partant d'une ancienne
       version de VirtualBox, vous aurez probablement vos fichiers de paramètres
       et les disques selon l'organisation du système de fichiers d'alors.</para>
-      
+
       <para>Avant la version 4.0, VirtualBox séparait les fichiers de
       paramètrage de la machine des images de disque virtuel. Les fichiers de
       paramétrage de la machine avaient une extension
@@ -120,7 +120,7 @@
             d'un hôte à l'autre car les fichiers concernés ne se trouvaient pas
             dans le même dossier. De plus, les médias virtuels de toutes les
             machines étaient enregistrés avec un registre global dans le
-            fichier des paramètres transversaux de VirtualBox. 
+            fichier des paramètres transversaux de VirtualBox.
             (<computeroutput>$HOME/.VirtualBox/VirtualBox.xml</computeroutput>).</para>
 
             <para>Pour déplacer une machine sur un autre hôte, il n'était donc
@@ -134,14 +134,14 @@
 
           <listitem>
             <para>Le stockage des images de disque virtuel, qui peuvent beaucoup
-            grossir, sous le répertoire caché 
+            grossir, sous le répertoire caché
             <computeroutput>.VirtualBox</computeroutput> (au moins sur les hôtes
             Linux et Solaris) amenait de nombreux utilisateurs à se demander
             ce qu'était devenu leur espace disque.</para>
           </listitem>
         </orderedlist></para>
 
-      <para>Si les nouvelles VMs créées avec VirtualBox 4.0 ou supérieur 
+      <para>Si les nouvelles VMs créées avec VirtualBox 4.0 ou supérieur
       respectent la nouvelle organisation, pour une compatibilité maximum, les
       anciennes VMs <emphasis>ne sont pas</emphasis> converties en nouvelle
       organisation. Sans cela, les paramètres de la machine seraient immanquablement
@@ -169,9 +169,9 @@
       fichier des paramètres globaux de <computeroutput>VirtualBox.xml</computeroutput>
       pointe vers tous les autres fichiers de configuration, ce qui permet
       de naviguer entre plusieurs configurations de VirtualBox.</para>
-      
+
       <para>VirtualBox stocke essentiellement dans ce répertoire son fichier
-      de paramètres globaux, un autre fichier XML appelé 
+      de paramètres globaux, un autre fichier XML appelé
       <computeroutput>VirtualBox.xml</computeroutput>. Cela comprend des
        options de configuration globales et la liste des machines virtuelles
        enregistrées avec des pointeurs vers leurs fichiers de paramètres XML.
@@ -183,14 +183,14 @@
       fichier de paramètres. Par compatibilité, ce registre de médias existe
       toujours si vous mettez à jour VirtualBox et s'il y a des médias
       issus de machines créées avec une version inférieure à 4.0. Si vous
-      n'avez pas de telles machines, il n'y aura pas de registre de médias 
+      n'avez pas de telles machines, il n'y aura pas de registre de médias
      global&#xA0;; avec VirtualBox 4.0, chaque fichier XML d'une machine a
      son propre registre de médias.</para>
 
       <para>De même, avant VirtualBox 4.0, le dossier "Machines" par défaut
       et le dossier "HardDisks" par défaut se trouvaient dans le répertoire de
       configuration de VirtualBox (par exemple, <computeroutput>$HOME/.VirtualBox/Machines</computeroutput>
-      sur Linux). Si vous mettez à jour à partir d'une version de VirtualBox 
+      sur Linux). Si vous mettez à jour à partir d'une version de VirtualBox
       inférieure à la 4.0, les fichiers de ce répertoire ne sont pas déplacés
       automatiquement afin de ne pas casser la rétro compatibilité.</para>
     </sect2>
@@ -263,7 +263,7 @@
     <sect2>
       <title>Fichiers XML de VirtualBox</title>
 
-      <para>VirtualBox utilise l'XML tant pour les fichiers des paramètres 
+      <para>VirtualBox utilise l'XML tant pour les fichiers des paramètres
       de la machine que pour le fichier de configuration global,
       <computeroutput>VirtualBox.xml</computeroutput>.</para>
 
@@ -288,20 +288,20 @@
           ou sur un slot SATA. Si vous avez un fichier de paramètres d'une
           machine d'une ancienne version et si vous mettez à jour
           VirtualBox vers la 3.1 et si vous déplacez le lecteur DVD de sa
-          position par défaut, on ne peut pas l'exprimer dans l'ancien format 
+          position par défaut, on ne peut pas l'exprimer dans l'ancien format
           des paramètres&#xA0;; le fichier XML de la machine serait écrit dans
-          le nouveau format et une copie de sauvegarde de l'ancien format serait 
+          le nouveau format et une copie de sauvegarde de l'ancien format serait
           gardée.</para>
         </footnote> Dans ces cas-là, VirtualBox sauvegarde le fichier des anciens
         paramètres dans le répertoire de configuration de la machine virtuelle.
-        Si vous avez besoin de revenir à une ancienne version de VirtualBox, 
+        Si vous avez besoin de revenir à une ancienne version de VirtualBox,
         vous devrez recopier à la main ces fichiers de sauvegarde.</para>
 
       <para>Nous ne documentons volontairement pas les spécifications des fichiers
       XML de VirtualBox car nous nous réservons le droit de les modifier à l'avenir.
       Nous vous suggérons donc fortement de ne pas éditer ces fichiers à la main.
       VirtualBox offre un accès complet à ses données de configuration par son
-      outil en ligne de commande <computeroutput>VBoxManage</computeroutput> 
+      outil en ligne de commande <computeroutput>VBoxManage</computeroutput>
       (voir le <xref linkend="vboxmanage" />) et son API (voir le <xref
       linkend="VirtualBoxAPI" />).</para>
     </sect2>
@@ -338,9 +338,9 @@
           <para>Le processus de la GUI,, <computeroutput>VirtualBox</computeroutput>,
           une application client basée sur la bibliothèque multiplateformes
           Qt. Lancée sans l'option <computeroutput>--startvm</computeroutput>,
-          cette application agit comme un gestionnaire de VirtualBox, en 
+          cette application agit comme un gestionnaire de VirtualBox, en
           affichant les VMs et leurs paramètres. Elle communique alors les
-          paramètres et les changements d'état à <computeroutput>VBoxSVC</computeroutput> 
+          paramètres et les changements d'état à <computeroutput>VBoxSVC</computeroutput>
           et elle répercute les changements subis par d'autres moyens comme
           <computeroutput>VBoxManage</computeroutput>.</para>
         </listitem>
@@ -360,7 +360,7 @@
     être utilisés pour mettre en pause la VM en fonction, les autres composants
     reflèteront toujours le changement d'état.</para>
 
-    <para>La GUI de VirtualBox n'est qu'une des nombreuses interfaces (client) 
+    <para>La GUI de VirtualBox n'est qu'une des nombreuses interfaces (client)
     disponibles. La liste complète comprise dans VirtualBox est&#xA0;:<orderedlist>
         <listitem>
           <para><computeroutput>VirtualBox</computeroutput>, l'interface Qt
@@ -382,7 +382,7 @@
         <listitem>
           <para><computeroutput>VBoxHeadless</computeroutput>, une interface de
           VM qui ne fournit pas directement de sortie graphique et d'entrée
-          clavier/souris, 
+          clavier/souris,
           mais qui permet une redirection par VirtualBox Remote Desktop Extension;
           voir <xref linkend="vboxheadless" />.</para>
         </listitem>
@@ -488,7 +488,7 @@
         compatibles PC et sont largement supportés par les systèmes d'exploitation
         invités. Pour les périphériques réseaux et de stockage en particulier,
         il existe plusieurs options pour que les périphériques émulés accèdent
-        au matériel sous-jacent. Ces périphériques sont gérés par 
+        au matériel sous-jacent. Ces périphériques sont gérés par
         PDM.</para>
       </listitem>
 
@@ -533,7 +533,7 @@
     décrit ci-dessus, est difficile. Il existe deux façons de faire cela&#xA0;:<itemizedlist>
         <listitem>
           <para>Depuis 2006, les processeurs Intel et AMD supportent ce qu'on
-          appelle la <emphasis role="bold">"virtualisation matérielle"</emphasis>. 
+          appelle la <emphasis role="bold">"virtualisation matérielle"</emphasis>.
           Cela signifie que ces processeurs peuvent aider VirtualBox à intercepter
           des opérations potentiellement dangereuses que pourrait essayer de
           faire le système d'exploitation invité et ils facilitent la présentation
@@ -554,7 +554,7 @@
         <listitem>
           <para>Contrairement aux autres logiciels de virtualisation, pour
           de nombreux scénari d'utilisation, VirtualBox <emphasis>n'exige pas</emphasis>
-          que les fonctions de virtualisation matérielle soient présentes. 
+          que les fonctions de virtualisation matérielle soient présentes.
           Par des techniques sophistiquées, VirtualBox virtualise beaucoup
           de systèmes d'exploitation invités complets de manière
           <emphasis role="bold">logicielle</emphasis>. Cela signifie que vous
@@ -577,8 +577,8 @@
           <para>Le support des invités 64 bits de VirtualBox (ajouté avec la
           version 2.0) et le multiprocessing (SMP, ajouté avec la version 3.0)
           exigent tous deux l'activation de la virtualisation matérielle (ce n'est
-          tout de même pas une grosse limite vu l'immense majorité des processeurs 
-          64 bits et multi c&#x153;urs actuels incluant lavirtualisation matérielle&#xA0;; 
+          tout de même pas une grosse limite vu l'immense majorité des processeurs
+          64 bits et multi c&#x153;urs actuels incluant lavirtualisation matérielle&#xA0;;
           les exceptions à cette règle étant par exemple les anciens processeurs
           Intel Celeron et AMD Opteron.)</para>
         </listitem>
@@ -587,7 +587,7 @@
     <warning>
       <para>Ne lancez pas d'autres hyperviseurs (produits de virtualisation
       open-source ou propriétaires) en même temps que VirtualBox&#xA0;! Si
-      plusieurs hyperviseurs peuvent, en principe, être <emphasis>installés</emphasis> 
+      plusieurs hyperviseurs peuvent, en principe, être <emphasis>installés</emphasis>
       en parallèle, n'essayez pas de <emphasis>lancer</emphasis> plusieurs
       machines virtuelles à partir d'hyperviseurs concurrents en même temps.
       VirtualBox ne peut pas savoir ce qu'un autre hyperviseur essaie de faire
@@ -621,7 +621,7 @@
     (le mode V86, utilisé par la "DOS Box" de Windows 3.x et d'OS/2 2.x), aucun
     port n'existait pour virtualiser toute l'architecture.</para>
 
-    <para>En théorie, la virtualisation logicielle n'est pas complexe en soi. 
+    <para>En théorie, la virtualisation logicielle n'est pas complexe en soi.
     Outre les quatre niveaux de privilèges ("rings") fournis par le matériel
     (dont en général on n'utilise que deux&#xA0;: ring 0 pour le mode noyau et ring 3
     pour le mode utilisateur), il faut faire la différence entre le "contexte
@@ -639,7 +639,7 @@
     sur la manière d'intercepter ce que fait le noyau de l'invité.</para>
 
     <para>Il y a plusieurs solutions possibles à ces problèmes. Une approche
-    est l'émulation logicielle totale, ce qui implique généralement une recompilation. 
+    est l'émulation logicielle totale, ce qui implique généralement une recompilation.
     A savoir que tout le code qui doit être exécuté par l'invité est analysé,
     transformé sous une forme qui n'autorisera pas l'invité à modifier et à
     voir l'état réel du processeur, lequel l'exécutera simplement. Ce processus
@@ -673,7 +673,7 @@
         <listitem>
           <para>Le code invité ring 3 s'exécute sans modifications, à pleine
           vitesse, autant que possible. Le nombre d'erreurs sera généralement
-          faible (sauf si l'invité autorise l'E/S du port depuis ring 3, 
+          faible (sauf si l'invité autorise l'E/S du port depuis ring 3,
           chose que nous ne pouvons pas faire car nous ne voulons pas que
           l'invité puisse accéder aux ports réels). On parle aussi de "mode brut",
           car le code ring-3 de l'invité s'exécute sans modifications.</para>
@@ -701,7 +701,7 @@
           on y reviendra (dans ces situations, VirtualBox analyse en fait le
           code invité en utilisant son propre désassembleur). De plus, certaines
           instructions privilégiées telles que LIDT doivent être gérées à part.
-          Enfin, tout le code en mode réel ou protégé (comme le code du BIOS, 
+          Enfin, tout le code en mode réel ou protégé (comme le code du BIOS,
           un invité DOS ou un démarrage de système d'exploitation) se lance
           complètement dans un recompilateur.</para>
         </listitem>
@@ -767,12 +767,12 @@
       </orderedlist></para>
 
     <para>Pour corriger ces problèmes de performances et de sécurité, VirtualBox
-    contient un gestionnaire d'analyse et de scan de code 
+    contient un gestionnaire d'analyse et de scan de code
     (Code Scanning and Analysis Manager (CSAM)), qui désassemble le code invité,
     et un gestionnaire de correctifs (Patch Manager (PATM)), qui peut le remplacer
     pendant l'exécution.</para>
 
-    <para>Avant d'exécuter du code ring 0, CSAM le scanne de manière récursive 
+    <para>Avant d'exécuter du code ring 0, CSAM le scanne de manière récursive
     pour trouver des instructions problématiques. PATM le corrige <emphasis>in-situ
     </emphasis>, c'est-à-dire qu'il remplace l'instruction par un passage à la
     mémoire de l'hyperviseur, où un générateur intégré a mis une implémentation
@@ -804,7 +804,7 @@
         </listitem>
 
         <listitem>
-          <para>En mode non-racine, le fonctionnement du processeur est très 
+          <para>En mode non-racine, le fonctionnement du processeur est très
           différent. Il y a toujours quatre niveaux de privilèges et le même
           jeu d'instructions, mais une nouvelle structure, qui s'appelle VMCS
           (Virtual Machine Control Structure), contrôle désormais le fonctionnement
@@ -822,7 +822,7 @@
 
     <para>Les VMCS permettent un contrôle très fin via ce que les invités
     peuvent et ne peuvent pas faire. Par exemple, un hyperviseur peut autoriser
-    un invité à écrire certains bits dans des registres de contrôle protégés, 
+    un invité à écrire certains bits dans des registres de contrôle protégés,
     mais pas dans d'autres. Cela permet une virtualisation efficace dans des cas
     où les invités peuvent être autorisés à écrire des bits de contrôle sans
     gêner l'hyperviseur, tout en les empêchant de modifier les bits de contrôle
@@ -862,7 +862,7 @@
     relativement élevée. Cela pose des problèmes aux périphériques dont l'émulation
     requiet un grand nombre de captures (traps). Par exemple, avec le périphérique
     VGA en mode 16 couleurs, mon seulement tous les accès au port en E/S, mais
-    aussi tous les accès à la mémoire tampon (framebuffer) doivent être 
+    aussi tous les accès à la mémoire tampon (framebuffer) doivent être
     capturés.</para>
   </sect1>
 
@@ -883,10 +883,10 @@
 
           <para>Avec la pagination imbriquée, le matériel fournit un autre niveau
           d'indirection en passant du linéaire aux adresses physiques. Les
-          tables de page fonctionnent comme avant mais les adresses linéaires 
+          tables de page fonctionnent comme avant mais les adresses linéaires
           sont désormais d'abord traduites en adresses physiques de "l'invité"
           et pas directement en adresses physiques. Il existe maintenant un
-          nouveau jeu de registres de pagination sous le mécanisme de pagination 
+          nouveau jeu de registres de pagination sous le mécanisme de pagination
           traditionnel et qui traduit les adresses physiques invitées en adresses
           physiques de l'hôte, qui sont utilisées pour accéder à la mémoire.</para>
 
@@ -896,7 +896,7 @@
           n'intervienne. La pagination imbriquée améliore ainsi substantiellement
           les performances de virtualisation.</para>
 
-          <para>Sur les processeurs AMD, la pagination imbriquée est disponible 
+          <para>Sur les processeurs AMD, la pagination imbriquée est disponible
           depuis l'architecture Barcelona (K10) -- on l'appelle maintenant la
           "rapid virtualization indexing" (RVI). Intel a ajouté le support de
           la pagination imbriquée, qu'ils appellent la "extended page tables" (EPT),
diff --git a/doc/manual/fr_FR/user_ThirdParty.xml b/doc/manual/fr_FR/user_ThirdParty.xml
index 3fc8e5f..bac4f45 100644
--- a/doc/manual/fr_FR/user_ThirdParty.xml
+++ b/doc/manual/fr_FR/user_ThirdParty.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <appendix id="ThirdParty">
   <title>Briques tiers et licences</title>
 
@@ -224,7 +224,7 @@
       </listitem>
 
       <listitem>
-        <para>VirtualBox contient du code du kit de développement EFI  
+        <para>VirtualBox contient du code du kit de développement EFI
           qui est soumis à la licence dans
           <xref linkend="licBsdIntel" xrefstyle="template: %n" /> et</para>
 
@@ -255,7 +255,7 @@
 
         <para>Copyright (C) 2010, 2011 Nokia Corporation et/ou sa/ses filiale(s).</para>
       </listitem>
-      
+
       <listitem>
         <para>VirtualBox contient ces morceaux du noyau FreeBSD soumis à la
         licence dans <xref linkend="licFreeBsd" xrefstyle="template: %n" />.</para>
@@ -311,7 +311,7 @@
           licence dans <xref linkend="licExpat" xrefstyle="template: %n" /> et</para>
         <para>
           Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-          et Clark Cooper; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 
+          et Clark Cooper; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006
           Responsables d'Expat.
         </para>
       </listitem>
@@ -390,7 +390,7 @@
           licence dans <xref linkend="licExpat" xrefstyle="template: %n" /> et</para>
         <para>
           Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
-          et Clark Cooper; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 
+          et Clark Cooper; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006
           Responsables d'Expat.
         </para>
       </listitem>
diff --git a/doc/manual/fr_FR/user_Troubleshooting.xml b/doc/manual/fr_FR/user_Troubleshooting.xml
index f4d0607..630f410 100644
--- a/doc/manual/fr_FR/user_Troubleshooting.xml
+++ b/doc/manual/fr_FR/user_Troubleshooting.xml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="Troubleshooting">
   <title>Dépannage</title>
 
-  <para>Ce chapitre apporte des réponses à des questions fréquemment posées. 
+  <para>Ce chapitre apporte des réponses à des questions fréquemment posées.
   Afin d'améliorer votre expérience utilisateur avec VirtualBox, il est recommandé
-  de lire cette section pour en apprendre plus sur les soucis classiques et 
+  de lire cette section pour en apprendre plus sur les soucis classiques et
   pour avoir les recommandations sur la manière d'utiliser le produit.</para>
 
   <sect1>
@@ -32,7 +32,7 @@
           </listitem>
 
           <listitem>
-            <para>Le problème est-il spécifique à un OS hôte en particulier&#xA0;? 
+            <para>Le problème est-il spécifique à un OS hôte en particulier&#xA0;?
             Les problèmes ne sont généralement pas spécifiques à un OS hôte (car
             la plupart de la base du code de VirtualBox est partagée par toutes
             les plateformes supportées), mais, surtout en matière de réseau et
@@ -48,7 +48,7 @@
             problèmes peuvent être spécifiques à l'une ou l'autre technologie.
             Le modèle exact du processeur peut également marquer une différence
             (même pour la virtualisation logicielle) car différents processeurs
-            supportent différentes fonctions, ce qui peut toucher 
+            supportent différentes fonctions, ce qui peut toucher
             certains aspects du fonctionnement du processeur invité.</para>
           </listitem>
 
@@ -67,7 +67,7 @@
           </listitem>
 
           <listitem>
-            <para>Le problème est-il spécifique aux suppléments invité&#xA0;? 
+            <para>Le problème est-il spécifique aux suppléments invité&#xA0;?
             Dans certains cas, c'est écrit (par exemple un problème de dossiers
             partagés), dans d'autres, cela peut être moins évident (par exemple,
             des problèmes d'affichage). Si le problème est spécifique aux
@@ -169,7 +169,7 @@
       <para>VirtualBox inclut un débogueur de VM intégré, qui peut servir aux
       utilisateurs avancés. Ce débogueur permet d'examiner et, dans une certaine
       mesure, de contrôler l'état de la VM.<warning>
-          <para>L'utilisation du débogueur de VM est à vos risques et périls. 
+          <para>L'utilisation du débogueur de VM est à vos risques et périls.
           Il n'existe pas d'assistance autour, la documentation suivante a été
           rendue disponible uniquement pour les utilisateurs avancés ayant un
           degré de familiarité très élevé du jeu d'instructions d'une machine
@@ -276,7 +276,7 @@
           </listitem>
 
           <listitem>
-            <para><computeroutput>di</computeroutput> -- affiche le 
+            <para><computeroutput>di</computeroutput> -- affiche le
             IDT de l'invité</para>
           </listitem>
 
@@ -322,7 +322,7 @@
 
       <para>Le débogueur de VM supporte le débogage symbolique de base, même si
       les symboles du code invité ne sont pas souvent disponibles. Pour les
-      invités Solaris, la commande <computeroutput>detect</computeroutput> 
+      invités Solaris, la commande <computeroutput>detect</computeroutput>
       détermine automatiquement la version de l'OS invité et localise les symboles
       du noyau dans la mémoire de l'invité. Le débogage symbolique est
       alors disponible. Pour les invités Linux, les commandes <computeroutput>detect</computeroutput>
@@ -343,10 +343,10 @@
       L'invité est en principe occupé et il devrait être vidé des informations
       symboliques que la boucle active du système d'exploitation invité exécute.</para>
 
-      <para>Un autre groupe de commandes du débogueur est 
+      <para>Un autre groupe de commandes du débogueur est
       <computeroutput>info</computeroutput>. L'exécution d
-    <computeroutput>info help</computeroutput> fournit ces 
-      informations d'utilisation complètes. Les commandes d'informations 
+    <computeroutput>info help</computeroutput> fournit ces
+      informations d'utilisation complètes. Les commandes d'informations
       fournissent des données ad-hoc pertinentes sur divers périphériques émulés
       et sur les aspects de la VMM. Il n'y a pas de lignes directrices générales
       sur l'utilisation des commandes <computeroutput>info</computeroutput>,
@@ -448,7 +448,7 @@
       la mémoire telles que les régions MMIO ne sont pas incluses dans le fichier
       c&#x153;ur.</para>
 
-      <para>Vous pouvez trouver les structures de données et les définitions 
+      <para>Vous pouvez trouver les structures de données et les définitions
       pertinentes dans les sources de VirtualBox sous les fichiers en-têtes
       suivants&#xA0;:
       <computeroutput>include/VBox/dbgfcorefmt.h</computeroutput>,
@@ -465,7 +465,7 @@
     <title>Général</title>
 
     <sect2 id="ts_config-periodic-flush">
-      <title>L'invité affiche des erreurs IDE/SATA pour les images 
+      <title>L'invité affiche des erreurs IDE/SATA pour les images
       fichier d'un système de fichiers hôte lent</title>
 
       <para>De temps en temps, certains systèmes de fichiers hôte offrent des
@@ -511,7 +511,7 @@
       dernier vidage. Sa valeur doit être sélectionnée de sorte que les longs
       délais d'écriture occasionnels ne se produisent pas. Comme la bonne valeur
       d'intervalle de vidage dépend des performances de l'hôte et du système de
-      fichiers hôte, savoir la valeur optimum qui fait disparaître le problème 
+      fichiers hôte, savoir la valeur optimum qui fait disparaître le problème
       nécessite d'expérimenter. Des valeurs entre 1000000 et 10000000 (1 to 10 mégaoctets)
       sont un bon point de départ. La diminution de l'intervalle réduit la probabilité
       du problème et les performances d'écriture de l'invité. Le test des valeurs faibles inutilement sera coûteux en
@@ -534,7 +534,7 @@
       ci-dessous sont acceptés uniquement pour les lecteurs de disque. Elles ne
       doivent pas être définies pour des lecteurs DVD.</para>
 
-      <para>Pour activer le vidage des disques IDE, lancez la 
+      <para>Pour activer le vidage des disques IDE, lancez la
       commande suivante&#xA0;:</para>
 
       <screen>VBoxManage setextradata "nom VM" "VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/IgnoreFlush" 0</screen>
@@ -562,7 +562,7 @@
     <sect2 id="ts_host-powermgmt">
       <title>Faibles performances dues à la gestion d'énergie de l'hôte</title>
 
-      <para>Sur certaines plateformes matériel et sur certains systèmes 
+      <para>Sur certaines plateformes matériel et sur certains systèmes
       d'exploitation, les performances de virtualisation sont touchées de manière
       négative par la gestion d'énergie du processeur de l'hôte. Les symptômes
       peuvent être un changement de son dans l'invité ou un comportement erratique
@@ -577,8 +577,8 @@
       paramètre est disponible (tous les systèmes ne supportent pas l'état
       d'énergie C1E). Sur les systèmes Intel, le paramètre <computeroutput>Intel C State</computeroutput>
       devrait être désactivé. La désactivation
-      d'autres paramètres de gestion d'énergie peut aussi améliorer les 
-      performances. Toutefois, vous devez toujours faire un bilan performance 
+      d'autres paramètres de gestion d'énergie peut aussi améliorer les
+      performances. Toutefois, vous devez toujours faire un bilan performance
       consommation d'énergie.</para>
     </sect2>
 
@@ -618,7 +618,7 @@
 
       <para>Cela s'applique en particulier aux paramètres suivants&#xA0;:<itemizedlist>
           <listitem>
-            <para>Vous ne devriez jamais modifier les paramètres ACPI et APIC 
+            <para>Vous ne devriez jamais modifier les paramètres ACPI et APIC
             E/S après avoir installé Windows. Selon la présence de ces fonctions
             matérielles, le programme d'installation de Windows choisit des
             versions spéciales du noyau et des pilotes de périphérique et il
@@ -659,7 +659,7 @@
     <sect2>
       <title>Échecs d'installation de Windows 2000</title>
 
-      <para>En installant des invités Windows 2000, vous pourriez rencontrer 
+      <para>En installant des invités Windows 2000, vous pourriez rencontrer
       les problèmes suivants&#xA0;:</para>
 
       <itemizedlist>
@@ -689,7 +689,7 @@
       de le reproduire aussi sur du matériel physique). Dans un environnement
       virtuel, l'opération peut se faire immédiatement (surtout sur des systèmes
       très rapides avec plusieurs CPU) et l'interruption est signalée
-      plus tôt que sur un système physique. La solution consiste à introduire 
+      plus tôt que sur un système physique. La solution consiste à introduire
       un délai artificiel avant d'envoyer de telles interruptions. Vous pouvez
       configurer ce délai pour une VM avec la commande suivante&#xA0;:</para>
 
@@ -749,7 +749,7 @@
 
       <para>Les performances d'accès aux dossiers partagés depuis un invité
       Windows pourraient diminuer du fait des délais de résolution du service
-      de domaine des dossiers partagés de VirtualBox. Pour corriger ces délais, 
+      de domaine des dossiers partagés de VirtualBox. Pour corriger ces délais,
       ajoutez les entrées suivante au fichier <computeroutput>\windows\system32\drivers\etc\lmhosts</computeroutput>
       de l'invité Windows&#xA0;:</para>
 
@@ -775,8 +775,8 @@
 
       <para><screen>VBoxManage setextradata "nom VM" "VBoxInternal/USB/HidMouse/0/Config/CoordShift" 0</screen></para>
 
-      <para>Pour restaurer le comportement par défaut, supprimez la clé ou 
-      réglez sa valeur à 1. 
+      <para>Pour restaurer le comportement par défaut, supprimez la clé ou
+      réglez sa valeur à 1.
       </para>
     </sect2>
 
@@ -821,7 +821,7 @@
           Direct3D 8.0 et Direct3D 9.0. Il résulte de la corruption des fichiers
           système ci-dessus que ces applications ne fonctionneront plus. Voir
           ci-dessous pour une guide pas à pas sur la restauration des fichiers
-          systèmes d'origine 
+          systèmes d'origine
           d3d8.dll et d3d9.dll si l'installeur des suppléments invité de
           VirtualBox a averti que ces fichiers étaient incorrects ou en cas de
           problème en exécutant les applications Direct3D.</para>
@@ -829,7 +829,7 @@
       <note><para>À partir de Windows 7 le bureau 3D (aka Aero) utilise DirectX 10
           pour être affiché afin que les fichiers d3d8.dll et d3d9.dll corrompus
           n'aient aucun effet sur la session en cours.</para></note>
-          
+
       <para>C'est pourquoi la détection d'une telle corruption de fichier n'est
       pas considérée comme fatale pour l'installation basique de Direct3D sur
       tous les invités Windows supportés et pour une installation de WDDM Direct3D
@@ -844,7 +844,7 @@
         </listitem>
 
         <listitem>
-          <para>Parcourez le CD d'installation, par exemple E:\i386 (ou AMD64 
+          <para>Parcourez le CD d'installation, par exemple E:\i386 (ou AMD64
           pour la version 64 bits)</para>
         </listitem>
 
@@ -878,7 +878,7 @@
         </listitem>
       </orderedlist>
 
-      <para>Extraction de d3d8 et de d3d9.dll du CD d'installation de Vista/Windows7 ou 
+      <para>Extraction de d3d8 et de d3d9.dll du CD d'installation de Vista/Windows7 ou
       des images du pack Service</para>
 
       <orderedlist>
@@ -958,7 +958,7 @@
       correctement dans VirtualBox, ce qui fait planter la VM au démarrage&#xA0;:<itemizedlist>
           <listitem>
             <para>La version du noyau Linux 2.6.18 (et certaines versions 2.6.17)
-            ont introduit un conflit de condition (race condition) qui peut 
+            ont introduit un conflit de condition (race condition) qui peut
             provoquer un plantage au démarrage dans VirtualBox. Merci d'utiliser
             une version du noyau 2.6.19 ou supérieur.</para>
           </listitem>
@@ -969,7 +969,7 @@
             message suivant&#xA0;:<screen>Kernel panic - not syncing: IO-APIC + timer doesn't work!  Boot with
 apic=debug and send a report.  Then try booting with the 'noapic' option</screen></para>
 
-            <para>Si vous voyez ce message, soit désactivez la virtualisation 
+            <para>Si vous voyez ce message, soit désactivez la virtualisation
             matérielle, soit l'APIC E/S (voir <xref
             linkend="settings-system" />), ou mettez à jour l'invité vers un
             noyau plus récent.<footnote>
@@ -1021,12 +1021,12 @@ vérifier si le processus qui devrait le fournir est en fonction.</para>
           lors du démarrage, tant dans un environnement virtualisé que physique.
       </para>
       <para>
-          La solution recommandée est de mettre à jour vers au moins Solaris 10 5/08 
+          La solution recommandée est de mettre à jour vers au moins Solaris 10 5/08
           ("S10U5"). D'autres solutions consistent à obliger Solaris à toujours
           démarrer le noyau 32 bits ou à appliquer un correctif au bogue 6574102
           (tant que Solaris utilise le noyau 32 bits).
       </para>
-    
+
     </sect2>
   </sect1>
 
@@ -1114,7 +1114,7 @@ vérifier si le processus qui devrait le fournir est en fonction.</para>
       avec un initiateur iSCSI (comme Microsoft iSCSI Initiator) en fonction
       sur l'hôte. Cela vient d'un défaut dans le composant du gestionnaire de cache
       de Windows et cela donne une réponse lente du système hôte, de plusieurs
-      minutes, suivies d'un message d'erreur "Delayed Write Failed" (délai 
+      minutes, suivies d'un message d'erreur "Delayed Write Failed" (délai
       d'écriture différé) dans la barre système ou dans une fenêtre de message
       distincte. L'invité est bloqué pendant ce temps et il peut afficher des
       messages d'erreur ou devenir instable.</para>
@@ -1146,7 +1146,7 @@ VirtualBox</screen>
             <computeroutput>0x8004a029</computeroutput> retourné à l'installation
             du composant réseau NetFlt&#xA0;:<screen>VBoxNetCfgWinInstallComponent: Install failed, hr (0x8004a029)</screen></para>
 
-            <para>Vous pouvez essayer d'augmenter le nombre de filtre maximum 
+            <para>Vous pouvez essayer d'augmenter le nombre de filtre maximum
             dans le registre Windows avec la clé suivante&#xA0;:<screen>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\MaxNumFilters</screen>Le nombre maximum autorisé est de 14. Après le redémarrage, essayez
             de réinstaller VirtualBox.</para>
           </listitem>
@@ -1155,7 +1155,7 @@ VirtualBox</screen>
             <para>Le cache INF est corrompu. Dans ce cas, le journal d'installation
             (<computeroutput>%windir%\inf\setupapi.log</computeroutput> sur XP
             ou <computeroutput>%windir%\inf\setupapi.dev.log</computeroutput>
-            sur Vista ou supérieur) indiquera normalement un échec pour 
+            sur Vista ou supérieur) indiquera normalement un échec pour
             trouver le paquet du pilote adapté aux composants
             <computeroutput>sun_VBoxNetFlt</computeroutput> ou
             <computeroutput>sun_VBoxNetFltmp</computeroutput>. La solution est
@@ -1215,14 +1215,14 @@ VirtualBox</screen>
     <sect2>
       <title>Lecteur CD/DVD non trouvé sur l'hôte Linux (distributions anciennes)</title>
 
-      <para>Sur les anciennes distributions Linux, si votre lecteur CD/DVD 
+      <para>Sur les anciennes distributions Linux, si votre lecteur CD/DVD
       a un autre nom, il se peut que VirtualBox soit incapable de le trouver.
       Sur les hôtes Linux anciens, VirtualBox suit les étapes suivantes pour
       trouver vos lecteurs CD/DVD&#xA0;:</para>
 
       <para><orderedlist>
           <listitem>
-            <para>VirtualBox examine si la variable d'environnement 
+            <para>VirtualBox examine si la variable d'environnement
             <computeroutput>VBOX_CDROM</computeroutput> est définie (voir ci-dessous).
             Si tel est le cas, VirtualBox ne fait pas les vérifications suivantes.</para>
           </listitem>
@@ -1271,8 +1271,8 @@ VirtualBox</screen>
       possible que vos efforts pour accéder à l'écriture sur CD/DVD échouent et
       n'aboutissent qu'à des messages d'erreur du noyau invité (pour les invités
       Linux) ou à des messages d'erreur de l'application (pour les invités
-      Windows). VirtualBox effectue les vérifications de cohérence habituelles 
-      quand une VM est allumée (en particulier, il quitte avec un message d'erreur 
+      Windows). VirtualBox effectue les vérifications de cohérence habituelles
+      quand une VM est allumée (en particulier, il quitte avec un message d'erreur
       si l'utilisateur qui démarre la VM ne peut pas écrire sur le périphérique
       du graveur CD/DVD), mais il ne peut pas détecter toutes les mauvaises
       configurations. La configuration de l'OS hôte et de l'invité requise n'est
@@ -1294,13 +1294,13 @@ VirtualBox</screen>
       2.6 des débuts. De nombreuses distributions Linux chargent ce module à
       chaque fois que le graveur CD/DVD est détecté dans le système, même si
       le noyau supporterait des graveurs CD/DVD sans le module. VirtualBox supporte
-      l'utilisation des fichiers de périphérique IDE (comme 
+      l'utilisation des fichiers de périphérique IDE (comme
       <literal>/dev/hdc</literal>), pourvu que le noyau le supporte et que le
       module <literal>ide-scsi</literal> ne soit pas chargé.</para>
 
-      <para>Des règles similaires (sauf que dans l'invité, le graveur CD/DVD 
+      <para>Des règles similaires (sauf que dans l'invité, le graveur CD/DVD
       est toujours un périphérique IDE) s'appliquent à la configuration de
-      l'invité. Ce paramétrage étant très classique, il est probable que la 
+      l'invité. Ce paramétrage étant très classique, il est probable que la
       configuration par défaut de l'invité fonctionne comme prévu.</para>
     </sect2>
 
@@ -1308,9 +1308,9 @@ VirtualBox</screen>
       <title>Problème de l'IPC VBoxSVC</title>
 
       <para>Sur Linux, VirtualBox utilise une version personnalisée de XPCOM
-      de Mozilla (modèle d'objet du composant multi-plateformes) pour la 
+      de Mozilla (modèle d'objet du composant multi-plateformes) pour la
       communication inter et intra processus (IPC). Le processus
-      <computeroutput>VBoxSVC</computeroutput> sert de hub de communication 
+      <computeroutput>VBoxSVC</computeroutput> sert de hub de communication
       entre plusieurs processus de VirtualBox et il maintient la configuration
       globale, c'est-à-dire la base de données XML. Au démarrage d'un composant
       de VirtualBox, les processus <computeroutput>VBoxSVC</computeroutput> et
@@ -1334,7 +1334,7 @@ VirtualBox</screen>
       <title>L'USB ne fonctionne pas</title>
 
       <para>Si l'USB ne fonctionne pas sur votre hôte Linux, assurez-vous que
-      l'utilisateur actuel fait partie du groupe 
+      l'utilisateur actuel fait partie du groupe
       <computeroutput>vboxusers</computeroutput>. Sur les hôtes anciens, vous
       devez vous assurer que l'utilisateur a le droit d'accéder au système de
       fichiers USB (<computeroutput>usbfs</computeroutput>), sur lequel s'appuie
@@ -1363,7 +1363,7 @@ none     /proc/bus/usb     usbfs      devgid=85,devmode=664    0    0</screen>Re
       <para>Les distributions sont très créatives sur le script qui monte le
       système de fichiers <computeroutput>usbfs</computeroutput>. Parfois,
       la commande est cachée à des endroits improbables. Pour SuSE 10.0, la
-      commande de montage fait partie du fichier de configuration udev 
+      commande de montage fait partie du fichier de configuration udev
       <computeroutput>/etc/udev/rules.d/50-udev.rules</computeroutput>. Comme
       cette distribution n'a aucun groupe d'utilisateurs appelé
       <computeroutput>usb</computeroutput>, vous pouvez utiliser par exemple le
@@ -1379,7 +1379,7 @@ none     /proc/bus/usb     usbfs      devgid=85,devmode=664    0    0</screen>Re
 
       <para>Debian Etch a sa commande de montage dans
       <computeroutput>/etc/init.d/mountkernfs.sh</computeroutput>. Cette
-      distribution n'ayant pas de groupe <computeroutput>usb</computeroutput>, 
+      distribution n'ayant pas de groupe <computeroutput>usb</computeroutput>,
       la solution la plus simple est d'autoriser tous les membres du
       groupe <computeroutput>vboxusers</computeroutput> à accéder au sous-système
       USB. Modifiez la ligne <screen>domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev</screen>
@@ -1408,7 +1408,7 @@ none     /proc/bus/usb     usbfs      devgid=85,devmode=664    0    0</screen>Re
       un système Linux (disons 20 VMs de 1Go de RAM chacune), les VMs supplémentaires
       pourraient ne pas réussir à démarrer avec une erreur du noyau disant que
       le pool vmalloc est dépassé et que vous devriez l'agrandir. Le message
-      d'erreur vous dit aussi de spécifier 
+      d'erreur vous dit aussi de spécifier
       <computeroutput>vmalloc=256MB</computeroutput> dans votre liste des
       paramètres du noyau. Si l'ajout de ce paramètre à votre configuration de
       GRUB ou de LILO empêche le noyau de démarrer (avec un message d'erreur
diff --git a/doc/manual/fr_FR/user_VBoxManage.xml b/doc/manual/fr_FR/user_VBoxManage.xml
index 6b3e48a..1c4177a 100644
--- a/doc/manual/fr_FR/user_VBoxManage.xml
+++ b/doc/manual/fr_FR/user_VBoxManage.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="vboxmanage">
   <title>VBoxManage</title>
 
@@ -10,7 +10,7 @@
     <para>Comme brièvement indiqué au <xref linkend="frontends" />, VBoxManage
     est l'interface en ligne de commande de VirtualBox. Avec elle, vous pouvez
     contrôler complètement VirtualBox depuis la ligne de commandes
-    de votre système d'exploitation hôte. 
+    de votre système d'exploitation hôte.
     VBoxManage supporte toutes les fonctionnalités auxquelles vous donne accès
     l'interface graphique, mais il supporte bien plus que ça. Il ouvre vraiment
     toutes les fonctions du moteur de virtualisation, même celles auxquelles on
@@ -31,7 +31,7 @@
       </itemizedlist></para>
 
     <para>Il faut avoir en tête deux choses en utilisant
-    <computeroutput>VBoxManage</computeroutput>&#xA0;: D'abord, 
+    <computeroutput>VBoxManage</computeroutput>&#xA0;: D'abord,
     <computeroutput>VBoxManage</computeroutput> doit toujours être utilisé
     avec des "sous-commandes" spécifiques telles que "list" ou "createvm" ou
     "startvm". Toutes les sous-commandes supportées par
@@ -44,7 +44,7 @@
 
     <itemizedlist>
       <listitem>
-        <para>Vous pouvez spécifier le nom de la VM comme il s'affiche dans 
+        <para>Vous pouvez spécifier le nom de la VM comme il s'affiche dans
         l'interface graphique de VirtualBox. Remarquez que si ce nom contient des
         espaces, vous devez l'entourer de guillemets (comme cela est toujours
         le cas avec les arguments d'une ligne de commande contenant des espaces).</para>
@@ -86,7 +86,7 @@ Virtual machine 'SUSE 10.2' is created.
 UUID: c89fc351-8ec6-4f02-a048-57f4d25288e5
 Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE 10.2.xml'</screen>
 
-        <para>Comme vous pouvez le voir dans la sortie ci-dessus, une nouvelle 
+        <para>Comme vous pouvez le voir dans la sortie ci-dessus, une nouvelle
         machine virtuelle a été créée avec le nouvel UUID et un nouveau fichier
         XML de paramètres.</para>
       </listitem>
@@ -139,7 +139,7 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
 
     <para>Quand vous lancez VBoxManage sans paramètres ou si vous entrez une ligne de
     commande invalide, le diagramme de syntaxe ci-dessous s'affichera. Remarquez
-    que la sortie sera légèrement différente selon la plateforme hôte&#xA0;; 
+    que la sortie sera légèrement différente selon la plateforme hôte&#xA0;;
     en cas de doute, vérifiez la sortie de <computeroutput>VBoxManage</computeroutput>
     pour voir les commandes disponibles sur votre hôte en particulier.</para>
 
@@ -157,7 +157,7 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
     <para>
       <itemizedlist>
         <listitem>
-          <para><computeroutput>--version</computeroutput>&#xA0;: affiche la 
+          <para><computeroutput>--version</computeroutput>&#xA0;: affiche la
           version de cet outil et quitte.</para>
         </listitem>
         <listitem>
@@ -175,13 +175,13 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
       </itemizedlist>
       Le mot de passe des paramètres est utilisé pour certains paramètres ayant
       besoin d'être stockés et chiffrés pour des raisons de sécurité. Pour le moment,
-      le seul paramètre chiffré est l'initiateur secret iSCSI (voir 
+      le seul paramètre chiffré est l'initiateur secret iSCSI (voir
       <xref linkend="vboxmanage-storageattach" /> pour les détails). Tant
       qu'aucun mot de passe des paramètres n'a été spécifié, ces informations
       sont stockées en <emphasis role="bold">texte brut</emphasis>. Après avoir
       utilisé l'option <computeroutput>--settingspw|--settingspwfile</computeroutput>
       une fois, il faut toujours l'utiliser, sans quoi le paramètre chiffré ne peut pas
-      être chiffré. 
+      être chiffré.
     </para>
   </sect1>
 
@@ -222,7 +222,7 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
           <para><computeroutput>hostdvds</computeroutput>,
           <computeroutput>hostfloppies</computeroutput>, listent respectivement
           les lecteurs DVD, amovibles, les interfaces réseaux bridgées et
-          host-only sur l'hôte, ainsi que le nom utilisé pour y accéder depuis 
+          host-only sur l'hôte, ainsi que le nom utilisé pour y accéder depuis
           VirtualBox.</para>
         </listitem>
 
@@ -258,8 +258,8 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
           <para><computeroutput>hdds</computeroutput>,
           <computeroutput>dvds</computeroutput> et
           <computeroutput>floppies</computeroutput> vous donnent des informations
-          sur les images de disque virtuel actuellement utilisées par VirtualBox, 
-          y compris leurs paramètres, leurs identifiants uniques (UUIDs) 
+          sur les images de disque virtuel actuellement utilisées par VirtualBox,
+          y compris leurs paramètres, leurs identifiants uniques (UUIDs)
           associés par VirtualBox et tous leurs fichiers associés. C'est l'équivalent
           ligne de commandes du gestionnaire de médias virtuels&#xA0;; voir <xref
           linkend="vdis" />.</para>
@@ -267,7 +267,7 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
 
         <listitem>
           <para><computeroutput>usbhost</computeroutput> donne des informations
-          sur les périphériques USB attachés à l'hôte, en particulier des 
+          sur les périphériques USB attachés à l'hôte, en particulier des
           informations utiles pour construire des filtres USB et s'ils sont actuellement
           utilisés par l'hôte.</para>
         </listitem>
@@ -281,7 +281,7 @@ Settings file: '/home/nomutilisateur/.config/VirtualBox/Machines/SUSE 10.2/SUSE
 
         <listitem>
           <para><computeroutput>systemproperties</computeroutput> affiche des
-          paramètres globaux de VirtualBox, tels que la RAM minimum et maximum 
+          paramètres globaux de VirtualBox, tels que la RAM minimum et maximum
           de l'invité et la taille du disque dur virtuel, les paramètres du
           dossier et la bibliothèque d'authentification actuellement utilisée.</para>
         </listitem>
@@ -378,7 +378,7 @@ Statistics update:  disabled</screen></para>
     enregistrée dans VirtualBox et elle ne peut pas avoir de disques durs ou
     amovibles attachés. Il est recommandé de mettre le fichier de définition
     dans le répertoire des machines avant de l'enregistrer.<note>
-        <para>Lors de la création d'une nouvelle machine virtuelle avec 
+        <para>Lors de la création d'une nouvelle machine virtuelle avec
         <computeroutput>VBoxManage createvm</computeroutput> (voir ci-dessous),
         vous pouvez spécifier directement l'option
         <computeroutput>--register</computeroutput> pour éviter de devoir
@@ -419,7 +419,7 @@ Statistics update:  disabled</screen></para>
   <sect1 id="vboxmanage-createvm">
     <title>VBoxManage createvm</title>
 
-    <para>Cette commande crée un nouveau fichier de définition de machine virtuelle 
+    <para>Cette commande crée un nouveau fichier de définition de machine virtuelle
     XML.</para>
 
     <para>Le paramètre <computeroutput>--name <name></computeroutput> est
@@ -499,7 +499,7 @@ Statistics update:  disabled</screen></para>
           <listitem>
             <para><computeroutput>--acpi on|off</computeroutput>&#xA0;;
             <computeroutput>--ioapic on|off</computeroutput>&#xA0;: Ces deux éléments
-            déterminent si la VM devrait supporter respectivement l'ACPI et 
+            déterminent si la VM devrait supporter respectivement l'ACPI et
             l'APIC I/O&#xA0;; voir <xref linkend="settings-motherboard" /> pour
             des détails.</para>
           </listitem>
@@ -517,7 +517,7 @@ Statistics update:  disabled</screen></para>
             Ceci définit le nombre de processeurs virtuels de la machine virtuelle
             (voir <xref linkend="settings-processor" />). Si le branchement
             à chaud des processaurs est activé (voir ci-dessous), ceci définit
-            le nombre <emphasis>maximum</emphasis> de processeurs virtuels 
+            le nombre <emphasis>maximum</emphasis> de processeurs virtuels
             qu'on peut brancher dans les machines virtuelles.</para>
           </listitem>
 
@@ -582,7 +582,7 @@ Statistics update:  disabled</screen></para>
 
           <listitem>
             <para><computeroutput>--hwvirtex on|off</computeroutput>&#xA0;: Ceci
-            active ou désactive l'utilisation des extensions du matériel de 
+            active ou désactive l'utilisation des extensions du matériel de
             virtualisation (Intel VT-x ou AMD-V) dans le processeur de votre système
             hôte&#xA0;; voir <xref linkend="hwvirt" />.</para>
           </listitem>
@@ -615,7 +615,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <para><computeroutput>--vtxvpid on|off</computeroutput>&#xA0;: Si
             la virtualisation matérielle est activée, pour Intel VT-x seulement,
             ce paramètre supplémentaire active ou désactive l'utilisation de la
-            fonction TLB taggçe (VPID) du processeur de votre système hôte&#xA0;; 
+            fonction TLB taggçe (VPID) du processeur de votre système hôte&#xA0;;
             voir <xref linkend="hwvirt" />.</para>
           </listitem>
 
@@ -626,7 +626,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             sans restriction pour faire tourner votre invité.</para>
           </listitem>
           <listitem>
-            <para><computeroutput>--accelerate3d on|off</computeroutput>&#xA0;: 
+            <para><computeroutput>--accelerate3d on|off</computeroutput>&#xA0;:
             Ceci active, si vous avez installé les suppléments invité, la disponibilité
             de l'accélération 3D&#xA0;; voir <xref
             linkend="guestadd-3d" />.</para>
@@ -700,7 +700,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
 
           <listitem>
             <para><computeroutput>--guestmemoryballoon
-            <taille></computeroutput> définit la taille par défaut de la 
+            <taille></computeroutput> définit la taille par défaut de la
             mémoire du ballon de l'invité c'est-à-dire la mémoire affectée
             par les suppléments invité de VirtualBox à partir du système d'exploitation
             invité et rendue à l'hyperviseur pour être réutilisée par d'autres
@@ -716,7 +716,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <computeroutput>--lpt</computeroutput>. Cette fonction est spécifique
             au système d'exploitation.</para>
             </listitem>
-            
+
             <listitem>
               <para><computeroutput>--lpt<1-N>
               <base E/S> <IRQ></computeroutput> Spécifie l'adresse
@@ -732,7 +732,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <para><computeroutput>--defaultfrontend
             default|<nom></computeroutput>&#xA0;: Ceci vous permet de
             spécifier l'interface par défaut qui sera utilisée au démarrage de
-            cette VM&#xA0; voir 
+            cette VM&#xA0; voir
             <xref linkend="vboxmanage-startvm" /> pour des détails.</para>
           </listitem>
         </itemizedlist></para>
@@ -767,7 +767,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
           <listitem>
             <para><computeroutput>--nictype<1-N>
             Am79C970A|Am79C973|82540EM|82543GC|82545EM|virtio</computeroutput>&#xA0;:
-            Cela vous permet, pour chacune des cartes réseaux virtuelles de la VM, de 
+            Cela vous permet, pour chacune des cartes réseaux virtuelles de la VM, de
             spécifier le matériel réseau que VirtualBox présente à l'invité&#xA0;;
             voir <xref linkend="nichardware" />.</para>
           </listitem>
@@ -817,7 +817,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
           <listitem>
             <para><computeroutput>--intnet<1-N>
             network</computeroutput>&#xA0;: Si le réseau interne a été activé
-            pour une carte réseau virtuelle (voir l'option 
+            pour une carte réseau virtuelle (voir l'option
             <computeroutput>--nic</computeroutput> ci-dessus&#xA0;; sinon ce
             paramètre n'a aucun effet), utilisez cette option pour spécifier le
             nom du réseau interne (voir <xref
@@ -837,7 +837,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <pilote fondation></computeroutput>&#xA0;: Si le réseau
             générique a été activé pour une carte réseau virtuelle (voir l'option
             <computeroutput>--nic</computeroutput> ci-dessus&#xA0;; sinon ce paramètre
-            n'a aucun effet), ce mode vous permet d'accéder à des sous-modes 
+            n'a aucun effet), ce mode vous permet d'accéder à des sous-modes
             réseaux rarement utilisés, tels que le réseau VDE ou le tunnel UDP.
             </para>
           </listitem>
@@ -847,7 +847,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <nomparam>="paramvaleur"</computeroutput>&#xA0;:
             Cette option, associée avec "nicgenericdrv", vous permet de
             passer des paramètres aux backends (fondations) réseaux rarement utilisées.</para><para>
-            Ces paramètres sont des fondations spécifiques au moteur et sont 
+            Ces paramètres sont des fondations spécifiques au moteur et sont
             différents entre les pilotes du tunnel UDP et ceux de la fondation
             VDE. Par exemple,merci de voir <xref linkend="network_udp_tunnel" />.
             </para>
@@ -887,7 +887,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
 
             <listitem>
               <para><computeroutput>--nattftpfile<1-N>
-              <fichierdémarrage></computeroutput>&#xA0;: Cette option 
+              <fichierdémarrage></computeroutput>&#xA0;: Cette option
               définit le fichier de démarrage TFT (merci de voir <xref linkend="nat-adv-tftp" />
               pour des détails).</para>
             </listitem>
@@ -931,7 +931,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <listitem>
               <para><computeroutput>--nataliasmode<1-N>
               default|[log],[proxyonly],[sameports]</computeroutput>&#xA0;: Cette
-              option définit le comportement du c&#x153;ur du moteur NAT&#xA0;: 
+              option définit le comportement du c&#x153;ur du moteur NAT&#xA0;:
               log - active la journalisation, proxyonly - switch les modes d'alias
               pour rendre NAT transparent, sameports renforce le moteur NAT pour
               envoyer des paquets via le même port qu'ils arrivent, default -
@@ -960,7 +960,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <para><computeroutput>--uartmode<1-N>
             <arg></computeroutput>&#xA0;: Ce paramètre contrôle la façon
             dont VirtualBox se connecte à un port série virtuel donné (on la
-            configurait jadis avec l'option 
+            configurait jadis avec l'option
             <computeroutput>--uartX</computeroutput>, voir ci-dessus) sur l'hôte
             sur lequel fonctionne la machine virtuelle. Comme décrit en détail
             au <xref linkend="serialports" />, pour chaque port, vous pouvez
@@ -968,14 +968,14 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             options suivantes&#xA0;:<itemizedlist>
                 <listitem>
                   <para><computeroutput>disconnected</computeroutput>&#xA0;: Même
-                  si le port série apparaît dans l'invité, il ne sert à rien -- 
+                  si le port série apparaît dans l'invité, il ne sert à rien --
                   comme un vrai port COM sans câble.</para>
                 </listitem>
 
                 <listitem>
                   <para><computeroutput>server
                   <pipename></computeroutput>&#xA0;: Sur un hôte Windows,
-                  ceci dit à VirtualBox de créer un tuyau nommé sur l'hôte, 
+                  ceci dit à VirtualBox de créer un tuyau nommé sur l'hôte,
                   appelé <computeroutput><pipename></computeroutput> et de
                   connecter le port série virtuel dessus. Remarquez que Windows
                   exige que le nom d'un tuyau nommé commence par
@@ -998,9 +998,9 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
                   Si, au lieu de celui ci-dessus, le nom du périphérique du port
                   série matériel de l'hôte est spécifié, le port série virtuel est
                   connecté à ce port matériel. Sur un hôte Windows, le nom du
-                  périphérique sera un port COM tel que 
+                  périphérique sera un port COM tel que
                   <computeroutput>COM1</computeroutput>&#xA0;; sur un hôte Linux,
-                  le nom du périphérique ressemblera à 
+                  le nom du périphérique ressemblera à
                   <computeroutput>/dev/ttyS0</computeroutput>. Cela vous permet
                   de "brancher" un vrai port série à une machine virtuelle.</para>
                 </listitem>
@@ -1008,7 +1008,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
           </listitem>
 
           <listitem>
-            <para><computeroutput>--audio none|null|oss</computeroutput>&#xA0;: 
+            <para><computeroutput>--audio none|null|oss</computeroutput>&#xA0;:
             Avec cette option, vous pouvez définir si la VM supporte le son.</para>
           </listitem>
 
@@ -1016,7 +1016,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             <para><computeroutput>--clipboard
             disabled|hosttoguest|guesttohost|bidirectional</computeroutput>&#xA0;:
             Avec ce paramètre, vous pouvez sélectionner si le presse-papier du
-            système d'exploitation invité ou de l'hôte doit être partagé avec 
+            système d'exploitation invité ou de l'hôte doit être partagé avec
             l'hôte ou l'invité et comment ; voir
             <xref linkend="generalsettings" />. Cela exige que les suppléments
             invité soient installés dans la machine virtuelle.</para>
@@ -1053,11 +1053,11 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
     <sect2 id="vboxmanage-modifyvm-vrde">
       <title>Paramètres de la machine distante</title>
 
-      <para>Les paramètres suivants concernant le comportement de la machine 
+      <para>Les paramètres suivants concernant le comportement de la machine
       distante sont disponibles avec <computeroutput>VBoxManage
       modifyvm</computeroutput>&#xA0;:<itemizedlist>
           <listitem>
-            <para><computeroutput>--vrde on|off</computeroutput>&#xA0;: Avec 
+            <para><computeroutput>--vrde on|off</computeroutput>&#xA0;: Avec
             l'interface graphique de VirtualBox, ceci active ou désactive le serveur
             VirtualBox remote desktop extension (VRDE). Remarquez que si vous
             utilisez <computeroutput>VBoxHeadless</computeroutput> (voir
@@ -1067,7 +1067,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
           <listitem>
             <para><computeroutput>--vrdeport
             default|<ports></computeroutput>&#xA0;: Un port ou une plage
-            de ports que le serveur VRDE peut sonder&#xA0;; "default" ou "0" 
+            de ports que le serveur VRDE peut sonder&#xA0;; "default" ou "0"
             signifient le port 3389, le port RDP standard. Vous pouvez spécifier
             une liste de ports ou de plages de ports séparée par des virgules.
             Utilisez un tiret entre deux numéros de ports pour spécifier une plage.
@@ -1080,7 +1080,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
 
           <listitem>
             <para><computeroutput>--vrdeaddress <adresse IP
-            ></computeroutput>&#xA0;: L'adresse IP de l'interface réseau de 
+            ></computeroutput>&#xA0;: L'adresse IP de l'interface réseau de
             l'hôte que sondera le serveur VRDE. Si vous la spécifiez, le serveur
             n'acceptra les connexions que sur l'interface de l'hôte spécifiée.</para>
             <para>On peut utiliser ce paramètre pour indiquer si le serveur
@@ -1152,7 +1152,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             ce paramètre, vous activez ou désactivez l'attente par une machine
             d'une requête de téléportation venant du réseau lorsqu'elle est
             démarrée. Si elle est activée, quand on démarre la machine, cela ne
-            démarre pas la machine virtuelle comme cela est normalement le cas, 
+            démarre pas la machine virtuelle comme cela est normalement le cas,
             mais cela attend qu'une requête de téléportation arrive à l'adresse
             listée avec les deux options suivantes.</para>
           </listitem>
@@ -1181,7 +1181,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
 
           <listitem>
             <para><computeroutput>--teleporterfichier_mot_de_passe
-            <mot_de_passe></computeroutput>&#xA0;: si vous donnez cet 
+            <mot_de_passe></computeroutput>&#xA0;: si vous donnez cet
             argument facultatif, la requête de téléportation ne réussira que si
             la machine source spécifie le même mot de passe que celui spécifié
             dans le fichier donné avec cette commande. Utilisez
@@ -1197,7 +1197,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
             présenté par VirtualBox au système d'exploitation invité. Il faut
             l'exécuter à la fois sur la machine source et cible
             impliquées dans la téléportation et cela modifiera ce que l'invité
-            verra quand il exécutera l'instruction machine 
+            verra quand il exécutera l'instruction machine
             <computeroutput>CPUID</computeroutput>. Cela peut aider des applications
             présupposant à tord la présence de
             certaines capacités du processeur. La signification des paramètres
@@ -1211,7 +1211,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
   <sect1 id="vboxmanage-clonevm">
     <title>VBoxManage clonevm</title>
 
-    <para>Cette commande crée une copie complète ou liée d'une 
+    <para>Cette commande crée une copie complète ou liée d'une
     machine virtuelle existante.</para>
 
     <para>La sous-commande <computeroutput>clonevm</computeroutput> prend
@@ -1222,12 +1222,12 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
     <itemizedlist>
        <listitem>
            <para><computeroutput>--snapshot <uuid>|<nom></computeroutput>&#xA0;:
-            Sélectionne un instantané spécifique auquel se rapporte le processus 
+            Sélectionne un instantané spécifique auquel se rapporte le processus
             de clonage. Par défaut, c'est à l'état courant qu'il se réfère.</para>
        </listitem>
        <listitem>
            <para><computeroutput>--mode machine|machineandchildren|all</computeroutput>&#xA0;:
-           Sélectionne le mode de clonage. Si 
+           Sélectionne le mode de clonage. Si
            <computeroutput>machine</computeroutput> est sélectionnée (comme par
            défaut), l'état actuel de la VM sans instantané est cloné. En mode
            <computeroutput>machineandchildren</computeroutput>, l'instantané
@@ -1253,7 +1253,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
            sont renommées.</para>
        </listitem>
        <listitem>
-           <para><computeroutput>--name <name></computeroutput>&#xA0;: 
+           <para><computeroutput>--name <name></computeroutput>&#xA0;:
            Sélectionne un nouveau nom pour la nouvelle machine virtuelle. Par défaut,
            il s'agit de "Nom d'origine Clone".</para>
        </listitem>
@@ -1282,7 +1282,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
 
     <para>Cette commande importe un applicatif virtuel au format OVF en copiant
     les images de disque virtuelles et en créant les machines virtuelles dans
-    VirtualBox. Voir 
+    VirtualBox. Voir
     <xref linkend="ovf" /> pour une présentation des applicatifs.</para>
 
     <para>La commande <computeroutput>import</computeroutput> prend comme
@@ -1299,7 +1299,7 @@ Certains invités échouent par une triple erreur lors de la réinitialisation
     les options facultatives en ligne de commandes pour influencer le comportement
     de l'importation.</para>
 
-    <para>Par exemple, voilà l'écran qui s'afficherait pour un applicatif modèle 
+    <para>Par exemple, voilà l'écran qui s'afficherait pour un applicatif modèle
     contenant un invité Windows XP&#xA0;:<screen>VBoxManage import WindowsXp.ovf --dry-run
 Interpreting WindowsXp.ovf...
 OK.
@@ -1333,7 +1333,7 @@ Virtual system 0:
     de commande. La sous-commande import peut être redirigée pour ignorer
     de nombreux éléments tels que ceux avec des options
     <computeroutput>--vsys X --unit Y --ignore</computeroutput>, où
-    X est le numéro du système virtuel (zéro sauf s'il y a plusieurs 
+    X est le numéro du système virtuel (zéro sauf s'il y a plusieurs
     descriptions de système virtuel dans l'applicatif) et Y le numéro de l'élément,
     tel qu'affiché à l'écran.</para>
 
@@ -1357,11 +1357,11 @@ Virtual system 0:
 
     <para>Cette commande exporte une ou plusieurs machines virtuelles à partir
     de VirtualBox vers un applicatif virtuel au format OVF, ce qui inclut la
-    copie de leurs images de disque virtuel en VMDK compressé. Voir <xref linkend="ovf" /> 
+    copie de leurs images de disque virtuel en VMDK compressé. Voir <xref linkend="ovf" />
     pour une présentation des applicatifs.</para>
 
-    <para>La commande <computeroutput>export</computeroutput> est simple à 
-    utiliser&#xA0;: affichez la machine (ou les machines) que vous voulez 
+    <para>La commande <computeroutput>export</computeroutput> est simple à
+    utiliser&#xA0;: affichez la machine (ou les machines) que vous voulez
     exporter dans un même fichier OVF et spécifiez le fichier OVF cible après
     l'option facultative <computeroutput>--output</computeroutput> ou
     <computeroutput>-o</computeroutput>. Remarquez que le répertoire du fichier
@@ -1404,8 +1404,8 @@ Virtual system 0:
     <para>Cette commande démarre une machine virtuelle qui est en état "Éteinte"
     ou "Sauvegardée".</para>
 
-    <para>Le paramètre facultatif <computeroutput>--type</computeroutput> 
-    détermine si la machine sera démarrée dans une fenêtre ou si la sortie devrait passer par 
+    <para>Le paramètre facultatif <computeroutput>--type</computeroutput>
+    détermine si la machine sera démarrée dans une fenêtre ou si la sortie devrait passer par
     <computeroutput>VBoxHeadless</computeroutput>, en activant ou pas VRDE&#xA0;;
     voir <xref linkend="vboxheadless" /> pour plus d'informations. La liste
     des types peut changer et il n'est pas garanti que tous les types soient
@@ -1421,7 +1421,7 @@ Virtual system 0:
         <glossterm><computeroutput>gui</computeroutput></glossterm>
 
         <glossdef>
-          <para>Démarre une VM en affichant une fenêtre graphique. C'est le cas 
+          <para>Démarre une VM en affichant une fenêtre graphique. C'est le cas
           par défaut.</para>
         </glossdef>
       </glossentry>
@@ -1463,7 +1463,7 @@ Virtual system 0:
     <para><itemizedlist>
         <listitem>
           <para><computeroutput>VBoxManage controlvm <vm>
-          pause</computeroutput> met temporairement une machine virtuelle en 
+          pause</computeroutput> met temporairement une machine virtuelle en
           attente, sans vraiment changer son état. La fenêtre de la VM sera grisée
           pour indiquer que la VM est actuellement en pause. (Cela revient à
           sélectionner l'élément "Pause" dans le menu "Machine" de l'interface
@@ -1511,19 +1511,19 @@ Virtual system 0:
           la machine" dans la boîte de dialogue.)</para>
 
           <para>Après cela, l'état de la machine sera "Sauvegardé". À partir de
-          là, vous pouvez la relancer&#xA0;; voir 
+          là, vous pouvez la relancer&#xA0;; voir
 <xref linkend="vboxmanage-startvm" />.</para>
         </listitem>
 
         <listitem>
           <para><computeroutput>VBoxManage controlvm <vm> teleport
           --hostname <nom> --port <port> [--passwordfile
-          <fichier> | --password <mot_de_passe>]</computeroutput> 
+          <fichier> | --password <mot_de_passe>]</computeroutput>
           passe la machine en source de téléportation et engage une téléportation
           sur la cible donnée. Voir <xref linkend="teleporting" /> pour une
           présentation. Si vous spécifiez le mot de passe facultatif, il doit
           correspondre à celui donné avec la commande
-          <computeroutput>modifyvm</computeroutput> pour la 
+          <computeroutput>modifyvm</computeroutput> pour la
           machine cible&#xA0;; voir <xref linkend="vboxmanage-modifyvm-teleport" />
           pour des détails.</para>
         </listitem>
@@ -1545,14 +1545,14 @@ Virtual system 0:
         null|nat|bridged|intnet|hostonly|generic</computeroutput>&#xA0;: Avec
         ceci, vous pouvez définir, pour chaque carte réseau virtuelle de la VM,
         le type de réseau qui devrait être disponible. Elles peuvent ne pas être
-        connectées à l'hôte 
+        connectées à l'hôte
         (<computeroutput>null</computeroutput>), utiliser network address
         translation (<computeroutput>nat</computeroutput>), le résaeau bridgé
         (<computeroutput>bridged</computeroutput>) ou communiquer avec d'autres
         machines virtuelles en utilisant le réseau interne
         (<computeroutput>intnet</computeroutput>) ou host-only
         (<computeroutput>hostonly</computeroutput>) ou accéder à des sous-modes
-        rarement utilisés 
+        rarement utilisés
         (<computeroutput>generic</computeroutput>). Ces options correspondent
         aux modes décrits en détails au <xref
         linkend="networkingmodes" />.</para>
@@ -1562,7 +1562,7 @@ Virtual system 0:
         <para>L'opération <computeroutput>guestmemoryballoon</computeroutput>
         change la taille du ballon mémoire de l'invité, c'est-à-dire la mémoire
         du système d'exploitation invité affectée par les suppléments invité de VirtualBox
-        et rendue à l'hyperviseur pour être réutilisée par d'autres 
+        et rendue à l'hyperviseur pour être réutilisée par d'autres
         machines virtuelles. Elle se spécifie en mégaoctets.  Pour des détails,
         voir <xref linkend="guestadd-balloon" />.</para>
       </listitem>
@@ -1659,7 +1659,7 @@ Virtual system 0:
     la prochaine fois que vous démarrerez. Cela revient à débrancher le câble
     d'alimentation d'une machine physique et vous devriez l'éviter si possible.</para>
   </sect1>
- 
+
   <sect1>
     <title>VBoxManage adoptstate</title>
 
@@ -1677,7 +1677,7 @@ Virtual system 0:
     <para>Cette commande est utilisée pour contrôler les instantanés en ligne de
     commande. Un instantané consiste en une copie complète des paramètres de la
     machine virtuelle, copiés à un moment où l'instantané a été pris, et éventuellement
-    un fichier d'état sauvegardé de la machine virtuelle si l'instantané a été 
+    un fichier d'état sauvegardé de la machine virtuelle si l'instantané a été
     pris alors que la machine était en fonction. Après qu'un instantané ait été pris,
     VirtualBox crée un disque dur de différenciation pour chaque disque dur normal
     associé à la machine pour que, quand on restaure un instantané, les disques durs
@@ -1687,7 +1687,7 @@ Virtual system 0:
     <para>L'opération <computeroutput>take</computeroutput> prend un instantané de
     l'état actuel de la machne viruelle. Vous devez fournir un nom pour l'instantané
     et vous pouvez éventuellement entrer une description. Le nouvel instantané est
-    inséré à l'arborescence des instantanés comme un fichier de l'instantané 
+    inséré à l'arborescence des instantanés comme un fichier de l'instantané
     actuel et il devient le nouvel instantané actuel. Le paramètre
     <computeroutput>--description</computeroutput> permet de décrire
     l'instantané. Si vous spécifiez <computeroutput>--live</computeroutput>,
@@ -1801,7 +1801,7 @@ Virtual system 0:
 
           <glossdef>
             <para>Le numéro du port du contrôleur de stockage qui doit être
-            modifié. Obligatoire, sauf si le contrôleur de stockage n'a qu'un 
+            modifié. Obligatoire, sauf si le contrôleur de stockage n'a qu'un
             seul port.</para>
           </glossdef>
         </glossentry>
@@ -1819,8 +1819,8 @@ Virtual system 0:
           <glossterm>type</glossterm>
 
           <glossdef>
-            <para>Définit le type de lecteur auquel doit être 
-            attaché/détaché/modifié un média. On ne peut se passer de cet 
+            <para>Définit le type de lecteur auquel doit être
+            attaché/détaché/modifié un média. On ne peut se passer de cet
             argument que si le type de média peut être déterminé par le média
             donné avec l'argument <computeroutput>--medium</computeroutput> argument ou
             à partir de précédents rattachements de médias</para>
@@ -1843,10 +1843,10 @@ Virtual system 0:
                   virtuel, cela fait se comporter le périphérique comme un lecteur
                   amovible dans lequel on n'a inséré aucun média.</para>
                 </listitem>
-                
+
                 <listitem>
                   <para>"additions"&#xA0;: Seulement pour un lecteur DVD virtuel,
-                  ceci connecte l'image des <emphasis>Suppléments invité de 
+                  ceci connecte l'image des <emphasis>Suppléments invité de
                   VirtualBox</emphasis> au slot de périphérique donné.</para>
                 </listitem>
 
@@ -1855,13 +1855,13 @@ Virtual system 0:
                   média de stockage déjà connu de VirtualBox (par exemple parce qu'il
                   a été attaché à une autre machine virtuelle). Voir
                   <xref linkend="vboxmanage-list" /> pour la façon de lister
-                  les médias connus. Ce média est alors attaché au slot du 
+                  les médias connus. Ce média est alors attaché au slot du
                  périphérique donné.</para>
                 </listitem>
 
                 <listitem>
                   <para>Si vous spécifiez un nom de fichier, il doit s'agir du
-                  chemin complet vers une image de disque existante (ISO, RAW, VDI, VMDK 
+                  chemin complet vers une image de disque existante (ISO, RAW, VDI, VMDK
                   ou autre), qui est donc attaché au slot du périphérique donné.</para>
                 </listitem>
 
@@ -1890,7 +1890,7 @@ Virtual system 0:
 
           <glossdef>
             <para>Définit la façon dont ce média se comporte vis-à-vis des
-            instantanés et des opérations d'écriture. Voir <xref linkend="hdimagewrites" /> 
+            instantanés et des opérations d'écriture. Voir <xref linkend="hdimagewrites" />
             pour des détails.</para>
           </glossdef>
         </glossentry>
@@ -1992,7 +1992,7 @@ Virtual system 0:
 
           <glossdef>
             <para>La chaîne du nom de la cible. Il est déterminé par la cible iSCSI
-            et il est utilisé pour identifier la ressource de stockage&#xA0;; 
+            et il est utilisé pour identifier la ressource de stockage&#xA0;;
             requis.</para>
           </glossdef>
         </glossentry>
@@ -2100,7 +2100,7 @@ Virtual system 0:
           <glossterm>sataportcount</glossterm>
 
           <glossdef>
-            <para>Ceci détermine le nombre de ports que le contrôleur SATA 
+            <para>Ceci détermine le nombre de ports que le contrôleur SATA
             devrait supporter.</para>
           </glossdef>
         </glossentry>
@@ -2137,7 +2137,7 @@ Virtual system 0:
   <sect1>
     <title>VBoxManage bandwidthctl</title>
 
-    <para>Cette commande crée/efface/modifie/affiche les groupes de bande 
+    <para>Cette commande crée/efface/modifie/affiche les groupes de bande
     passante de la machine virtuelle donnée&#xA0;:<screen>VBoxManage bandwidthctl    <uuid|nomvm>
                             add <nom> --type disk|network --limit <megabytes per second>[k|m|g|K|M|G] |
                             set <nom> --limit <megabytes per second>[k|m|g|K|M|G] |
@@ -2201,10 +2201,10 @@ Virtual system 0:
             que la VM est en fonction. L'unité par défaut est en mégaoctet par
               seconde. Vous pouvez modifier l'unité en spécifiant un des
               suffixes suivants&#xA0;: <computeroutput>k</computeroutput> pour
-              kilobits/s, <computeroutput>m</computeroutput> pour mégabits/s, 
+              kilobits/s, <computeroutput>m</computeroutput> pour mégabits/s,
               <computeroutput>g</computeroutput> pour gigabits/s,
-              <computeroutput>K</computeroutput> pour kilo octets/s, 
-              <computeroutput>M</computeroutput> pour méga octets/s, 
+              <computeroutput>K</computeroutput> pour kilo octets/s,
+              <computeroutput>M</computeroutput> pour méga octets/s,
               <computeroutput>G</computeroutput> pour giga octets/s.</para>
           </glossdef>
         </glossentry>
@@ -2232,8 +2232,8 @@ Virtual system 0:
         interne à la commande "showhdinfo".</para>
       </note></para>
     <para>L'image de disque doit être spécifiée soit par son UUID (si le média
-    est enregistré), soit par le nom du fichier. Les images enregistrées peuvent 
-    être listées par 
+    est enregistré), soit par le nom du fichier. Les images enregistrées peuvent
+    être listées par
       <computeroutput>VBoxManage list hdds</computeroutput> (voir <xref linkend="vboxmanage-list" />
       pour plus d'informations). Un nom de fichier doit être spécifié en tant
       que chemin valide, soit absolu soit relatif en partant du répertoire
@@ -2299,7 +2299,7 @@ Virtual system 0:
     <title>VBoxManage modifyhd</title>
 
     <para>Avec la commande <computeroutput>modifyhd</computeroutput>, vous pouvez
-    modifier les caractéristiques d'une image de disque après l'avoir 
+    modifier les caractéristiques d'une image de disque après l'avoir
     créé&#xA0;:<screen>VBoxManage modifyhd         <uuid>|<nomfichier>
                             [--type normal|writethrough|immutable|shareable|
                                     readonly|multiattach]
@@ -2314,8 +2314,8 @@ Virtual system 0:
       </note></para>
 
       <para>L'image de disque doit être spécifiée soit par son UUID (si le média
-      est enregistré), soit par le nom du fichier. Les images enregistrées peuvent 
-      être listées par 
+      est enregistré), soit par le nom du fichier. Les images enregistrées peuvent
+      être listées par
         <computeroutput>VBoxManage list hdds</computeroutput> (voir <xref linkend="vboxmanage-list" />
         pour plus d'informations). Un nom de fichier doit être spécifié en tant
         que chemin valide, soit absolu soit relatif en partant du répertoire
@@ -2340,7 +2340,7 @@ Virtual system 0:
           <para>L'option <computeroutput>--compact</computeroutput>,
           peut être utilisée pour compresser des images de disque (à savoir
           supprimer des blocs qui ne contiennent que des zéros). Cela réallègera
-          une image à taille dynamique&#xA0;; cela réduira la taille 
+          une image à taille dynamique&#xA0;; cela réduira la taille
           <emphasis>physique</emphasis> de l'image sans changer la taille logique
           du disque virtuel. La compression fonctionne aussi bien pour les images
           de base que celles de différenciation créées dans un instantané.</para>
@@ -2360,7 +2360,7 @@ Virtual system 0:
           <para>Remarquez que la compression n'est actuellement disponible que
           pour les images VDI. Vous pouvez obtenir la même chose en mettant des
           zéros sur les blocs libres et clonant le disque vers un autre format
-          dynamique. Vous pouvez utiliser ce contournement jusqu'à ce que la 
+          dynamique. Vous pouvez utiliser ce contournement jusqu'à ce que la
           compression soit supportée pour les autres formats de disque que VDI.</para>
         </listitem>
 
@@ -2405,8 +2405,8 @@ Virtual system 0:
 
       <para>L'image de disque à cloner et celle cible doivent être spécifiées
       soit par leur UUID (si le média
-      est enregistré), soit par leur nom du fichier. Les images enregistrées peuvent 
-      être listées par 
+      est enregistré), soit par leur nom du fichier. Les images enregistrées peuvent
+      être listées par
         <computeroutput>VBoxManage list hdds</computeroutput> (voir <xref linkend="vboxmanage-list" />
         pour plus d'informations). Un nom de fichier doit être spécifié en tant
         que chemin valide, soit absolu soit relatif en partant du répertoire
@@ -2425,7 +2425,7 @@ Virtual system 0:
           <glossterm><computeroutput>--variant</computeroutput></glossterm>
 
           <glossdef>
-            <para>Permet de choisir une variante de format de fichier pour le 
+            <para>Permet de choisir une variante de format de fichier pour le
             fichier de sortie. C'est une liste de drapeaux séparée par des virgules.
             Toutes les combinaisons ne sont pas supportées, spécifier des
             drapeaux incohérents donne un message d'erreur.</para>
@@ -2445,7 +2445,7 @@ Virtual system 0:
           </glossdef>
         </glossentry>
       </glosslist> <note>
-        <para>Pour être compatible avec les anciennes versions de VirtualBox, 
+        <para>Pour être compatible avec les anciennes versions de VirtualBox,
         la commande "clonevdi" est également supportée et elle a été associée
         en interne à la commande "clonehd".</para>
       </note></para>
@@ -2488,8 +2488,8 @@ VBoxManage convertfromraw   stdin <fichiersortie> <octets>
           <glossterm><computeroutput>--variant</computeroutput></glossterm>
 
           <glossdef>
-            <para>Permet de choisir une variante de format de fichier pour le 
-            fichier en sortie. C'est une liste de drapeaux séparée par des 
+            <para>Permet de choisir une variante de format de fichier pour le
+            fichier en sortie. C'est une liste de drapeaux séparée par des
             virgules. Toutes les combinaisons ne sont pas supportées, spécifier
             des drapeaux incohérents donne un message d'erreur.</para>
           </glossdef>
@@ -2549,7 +2549,7 @@ Value: 2006.01.01</screen>
   <sect1 id="vboxmanage-setproperty">
     <title>VBoxManage setproperty</title>
 
-    <para>Cette commande est utilisée pour modifier des paramètres globaux 
+    <para>Cette commande est utilisée pour modifier des paramètres globaux
     qui modifient toute l'installation de VirtualBox. Certains d'entre eux
     correspondent aux paramètres de la boîte de dialogue "Paramètres globaux" de
     l'interface graphique. Les propriétés suivantes sont disponibles&#xA0;:<glosslist>
@@ -2590,7 +2590,7 @@ Value: 2006.01.01</screen>
           <glossterm><computeroutput>websrvauthlibrary</computeroutput></glossterm>
 
           <glossdef>
-            <para>Ceci spécifie la bibliothèque utilisée par le service web 
+            <para>Ceci spécifie la bibliothèque utilisée par le service web
             pour authentifier les utilisateurs. Pour des détails sur le service
             web de VirtualBox, merci de vous reporter au manuel de référence SDK
             distinct de VirtualBox (voir <xref
@@ -2644,7 +2644,7 @@ Value: 2006.01.01</screen>
     filtres globaux sont appliqués avant les filtres spécifiques aux machines et
     ils peuvent être utilisés pour empêcher les périphériques d'être capturés par
     une machine virtuelle. Les filtres globaux s'appliquent toujours dans un
-    ordre particulier, et seul le premier filtre convenant à un périphérique est 
+    ordre particulier, et seul le premier filtre convenant à un périphérique est
     appliqué. Par exemple, si le premier filtre global dit de garder (rendre
     disponible) une carte mémoire Kingston particulière et le deuxième d'ignorer
     tous les périphériques Kingston, cette carte mémoire sera disponible pour
@@ -2657,19 +2657,19 @@ Value: 2006.01.01</screen>
     la liste. S'il y a déjà un filtre à cette place, lui-mâme et les suivants
     seront déplacés. Sinon, le nouveau filtre sera ajouté à la fin de la liste.
     Le paramètre <computeroutput>target</computeroutput> sélectionne la
-    machine virtuelle à laquelle devrait être attaché le 
+    machine virtuelle à laquelle devrait être attaché le
     filtre, sinon utilisez "global" pour l'appliquer à toutes les machines virtuelles.
     <computeroutput>name</computeroutput> est le nom du nouveau filtre et
     des filtres globaux, <computeroutput>action</computeroutput> autorise les
     machines à accéder aux périphériques correspondant à la description du
     filtre ("hold") ou ne leur donne pas accès ("ignore"). En outre, vous devriez
     spécifier des paramètres de filtrage. Vous pouvez trouver les paramètres des
-    périphériques attachés à votre système en utilisant <computeroutput>VBoxManage list usbhost</computeroutput>. 
+    périphériques attachés à votre système en utilisant <computeroutput>VBoxManage list usbhost</computeroutput>.
     Enfin, vous pouvez spécifier si le filtre devrait être actif, et pour les
     filtres globaux, s'ils concernent les périphériques locaux, à distance (par
     connexion RDP) ou autrement.</para>
 
-    <para>Quand vous modifiez un filtre USB en utilisant 
+    <para>Quand vous modifiez un filtre USB en utilisant
     <computeroutput>usbfilter modify</computeroutput>, vous devez spécifier le
     filtre par index (voir la sortie de
     <computeroutput>VBoxManage list usbfilters</computeroutput> pour voir les
@@ -2718,7 +2718,7 @@ Value: 2006.01.01</screen>
           ne peut pas être contacté, notamment car la VM n'est pa en fonction
           ou les suppléments invité ne sont pas installés.</para>
 
-          <para>Si vous spécifiez <computeroutput>--patterns 
+          <para>Si vous spécifiez <computeroutput>--patterns
           <échantillon></computeroutput>, il agit comme un filtre pour ne
           lister que les propriétés correspondant à l'échantillon donné. L'échantillon
           peut contenir les caractères jokers suivants&#xA0;:<itemizedlist>
@@ -2822,7 +2822,7 @@ Value: 2006.01.01</screen>
         <listitem>
           <para><emphasis role="bold"><computeroutput>execute</computeroutput></emphasis>, qui permet d'exécuter un
           programme/script (processus) déjà installé et exécutable sur l'invité.
-          Cette commande ne fonctionne que pendant qu'une VM est active et en 
+          Cette commande ne fonctionne que pendant qu'une VM est active et en
           fonction et sa syntaxe est la suivante&#xA0;:</para>
 
           <screen>VBoxManage guestcontrol <uuid|nomvm> exec[ute]
@@ -2856,7 +2856,7 @@ Value: 2006.01.01</screen>
                 <glossterm><computeroutput>--username <nom></computeroutput></glossterm>
 
                 <glossdef>
-                  <para>Nom de l'utilisateur sous lequel devrait se lancer le 
+                  <para>Nom de l'utilisateur sous lequel devrait se lancer le
                   processus. Cet utilisateur doit exister sur l'OS invité.</para>
                 </glossdef>
               </glossentry>
@@ -2977,7 +2977,7 @@ Value: 2006.01.01</screen>
                 <glossterm><computeroutput>[-- [<argument1s>] ... [<argumentNs>]]</computeroutput></glossterm>
 
                 <glossdef>
-                  <para>Un ou plusieurs arguments à passer au processus à 
+                  <para>Un ou plusieurs arguments à passer au processus à
                   exécuter.</para>
                   <para>Les arguments contenant des espaces doivent être entourés
                   de guillemets.</para>
@@ -2998,7 +2998,7 @@ Value: 2006.01.01</screen>
 
           <para><note>
             <para>Pour certaines commandes, il faut spécifier le nom d'utilisateur
-            d'un compte utilisateur existant sur l'invité&#xA0;; les exécutions 
+            d'un compte utilisateur existant sur l'invité&#xA0;; les exécutions
             anonymes ne sont pas supportées pour des raisons de sécurité.
             Néanmoins, le mot de passe d'un compte utilisateur est facultatif
             et dépend de la politique et des règles de l'invité. Si vous ne
@@ -3010,7 +3010,7 @@ Value: 2006.01.01</screen>
             on ne peut pas les modifier.</para>
           </note></para>
 
-          <para>À partir de VirtualBox 4.1.2 l'exécution d'un processus invité 
+          <para>À partir de VirtualBox 4.1.2 l'exécution d'un processus invité
           par défaut se limite à 5 processus invités en même temps. Si un
           nouveau processus invité est lancé et dépasserait cette limite, le
           plus ancien dans l'invité qui ne s'exécute pas sera désactivé afin de
@@ -3021,7 +3021,7 @@ Value: 2006.01.01</screen>
 
           <para>Pour augmenter ou diminuer la limite d'exécution des processus
           invité, il faut modifier soit la propriété <computeroutput>/VirtualBox/GuestAdd/VBoxService/--control-procs-max-kept</computeroutput>,
-          soit la ligne de commande ee VBoxService en spécifiant 
+          soit la ligne de commande ee VBoxService en spécifiant
           <computeroutput>--control-procs-max-kept</computeroutput>. Il faut
           ensuite redémarrer l'OS invité. Pour gérer un nombre illimité de
           processus invités, il faut définir une valeur de <computeroutput>0</computeroutput>
@@ -3072,7 +3072,7 @@ Value: 2006.01.01</screen>
                 <glossterm><computeroutput>--username <nom></computeroutput></glossterm>
 
                 <glossdef>
-                  <para>Nom d'utilisateur sous lequel devrait fonctionner le 
+                  <para>Nom d'utilisateur sous lequel devrait fonctionner le
                   processus de copie. Cet utilisateur doit exister sur l'OS
                   invité.</para>
                 </glossdef>
@@ -3219,11 +3219,11 @@ Value: 2006.01.01</screen>
                 <glossterm><computeroutput>--parents</computeroutput></glossterm>
 
                 <glossdef>
-                  <para>Crée aussi les répertoires parent non encore créés 
+                  <para>Crée aussi les répertoires parent non encore créés
                   pour le répertoire spécifié, par exemple si le répertoire
                   <computeroutput>D:\Foo</computeroutput> de
                   <computeroutput>D:\Foo\Bar</computeroutput> n'existe pas encore,
-                  il sera créé. Si on ne spécifie pas 
+                  il sera créé. Si on ne spécifie pas
                   <computeroutput>--parent</computeroutput>, l'action échouerait.</para>
                 </glossdef>
               </glossentry>
@@ -3271,7 +3271,7 @@ Value: 2006.01.01</screen>
                 <glossterm><computeroutput>répertoire à supprimer dans l'invité</computeroutput></glossterm>
 
                 <glossdef>
-                  <para>Chemin absolu du/des répertoire(s) à supprimer sur 
+                  <para>Chemin absolu du/des répertoire(s) à supprimer sur
                   l'invité, par exemple <computeroutput>D:\Foo\Bar</computeroutput>.
                   L'utilisateur spécifié doit avoir les bons droits pour effacer
                   le(s) répertoire(s) de l'invité spécifié(s).</para>
@@ -3418,7 +3418,7 @@ Value: 2006.01.01</screen>
                 <glossterm><computeroutput>source</computeroutput></glossterm>
 
                 <glossdef>
-                  <para>Chemin absolu d'une ou plusieurs sources à déplacer 
+                  <para>Chemin absolu d'une ou plusieurs sources à déplacer
                   quelque part. Si vous spécifiez plus d'une source, la destination
                   doit être un répertoire existant sur la VM. L'utilisateur
                   spécifié doit avoir les bons droits d'accès aux fichiers et
@@ -3432,7 +3432,7 @@ Value: 2006.01.01</screen>
                 <glossdef>
                   <para>Chemin absolu de la destination où déplacer le/les
                   source(s). Il peut s'agir d'un répertoire ou d'un fichier, selon
-                  que vous spécifiez une ou plusieurs sources. L'utilisateur 
+                  que vous spécifiez une ou plusieurs sources. L'utilisateur
                   spécifié doit avoir les bons droits d'accès au fichier et au
                   répertoire de.</para>
                 </glossdef>
@@ -3462,7 +3462,7 @@ Value: 2006.01.01</screen>
 
                 <glossdef>
                   <para>Mot de passe du compte utilisateur spécifié avec
-                  <computeroutput>--username</computeroutput>. Si vous n'en 
+                  <computeroutput>--username</computeroutput>. Si vous n'en
                   donnez pas, on suppose un mot de passe vide.</para>
                 </glossdef>
               </glossentry>
@@ -3897,8 +3897,8 @@ Value: 2006.01.01</screen>
               <glossentry>
                 <glossterm>--wait-start</glossterm>
                 <glossdef>
-                  <para>Démarre le processus normal de mise à jour et attend 
-                  jusqu'à ce que la mise à jour des suppléments invité soit 
+                  <para>Démarre le processus normal de mise à jour et attend
+                  jusqu'à ce que la mise à jour des suppléments invité soit
                   effectivement démarrée dans l'invité. Cela peut être nécessaire
                   du fait de l'interaction nécessaire avec l'OS invité pendant
                   la phase d'installation.</para>
@@ -3968,7 +3968,7 @@ Value: 2006.01.01</screen>
           <xref linkend="ts_guest-core-format" />.</para>
 
           <para>Cela correspond à la commande
-          <computeroutput>writecore</computeroutput> du débogueur. 
+          <computeroutput>writecore</computeroutput> du débogueur.
           </para>
         </listitem>
 
@@ -4023,7 +4023,7 @@ Value: 2006.01.01</screen>
           </itemizedlist>
           La forme <computeroutput>all</computeroutput> affichera tous les
           registres (pas les sous-champs). Les noms des registres sont indifférents
-          à la casse. Quand vous interrogez un registre du processeur, vous 
+          à la casse. Quand vous interrogez un registre du processeur, vous
           pouvez ne pas mettre le réglage du registre, il sera sélectionné en
           utilisant la valeur de l'option <computeroutput>--cpu</computeroutput>
           (0 par défaut).
@@ -4051,7 +4051,7 @@ Value: 2006.01.01</screen>
 
         <listitem>
           <para>La commande <computeroutput>statistics</computeroutput> peut
-          être utilisée pour afficher des statistiques VMM sur la ligne de 
+          être utilisée pour afficher des statistiques VMM sur la ligne de
           commandes. L'option <computeroutput>--reset</computeroutput> réinitialisera
           les statistiques. Les statistiques concernées sont filtrables avec l'option
           <computeroutput>--pattern</computeroutput> qui accepte des jokers en style
@@ -4074,7 +4074,7 @@ Value: 2006.01.01</screen>
     <para>Les données de métrique sont rassemblées et stockées en interne&#xA0;;
     vous pouvez les récupérer n'importe quand avec la sous-commande
     <computeroutput>VBoxManage metric query</computeroutput>. Les données sont
-    disponibles tant que le processus en tâche de fond 
+    disponibles tant que le processus en tâche de fond
     <computeroutput>VBoxSVC</computeroutput> est vivant. Ce processus
     ce termine peu après que toutes les VMs et les interfaces ont été fermées.</para>
 
@@ -4102,7 +4102,7 @@ Value: 2006.01.01</screen>
     recueillis pour un jeu d'objets et de métriques spécifiques.</para>
 
     <para>Pour activer ou désactiver la récupération des métriques sans perdre
-    les données, vous pouvez utiliser les sous-commandes 
+    les données, vous pouvez utiliser les sous-commandes
     <computeroutput>VBoxManage metrics enable</computeroutput> et
     <computeroutput>VBoxManage metrics disable</computeroutput>. Remarquez que
     ces sous-commandes attendent en paramètres des métriques, pas des sous-métriques,
@@ -4110,7 +4110,7 @@ Value: 2006.01.01</screen>
     l'activation de <code>CPU/Load/User</code> tout en désactivant <code>CPU/Load/Kernel</code>
     n'est pas supporté.</para>
 
-    <para>L'hôte et les VMs ont différents ensembles de métriques associés. 
+    <para>L'hôte et les VMs ont différents ensembles de métriques associés.
     Vous pouvez lister les métriques disponibles avec
     <computeroutput>VBoxManage metrics
     list</computeroutput> subcommand.</para>
@@ -4132,7 +4132,7 @@ Value: 2006.01.01</screen>
     métriques relatifs à l'hôte. Pour limiter la cible à un sous-ensemble de métriques,
     utilisez une liste de noms séparés par des virgules.</para>
 
-    <para>Par exemple, pour interroger les données de métriques sur le temps 
+    <para>Par exemple, pour interroger les données de métriques sur le temps
     passé par le processeur en modes utilisateur et noyau, sur la machine virtuelle
     nommée "test", vous pouvez utiliser la commande suivante&#xA0;:</para>
 
@@ -4172,7 +4172,7 @@ Value: 2006.01.01</screen>
           <para>Cette sous-commande "réactive le recueil de données après qu'il
           ait été arrêté avec la sous-commande <code>disable</code>. Remarquez que
           la spécification de sous-métriques comme paramètres n'activera pas les
-          métriques sous-jacents. Utilisez 
+          métriques sous-jacents. Utilisez
           <computeroutput>--list</computeroutput> pour savoir si la commande a
           fait ce que vous aviez prévu.</para>
         </glossdef>
@@ -4198,7 +4198,7 @@ Value: 2006.01.01</screen>
           <para>Cette sous-commande récupère et affiche les données de métriques
           mémorisés.<note>
               <para>La sous-commande <code>query</code> ne supprime
-              pas ni ne remet à 0 les données mémorisées. Si vous interrogez 
+              pas ni ne remet à 0 les données mémorisées. Si vous interrogez
               assez souvent, vous verrez la vitesse d'évacuation graduelle des
               anciens échantillons par les nouveaux.</para>
             </note></para>
@@ -4214,7 +4214,7 @@ Value: 2006.01.01</screen>
           en interne. Les données recueillies s'affichent périodiquement jusqu'à
           ce que vous appuyiez sur Ctrl-C, sauf si vous spécifiez l'option
           <computeroutput>--detach</computeroutput>. Avec l'option
-          <computeroutput>--detach</computeroutput>, cette sous-commande agit de 
+          <computeroutput>--detach</computeroutput>, cette sous-commande agit de
           la même façon que <code>setup</code>. L'option <computeroutput>--list</computeroutput>
           affiche les métriques correspondant au filtre spécifié.</para>
         </glossdef>
@@ -4236,25 +4236,25 @@ Value: 2006.01.01</screen>
     <title>VBoxManage dhcpserver</title>
 
     <para>Les commandes de "dhcpserver" vous permettent de contrôler le serveur
-    DHCP construit dans VirtualBox. Vous pourriez trouver cela utile si vous 
-    utilisez le réseau interne ou host-only. (En théorie, vous pouvez 
+    DHCP construit dans VirtualBox. Vous pourriez trouver cela utile si vous
+    utilisez le réseau interne ou host-only. (En théorie, vous pouvez
     l'activer aussi pour un réseau bridgé, mais cela provoquera probablement des
     conflits avec d'autres serveurs DHCP de votre réseau physique.)</para>
 
     <para>Utilisez les options suivantes de la ligne de commandes&#xA0;:<itemizedlist>
         <listitem>
-          <para>Si vous utilisez le réseau interne pour l'adaptateur réseau 
+          <para>Si vous utilisez le réseau interne pour l'adaptateur réseau
           virtuel d'une machine virtuelle, utilisez <computeroutput>VBoxManage dhcpserver add
           --netname <nom_réseau></computeroutput>, où
-          <computeroutput><nom_réseau></computeroutput> est le même nom 
-          de réseau que celui que vous avez utilisé avec 
+          <computeroutput><nom_réseau></computeroutput> est le même nom
+          de réseau que celui que vous avez utilisé avec
           <computeroutput>VBoxManage modifyvm
           <nomvm> --intnet<X>
           <nom_réseau></computeroutput>.</para>
         </listitem>
 
         <listitem>
-          <para>Si vous utilisez le réseau interne pour l'adaptateur réseau 
+          <para>Si vous utilisez le réseau interne pour l'adaptateur réseau
           virtuel d'une machine virtuelle, utilisez plutôt <computeroutput>VBoxManage dhcpserver add
           --ifname <hostonly_if_name></computeroutput>, où
           <computeroutput><hostonly_if_name></computeroutput> est le même
@@ -4306,7 +4306,7 @@ Value: 2006.01.01</screen>
 
     <para>Pour modifier les paramètres d'un serveurDHCP créé précédemment avec
     <computeroutput>VBoxManage dhcpserver add</computeroutput>, vous pouvez
-    utiliser 
+    utiliser
     <computeroutput>VBoxManage dhcpserver modify</computeroutput> pour une
     interface réseau interne ou host-only donnée.</para>
   </sect1>
diff --git a/doc/manual/fr_FR/user_VirtualBoxAPI.xml b/doc/manual/fr_FR/user_VirtualBoxAPI.xml
index edf4630..b182d11 100644
--- a/doc/manual/fr_FR/user_VirtualBoxAPI.xml
+++ b/doc/manual/fr_FR/user_VirtualBoxAPI.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
-  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <chapter id="VirtualBoxAPI">
   <title>Interfaces de programmation de VirtualBox</title>
 
@@ -15,7 +15,7 @@
   aussi avec SOAP, Java et Python.</para>
 
   <para>Toutes les informations sur la programmation (documentation, informations
-  de référence, en-têtes et autres fichiers d'interface ainsi que des modèles) 
+  de référence, en-têtes et autres fichiers d'interface ainsi que des modèles)
   ont été mises dans un <emphasis role="bold">Software Development Kit (SDK),</emphasis>
   distinct disponible en téléchargement sur <ulink type=""
   url="http://www.virtualbox.org">http://www.virtualbox.org</ulink>. En
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index ff3469c..3c42092 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -4,6 +4,97 @@
                            So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. -->
 
   <sect1>
+    <title>Version 5.2.2 (2017-11-22)</title>
+
+    <para>This is a maintenance release. The following items were fixed and/or
+      added:</para>
+
+    <itemizedlist>
+
+      <listitem>
+        <para>User interface: various improvements for high resolution screens</para>
+      </listitem>
+
+      <listitem>
+        <para>User interface: added functionality to duplicate optical and floppy
+          images</para>
+      </listitem>
+
+      <listitem>
+        <para>User interface: various improvements for the virtual media manager</para>
+      </listitem>
+
+      <listitem>
+        <para>VMM: fixed emulation so that Plan 9 guests can start once more
+          (5.1.0 regression)</para>
+      </listitem>
+
+      <listitem>
+        <para>Storage: fixed regression breaking iSCSI (bug #17196)</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: added HDA support for more exotic guests (e.g. Haiku)</para
+>
+      </listitem>
+
+      <listitem>
+        <para>Serial: fixed hanging I/O when using named pipes on Windows
+          (5.2.0 regression; bug #17227)</para>
+      </listitem>
+
+      <listitem>
+        <para>Serial: fixed broken communication with certain devices on Linux
+          hosts</para>
+      </listitem>
+
+      <listitem>
+        <para>USB/OHCI: improved behavior so that the controller state after a VM reset
+           is closer to the initial state after VM start</para>
+      </listitem>
+
+      <listitem>
+        <para>EFI: fixed HFS+ driver which in rare cases failed to access most files
+          on a volume</para>
+      </listitem>
+
+      <listitem>
+        <para>Shared clipboard: fixed hang with OS X host and Linux guest
+         (bug #15782)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts: fixed kernel module compilation and start failures
+          with Linux kernel 4.14 (bug #17267)</para>
+      </listitem>
+
+      <listitem>
+        <para>X11 hosts: better handle WM_CLASS setting (bug #12534)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux guests: fixed kernel module compilation and other problems
+         with Linux kernel 4.14 (bug #12534)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux guests: fixed kernel module compilation and other problems
+         with Linux kernel 4.14</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux guests: fixed various 5.2.0 regressions (bug #17163)</para>
+      </listitem>
+
+      <listitem>
+        <para>Bridged networking: fixed duplicate EtherType in VLAN/priority tags
+          on Linux (5.2.0 regression; bug #17277)</para>
+      </listitem>
+
+    </itemizedlist>
+  </sect1>
+
+  <sect1>
     <title>Version 5.2.0 (2017-10-17)</title>
 
     <para>This is a major update. The following major new features
@@ -168,6 +259,40 @@
   </sect1>
 
   <sect1>
+    <title>Version 5.1.30 (2017-10-16)</title>
+
+    <para>This is a maintenance release. The following items were fixed and/or
+      added:</para>
+
+    <itemizedlist>
+
+      <listitem>
+        <para>GUI: translation updates</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: Fixed double mouse cursor when using mouse integration
+          without Guest Additions, actually a Qt 5.6 bug fixed with QT 5.6.3
+          (Mac OS X hosts only; bug #15610)</para>
+      </listitem>
+
+      <listitem>
+        <para>Solaris hosts: allow increasing MTU size for host-only adapter to
+          9706 bytes to support jumbo frames</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts: glibc 2.26 compile fix</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows Additions: 3D related crash fix (bugs #17082, #17092)</para>
+      </listitem>
+
+    </itemizedlist>
+  </sect1>
+
+  <sect1>
     <title>Version 5.1.28 (2017-09-13)</title>
 
     <para>This is a maintenance release. The following items were fixed and/or
@@ -258,7 +383,7 @@
 
       <listitem>
         <para>GUI: Fixed double mouse cursor when using mouse integration
-          without Guest Additions, actually a Qt 5.6 bug fixed with QT 5.6.3 
+          without Guest Additions, actually a Qt 5.6 bug fixed with QT 5.6.3
           (Mac OS X hosts only; bug #15610)</para>
       </listitem>
 
diff --git a/include/.scm-settings b/include/.scm-settings
new file mode 100644
index 0000000..b4a2ec5
--- /dev/null
+++ b/include/.scm-settings
@@ -0,0 +1,52 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the includes.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+# Default license for headers is dual GPL and CDDL.
+--license-ose-dual
+
+# Only the headers should be dual.
+/Makefile.kmk:  --license-ose-gpl
+/.scm-settings: --license-ose-gpl
+
+# These three have no Oracle license or copyright stuff for some reason.
+/iprt/formats/elf-amd64.h:  --no-update-license  --no-update-copyright-year
+/iprt/formats/elf-common.h: --no-update-license  --no-update-copyright-year
+/iprt/formats/elf-i386.h:   --no-update-license  --no-update-copyright-year
+/iprt/formats/elf-i386.h:   --no-update-license  --no-update-copyright-year
+
+# TODO: This is using LGPL with Oracle disclaimer. Implement.
+/VBox/VBoxKeyboard.h: --external-copyright --lgpl-disclaimer
+
+# Some of the graphics stuff is using MIT.
+/VBox/Graphics/HGSMI.h:                 --license-mit
+/VBox/Graphics/HGSMIBase.h:             --license-mit
+/VBox/Graphics/HGSMIChannels.h:         --license-mit
+/VBox/Graphics/HGSMIChSetup.h:          --license-mit
+/VBox/Graphics/HGSMIContext.h:          --license-mit
+/VBox/Graphics/HGSMIDefs.h:             --license-mit
+/VBox/Graphics/VBoxVideo.h:             --license-mit
+/VBox/Graphics/VBoxVideoErr.h:          --license-mit
+/VBox/Graphics/VBoxVideoGuest.h:        --license-mit
+/VBox/Graphics/VBoxVideoVBE.h:          --license-mit
+/VBox/Graphics/VBoxVideoVBEPrivate.h:   --license-mit
+
+
+/VBox/HostServices/glext.h:             --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/VBox/HostServices/glxext.h:            --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/VBox/HostServices/wglext.h:            --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+
diff --git a/include/Makefile.kmk b/include/Makefile.kmk
index c494aa4..1efb2ff 100644
--- a/include/Makefile.kmk
+++ b/include/Makefile.kmk
@@ -19,7 +19,7 @@
 SUB_DEPTH = ..
 include $(KBUILD_PATH)/subheader.kmk
 
-LIBRARIES += SyntaxVBoxIncludeR3 SyntaxVBoxIncludeR0 SyntaxVBoxIncludeRC
+LIBRARIES += SyntaxVBoxIncludeR3 SyntaxVBoxIncludeR0
 
 # Omit headers that are using C++ features and upsets gcc.
 VBOX_HDRS_CPP_FEATURES := \
@@ -105,6 +105,7 @@ VBOX_HDRS_OMIT := \
 		VBox/VBoxDrvCfg-win.h \
 		VBox/VBoxNetCfg-win.h \
 		VBox/usblib-win.h \
+		VBox/com/microatl.h \
 	,$(VBOX_HDRS_GCC_ONLY)) \
 	\
 	VBox/dbus-calls.h \
@@ -151,7 +152,7 @@ VBOX_HDRS_ALL_RC_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES), $(VBOX_HDRS_ALL_RC
 
 SyntaxVBoxIncludeR3_TEMPLATE = VBOXMAINEXE
 SyntaxVBoxIncludeR3_DEFS = VBOX_WITH_HGCM
-SyntaxVBoxIncludeR3_CDEFS = VBOX_WITHOUT_UNNAMED_UNIONS
+SyntaxVBoxIncludeR3_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
 SyntaxVBoxIncludeR3_SOURCES := \
 	$(addprefix $(PATH_OBJ)/include/c/,  $(addsuffix .c,  $(basename $(VBOX_HDRS_ALL_R3_C)))) \
 	$(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R3))))
@@ -160,20 +161,22 @@ SyntaxVBoxIncludeR3_CLEAN = $(SyntaxVBoxIncludeR3_SOURCES)
 
 SyntaxVBoxIncludeR0_TEMPLATE = VBoxR0
 SyntaxVBoxIncludeR0_DEFS = VBOX_WITH_HGCM
-SyntaxVBoxIncludeR0_CDEFS = VBOX_WITHOUT_UNNAMED_UNIONS
+SyntaxVBoxIncludeR0_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
 SyntaxVBoxIncludeR0_SOURCES := \
 	$(addprefix $(PATH_OBJ)/include/c/,  $(addsuffix .c,  $(basename $(VBOX_HDRS_ALL_R0_C)))) \
 	$(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R0))))
 SyntaxVBoxIncludeR0_CLEAN = $(SyntaxVBoxIncludeR0_SOURCES)
 
-SyntaxVBoxIncludeRC_TEMPLATE = VBoxRc
-SyntaxVBoxIncludeRC_DEFS = VBOX_WITH_HGCM
-SyntaxVBoxIncludeRC_CDEFS = VBOX_WITHOUT_UNNAMED_UNIONS
-SyntaxVBoxIncludeRC_SOURCES := \
-	$(addprefix $(PATH_OBJ)/include/c/,  $(addsuffix .c,  $(basename $(VBOX_HDRS_ALL_RC_C)))) \
-	$(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_RC))))
-SyntaxVBoxIncludeRC_CLEAN = $(SyntaxVBoxIncludeRC_SOURCES)
-
+ifdef VBOX_WITH_RAW_MODE
+ LIBRARIES += SyntaxVBoxIncludeRC
+ SyntaxVBoxIncludeRC_TEMPLATE = VBoxRc
+ SyntaxVBoxIncludeRC_DEFS = VBOX_WITH_HGCM
+ SyntaxVBoxIncludeRC_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
+ SyntaxVBoxIncludeRC_SOURCES := \
+ 	$(addprefix $(PATH_OBJ)/include/c/,  $(addsuffix .c,  $(basename $(VBOX_HDRS_ALL_RC_C)))) \
+ 	$(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_RC))))
+ SyntaxVBoxIncludeRC_CLEAN = $(SyntaxVBoxIncludeRC_SOURCES)
+endif
 
 
 # Headers that must only be included once.
diff --git a/include/VBox/Graphics/HGSMI.h b/include/VBox/Graphics/HGSMI.h
index e07ed08..e4ce4b3 100644
--- a/include/VBox/Graphics/HGSMI.h
+++ b/include/VBox/Graphics/HGSMI.h
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/Graphics/HGSMIBase.h b/include/VBox/Graphics/HGSMIBase.h
index 8048949..95b7fed 100644
--- a/include/VBox/Graphics/HGSMIBase.h
+++ b/include/VBox/Graphics/HGSMIBase.h
@@ -6,23 +6,26 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 
diff --git a/include/VBox/Graphics/HGSMIChSetup.h b/include/VBox/Graphics/HGSMIChSetup.h
index d59ccdf..e0a5f32 100644
--- a/include/VBox/Graphics/HGSMIChSetup.h
+++ b/include/VBox/Graphics/HGSMIChSetup.h
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/Graphics/HGSMIChannels.h b/include/VBox/Graphics/HGSMIChannels.h
index 5322bc1..2bb703e 100644
--- a/include/VBox/Graphics/HGSMIChannels.h
+++ b/include/VBox/Graphics/HGSMIChannels.h
@@ -9,22 +9,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/Graphics/HGSMIContext.h b/include/VBox/Graphics/HGSMIContext.h
index eb0409f..83afa7f 100644
--- a/include/VBox/Graphics/HGSMIContext.h
+++ b/include/VBox/Graphics/HGSMIContext.h
@@ -6,23 +6,26 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 
diff --git a/include/VBox/Graphics/HGSMIDefs.h b/include/VBox/Graphics/HGSMIDefs.h
index 67e5ab1..e7aac2a 100644
--- a/include/VBox/Graphics/HGSMIDefs.h
+++ b/include/VBox/Graphics/HGSMIDefs.h
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/Graphics/VBoxUhgsmi.h b/include/VBox/Graphics/VBoxUhgsmi.h
index d8d8dd7..ca6c2bf 100644
--- a/include/VBox/Graphics/VBoxUhgsmi.h
+++ b/include/VBox/Graphics/VBoxUhgsmi.h
@@ -42,9 +42,9 @@ typedef struct VBOXUHGSMI_BUFFER_TYPE_FLAGS
         {
             uint32_t fCommand    : 1;
             uint32_t Reserved    : 31;
-        };
+        } RT_STRUCT_NM(s);
         uint32_t Value;
-    };
+    } RT_UNION_NM(u);
 } VBOXUHGSMI_BUFFER_TYPE_FLAGS;
 
 typedef struct VBOXUHGSMI_BUFFER_LOCK_FLAGS
@@ -59,9 +59,9 @@ typedef struct VBOXUHGSMI_BUFFER_LOCK_FLAGS
             uint32_t bDiscard    : 1;
             uint32_t bLockEntire : 1;
             uint32_t Reserved    : 27;
-        };
+        } RT_STRUCT_NM(s);
         uint32_t Value;
-    };
+    } RT_UNION_NM(u);
 } VBOXUHGSMI_BUFFER_LOCK_FLAGS;
 
 typedef struct VBOXUHGSMI_BUFFER_SUBMIT_FLAGS
@@ -75,9 +75,9 @@ typedef struct VBOXUHGSMI_BUFFER_SUBMIT_FLAGS
             uint32_t bDoNotRetire           : 1; /**< the buffer will be used in a subsequent command */
             uint32_t bEntireBuffer          : 1;
             uint32_t Reserved               : 28;
-        };
+        } RT_STRUCT_NM(s);
         uint32_t Value;
-    };
+    } RT_UNION_NM(u);
 } VBOXUHGSMI_BUFFER_SUBMIT_FLAGS, *PVBOXUHGSMI_BUFFER_SUBMIT_FLAGS;
 
 /* the caller can specify NULL as a hSynch and specify a valid enmSynchType to make UHGSMI create a proper object itself,
diff --git a/include/VBox/Graphics/VBoxVideo.h b/include/VBox/Graphics/VBoxVideo.h
index 8a8d358..6b79139 100644
--- a/include/VBox/Graphics/VBoxVideo.h
+++ b/include/VBox/Graphics/VBoxVideo.h
@@ -6,24 +6,26 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #ifndef ___VBox_Graphics_VBoxVideo_h
diff --git a/include/VBox/Graphics/VBoxVideoErr.h b/include/VBox/Graphics/VBoxVideoErr.h
index 6c6236c..0a22db6 100644
--- a/include/VBox/Graphics/VBoxVideoErr.h
+++ b/include/VBox/Graphics/VBoxVideoErr.h
@@ -7,25 +7,26 @@
 /*
  * Copyright (C) 2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: Michael Thayer <michael.thayer at oracle.com>
  */
 
 #ifndef __VBOX_ERR_H__
diff --git a/include/VBox/Graphics/VBoxVideoGuest.h b/include/VBox/Graphics/VBoxVideoGuest.h
index ed800e7..c797047 100644
--- a/include/VBox/Graphics/VBoxVideoGuest.h
+++ b/include/VBox/Graphics/VBoxVideoGuest.h
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/Graphics/VBoxVideoHost3D.h b/include/VBox/Graphics/VBoxVideoHost3D.h
index f11bdba..dd4dc4b 100644
--- a/include/VBox/Graphics/VBoxVideoHost3D.h
+++ b/include/VBox/Graphics/VBoxVideoHost3D.h
@@ -123,7 +123,7 @@ typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP
     {
         void *pvVRamBase;
         uint64_t uAlignment;
-    };
+    } RT_UNION_NM(u);
     uint64_t cbVRam;
     PPDMLED pLed;
     VBOXCRCLIENT_INFO CrClientInfo;
diff --git a/include/VBox/Graphics/VBoxVideoIPRT.h b/include/VBox/Graphics/VBoxVideoIPRT.h
index 05d5302..1add2d1 100644
--- a/include/VBox/Graphics/VBoxVideoIPRT.h
+++ b/include/VBox/Graphics/VBoxVideoIPRT.h
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBox_Graphics_VBoxVideoIPRT_h
@@ -63,7 +72,7 @@
 /** Read a 32-bit value from an I/O port. */
 # define VBVO_PORT_READ_U32(Port) \
     VideoPortReadPortUlong((PULONG)Port)
-    
+
 #else  /** @todo make these explicit */
 
 /** Write an 8-bit value to an I/O port. */
diff --git a/include/VBox/Graphics/VBoxVideoVBE.h b/include/VBox/Graphics/VBoxVideoVBE.h
index fb7a02b..c5ad18b 100644
--- a/include/VBox/Graphics/VBoxVideoVBE.h
+++ b/include/VBox/Graphics/VBoxVideoVBE.h
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/Graphics/VBoxVideoVBEPrivate.h b/include/VBox/Graphics/VBoxVideoVBEPrivate.h
index ca4fc1e..5e2922b 100644
--- a/include/VBox/Graphics/VBoxVideoVBEPrivate.h
+++ b/include/VBox/Graphics/VBoxVideoVBEPrivate.h
@@ -5,22 +5,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/VBox/GuestHost/DragAndDrop.h b/include/VBox/GuestHost/DragAndDrop.h
index 1f10d39..310b3ff 100644
--- a/include/VBox/GuestHost/DragAndDrop.h
+++ b/include/VBox/GuestHost/DragAndDrop.h
@@ -76,7 +76,7 @@ protected:
     /** Open flags. */
     uint32_t                     m_fOpen;
     /** Directory handle for drop directory. */
-    PRTDIR                       m_hDir;
+    RTDIR                        m_hDir;
     /** Absolute path to drop directory. */
     RTCString                    m_strPathAbs;
     /** List for holding created directories in the case of a rollback. */
diff --git a/include/VBox/HostServices/VBoxOGLOp.h b/include/VBox/HostServices/VBoxOGLOp.h
index 74c70ed..cdfc3d3 100644
--- a/include/VBox/HostServices/VBoxOGLOp.h
+++ b/include/VBox/HostServices/VBoxOGLOp.h
@@ -3,7 +3,6 @@
  */
 
 /*
- *
  * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/include/VBox/VMMDevTesting.mac b/include/VBox/VMMDevTesting.mac
index 62805d8..632d4b0 100644
--- a/include/VBox/VMMDevTesting.mac
+++ b/include/VBox/VMMDevTesting.mac
@@ -1,3 +1,30 @@
+; $Id: VMMDevTesting.mac $ ;/
+;; @file
+; VMMDev - Testing Extensions.
+; Automatically generated by various.sed.  DO NOT EDIT!
+
+;
+; Copyright (C) 2010-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
+
 %ifndef ___VBox_VMMDevTesting_h
 %define ___VBox_VMMDevTesting_h
 %define VMMDEV_TESTING_MMIO_BASE        0x00101000
diff --git a/include/VBox/apic.mac b/include/VBox/apic.mac
index f8102f5..dba7fa8 100644
--- a/include/VBox/apic.mac
+++ b/include/VBox/apic.mac
@@ -1,3 +1,30 @@
+;; @file
+; X86 (and AMD64) Local APIC registers (VMM,++).
+;
+; Automatically generated by various.sed.  DO NOT EDIT!
+;
+
+;
+; Copyright (C) 2010-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
 %ifndef ___VBox_apic_h
 %define ___VBox_apic_h
 %define APIC_REG_VERSION                        0x0030
diff --git a/include/VBox/ata.h b/include/VBox/ata.h
index 08dc971..871a422 100644
--- a/include/VBox/ata.h
+++ b/include/VBox/ata.h
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBox_ata_h
diff --git a/include/VBox/bios.mac b/include/VBox/bios.mac
index 2d63d49..3f03576 100644
--- a/include/VBox/bios.mac
+++ b/include/VBox/bios.mac
@@ -1,3 +1,30 @@
+;; @file
+; X86 (and AMD64) Local APIC registers (VMM,++).
+;
+; Automatically generated by various.sed.  DO NOT EDIT!
+;
+
+;
+; Copyright (C) 2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
 %ifndef ___VBox_bios_h
 %define ___VBox_bios_h
 %define VBOX_BIOS_SHUTDOWN_PORT                 0x040f
diff --git a/include/VBox/com/com.h b/include/VBox/com/com.h
index 580f121..44a4cd7 100644
--- a/include/VBox/com/com.h
+++ b/include/VBox/com/com.h
@@ -98,8 +98,9 @@ int GetVBoxUserHomeDirectory(char *aDir, size_t aDirLen, bool fCreateDir = true)
  *  @param cHistory         Number of old log files to keep.
  *  @param uHistoryFileTime Maximum amount of time to put in a log file.
  *  @param uHistoryFileSize Maximum size of a log file before rotating.
- *  @param pszError         In case of creation failure: buffer for error message.
- *  @param cbError          Size of error message buffer.
+ *  @param pErrInfo         Where to return extended error information.
+ *                          Optional.
+ *
  *  @return         VBox status code.
  */
 int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
@@ -107,7 +108,7 @@ int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
                      const char *pcszEnvVarBase, uint32_t fDestFlags,
                      uint32_t cMaxEntriesPerGroup, uint32_t cHistory,
                      uint32_t uHistoryFileTime, uint64_t uHistoryFileSize,
-                     char *pszError, size_t cbError);
+                     PRTERRINFO pErrInfo);
 
 } /* namespace com */
 
diff --git a/include/VBox/dbg.h b/include/VBox/dbg.h
index a00b3f6..813001e 100644
--- a/include/VBox/dbg.h
+++ b/include/VBox/dbg.h
@@ -428,7 +428,7 @@ typedef struct DBGCCMDHLP
      * @returns VBox status.
      * @param   pCmdHlp     Pointer to the command callback structure.
      * @param   pcbWritten  Where to store the number of bytes written.
-     *                      This is optional. 
+     *                      This is optional.
      * @param   pszFormat   The format string.  This may use all IPRT extensions as
      *                      well as the debugger ones.
      * @param   args        Arguments specified in the format string.
diff --git a/include/VBox/err.mac b/include/VBox/err.mac
index 659753f..cd92fdb 100644
--- a/include/VBox/err.mac
+++ b/include/VBox/err.mac
@@ -1,3 +1,30 @@
+;; @file
+; VirtualBox Status Codes.
+;
+; Automatically generated by err.sed.  DO NOT EDIT!
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
 %define VERR_NO_VM_MEMORY    (-1000)
 %define VERR_DONT_PANIC    (-1001)
 %define VERR_UNSUPPORTED_CPU    (-1002)
@@ -22,6 +49,7 @@
 %define VERR_NOT_SUP_IN_RAW_MODE    (-1021)
 %define VERR_INVALID_CPU_INDEX    (-1022)
 %define VERR_RAW_MODE_NOT_SUPPORTED    (-1023)
+%define VERR_INCONSISTENT_VM_HANDLE    (-1024)
 %define VINF_EM_FIRST    1100
 %define VINF_EM_TERMINATE    1100
 %define VINF_EM_DBG_HYPER_STEPPED    1101
@@ -718,6 +746,9 @@
 %define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_3    (-3773)
 %define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_4    (-3774)
 %define VERR_SUPLIB_NT_PROCESS_UNTRUSTED_5    (-3775)
+%define VERR_SUPLIB_TEXT_NOT_WRITEABLE    (-3776)
+%define VERR_SUPLIB_TEXT_NOT_SEALED    (-3777)
+%define VERR_SUPLIB_UNEXPECTED_INSTRUCTION    (-3778)
 %define VERR_GMM_SEED_ME    (-3800)
 %define VERR_GMM_OUT_OF_MEMORY    (-3801)
 %define VERR_GMM_HIT_GLOBAL_LIMIT    (-3802)
@@ -805,6 +836,9 @@
 %define VERR_SVM_IPE_3    (-4063)
 %define VERR_SVM_IPE_4    (-4064)
 %define VERR_SVM_IPE_5    (-4065)
+%define VERR_SVM_VMEXIT_FAILED    (-4066)
+%define VINF_SVM_VMEXIT    4067
+%define VINF_SVM_VMRUN    4068
 %define VERR_HM_UNKNOWN_CPU    (-4100)
 %define VERR_HM_NO_CPUID    (-4101)
 %define VERR_HM_SUSPEND_PENDING    (-4102)
@@ -823,6 +857,7 @@
 %define VERR_HM_IPE_5    (-4115)
 %define VERR_HM_INVALID_HM64ON32OP    (-4116)
 %define VINF_HM_DOUBLE_FAULT    4117
+%define VINF_HM_INTERCEPT_NOT_ACTIVE    4118
 %define VERR_DIS_INVALID_OPCODE    (-4200)
 %define VERR_DIS_GEN_FAILURE    (-4201)
 %define VERR_DIS_NO_READ_CALLBACK    (-4202)
@@ -870,6 +905,7 @@
 %define VERR_GVMM_BROKEN_IPRT    (-5202)
 %define VERR_GVMM_IPE_1    (-5203)
 %define VERR_GVMM_IPE_2    (-5204)
+%define VERR_GVMM_NOT_ALL_EMTS_DEREGISTERED    (-5205)
 %define VERR_IEM_INSTR_NOT_IMPLEMENTED    (-5300)
 %define VERR_IEM_INVALID_OPERAND_SIZE    (-5301)
 %define VERR_IEM_INVALID_ADDRESS_MODE    (-5302)
@@ -998,6 +1034,7 @@
 %define VERR_SUP_VP_REPLACE_VIRTUAL_MEMORY_FAILED    (-5673)
 %define VERR_SUP_VP_FILE_MODE_ERROR    (-5674)
 %define VERR_SUP_VP_CREATE_READ_EVT_SEM_FAILED    (-5675)
+%define VERR_SUP_VP_UNDESIRABLE_MODULE    (-5676)
 %define VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL    (-6000)
 %define VERR_EXTPACK_VBOX_VERSION_MISMATCH    (-6001)
 %define VERR_GSTCTL_GUEST_ERROR    (-6200)
diff --git a/include/VBox/err.sed b/include/VBox/err.sed
index 05a5612..a91f59e 100644
--- a/include/VBox/err.sed
+++ b/include/VBox/err.sed
@@ -1,8 +1,8 @@
 ## @file
-#
 # SED script for converting VBox/err.h to .mac.
 #
 
+#
 # Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -23,6 +23,17 @@
 # terms and conditions of either the GPL or the CDDL or both.
 #
 
+# Pass thru the file header and copyright.
+1,/^\#ifndef/{
+/^\#ifndef/b next
+s/^[/ ]//
+s/^\*\//;/
+s/\*/;/g
+3s/^.*$/;\n; Automatically generated by err.sed.  DO NOT EDIT!\n;/
+b end
+}
+:next
+
 # Handle text inside the markers.
 /SED-START/,/SED-END/{
 
diff --git a/include/VBox/log.h b/include/VBox/log.h
index 2cf1a62..1adff80 100644
--- a/include/VBox/log.h
+++ b/include/VBox/log.h
@@ -633,6 +633,8 @@ typedef enum LOGGROUP
     LOG_GROUP_MAIN_USBDEVICESTATECHANGEDEVENT,
     /** Main group, IUSBProxyBackend. */
     LOG_GROUP_MAIN_USBPROXYBACKEND,
+    /** Main group, IVBoxSVC. */
+    LOG_GROUP_MAIN_VBOXSVC,
     /** Main group, IVBoxSVCAvailabilityChangedEvent. */
     LOG_GROUP_MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT,
     /** Main group, IVetoEvent. */
@@ -1113,6 +1115,7 @@ typedef enum LOGGROUP
     "MAIN_USBDEVICEFILTERS", \
     "MAIN_USBDEVICESTATECHANGEDEVENT", \
     "MAIN_USBPROXYBACKEND", \
+    "MAIN_VBOXSVC", \
     "MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT", \
     "MAIN_VETOEVENT", \
     "MAIN_VFSEXPLORER", \
diff --git a/include/VBox/param.mac b/include/VBox/param.mac
index 1640968..40634e1 100644
--- a/include/VBox/param.mac
+++ b/include/VBox/param.mac
@@ -1,3 +1,30 @@
+;; @file
+; VirtualBox Parameter Definitions. (VMM,+)
+;
+; Automatically generated by various.sed.  DO NOT EDIT!
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
 %ifndef ___VBox_param_h
 %define ___VBox_param_h
 %if ARCH_BITS == 64
diff --git a/include/VBox/scsiinline.h b/include/VBox/scsiinline.h
index 11bd06d..0944b04 100644
--- a/include/VBox/scsiinline.h
+++ b/include/VBox/scsiinline.h
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBox_scsiinline_h
diff --git a/include/VBox/various.sed b/include/VBox/various.sed
index 3cbb69a..fb21da3 100644
--- a/include/VBox/various.sed
+++ b/include/VBox/various.sed
@@ -1,3 +1,41 @@
+# $Id: various.sed $
+## @file
+# Converts some C header elements into nasm/yasm syntax.
+#
+# This is used by 'incs' in /Maintenance.kmk (/Makefile.kmk).
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+# Pass thru the file header and copyright.
+1,/^\#ifndef/{
+/^\#ifndef/b next
+s/^[/ ]//
+s/^\*\//;/
+s/\*/;/g
+4s/^.*$/; Automatically generated by various.sed.  DO NOT EDIT!/
+b end
+}
+:next
 
 # Check for markers (typically in comments).
 /ASM-INC/basm-inc
diff --git a/include/VBox/vmm/cpum.h b/include/VBox/vmm/cpum.h
index 7a9480a..63fac33 100644
--- a/include/VBox/vmm/cpum.h
+++ b/include/VBox/vmm/cpum.h
@@ -1205,11 +1205,11 @@ VMM_INT_DECL(bool)  CPUMIsGuestInRawMode(PVMCPU pVCpu);
 VMM_INT_DECL(bool)      CPUMCanSvmNstGstTakePhysIntr(PCCPUMCTX pCtx);
 VMM_INT_DECL(bool)      CPUMCanSvmNstGstTakeVirtIntr(PCCPUMCTX pCtx);
 VMM_INT_DECL(uint8_t)   CPUMGetSvmNstGstInterrupt(PCCPUMCTX pCtx);
-VMM_INT_DECL(void)      CPUMSvmVmExitRestoreHostState(PCPUMCTX pCtx);
+VMM_INT_DECL(void)      CPUMSvmVmExitRestoreHostState(PVMCPU pVCpu, PCPUMCTX pCtx);
 VMM_INT_DECL(void)      CPUMSvmVmRunSaveHostState(PCPUMCTX pCtx, uint8_t cbInstr);
 /** @} */
 
-#ifndef VBOX_WITHOUT_UNNAMED_UNIONS
+#ifndef IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
 
 /**
  * Tests if the guest is running in real mode or not.
@@ -1332,6 +1332,7 @@ DECLINLINE(bool) CPUMIsGuestSvmEnabled(PCCPUMCTX pCtx)
  */
 DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCCPUMCTX pCtx, uint64_t fIntercept)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u64InterceptCtrl & fIntercept);
 }
@@ -1346,6 +1347,7 @@ DECLINLINE(bool) CPUMIsGuestSvmCtrlInterceptSet(PCCPUMCTX pCtx, uint64_t fInterc
  */
 DECLINLINE(bool) CPUMIsGuestSvmReadCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptRdCRx & (1 << uCr));
 }
@@ -1360,6 +1362,7 @@ DECLINLINE(bool) CPUMIsGuestSvmReadCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
  */
 DECLINLINE(bool) CPUMIsGuestSvmWriteCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptWrCRx & (1 << uCr));
 }
@@ -1374,6 +1377,7 @@ DECLINLINE(bool) CPUMIsGuestSvmWriteCRxInterceptSet(PCCPUMCTX pCtx, uint8_t uCr)
  */
 DECLINLINE(bool) CPUMIsGuestSvmReadDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptRdDRx & (1 << uDr));
 }
@@ -1388,6 +1392,7 @@ DECLINLINE(bool) CPUMIsGuestSvmReadDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
  */
 DECLINLINE(bool) CPUMIsGuestSvmWriteDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u16InterceptWrDRx & (1 << uDr));
 }
@@ -1402,6 +1407,7 @@ DECLINLINE(bool) CPUMIsGuestSvmWriteDRxInterceptSet(PCCPUMCTX pCtx, uint8_t uDr)
  */
 DECLINLINE(bool) CPUMIsGuestSvmXcptInterceptSet(PCCPUMCTX pCtx, uint8_t uVector)
 {
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
     Assert(uVector < 32);
     PCSVMVMCB pVmcb = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     return pVmcb && (pVmcb->ctrl.u32InterceptXcpt & (UINT32_C(1) << uVector));
@@ -1452,7 +1458,7 @@ DECLINLINE(bool) CPUMIsGuestInNestedHwVirtMode(PCCPUMCTX pCtx)
 {
     return CPUMIsGuestInSvmNestedHwVirtMode(pCtx) || CPUMIsGuestInVmxNestedHwVirtMode(pCtx);
 }
-#endif /* VBOX_WITHOUT_UNNAMED_UNIONS */
+#endif /* IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS */
 
 /** @} */
 
@@ -1590,6 +1596,8 @@ VMMDECL(uint32_t)       CPUMGetGuestMxCsrMask(PVM pVM);
 VMMDECL(uint64_t)       CPUMGetGuestScalableBusFrequency(PVM pVM);
 VMMDECL(int)            CPUMQueryValidatedGuestEfer(PVM pVM, uint64_t uCr0, uint64_t uOldEfer, uint64_t uNewEfer,
                                                     uint64_t *puValidEfer);
+VMMDECL(void)           CPUMSetGuestMsrEferNoCheck(PVMCPU pVCpu, uint64_t uOldEfer, uint64_t uValidEfer);
+
 
 /** @name Typical scalable bus frequency values.
  * @{ */
diff --git a/include/VBox/vmm/cpum.mac b/include/VBox/vmm/cpum.mac
index e42b56b..0496314 100644
--- a/include/VBox/vmm/cpum.mac
+++ b/include/VBox/vmm/cpum.mac
@@ -270,7 +270,7 @@ struc CPUMCTX
     .hwvirt.svm.cPauseFilter           resw          1
     .hwvirt.svm.cPauseFilterThreshold  resw          1
     .hwvirt.svm.fInterceptEvents       resb          1
-    .hwvirt.svm.u8Padding1             resb          1
+    .hwvirt.svm.fHMCachedVmcb          resb          1
     .hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES   1
     .hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES   1
     .hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES   1
diff --git a/include/VBox/vmm/cpumctx.h b/include/VBox/vmm/cpumctx.h
index 501782d..86948ce 100644
--- a/include/VBox/vmm/cpumctx.h
+++ b/include/VBox/vmm/cpumctx.h
@@ -134,7 +134,7 @@ typedef struct CPUMSYSENTER
 #ifdef VBOX_FOR_DTRACE_LIB
 # define CPUM_UNION_NM(a_Nm)  a_Nm
 # define CPUM_STRUCT_NM(a_Nm) a_Nm
-#elif defined(VBOX_WITHOUT_UNNAMED_UNIONS)
+#elif defined(IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS)
 # define CPUM_UNION_NM(a_Nm)  a_Nm
 # define CPUM_STRUCT_NM(a_Nm) a_Nm
 #else
@@ -498,8 +498,8 @@ typedef struct CPUMCTX
                 uint16_t            cPauseFilterThreshold;
                 /** 950 - Whether the injected event is subject to event intercepts. */
                 bool                fInterceptEvents;
-                /** 951 - Padding. */
-                uint8_t             u8Padding1;
+                /** 951 - Whether parts of the VMCB are cached (and potentially modified) by HM. */
+                bool                fHMCachedVmcb;
                 /** 952 - MSR permission bitmap - R0 ptr. */
                 R0PTRTYPE(void *)   pvMsrBitmapR0;
                 /** 960 / 956 - MSR permission bitmap - R3 ptr. */
diff --git a/include/VBox/vmm/hm.h b/include/VBox/vmm/hm.h
index fb4829f..974742b 100644
--- a/include/VBox/vmm/hm.h
+++ b/include/VBox/vmm/hm.h
@@ -166,7 +166,7 @@ VMM_INT_DECL(VBOXSTRICTRC)      HMSvmVmmcall(PVMCPU pVCpu, PCPUMCTX pCtx, bool *
  * @{
  */
 #ifdef VBOX_WITH_NESTED_HWVIRT
-VMM_INT_DECL(void)              HMSvmNstGstVmExitNotify(PVMCPU pVCpu, PSVMVMCB pVmcbNstGst);
+VMM_INT_DECL(void)              HMSvmNstGstVmExitNotify(PVMCPU pVCpu, PCPUMCTX pCtx);
 #endif
 /** @} */
 
diff --git a/include/VBox/vmm/hm_svm.h b/include/VBox/vmm/hm_svm.h
index bd83dcc..894c359 100644
--- a/include/VBox/vmm/hm_svm.h
+++ b/include/VBox/vmm/hm_svm.h
@@ -1005,19 +1005,16 @@ typedef struct SVMNESTEDVMCBCACHE
     uint64_t            u64CR3;
     /** Cache of CR4. */
     uint64_t            u64CR4;
+    /** Cache of EFER. */
+    uint64_t            u64EFER;
     /** @} */
 
     /** @name Other miscellaneous state.
      * @{ */
-    /** Whether the VMCB exit code and info fields are updated during \#VMEXIT
-     *  processing. */
-    bool                fExitCodeAndInfoUpdated;
     /** Cache of V_INTR_MASKING bit. */
     bool                fVIntrMasking;
-    /** Whether the fields above are updated or not. */
-    bool                fValid;
     /** Alignment. */
-    bool                afPadding0[5];
+    bool                afPadding0[7];
     /** @} */
 } SVMNESTEDVMCBCACHE;
 #pragma pack()
diff --git a/include/VBox/vmm/pdmaudioifs.h b/include/VBox/vmm/pdmaudioifs.h
index 8682b04..84d5b5c 100644
--- a/include/VBox/vmm/pdmaudioifs.h
+++ b/include/VBox/vmm/pdmaudioifs.h
@@ -660,7 +660,7 @@ typedef struct PDMAUDMIXBUFCONVOPTS
             /** Volume to use for conversion. */
             PDMAUDMIXBUFVOL Volume;
         } From;
-    };
+    } RT_UNION_NM(u);
 } PDMAUDMIXBUFCONVOPTS;
 /** Pointer to conversion parameters for the audio mixer.   */
 typedef PDMAUDMIXBUFCONVOPTS *PPDMAUDMIXBUFCONVOPTS;
@@ -917,7 +917,7 @@ typedef struct PDMAUDIOSTREAM
     {
         PDMAUDIOSTREAMIN   In;
         PDMAUDIOSTREAMOUT  Out;
-    };
+    } RT_UNION_NM(u);
     /** Data to backend-specific stream data.
      *  This data block will be casted by the backend to access its backend-dependent data.
      *
@@ -925,7 +925,7 @@ typedef struct PDMAUDIOSTREAM
     void                  *pvBackend;
     /** Size (in bytes) of the backend-specific stream data. */
     size_t                 cbBackend;
-} PDMAUDIOSTREAM, *PPDMAUDIOSTREAM;
+} PDMAUDIOSTREAM;
 
 /** Pointer to a audio connector interface. */
 typedef struct PDMIAUDIOCONNECTOR *PPDMIAUDIOCONNECTOR;
@@ -1036,7 +1036,7 @@ typedef struct PDMAUDIOCBRECORD
         {
             PDMAUDIODEVICECBTYPE enmType;
         } Device;
-    };
+    } RT_UNION_NM(u);
     /** Pointer to context data. Optional. */
     void               *pvCtx;
     /** Size (in bytes) of context data.
@@ -1240,7 +1240,7 @@ typedef struct PDMIAUDIOCONNECTOR
      */
     DECLR3CALLBACKMEMBER(int, pfnRegisterCallbacks, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOCBRECORD paCallbacks, size_t cCallbacks));
 
-} PDMIAUDIOCONNECTOR, *PPDMIAUDIOCONNECTOR;
+} PDMIAUDIOCONNECTOR;
 
 /** PDMIAUDIOCONNECTOR interface ID. */
 #define PDMIAUDIOCONNECTOR_IID                  "A643B40C-733F-4307-9549-070AF0EE0ED6"
@@ -1470,7 +1470,7 @@ typedef struct PDMIHOSTAUDIO
      */
     DECLR3CALLBACKMEMBER(void, pfnStreamCaptureEnd, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDSTREAM pStream));
 
-} PDMIHOSTAUDIO, *PPDMIHOSTAUDIO;
+} PDMIHOSTAUDIO;
 
 /** PDMIHOSTAUDIO interface ID. */
 #define PDMIHOSTAUDIO_IID                           "640F5A31-8245-491C-538F-29A0F9D08881"
diff --git a/include/VBox/x86.mac b/include/VBox/x86.mac
deleted file mode 100644
index ebc1a32..0000000
--- a/include/VBox/x86.mac
+++ /dev/null
@@ -1,2 +0,0 @@
-%error "Use iprt/x86.mac instead! This file is just here to ease incremental build pains."
-
diff --git a/include/iprt/asmdefs.mac b/include/iprt/asmdefs.mac
index 7500ea1..a64c608 100644
--- a/include/iprt/asmdefs.mac
+++ b/include/iprt/asmdefs.mac
@@ -3,7 +3,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/include/iprt/bldprog-strtab-template.cpp.h b/include/iprt/bldprog-strtab-template.cpp.h
index 0ad7486..e804f5d 100644
--- a/include/iprt/bldprog-strtab-template.cpp.h
+++ b/include/iprt/bldprog-strtab-template.cpp.h
@@ -157,6 +157,11 @@ typedef struct BLDPROGSTRTAB
 } BLDPROGSTRTAB;
 typedef BLDPROGSTRTAB *PBLDPROGSTRTAB;
 
+#if RT_CLANG_PREREQ(4, 0)
+#  pragma GCC diagnostic push
+#  pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+
 
 /**
  * Initializes the strint table compiler.
@@ -899,7 +904,7 @@ static void BldProgStrTab_PrintCStringLitteral(PBLDPROGSTRTAB pThis, PBLDPROGSTR
         }
 #else
         else
-            fprintf(pOut, "\\x%02", (unsigned)uch);
+            fprintf(pOut, "\\x%02x", (unsigned)uch);
         NOREF(pThis);
 #endif
     }
@@ -1033,5 +1038,9 @@ static void BldProgStrTab_WriteStringTable(PBLDPROGSTRTAB pThis, FILE *pOut,
 #endif
 }
 
+#if RT_CLANG_PREREQ(4, 0)
+#  pragma GCC diagnostic pop
+#endif
+
 #endif /* __cplusplus && IN_RING3 */
 
diff --git a/include/iprt/cdefs.h b/include/iprt/cdefs.h
index a5a815e..0abcf5c 100644
--- a/include/iprt/cdefs.h
+++ b/include/iprt/cdefs.h
@@ -2393,6 +2393,22 @@
 # define RT_FLEXIBLE_ARRAY_IN_NESTED_UNION      1
 #endif
 
+/** @def RT_UNION_NM
+ * For compilers (like DTrace) that does not grok nameless unions, we have a
+ * little hack to make them palatable.
+ */
+/** @def RT_STRUCT_NM
+ * For compilers (like DTrace) that does not grok nameless structs (it is
+ * non-standard C++), we have a little hack to make them palatable.
+ */
+#ifdef IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
+# define RT_UNION_NM(a_Nm)  a_Nm
+# define RT_STRUCT_NM(a_Nm) a_Nm
+#else
+# define RT_UNION_NM(a_Nm)
+# define RT_STRUCT_NM(a_Nm)
+#endif
+
 /**
  * Checks if the value is a power of two.
  *
diff --git a/include/iprt/dir.h b/include/iprt/dir.h
index b024afc..72e3152 100644
--- a/include/iprt/dir.h
+++ b/include/iprt/dir.h
@@ -29,6 +29,7 @@
 #include <iprt/cdefs.h>
 #include <iprt/types.h>
 #include <iprt/fs.h>
+#include <iprt/symlink.h>
 
 
 RT_C_DECLS_BEGIN
@@ -58,9 +59,11 @@ RTDECL(bool) RTDirExists(const char *pszPath);
 /** Set the not-content-indexed flag (default).  Windows only atm. */
 #define RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_DONT_SET      RT_BIT(1)
 /** Do not set the not-content-indexed flag.  Windows only atm. */
-#define RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_DONT_SET      RT_BIT(1)
+#define RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_SET           UINT32_C(0)
 /** Ignore errors setting the not-content-indexed flag.  Windows only atm. */
 #define RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_NOT_CRITICAL  RT_BIT(2)
+/** Valid mask. */
+#define RTDIRCREATE_FLAGS_VALID_MASK                        UINT32_C(0x00000007)
 /** @} */
 
 /**
@@ -209,9 +212,6 @@ RTDECL(int) RTDirFlush(const char *pszPath);
 RTDECL(int) RTDirFlushParent(const char *pszChild);
 
 
-/** Pointer to an open directory (sort of handle). */
-typedef struct RTDIR *PRTDIR;
-
 
 /**
  * Filter option for RTDirOpenFiltered().
@@ -283,11 +283,13 @@ typedef struct RTDIRENTRY
      * available. */
     RTINODE         INodeId;
     /** The entry type. (d_type)
-     * RTDIRENTRYTYPE_UNKNOWN is a common return value here since not all file
-     * systems (or Unixes) stores the type of a directory entry and instead
-     * expects the user to use stat() to get it.  So, when you see this you
-     * should use RTDirQueryUnknownType or RTDirQueryUnknownTypeEx to get the type,
-     * or if if you're lazy, use RTDirReadEx. */
+     *
+     * @warning RTDIRENTRYTYPE_UNKNOWN is a common return value here since not all
+     *          file systems (or Unixes) stores the type of a directory entry and
+     *          instead expects the user to use stat() to get it.  So, when you see
+     *          this you should use RTDirQueryUnknownType or RTDirQueryUnknownTypeEx
+     *          to get the type, or if if you're lazy, use RTDirReadEx.
+     */
     RTDIRENTRYTYPE  enmType;
     /** The length of the filename, excluding the terminating nul character. */
     uint16_t        cbName;
@@ -337,37 +339,51 @@ typedef RTDIRENTRYEX const *PCRTDIRENTRYEX;
  * Opens a directory.
  *
  * @returns iprt status code.
- * @param   ppDir       Where to store the open directory pointer.
+ * @param   phDir       Where to store the open directory handle.
  * @param   pszPath     Path to the directory to open.
  */
-RTDECL(int) RTDirOpen(PRTDIR *ppDir, const char *pszPath);
+RTDECL(int) RTDirOpen(RTDIR *phDir, const char *pszPath);
 
-/** @name RTDirOpenFiltered  flags.
+/** @name RTDIR_F_XXX - RTDirOpenFiltered flags.
  * @{ */
 /** Don't allow symbolic links as part of the path.
  * @remarks this flag is currently not implemented and will be ignored. */
-#define RTDIROPEN_FLAGS_NO_SYMLINKS  RT_BIT(0)
+#define RTDIR_F_NO_SYMLINKS     RT_BIT_32(0)
+/** Deny relative opening of anything above this directory. */
+#define RTDIR_F_DENY_ASCENT     RT_BIT_32(1)
+/** Valid flag mask.   */
+#define RTDIR_F_VALID_MASK      UINT32_C(0x00000003)
 /** @} */
 
 /**
- * Opens a directory filtering the entries using dos style wildcards.
+ * Opens a directory with flags and optional filtering.
  *
  * @returns iprt status code.
- * @param   ppDir       Where to store the open directory pointer.
+ * @param   phDir       Where to store the open directory handle.
  * @param   pszPath     Path to the directory to search, this must include wildcards.
  * @param   enmFilter   The kind of filter to apply. Setting this to RTDIRFILTER_NONE makes
  *                      this function behave like RTDirOpen.
- * @param   fOpen       Open flags, RTDIROPENFILTERED_FLAGS_*.
+ * @param   fFlags      Open flags, RTDIR_F_XXX.
  */
-RTDECL(int) RTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fOpen);
+RTDECL(int) RTDirOpenFiltered(RTDIR *phDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fFlags);
 
 /**
  * Closes a directory.
  *
  * @returns iprt status code.
- * @param   pDir        Pointer to open directory returned by RTDirOpen() or RTDirOpenFiltered().
+ * @param   hDir        Handle to open directory returned by RTDirOpen() or
+ *                      RTDirOpenFiltered().
+ */
+RTDECL(int) RTDirClose(RTDIR hDir);
+
+/**
+ * Checks if the supplied directory handle is valid.
+ *
+ * @returns true if valid.
+ * @returns false if invalid.
+ * @param   hDir        The directory handle.
  */
-RTDECL(int) RTDirClose(PRTDIR pDir);
+RTDECL(bool) RTDirIsValid(RTDIR hDir);
 
 /**
  * Reads the next entry in the directory.
@@ -378,7 +394,7 @@ RTDECL(int) RTDirClose(PRTDIR pDir);
  *          pcbDirEntry is specified it will be updated with the required buffer size.
  * @returns suitable iprt status code on other errors.
  *
- * @param   pDir        Pointer to the open directory.
+ * @param   hDir        Handle to the open directory.
  * @param   pDirEntry   Where to store the information about the next
  *                      directory entry on success.
  * @param   pcbDirEntry Optional parameter used for variable buffer size.
@@ -394,7 +410,7 @@ RTDECL(int) RTDirClose(PRTDIR pDir);
  *
  *                      The value is unchanged in all other cases.
  */
-RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry);
+RTDECL(int) RTDirRead(RTDIR hDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry);
 
 /**
  * Reads the next entry in the directory returning extended information.
@@ -405,7 +421,7 @@ RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry);
  *          pcbDirEntry is specified it will be updated with the required buffer size.
  * @returns suitable iprt status code on other errors.
  *
- * @param   pDir        Pointer to the open directory.
+ * @param   hDir        Handle to the open directory.
  * @param   pDirEntry   Where to store the information about the next
  *                      directory entry on success.
  * @param   pcbDirEntry Optional parameter used for variable buffer size.
@@ -425,7 +441,32 @@ RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry);
  *                      Use RTFSOBJATTRADD_NOTHING if this doesn't matter.
  * @param   fFlags      RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
  */
-RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags);
+RTDECL(int) RTDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags);
+
+/**
+ * Wrapper around RTDirReadEx that does the directory entry buffer handling.
+ *
+ * Call RTDirReadExAFree to free the buffers allocated by this function.
+ *
+ * @returns IPRT status code, see RTDirReadEx() for details.
+ *
+ * @param   hDir        Handle to the open directory.
+ * @param   ppDirEntry  Pointer to the directory entry pointer.  Initialize this
+ *                      to NULL before the first call.
+ * @param   pcbDirEntry Where the API caches the allocation size.  Set this to
+ *                      zero before the first call.
+ * @param   enmAddAttr  See RTDirReadEx.
+ * @param   fFlags      See RTDirReadEx.
+ */
+RTDECL(int) RTDirReadExA(RTDIR hDir, PRTDIRENTRYEX *ppDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAddAttr, uint32_t fFlags);
+
+/**
+ * Frees the buffer allocated by RTDirReadExA.
+ *
+ * @param   ppDirEntry  Pointer to the directory entry pointer.
+ * @param   pcbDirEntry Where the API caches the allocation size.
+ */
+RTDECL(void) RTDirReadExAFree(PRTDIRENTRYEX *ppDirEntry, size_t *pcbDirEntry);
 
 /**
  * Resolves RTDIRENTRYTYPE_UNKNOWN values returned by RTDirRead.
@@ -498,12 +539,12 @@ RTDECL(int) RTDirRename(const char *pszSrc, const char *pszDst, unsigned fRename
  *
  * @returns iprt status code.
  *
- * @param   pDir        Pointer to the open directory.
+ * @param   hDir                    Handle to the open directory.
  * @param   pObjInfo                Object information structure to be filled on successful return.
  * @param   enmAdditionalAttribs    Which set of additional attributes to request.
  *                                  Use RTFSOBJATTRADD_NOTHING if this doesn't matter.
  */
-RTR3DECL(int) RTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs);
+RTR3DECL(int) RTDirQueryInfo(RTDIR hDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs);
 
 
 /**
@@ -512,7 +553,7 @@ RTR3DECL(int) RTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD
  * @returns iprt status code.
  * @returns VERR_NOT_SUPPORTED is returned if the operation isn't supported by the OS.
  *
- * @param   pDir        Pointer to the open directory.
+ * @param   hDir                Handle to the open directory.
  * @param   pAccessTime         Pointer to the new access time. NULL if not to be changed.
  * @param   pModificationTime   Pointer to the new modifcation time. NULL if not to be changed.
  * @param   pChangeTime         Pointer to the new change time. NULL if not to be changed.
@@ -529,9 +570,258 @@ RTR3DECL(int) RTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD
  *
  * @remark  POSIX can only set Access & Modification and will always set both.
  */
-RTR3DECL(int) RTDirSetTimes(PRTDIR pDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+RTR3DECL(int) RTDirSetTimes(RTDIR hDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
                             PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime);
 
+
+/** @defgroup grp_rt_dir_rel    Directory relative APIs
+ *
+ * This group of APIs allows working with paths that are relative to an open
+ * directory, therebye eliminating some classic path related race conditions on
+ * systems with native support for these kinds of operations.
+ *
+ * On NT (Windows) there is native support for addressing files, directories and
+ * stuff _below_ the open directory.  It is not possible to go upwards
+ * (hDir:../../grandparent), at least not with NTFS, forcing us to use the
+ * directory path as a fallback and opening us to potential races.
+ *
+ * On most unix-like systems here is now native support for all of this.
+ *
+ * @{ */
+
+/**
+ * Open a file relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory to open relative to.
+ * @param   pszRelFilename  The relative path to the file.
+ * @param   fOpen           Open flags, i.e a combination of the RTFILE_O_XXX
+ *                          defines.  The ACCESS, ACTION and DENY flags are
+ *                          mandatory!
+ * @param   phFile          Where to store the handle to the opened file.
+ *
+ * @sa      RTFileOpen
+ */
+RTDECL(int)  RTDirRelFileOpen(RTDIR hDir, const char *pszRelFilename, uint64_t fOpen, PRTFILE phFile);
+
+
+
+/**
+ * Opens a directory relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory to open relative to.
+ * @param   pszDir          The relative path to the directory to open.
+ * @param   phDir           Where to store the directory handle.
+ *
+ * @sa      RTDirOpen
+ */
+RTDECL(int) RTDirRelDirOpen(RTDIR hDir, const char *pszDir, RTDIR *phDir);
+
+/**
+ * Opens a directory relative to @a hDir, with flags and optional filtering.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory to open relative to.
+ * @param   pszDirAndFilter The relative path to the directory to search, this
+ *                          must include wildcards.
+ * @param   enmFilter       The kind of filter to apply. Setting this to
+ *                          RTDIRFILTER_NONE makes this function behave like
+ *                          RTDirOpen.
+ * @param   fFlags          Open flags, RTDIR_F_XXX.
+ * @param   phDir           Where to store the directory handle.
+ *
+ * @sa      RTDirOpenFiltered
+ */
+RTDECL(int) RTDirRelDirOpenFiltered(RTDIR hDir, const char *pszDirAndFilter, RTDIRFILTER enmFilter,
+                                    uint32_t fFlags, RTDIR *phDir);
+
+/**
+ * Creates a directory relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the directory to create.
+ * @param   fMode           The mode of the new directory.
+ * @param   fCreate         Create flags, RTDIRCREATE_FLAGS_XXX.
+ * @param   phSubDir        Where to return the handle of the created directory.
+ *                          Optional.
+ *
+ * @sa      RTDirCreate
+ */
+RTDECL(int) RTDirRelDirCreate(RTDIR hDir, const char *pszRelPath, RTFMODE fMode, uint32_t fCreate, RTDIR *phSubDir);
+
+/**
+ * Removes a directory relative to @a hDir if empty.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the directory to remove.
+ *
+ * @sa      RTDirRemove
+ */
+RTDECL(int) RTDirRelDirRemove(RTDIR hDir, const char *pszRelPath);
+
+
+/**
+ * Query information about a file system object relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @retval  VINF_SUCCESS if the object exists, information returned.
+ * @retval  VERR_PATH_NOT_FOUND if any but the last component in the specified
+ *          path was not found or was not a directory.
+ * @retval  VERR_FILE_NOT_FOUND if the object does not exist (but path to the
+ *          parent directory exists).
+ *
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   pObjInfo        Object information structure to be filled on successful
+ *                          return.
+ * @param   enmAddAttr      Which set of additional attributes to request.
+ *                          Use RTFSOBJATTRADD_NOTHING if this doesn't matter.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathQueryInfoEx
+ */
+RTDECL(int) RTDirRelPathQueryInfo(RTDIR hDir, const char *pszRelPath, PRTFSOBJINFO pObjInfo,
+                                  RTFSOBJATTRADD enmAddAttr, uint32_t fFlags);
+
+/**
+ * Changes the mode flags of a file system object relative to @a hDir.
+ *
+ * The API requires at least one of the mode flag sets (Unix/Dos) to
+ * be set. The type is ignored.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   fMode           The new file mode, see @ref grp_rt_fs for details.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathSetMode
+ */
+RTDECL(int) RTDirRelPathSetMode(RTDIR hDir, const char *pszRelPath, RTFMODE fMode, uint32_t fFlags);
+
+/**
+ * Changes one or more of the timestamps associated of file system object
+ * relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir                The directory @a pszRelPath is relative to.
+ * @param   pszRelPath          The relative path to the file system object.
+ * @param   pAccessTime         Pointer to the new access time.
+ * @param   pModificationTime   Pointer to the new modification time.
+ * @param   pChangeTime         Pointer to the new change time. NULL if not to be changed.
+ * @param   pBirthTime          Pointer to the new time of birth. NULL if not to be changed.
+ * @param   fFlags              RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @remark  The file system might not implement all these time attributes,
+ *          the API will ignore the ones which aren't supported.
+ *
+ * @remark  The file system might not implement the time resolution
+ *          employed by this interface, the time will be chopped to fit.
+ *
+ * @remark  The file system may update the change time even if it's
+ *          not specified.
+ *
+ * @remark  POSIX can only set Access & Modification and will always set both.
+ *
+ * @sa      RTPathSetTimesEx
+ */
+RTDECL(int) RTDirRelPathSetTimes(RTDIR hDir, const char *pszRelPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                 PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime, uint32_t fFlags);
+
+/**
+ * Changes the owner and/or group of a file system object relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   uid             The new file owner user id.  Pass NIL_RTUID to leave
+ *                          this unchanged.
+ * @param   gid             The new group id.  Pass NIL_RTGID to leave this
+ *                          unchanged.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathSetOwnerEx
+ */
+RTDECL(int) RTDirRelPathSetOwner(RTDIR hDir, const char *pszRelPath, uint32_t uid, uint32_t gid, uint32_t fFlags);
+
+/**
+ * Renames a directory relative path within a filesystem.
+ *
+ * This will rename symbolic links.  If RTPATHRENAME_FLAGS_REPLACE is used and
+ * pszDst is a symbolic link, it will be replaced and not its target.
+ *
+ * @returns IPRT status code.
+ * @param   hDirSrc         The directory the source path is relative to.
+ * @param   pszSrc          The source path, relative to @a hDirSrc.
+ * @param   hDirDst         The directory the destination path is relative to.
+ * @param   pszDst          The destination path, relative to @a hDirDst.
+ * @param   fRename         Rename flags, RTPATHRENAME_FLAGS_XXX.
+ *
+ * @sa      RTPathRename
+ */
+RTDECL(int) RTDirRelPathRename(RTDIR hDirSrc, const char *pszSrc, RTDIR hDirDst, const char *pszDst, unsigned fRename);
+
+/**
+ * Removes the last component of the directory relative path.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   fUnlink         Unlink flags, RTPATHUNLINK_FLAGS_XXX.
+ *
+ * @sa      RTPathUnlink
+ */
+RTDECL(int) RTDirRelPathUnlink(RTDIR hDir, const char *pszRelPath, uint32_t fUnlink);
+
+
+
+/**
+ * Creates a symbolic link (@a pszSymlink) relative to @a hDir targeting @a
+ * pszTarget.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszSymlink is relative to.
+ * @param   pszSymlink      The relative path of the symbolic link.
+ * @param   pszTarget       The path to the symbolic link target.  This is
+ *                          relative to @a pszSymlink or an absolute path.
+ * @param   enmType         The symbolic link type.  For Windows compatability
+ *                          it is very important to set this correctly.  When
+ *                          RTSYMLINKTYPE_UNKNOWN is used, the API will try
+ *                          make a guess and may attempt query information
+ *                          about @a pszTarget in the process.
+ * @param   fCreate         Create flags, RTSYMLINKCREATE_FLAGS_XXX.
+ *
+ * @sa      RTSymlinkCreate
+ */
+RTDECL(int) RTDirRelSymlinkCreate(RTDIR hDir, const char *pszSymlink, const char *pszTarget,
+                                  RTSYMLINKTYPE enmType, uint32_t fCreate);
+
+/**
+ * Read the symlink target relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @retval  VERR_NOT_SYMLINK if @a pszSymlink does not specify a symbolic link.
+ * @retval  VERR_BUFFER_OVERFLOW if the link is larger than @a cbTarget.  The
+ *          buffer will contain what all we managed to read, fully terminated
+ *          if @a cbTarget > 0.
+ *
+ * @param   hDir            The directory @a pszSymlink is relative to.
+ * @param   pszSymlink      The relative path to the symbolic link that should
+ *                          be read.
+ * @param   pszTarget       The target buffer.
+ * @param   cbTarget        The size of the target buffer.
+ * @param   fRead           Read flags, RTSYMLINKREAD_FLAGS_XXX.
+ *
+ * @sa      RTSymlinkRead
+ */
+RTDECL(int) RTDirRelSymlinkRead(RTDIR hDir, const char *pszSymlink, char *pszTarget, size_t cbTarget, uint32_t fRead);
+
+/** @} */
+
+
 /** @} */
 
 RT_C_DECLS_END
diff --git a/include/iprt/dvm.h b/include/iprt/dvm.h
index a511daa..8ebcefa 100644
--- a/include/iprt/dvm.h
+++ b/include/iprt/dvm.h
@@ -48,6 +48,8 @@ typedef enum RTDVMVOLTYPE
     RTDVMVOLTYPE_UNKNOWN,
     /** Volume hosts a NTFS filesystem. */
     RTDVMVOLTYPE_NTFS,
+    /** Volume hosts a FAT12 filesystem. */
+    RTDVMVOLTYPE_FAT12,
     /** Volume hosts a FAT16 filesystem. */
     RTDVMVOLTYPE_FAT16,
     /** Volume hosts a FAT32 filesystem. */
@@ -81,12 +83,12 @@ typedef enum RTDVMVOLTYPE
 /** DVM flags - Blocks are always marked as unused if the volume has
  *              no block status callback set.
  *              The default is to mark them as used. */
-#define DVM_FLAGS_NO_STATUS_CALLBACK_MARK_AS_UNUSED    RT_BIT_32(0)
+#define DVM_FLAGS_NO_STATUS_CALLBACK_MARK_AS_UNUSED     RT_BIT_32(0)
 /** DVM flags - Space which is unused in the map will be marked as used
  *              when calling RTDvmMapQueryBlockStatus(). */
-#define DVM_FLAGS_UNUSED_SPACE_MARK_AS_USED            RT_BIT_32(1)
+#define DVM_FLAGS_UNUSED_SPACE_MARK_AS_USED             RT_BIT_32(1)
 /** Mask of all valid flags. */
-#define DVM_FLAGS_MASK (DVM_FLAGS_NO_STATUS_CALLBACK_MARK_AS_UNUSED | DVM_FLAGS_UNUSED_SPACE_MARK_AS_USED)
+#define DVM_FLAGS_VALID_MASK                            UINT32_C(0x00000003)
 /** @}  */
 
 
@@ -113,32 +115,6 @@ typedef RTDVMVOLUME                *PRTDVMVOLUME;
 #define NIL_RTDVMVOLUME             ((RTDVMVOLUME)~0)
 
 /**
- * Callback to read data from the underlying medium.
- *
- * @returns IPRT status code.
- * @param   pvUser    Opaque user data passed on creation.
- * @param   off       Offset to start reading from.
- * @param   pvBuf     Where to store the read data.
- * @param   cbRead    How many bytes to read.
- */
-typedef DECLCALLBACK(int) FNDVMREAD(void *pvUser, uint64_t off, void *pvBuf, size_t cbRead);
-/** Pointer to a read callback. */
-typedef FNDVMREAD *PFNDVMREAD;
-
-/**
- * Callback to write data to the underlying medium.
- *
- * @returns IPRT status code.
- * @param   pvUser    Opaque user data passed on creation.
- * @param   off       Offset to start writing to.
- * @param   pvBuf     The data to write.
- * @param   cbRead    How many bytes to write.
- */
-typedef DECLCALLBACK(int) FNDVMWRITE(void *pvUser, uint64_t off, const void *pvBuf, size_t cbWrite);
-/** Pointer to a read callback. */
-typedef FNDVMWRITE *PFNDVMWRITE;
-
-/**
  * Callback for querying the block allocation status of a volume.
  *
  * @returns IPRT status code.
@@ -158,19 +134,11 @@ typedef FNDVMVOLUMEQUERYBLOCKSTATUS *PFNDVMVOLUMEQUERYBLOCKSTATUS;
  * @returns IPRT status.
  * @param   phVolMgr    Where to store the handle to the volume manager on
  *                      success.
- * @param   pfnRead     Read callback for the underlying
- *                      disk/container/whatever.
- * @param   pfnWrite    Write callback for the underlying
- *                      disk/container/whatever.
- * @param   cbDisk      Size of the underlying disk in bytes.
+ * @param   hVfsFile    The disk/container/whatever.
  * @param   cbSector    Size of one sector in bytes.
  * @param   fFlags      Combination of RTDVM_FLAGS_*
- * @param   pvUser      Opaque user data passed to the callbacks.
  */
-RTDECL(int) RTDvmCreate(PRTDVM phVolMgr, PFNDVMREAD pfnRead,
-                        PFNDVMWRITE pfnWrite, uint64_t cbDisk,
-                        uint64_t cbSector, uint32_t fFlags,
-                        void *pvUser);
+RTDECL(int) RTDvmCreate(PRTDVM phVolMgr, RTVFSFILE hVfsFile, uint32_t cbSector, uint32_t fFlags);
 
 /**
  * Retain a given volume manager.
@@ -208,12 +176,39 @@ RTDECL(int) RTDvmMapOpen(RTDVM hVolMgr);
 RTDECL(int) RTDvmMapInitialize(RTDVM hVolMgr, const char *pszFmt);
 
 /**
- * Gets the currently used format of the disk map.
+ * Gets the name of the currently used format of the disk map.
  *
  * @returns Name of the format.
  * @param   hVolMgr     The volume manager handle.
  */
-RTDECL(const char *) RTDvmMapGetFormat(RTDVM hVolMgr);
+RTDECL(const char *) RTDvmMapGetFormatName(RTDVM hVolMgr);
+
+/**
+ * DVM format types.
+ */
+typedef enum RTDVMFORMATTYPE
+{
+    /** Invalid zero value. */
+    RTDVMFORMATTYPE_INVALID = 0,
+    /** Master boot record. */
+    RTDVMFORMATTYPE_MBR,
+    /** GUID partition table. */
+    RTDVMFORMATTYPE_GPT,
+    /** BSD labels. */
+    RTDVMFORMATTYPE_BSD_LABLE,
+    /** End of valid values. */
+    RTDVMFORMATTYPE_END,
+    /** 32-bit type size hack. */
+    RTDVMFORMATTYPE_32BIT_HACK = 0x7fffffff
+} RTDVMFORMATTYPE;
+
+/**
+ * Gets the format type of the current disk map.
+ *
+ * @returns Format type. RTDVMFORMATTYPE_INVALID on invalid input.
+ * @param   hVolMgr     The volume manager handle.
+ */
+RTDECL(RTDVMFORMATTYPE) RTDvmMapGetFormatType(RTDVM hVolMgr);
 
 /**
  * Gets the number of valid partitions in the map.
@@ -259,12 +254,11 @@ RTDECL(int) RTDvmMapQueryNextVolume(RTDVM hVolMgr, RTDVMVOLUME hVol, PRTDVMVOLUM
  * @param   hVolMgr         The volume manager handler.
  * @param   off             The start offset to check for.
  * @param   cb              The range in bytes to check.
- * @param   pfAllocated     Where to store the status on success.
+ * @param   pfAllocated     Where to store the in-use status on success.
  *
  * @remark This method will return true even if a part of the range is not in use.
  */
-RTDECL(int) RTDvmMapQueryBlockStatus(RTDVM hVolMgr, uint64_t off, uint64_t cb,
-                                     bool *pfAllocated);
+RTDECL(int) RTDvmMapQueryBlockStatus(RTDVM hVolMgr, uint64_t off, uint64_t cb, bool *pfAllocated);
 
 /**
  * Retains a valid volume handle.
@@ -367,9 +361,10 @@ RTDECL(const char *) RTDvmVolumeTypeGetDescr(RTDVMVOLTYPE enmVolType);
  *
  * @returns IPRT status code.
  * @param   hVol            The volume handle.
+ * @param   fOpen           RTFILE_O_XXX.
  * @param   phVfsFileOut    Where to store the VFS file handle on success.
  */
-RTDECL(int) RTDvmVolumeCreateVfsFile(RTDVMVOLUME hVol, PRTVFSFILE phVfsFileOut);
+RTDECL(int) RTDvmVolumeCreateVfsFile(RTDVMVOLUME hVol, uint64_t fOpen, PRTVFSFILE phVfsFileOut);
 
 RT_C_DECLS_END
 
diff --git a/include/iprt/err.h b/include/iprt/err.h
index 23d987b..df84c3d 100644
--- a/include/iprt/err.h
+++ b/include/iprt/err.h
@@ -2078,6 +2078,9 @@ RT_C_DECLS_END
 #define VERR_VFS_CHAIN_TYPE_MISMATCH_PATH_ONLY      (-22156)
 /** VFS chain doesn't end with a path only element. */
 #define VERR_VFS_CHAIN_NOT_PATH_ONLY                (-22157)
+/** The path only element at the end of the VFS chain is too short to make out
+ *  the parent directory. */
+#define VERR_VFS_CHAIN_TOO_SHORT_FOR_PARENT         (-22158)
 /** @} */
 
 /** @name RTDvm status codes
diff --git a/include/iprt/err.mac b/include/iprt/err.mac
index 83f9207..e71606d 100644
--- a/include/iprt/err.mac
+++ b/include/iprt/err.mac
@@ -1,3 +1,30 @@
+;; @file
+; IPRT - Status Codes.
+;
+; Automatically generated by err.sed.  DO NOT EDIT!
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
 %define VINF_SUCCESS    0
 %define VERR_GENERAL_FAILURE    (-1)
 %define VERR_INVALID_PARAMETER    (-2)
@@ -193,6 +220,7 @@
 %define VERR_TOO_MANY_SYMLINKS    (-156)
 %define VERR_NS_SYMLINK_SET_TIME    (-157)
 %define VERR_NS_SYMLINK_CHANGE_OWNER    (-158)
+%define VERR_SYMLINK_NOT_ALLOWED    (-159)
 %define VERR_SEARCH_ERROR    (-200)
 %define VERR_NO_MORE_FILES    (-201)
 %define VERR_NO_MORE_SEARCH_HANDLES    (-202)
@@ -500,11 +528,57 @@
 %define VERR_VFS_CHAIN_EXPECTED_LEFT_PARENTHESES    (-22104)
 %define VERR_VFS_CHAIN_EXPECTED_RIGHT_PARENTHESES    (-22105)
 %define VERR_VFS_CHAIN_EXPECTED_PROVIDER_NAME    (-22106)
-%define VERR_VFS_CHAIN_EXPECTED_ACTION    (-22107)
-%define VERR_VFS_CHAIN_MULTIPLE_ACTIONS    (-22108)
-%define VERR_VFS_CHAIN_NO_ACTION    (-22109)
-%define VERR_VFS_CHAIN_EXPECTED_PIPE    (-22110)
-%define VERR_VFS_CHAIN_UNEXPECTED_ACTION_TYPE    (-22111)
+%define VERR_VFS_CHAIN_EXPECTED_SEPARATOR    (-22107)
+%define VERR_VFS_CHAIN_LEADING_SEPARATOR    (-22108)
+%define VERR_VFS_CHAIN_TRAILING_SEPARATOR    (-22109)
+%define VERR_VFS_CHAIN_MUST_BE_FIRST_ELEMENT    (-22110)
+%define VERR_VFS_CHAIN_CANNOT_BE_FIRST_ELEMENT    (-22111)
+%define VERR_VFS_CHAIN_CAST_FAILED    (-22112)
+%define VERR_VFS_CHAIN_IPE    (-22113)
+%define VERR_VFS_CHAIN_PROVIDER_NOT_FOUND    (-22114)
+%define VERR_VFS_CHAIN_FINAL_TYPE_MISMATCH    (-22115)
+%define VERR_VFS_CHAIN_NO_ARGS    (-22116)
+%define VERR_VFS_CHAIN_ONE_ARG    (-22117)
+%define VERR_VFS_CHAIN_AT_MOST_ONE_ARG    (-22118)
+%define VERR_VFS_CHAIN_AT_LEAST_ONE_ARG    (-22119)
+%define VERR_VFS_CHAIN_TWO_ARGS    (-22120)
+%define VERR_VFS_CHAIN_AT_LEAST_TWO_ARGS    (-22121)
+%define VERR_VFS_CHAIN_AT_MOST_TWO_ARGS    (-22122)
+%define VERR_VFS_CHAIN_THREE_ARGS    (-22123)
+%define VERR_VFS_CHAIN_AT_LEAST_THREE_ARGS    (-22124)
+%define VERR_VFS_CHAIN_AT_MOST_THREE_ARGS    (-22125)
+%define VERR_VFS_CHAIN_FOUR_ARGS    (-22126)
+%define VERR_VFS_CHAIN_AT_LEAST_FOUR_ARGS    (-22127)
+%define VERR_VFS_CHAIN_AT_MOST_FOUR_ARGS    (-22128)
+%define VERR_VFS_CHAIN_FIVE_ARGS    (-22129)
+%define VERR_VFS_CHAIN_AT_LEAST_FIVE_ARGS    (-22130)
+%define VERR_VFS_CHAIN_AT_MOST_FIVE_ARGS    (-22131)
+%define VERR_VFS_CHAIN_SIX_ARGS    (-22132)
+%define VERR_VFS_CHAIN_AT_LEAST_SIX_ARGS    (-22133)
+%define VERR_VFS_CHAIN_AT_MOST_SIX_ARGS    (-22134)
+%define VERR_VFS_CHAIN_TOO_FEW_ARGS    (-22135)
+%define VERR_VFS_CHAIN_TOO_MANY_ARGS    (-22136)
+%define VERR_VFS_CHAIN_EMPTY_ARG    (-22137)
+%define VERR_VFS_CHAIN_INVALID_ARGUMENT    (-22138)
+%define VERR_VFS_CHAIN_ONLY_FILE_OR_IOS    (-22139)
+%define VERR_VFS_CHAIN_ONLY_IOS    (-22140)
+%define VERR_VFS_CHAIN_ONLY_DIR    (-22141)
+%define VERR_VFS_CHAIN_ONLY_FSS    (-22142)
+%define VERR_VFS_CHAIN_ONLY_VFS    (-22143)
+%define VERR_VFS_CHAIN_ONLY_FILE_OR_IOS_OR_DIR    (-22144)
+%define VERR_VFS_CHAIN_ONLY_DIR_OR_VFS    (-22145)
+%define VERR_VFS_CHAIN_TAKES_FILE    (-22146)
+%define VERR_VFS_CHAIN_TAKES_FILE_OR_IOS    (-22147)
+%define VERR_VFS_CHAIN_TAKES_DIR    (-22148)
+%define VERR_VFS_CHAIN_TAKES_FSS    (-22149)
+%define VERR_VFS_CHAIN_TAKES_VFS    (-22150)
+%define VERR_VFS_CHAIN_TAKES_DIR_OR_VFS    (-22151)
+%define VERR_VFS_CHAIN_TAKES_DIR_OR_FSS_OR_VFS    (-22152)
+%define VERR_VFS_CHAIN_READ_ONLY_IOS    (-22153)
+%define VERR_VFS_CHAIN_WRITE_ONLY_IOS    (-22154)
+%define VERR_VFS_CHAIN_PATH_ONLY    (-22155)
+%define VERR_VFS_CHAIN_TYPE_MISMATCH_PATH_ONLY    (-22156)
+%define VERR_VFS_CHAIN_NOT_PATH_ONLY    (-22157)
 %define VERR_DVM_MAP_EMPTY    (-22200)
 %define VERR_DVM_MAP_NO_VOLUME    (-22201)
 %define VERR_LOG_REVISION_MISMATCH    (-22300)
@@ -790,3 +864,141 @@
 %define VERR_JSON_VALUE_INVALID_TYPE    (-24700)
 %define VERR_JSON_ITERATOR_END    (-24701)
 %define VERR_JSON_MALFORMED    (-24702)
+%define VERR_VFS_UNKNOWN_FORMAT    (-24800)
+%define VERR_VFS_BOGUS_FORMAT    (-24801)
+%define VERR_VFS_BOGUS_OFFSET    (-24802)
+%define VERR_VFS_UNSUPPORTED_FORMAT    (-24803)
+%define VERR_ISOMK_BOOT_CAT_NO_VALIDATION_ENTRY    (-25000)
+%define VERR_ISOMK_BOOT_CAT_NO_DEFAULT_ENTRY    (-25001)
+%define VERR_ISOMK_BOOT_CAT_EXPECTED_SECTION_HEADER    (-25002)
+%define VERR_ISOMK_BOOT_CAT_EMPTY_ENTRY    (-25003)
+%define VERR_ISOMK_BOOT_CAT_INVALID_SECTION_SIZE    (-25004)
+%define VERR_ISOMK_BOOT_CAT_ERRATIC_ENTRY    (-25005)
+%define VERR_ISOMK_FILE_TOO_BIG_REQ_ISO_LEVEL_3    (-25006)
+%define VERR_ISOMK_SYMLINK_REQ_ROCK_RIDGE    (-25007)
+%define VINF_ISOMK_SYMLINK_REQ_ROCK_RIDGE    (25007)
+%define VERR_ISOMK_SYMLINK_SUPPORT_DISABLED    (-25008)
+%define VERR_ISOMK_RR_NO_SPACE_FOR_CE    (-25009)
+%define VERR_ISOMK_IPE_RR_READ    (-25010)
+%define VERR_ISOMK_IPE_TABLE    (-25011)
+%define VERR_ISOMK_IPE_NAMESPACE_1    (-25012)
+%define VERR_ISOMK_IPE_NAMESPACE_2    (-25013)
+%define VERR_ISOMK_IPE_NAMESPACE_3    (-25014)
+%define VERR_ISOMK_IPE_NAMESPACE_4    (-25015)
+%define VERR_ISOMK_IPE_NAMESPACE_5    (-25016)
+%define VERR_ISOMK_IPE_NAMESPACE_6    (-25017)
+%define VERR_ISOMK_IPE_EMPTY_PATH    (-25018)
+%define VERR_ISOMK_IPE_EMPTY_COMPONENT    (-25019)
+%define VERR_ISOMK_IPE_ROOT_SLASH    (-25020)
+%define VERR_ISOMK_IPE_DESC_COUNT    (-25021)
+%define VERR_ISOMK_IPE_BUFFER_SIZE    (-25022)
+%define VERR_ISOMK_IPE_BOOT_CAT_FILE    (-25023)
+%define VERR_ISOMK_IPE_PRODUCE_TRANS_TBL    (-25024)
+%define VERR_ISOMK_IPE_READ_FILE_DATA_1    (-25025)
+%define VERR_ISOMK_IPE_READ_FILE_DATA_2    (-25026)
+%define VERR_ISOMK_IPE_READ_FILE_DATA_3    (-25027)
+%define VERR_ISOMK_IPE_FINALIZE_1    (-25028)
+%define VERR_ISOMK_RR_SPILL_FILE_FULL    (-25029)
+%define VERR_ISOMK_IMPORT_UNKNOWN_FORMAT    (-25100)
+%define VERR_ISOMK_IMPORT_TOO_MANY_VOL_DESCS    (-25101)
+%define VERR_ISOMK_IMPORT_INVALID_VOL_DESC_HDR    (-25102)
+%define VERR_ISOMK_IMPORT_MULTIPLE_PRIMARY_VOL_DESCS    (-25103)
+%define VERR_ISOMK_IMPORT_MULTIPLE_EL_TORITO_DESCS    (-25104)
+%define VERR_ISOMK_IMPORT_MULTIPLE_JOLIET_VOL_DESCS    (-25105)
+%define VERR_ISOMK_IMPORT_SUPPLEMENTARY_BEFORE_PRIMARY    (-25106)
+%define VERR_IOSMK_IMPORT_PRIMARY_VOL_DESC_VER    (-25107)
+%define VERR_ISOMK_IMPORT_BAD_PRIMARY_VOL_DESC    (-25108)
+%define VERR_IOSMK_IMPORT_SUP_VOL_DESC_VER    (-25109)
+%define VERR_ISOMK_IMPORT_BAD_SUP_VOL_DESC    (-25110)
+%define VERR_ISOMK_IMPORT_LOGICAL_BLOCK_SIZE_NOT_2KB    (-25111)
+%define VERR_ISOMK_IMPORT_MORE_THAN_ONE_VOLUME_IN_SET    (-25112)
+%define VERR_ISOMK_IMPORT_INVALID_VOLUMNE_SEQ_NO    (-25113)
+%define VERR_ISOMK_IMPORT_VOLUME_SPACE_SIZE_MISMATCH    (-25114)
+%define VERR_ISOMK_IMPORT_VOLUME_IN_SET_MISMATCH    (-25115)
+%define VERR_ISOMK_IMPORT_BAD_ROOT_DIR_REC    (-25116)
+%define VERR_ISOMK_IMPORT_ZERO_SIZED_ROOT_DIR    (-25117)
+%define VERR_ISOMK_IMPORT_ROOT_VOLUME_SEQ_NO    (-25118)
+%define VERR_ISOMK_IMPORT_ROOT_DIR_EXTENT_OUT_OF_BOUNDS    (-25119)
+%define VERR_ISOMK_IMPORT_BAD_ROOT_DIR_REC_LENGTH    (-25120)
+%define VERR_ISOMK_IMPORT_ROOT_DIR_WITHOUT_DIR_FLAG    (-25121)
+%define VERR_ISOMK_IMPORT_ROOT_DIR_IS_MULTI_EXTENT    (-25122)
+%define VERR_ISOMK_IMPORT_TOO_DEEP_DIR_TREE    (-25123)
+%define VERR_ISOMK_IMPORT_BAD_DIR_REC    (-25124)
+%define VERR_ISOMK_IMPORT_DIR_REC_VOLUME_SEQ_NO    (-25125)
+%define VERR_ISOMK_IMPORT_DIR_REC_EXTENT_OUT_OF_BOUNDS    (-25126)
+%define VERR_ISOMK_IMPORT_BAD_DIR_REC_LENGTH    (-25127)
+%define VERR_ISOMK_IMPORT_DOT_DIR_REC_BAD_NAME_LENGTH    (-25128)
+%define VERR_ISOMK_IMPORT_DOT_DIR_REC_BAD_NAME    (-25129)
+%define VERR_ISOMK_IMPORT_DIR_WITH_MORE_EXTENTS    (-25130)
+%define VERR_ISOMK_IMPORT_MISMATCHING_MULTI_EXTENT_REC    (-25131)
+%define VERR_ISOMK_IMPORT_MISALIGNED_MULTI_EXTENT    (-25132)
+%define VERR_ISOMK_IMPORT_NON_CONTIGUOUS_MULTI_EXTENT    (-25133)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_OUT_OF_BOUNDS    (-25140)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_HEADER_ID    (-25141)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_KEYS    (-25142)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_BAD_VALIDATION_CHECKSUM    (-25143)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_UNKNOWN_HEADER_ID    (-25144)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_INVALID_BOOT_MEDIA_TYPE    (-25145)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_DEF_ENTRY_INVALID_FLAGS    (-25146)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_RESERVED_FLAG    (-25147)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_USES_UNUSED_FIELD    (-25148)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_IMAGE_OUT_OF_BOUNDS    (-25149)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_UNKNOWN_IMAGE_SIZE    (-25150)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_MISSING_FINAL_OR_TOO_BIG    (-25151)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_DEF_ENTRY_INVALID_BOOT_IND    (-25152)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_INVALID_ID    (-25153)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_UNDEFINED_FLAGS    (-25154)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_EXT_ENTRY_END_OF_SECTOR    (-25155)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_CONTINUATION_WITH_NONE    (-25156)
+%define VERR_ISOMK_IMPORT_BOOT_CAT_ENTRY_CONTINUATION_EOS    (-25157)
+%define VERR_ISOFS_TAG_IS_ALL_ZEROS    (-25300)
+%define VERR_ISOFS_UNSUPPORTED_TAG_VERSION    (-25301)
+%define VERR_ISOFS_BAD_TAG_CHECKSUM    (-25302)
+%define VERR_ISOFS_TAG_SECTOR_MISMATCH    (-25303)
+%define VERR_ISOFS_DESC_CRC_MISMATCH    (-25304)
+%define VERR_ISOFS_INSUFFICIENT_DATA_FOR_DESC_CRC    (-25305)
+%define VERR_ISOFS_UNEXPECTED_VDS_DESC    (-25306)
+%define VERR_ISOFS_TOO_MANY_PVDS    (-25307)
+%define VERR_ISOFS_TOO_MANY_LVDS    (-25308)
+%define VERR_ISOFS_TOO_MANY_PDS    (-25309)
+%define VERR_ISOFS_TOO_BIT_PARTMAP_IN_LVD    (-25310)
+%define VERR_ISOFS_NO_PVD    (-25311)
+%define VERR_ISOFS_NO_LVD    (-25312)
+%define VERR_ISOFS_NO_PD    (-25313)
+%define VERR_ISOFS_MULTIPLE_PVDS    (-25314)
+%define VERR_ISOFS_MULTIPLE_LVDS    (-25315)
+%define VERR_ISOFS_TOO_MANY_PART_MAPS    (-25316)
+%define VERR_ISOFS_MALFORMED_PART_MAP_TABLE    (-25317)
+%define VERR_ISOFS_PARTITION_NOT_FOUND    (-25318)
+%define VERR_ISOFS_INCOMPLETE_PART_MAP_TABLE    (-25319)
+%define VERR_ISOFS_UNKNOWN_PART_MAP_ENTRY_TYPE    (-25320)
+%define VERR_ISOFS_UNKNOWN_PART_MAP_TYPE_ID    (-25321)
+%define VERR_ISOFS_VPM_NOT_SUPPORTED    (-25322)
+%define VERR_ISOFS_SPM_NOT_SUPPORTED    (-25323)
+%define VERR_ISOFS_MPM_NOT_SUPPORTED    (-25324)
+%define VERR_ISOFS_UNSUPPORTED_LOGICAL_BLOCK_SIZE    (-25325)
+%define VERR_ISOFS_BAD_LVD_DOMAIN_ID    (-25326)
+%define VERR_ISOFS_BAD_LVD_FILE_SET_DESC_LOCATION    (-25327)
+%define VERR_ISOFS_BAD_LVD_DESC_CHAR_SET    (-25329)
+%define VERR_ISOFS_INVALID_PARTITION_INDEX    (-25330)
+%define VERR_ISOFS_FSD_UNSUPPORTED_CHAR_SET    (-25331)
+%define VERR_ISOFS_FSD_ZERO_ROOT_DIR    (-25332)
+%define VERR_ISOFS_FSD_NEXT_EXTENT    (-25333)
+%define VERR_ISOFS_ICB_TOO_BIG    (-25334)
+%define VERR_ISOFS_ICB_TOO_SMALL    (-25335)
+%define VERR_ISOFS_NO_DIRECT_ICB_ENTRIES    (-25336)
+%define VERR_ISOFS_TOO_MANY_ICB_INDIRECTIONS    (-25337)
+%define VERR_ISOFS_TOO_DEEP_ICB_RECURSION    (-25338)
+%define VERR_ISOFS_ICB_ENTRY_TOO_SMALL    (-25339)
+%define VERR_ISOFS_UNSUPPORTED_ICB    (-25340)
+%define VERR_ISOFS_BAD_FILE_ENTRY    (-25341)
+%define VERR_ISO_FS_UNKNOWN_AD_TYPE    (-25342)
+%define VERR_ISOFS_BAD_EXTAD    (-25343)
+%define VERR_ISOFS_WRONG_FILE_TYPE    (-25344)
+%define VERR_ISOFS_UNKNOWN_FILE_TYPE    (-25345)
+%define VERR_ISOFS_UDF_NOT_IMPLEMENTED    (-25390)
+%define VERR_ISOFS_IPE_1    (-25391)
+%define VERR_ISOFS_IPE_2    (-25392)
+%define VERR_ISOFS_IPE_3    (-25393)
+%define VERR_ISOFS_IPE_4    (-25394)
+%define VERR_ISOFS_IPE_5    (-25395)
diff --git a/include/iprt/err.sed b/include/iprt/err.sed
index bce2a9f..e59946f 100644
--- a/include/iprt/err.sed
+++ b/include/iprt/err.sed
@@ -3,7 +3,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/include/iprt/formats/fat.h b/include/iprt/formats/fat.h
index d0d9f4b..d7ff18a 100644
--- a/include/iprt/formats/fat.h
+++ b/include/iprt/formats/fat.h
@@ -315,7 +315,7 @@ AssertCompileSize(FATBPB331FLAT, 0x19);
 /** Pointer to a flattened DOS 3.31 BPB. */
 typedef FATBPB331FLAT *PFATBPB331FLAT;
 /** Pointer to a const flattened DOS 3.31 BPB. */
-typedef FATBPB331FLAT *PFATBPB331FLAT;
+typedef FATBPB331FLAT const *PCFATBPB331FLAT;
 
 
 /**
diff --git a/include/iprt/formats/mach-o.h b/include/iprt/formats/mach-o.h
index 0b7eb40..92dc87c 100644
--- a/include/iprt/formats/mach-o.h
+++ b/include/iprt/formats/mach-o.h
@@ -566,6 +566,8 @@ typedef struct macho_nlist_64
 #define N_WEAK_REF                  UINT16_C(0x0040)
 #define N_WEAK_DEF                  UINT16_C(0x0080)
 #define N_REF_TO_WEAK               UINT16_C(0x0080)
+#define N_SYMBOL_RESOLVER           UINT16_C(0x0100)
+#define N_ALT_ENTRY                 UINT16_C(0x0200)
 
 typedef struct macho_relocation_info
 {
diff --git a/include/iprt/fs.h b/include/iprt/fs.h
index ce445fe..24e2f46 100644
--- a/include/iprt/fs.h
+++ b/include/iprt/fs.h
@@ -303,11 +303,11 @@ typedef enum RTFSOBJATTRADD
 typedef struct RTFSOBJATTRUNIX
 {
     /** The user owning the filesystem object (st_uid).
-     * This field is NIL_UID if not supported. */
+     * This field is NIL_RTUID if not supported. */
     RTUID           uid;
 
     /** The group the filesystem object is assigned (st_gid).
-     * This field is NIL_GID if not supported. */
+     * This field is NIL_RTGID if not supported. */
     RTGID           gid;
 
     /** Number of hard links to this filesystem object (st_nlink).
diff --git a/include/iprt/getopt.h b/include/iprt/getopt.h
index d090eb9..88584d2 100644
--- a/include/iprt/getopt.h
+++ b/include/iprt/getopt.h
@@ -426,6 +426,20 @@ RTDECL(char **) RTGetOptNonOptionArrayPtr(PRTGETOPTSTATE pState);
 RTDECL(RTEXITCODE) RTGetOptPrintError(int ch, PCRTGETOPTUNION pValueUnion);
 
 /**
+ * Formats error messages for a RTGetOpt default case.
+ *
+ * @returns On success, positive count of formatted character excluding the
+ *          terminator.  On buffer overflow, negative number giving the required
+ *          buffer size (including terminator char).  (RTStrPrintf2 style.)
+ *
+ * @param   pszBuf      The buffer to format into.
+ * @param   cbBuf       The size of the buffer @a pszBuf points to.
+ * @param   ch          The RTGetOpt return value.
+ * @param   pValueUnion The value union returned by RTGetOpt.
+ */
+RTDECL(ssize_t) RTGetOptFormatError(char *pszBuf, size_t cbBuf, int ch, PCRTGETOPTUNION pValueUnion);
+
+/**
  * Parses the @a pszCmdLine string into an argv array.
  *
  * This is useful for converting a response file or similar to an argument
diff --git a/include/iprt/krnlmod.h b/include/iprt/krnlmod.h
index 682e97b..b3a9f79 100644
--- a/include/iprt/krnlmod.h
+++ b/include/iprt/krnlmod.h
@@ -32,7 +32,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_rt_kmod RTKrnlMod - Kernel module/driver userspace side API. 
+/** @defgroup grp_rt_kmod RTKrnlMod - Kernel module/driver userspace side API.
  * @ingroup grp_rt
  * @{
  */
diff --git a/include/iprt/locale.h b/include/iprt/locale.h
index b57b07b..3036765 100644
--- a/include/iprt/locale.h
+++ b/include/iprt/locale.h
@@ -98,4 +98,3 @@ RT_C_DECLS_END
 
 #endif
 
-
diff --git a/include/iprt/log.h b/include/iprt/log.h
index d073779..cc35921 100644
--- a/include/iprt/log.h
+++ b/include/iprt/log.h
@@ -456,6 +456,9 @@ typedef enum RTLOGDEST
     RTLOGDEST_RINGBUF       = 0x00000020,
     /** Open files with no deny (share read, write, delete) on Windows. */
     RTLOGDEST_F_NO_DENY     = 0x00010000,
+    /** Delay opening the log file, logging to the buffer untill
+     * RTLogClearFileDelayFlag is called. */
+    RTLOGDEST_F_DELAY_FILE  = 0x00020000,
     /** Just a dummy flag to be used when no other flag applies. */
     RTLOGDEST_DUMMY         = 0x20000000,
     /** Log to a user defined output stream. */
@@ -2016,16 +2019,16 @@ RTDECL(int) RTLogCreate(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGro
  * @param   cSecsHistoryTimeSlot Maximum time interval per log file when
  *                              performing history rotation, in seconds.
  *                              0 means time limit.
- * @param   pszErrorMsg         A buffer which is filled with an error message if something fails. May be NULL.
- * @param   cchErrorMsg         The size of the error message buffer.
+ * @param   pErrInfo            Where to return extended error information.
+ *                              Optional.
  * @param   pszFilenameFmt      Log filename format string. Standard RTStrFormat().
  * @param   ...                 Format arguments.
  */
 RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings,
                           const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups,
                           uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory,
-                          uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, char *pszErrorMsg, size_t cchErrorMsg,
-                          const char *pszFilenameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(14, 15);
+                          uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, PRTERRINFO pErrInfo,
+                          const char *pszFilenameFmt, ...) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(13, 14);
 
 /**
  * Create a logger instance.
@@ -2053,9 +2056,8 @@ RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszG
  * @param   cSecsHistoryTimeSlot  Maximum time interval per log file when
  *                              performing history rotation, in seconds.
  *                              0 means no time limit.
- * @param   pszErrorMsg         A buffer which is filled with an error message
- *                              if something fails.  May be NULL.
- * @param   cchErrorMsg         The size of the error message buffer.
+ * @param   pErrInfo            Where to return extended error information.
+ *                              Optional.
  * @param   pszFilenameFmt      Log filename format string.  Standard
  *                              RTStrFormat().
  * @param   args                Format arguments.
@@ -2063,8 +2065,8 @@ RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszG
 RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings,
                            const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups,
                            uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory,
-                           uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, char *pszErrorMsg, size_t cchErrorMsg,
-                           const char *pszFilenameFmt, va_list args) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(14, 0);
+                           uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot, PRTERRINFO pErrInfo,
+                           const char *pszFilenameFmt, va_list args) RT_IPRT_FORMAT_ATTR_MAYBE_NULL(13, 0);
 
 /**
  * Create a logger instance for singled threaded ring-0 usage.
@@ -2268,6 +2270,16 @@ RTDECL(int) RTLogGetFlags(PRTLOGGER pLogger, char *pszBuf, size_t cchBuf);
 RTDECL(int) RTLogDestinations(PRTLOGGER pLogger, char const *pszValue);
 
 /**
+ * Clear the file delay flag if set, opening the destination and flushing.
+ *
+ * @returns IPRT status code.
+ * @param   pLogger             Logger instance (NULL for default logger).
+ * @param   pszValue            The value to parse.
+ * @param   pErrInfo            Where to return extended error info.  Optional.
+ */
+RTDECL(int) RTLogClearFileDelayFlag(PRTLOGGER pLogger, PRTERRINFO pErrInfo);
+
+/**
  * Get the current log destinations as a string.
  *
  * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW.
diff --git a/include/iprt/mangling.h b/include/iprt/mangling.h
index 5bbc71b..50d63db 100644
--- a/include/iprt/mangling.h
+++ b/include/iprt/mangling.h
@@ -758,6 +758,7 @@
 # define RTDirExists                                    RT_MANGLER(RTDirExists)
 # define RTDirFlush                                     RT_MANGLER(RTDirFlush)
 # define RTDirFlushParent                               RT_MANGLER(RTDirFlushParent)
+# define RTDirIsValid                                   RT_MANGLER(RTDirIsValid)
 # define RTDirOpen                                      RT_MANGLER(RTDirOpen)
 # define RTDirOpenFiltered                              RT_MANGLER(RTDirOpenFiltered)
 # define RTDirQueryInfo                                 RT_MANGLER(RTDirQueryInfo)
@@ -765,16 +766,36 @@
 # define RTDirQueryUnknownTypeEx                        RT_MANGLER(RTDirQueryUnknownTypeEx)
 # define RTDirRead                                      RT_MANGLER(RTDirRead)
 # define RTDirReadEx                                    RT_MANGLER(RTDirReadEx)
+# define RTDirReadExA                                   RT_MANGLER(RTDirReadExA)
+# define RTDirReadExAFree                               RT_MANGLER(RTDirReadExAFree)
 # define RTDirRemove                                    RT_MANGLER(RTDirRemove)
 # define RTDirRemoveRecursive                           RT_MANGLER(RTDirRemoveRecursive)
 # define RTDirRename                                    RT_MANGLER(RTDirRename)
 # define RTDirSetTimes                                  RT_MANGLER(RTDirSetTimes)
+# define RTDirRelFileOpen                               RT_MANGLER(RTDirRelFileOpen)
+# define RTDirRelDirOpen                                RT_MANGLER(RTDirRelDirOpen)
+# define RTDirRelDirOpenFiltered                        RT_MANGLER(RTDirRelDirOpenFiltered)
+# define RTDirRelDirCreate                              RT_MANGLER(RTDirRelDirCreate)
+# define RTDirRelDirRemove                              RT_MANGLER(RTDirRelDirRemove)
+# define RTDirRelPathQueryInfo                          RT_MANGLER(RTDirRelPathQueryInfo)
+# define RTDirRelPathSetMode                            RT_MANGLER(RTDirRelPathSetMode)
+# define RTDirRelPathSetTimes                           RT_MANGLER(RTDirRelPathSetTimes)
+# define RTDirRelPathSetOwner                           RT_MANGLER(RTDirRelPathSetOwner)
+# define RTDirRelPathRename                             RT_MANGLER(RTDirRelPathRename)
+# define RTDirRelPathUnlink                             RT_MANGLER(RTDirRelPathUnlink)
+# define RTDirRelSymlinkCreate                          RT_MANGLER(RTDirRelSymlinkCreate)
+# define RTDirRelSymlinkRead                            RT_MANGLER(RTDirRelSymlinkRead)
+# define RTVfsDirOpenDir                                RT_MANGLER(RTVfsDirOpenDir)
+# define RTVfsDirFromRTDir                              RT_MANGLER(RTVfsDirFromRTDir)
+# define RTVfsDirOpenNormal                             RT_MANGLER(RTVfsDirOpenNormal)
 # define RTDvmCreate                                    RT_MANGLER(RTDvmCreate)
+# define RTDvmCreateFromVfsFile                         RT_MANGLER(RTDvmCreateFromVfsFile)
 # define RTDvmRetain                                    RT_MANGLER(RTDvmRetain)
 # define RTDvmRelease                                   RT_MANGLER(RTDvmRelease)
 # define RTDvmMapOpen                                   RT_MANGLER(RTDvmMapOpen)
 # define RTDvmMapInitialize                             RT_MANGLER(RTDvmMapInitialize)
-# define RTDvmMapGetFormat                              RT_MANGLER(RTDvmMapGetFormat)
+# define RTDvmMapGetFormatName                          RT_MANGLER(RTDvmMapGetFormatName)
+# define RTDvmMapGetFormatType                          RT_MANGLER(RTDvmMapGetFormatType)
 # define RTDvmMapGetValidVolumes                        RT_MANGLER(RTDvmMapGetValidVolumes)
 # define RTDvmMapGetMaxVolumes                          RT_MANGLER(RTDvmMapGetMaxVolumes)
 # define RTDvmMapQueryBlockStatus                       RT_MANGLER(RTDvmMapQueryBlockStatus)
@@ -985,6 +1006,7 @@
 # define RTGetOptFetchValue                             RT_MANGLER(RTGetOptFetchValue)
 # define RTGetOptInit                                   RT_MANGLER(RTGetOptInit)
 # define RTGetOptNonOptionArrayPtr                      RT_MANGLER(RTGetOptNonOptionArrayPtr)
+# define RTGetOptFormatError                            RT_MANGLER(RTGetOptFormatError)
 # define RTGetOptPrintError                             RT_MANGLER(RTGetOptPrintError)
 # define RTHandleClose                                  RT_MANGLER(RTHandleClose)
 # define RTHandleGetStandard                            RT_MANGLER(RTHandleGetStandard)
@@ -1213,6 +1235,7 @@
 # define RTLogBackdoorPrintf                            RT_MANGLER(RTLogBackdoorPrintf) /* r0drv-guest */
 # define RTLogBackdoorPrintfV                           RT_MANGLER(RTLogBackdoorPrintfV) /* r0drv-guest */
 # define RTLogCalcSizeForR0                             RT_MANGLER(RTLogCalcSizeForR0)
+# define RTLogClearFileDelayFlag                        RT_MANGLER(RTLogClearFileDelayFlag)
 # define RTLogCloneRC                                   RT_MANGLER(RTLogCloneRC)
 # define RTLogComPrintf                                 RT_MANGLER(RTLogComPrintf)
 # define RTLogComPrintfV                                RT_MANGLER(RTLogComPrintfV)
@@ -2398,6 +2421,7 @@
 # define RTVfsChainMsgError                             RT_MANGLER(RTVfsChainMsgError)
 # define RTVfsChainMsgErrorExitFailure                  RT_MANGLER(RTVfsChainMsgErrorExitFailure)
 # define RTVfsChainOpenDir                              RT_MANGLER(RTVfsChainOpenDir)
+# define RTVfsChainOpenParentDir                        RT_MANGLER(RTVfsChainOpenParentDir)
 # define RTVfsChainOpenFile                             RT_MANGLER(RTVfsChainOpenFile)
 # define RTVfsChainOpenIoStream                         RT_MANGLER(RTVfsChainOpenIoStream)
 # define RTVfsChainQueryFinalPath                       RT_MANGLER(RTVfsChainQueryFinalPath)
@@ -2405,16 +2429,19 @@
 # define RTVfsChainSpecCheckAndSetup                    RT_MANGLER(RTVfsChainSpecCheckAndSetup)
 # define RTVfsChainSpecFree                             RT_MANGLER(RTVfsChainSpecFree)
 # define RTVfsChainSpecParse                            RT_MANGLER(RTVfsChainSpecParse)
+# define RTVfsChainSplitOffFinalPath                    RT_MANGLER(RTVfsChainSplitOffFinalPath)
 # define RTVfsChainValidateOpenFileOrIoStream           RT_MANGLER(RTVfsChainValidateOpenFileOrIoStream)
 # define RTVfsDirRelease                                RT_MANGLER(RTVfsDirRelease)
 # define RTVfsDirRetain                                 RT_MANGLER(RTVfsDirRetain)
 # define RTVfsDirRetainDebug                            RT_MANGLER(RTVfsDirRetainDebug)
 # define RTVfsDirOpen                                   RT_MANGLER(RTVfsDirOpen)
 # define RTVfsDirOpenDir                                RT_MANGLER(RTVfsDirOpenDir)
+# define RTVfsDirCreateDir                              RT_MANGLER(RTVfsDirCreateDir)
 # define RTVfsDirOpenFile                               RT_MANGLER(RTVfsDirOpenFile)
 # define RTVfsDirOpenFileAsIoStream                     RT_MANGLER(RTVfsDirOpenFileAsIoStream)
 # define RTVfsDirQueryPathInfo                          RT_MANGLER(RTVfsDirQueryPathInfo)
 # define RTVfsDirReadEx                                 RT_MANGLER(RTVfsDirReadEx)
+# define RTVfsDirRemoveDir                              RT_MANGLER(RTVfsDirRemoveDir)
 # define RTVfsFileFlush                                 RT_MANGLER(RTVfsFileFlush)
 # define RTVfsFileFromBuffer                            RT_MANGLER(RTVfsFileFromBuffer)
 # define RTVfsFileFromRTFile                            RT_MANGLER(RTVfsFileFromRTFile)
diff --git a/include/iprt/nocrt/math.h b/include/iprt/nocrt/math.h
index d99bb3e..c0d9e97 100644
--- a/include/iprt/nocrt/math.h
+++ b/include/iprt/nocrt/math.h
@@ -56,6 +56,7 @@
 #else
 #define __GNUC_PREREQ__(ma, mi) 0
 #endif
+#undef  __pure2 /* darwin: avoid conflict with system headers when doing syntax checking of the headers */
 #define __pure2
 
 
diff --git a/include/iprt/nt/nt.h b/include/iprt/nt/nt.h
index 89e7b22..1cc5f03 100644
--- a/include/iprt/nt/nt.h
+++ b/include/iprt/nt/nt.h
@@ -263,6 +263,8 @@ RTDECL(int) RTNtPathOpen(const char *pszPath, ACCESS_MASK fDesiredAccess, ULONG
                           PHANDLE phHandle, PULONG_PTR puDisposition);
 RTDECL(int) RTNtPathOpenDir(const char *pszPath, ACCESS_MASK fDesiredAccess, ULONG fShareAccess, ULONG fCreateOptions,
                             ULONG fObjAttribs, PHANDLE phHandle, bool *pfObjDir);
+RTDECL(int) RTNtPathOpenDirEx(HANDLE hRootDir, struct _UNICODE_STRING *pNtName, ACCESS_MASK fDesiredAccess,
+                              ULONG fShareAccess, ULONG fCreateOptions, ULONG fObjAttribs, PHANDLE phHandle, bool *pfObjDir);
 RTDECL(int) RTNtPathClose(HANDLE hHandle);
 
 /**
@@ -291,6 +293,41 @@ RTDECL(int) RTNtPathFromWinUtf8(struct _UNICODE_STRING *pNtName, PHANDLE phRootD
 RTDECL(int) RTNtPathFromWinUtf16Ex(struct _UNICODE_STRING *pNtName, HANDLE *phRootDir, PCRTUTF16 pwszPath, size_t cwcPath);
 
 /**
+ * How to handle ascent ('..' relative to a root handle).
+ */
+typedef enum RTNTPATHRELATIVEASCENT
+{
+    kRTNtPathRelativeAscent_Invalid = 0,
+    kRTNtPathRelativeAscent_Allow,
+    kRTNtPathRelativeAscent_Fail,
+    kRTNtPathRelativeAscent_Ignore,
+    kRTNtPathRelativeAscent_End,
+    kRTNtPathRelativeAscent_32BitHack = 0x7fffffff
+} RTNTPATHRELATIVEASCENT;
+
+/**
+ * Converts a relative windows-style path to relative NT format and encoding.
+ *
+ * @returns IPRT status code.
+ * @param   pNtName             Where to return the NT name.  Free using
+ *                              rtTNtPathToNative with phRootDir set to NULL.
+ * @param   phRootDir           On input, the handle to the directory the path
+ *                              is relative to.  On output, the handle to
+ *                              specify as root directory in the object
+ *                              attributes when accessing the path.  If
+ *                              enmAscent is kRTNtPathRelativeAscent_Allow, it
+ *                              may have been set to NULL.
+ * @param   pszPath             The relative UTF-8 path.
+ * @param   enmAscent           How to handle ascent.
+ * @param   fMustReturnAbsolute Must convert to an absolute path.  This
+ *                              is necessary if the root dir is a NT directory
+ *                              object (e.g. /Devices) since they cannot parse
+ *                              relative paths it seems.
+ */
+RTDECL(int) RTNtPathRelativeFromUtf8(struct _UNICODE_STRING *pNtName, PHANDLE phRootDir, const char *pszPath,
+                                     RTNTPATHRELATIVEASCENT enmAscent, bool fMustReturnAbsolute);
+
+/**
  * Ensures that the NT string has sufficient storage to hold @a cwcMin RTUTF16
  * chars plus a terminator.
  *
@@ -307,9 +344,9 @@ RTDECL(int) RTNtPathEnsureSpace(struct _UNICODE_STRING *pNtName, size_t cwcMin);
 /**
  * Frees the native path and root handle.
  *
- * @param   pNtName             The NT path from a successful call to
- *                              RTNtPathFromWinUtf8 or RTNtPathFromWinUtf16Ex.
- * @param   phRootDir           The root handle variable from the same call.
+ * @param   pNtName             The NT path after a successful rtNtPathToNative
+ *                              call or RTNtPathRelativeFromUtf8.
+ * @param   phRootDir           The root handle variable from rtNtPathToNative,
  */
 RTDECL(void) RTNtPathFree(struct _UNICODE_STRING *pNtName, HANDLE *phRootDir);
 
diff --git a/include/iprt/refentry.h b/include/iprt/refentry.h
deleted file mode 100644
index 8b13789..0000000
--- a/include/iprt/refentry.h
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/include/iprt/solaris/kmoddeps.mac b/include/iprt/solaris/kmoddeps.mac
index f8a3208..66b4069 100644
--- a/include/iprt/solaris/kmoddeps.mac
+++ b/include/iprt/solaris/kmoddeps.mac
@@ -119,7 +119,7 @@ sect_hsize equ $ - sect_hdr1
  dd 0                  ; sh_info
  DNAT 8                ; sh_addralign
  DNAT 0                ; sh_entsize
- 
+
 shstrtab:
 str_shstrtab equ $ - shstrtab
  db ".shstrtab", 0
diff --git a/include/iprt/types.h b/include/iprt/types.h
index 8b18c00..5fb1d0d 100644
--- a/include/iprt/types.h
+++ b/include/iprt/types.h
@@ -2107,6 +2107,13 @@ typedef RTCRX509CERTPATHS                   RT_FAR *PRTCRX509CERTPATHS;
 /** Nil certificate paths builder & validator handle. */
 #define NIL_RTCRX509CERTPATHS                       0
 
+/** Directory handle. */
+typedef struct RTDIRINTERNAL                       *RTDIR;
+/** Pointer to directory handle. */
+typedef RTDIR                                      *PRTDIR;
+/** NIL directory handle. */
+#define NIL_RTDIR                                   ((RTDIR)0)
+
 /** File handle. */
 typedef R3R0PTRTYPE(struct RTFILEINT RT_FAR *)      RTFILE;
 /** Pointer to file handle. */
diff --git a/include/iprt/vfs.h b/include/iprt/vfs.h
index fa1184c..cf2917b 100644
--- a/include/iprt/vfs.h
+++ b/include/iprt/vfs.h
@@ -477,6 +477,41 @@ RTDECL(int) RTVfsDirOpenFileAsIoStream(RTVFSDIR hVfsDir, const char *pszPath, ui
 RTDECL(int) RTVfsDirOpenDir(RTVFSDIR hVfsDir, const char *pszPath, uint32_t fFlags, PRTVFSDIR phVfsDir);
 
 /**
+ * Creates a directory relative to @a hVfsDir.
+ *
+ * @returns IPRT status code
+ * @param   hVfsDir             The directory the path is relative to.
+ * @param   pszRelPath          The relative path to the new directory.
+ * @param   fMode               The file mode for the new directory.
+ * @param   fFlags              Directory creation flags, RTDIRCREATE_FLAGS_XXX.
+ * @param   phVfsDir            Where to return the handle to the newly created
+ *                              directory.  Optional.
+ * @sa      RTDirCreate, RTDirRelDirCreate
+ */
+RTDECL(int) RTVfsDirCreateDir(RTVFSDIR hVfsDir, const char *pszRelPath, RTFMODE fMode, uint32_t fFlags, PRTVFSDIR phVfsDir);
+
+/**
+ * Create a VFS directory handle from a standard IPRT directory handle (RTDIR).
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The standard IPRT directory handle.
+ * @param   fLeaveOpen      Whether to leave the handle open when the VFS
+ *                          directory is released, or to close it (@c false).
+ * @param   phVfsDir        Where to return the VFS directory handle.
+ */
+RTDECL(int) RTVfsDirFromRTDir(RTDIR hDir, bool fLeaveOpen, PRTVFSDIR phVfsDir);
+
+/**
+ * RTDirOpen + RTVfsDirFromRTDir.
+ *
+ * @returns IPRT status code.
+ * @param   pszPath         The path to the directory.
+ * @param   fFlags          RTDIR_F_XXX.
+ * @param   phVfsDir        Where to return the VFS directory handle.
+ */
+RTDECL(int) RTVfsDirOpenNormal(const char *pszPath, uint32_t fFlags, PRTVFSDIR phVfsDir);
+
+/**
  * Queries information about a object in or under the given directory.
  *
  * @returns IPRT Status code.
@@ -492,6 +527,17 @@ RTDECL(int) RTVfsDirQueryPathInfo(RTVFSDIR hVfsDir, const char *pszPath, PRTFSOB
                                   RTFSOBJATTRADD enmAddAttr, uint32_t fFlags);
 
 /**
+ * Removes a directory relative to @a hVfsDir.
+ *
+ * @returns IPRT status code.
+ * @param   hVfsDir         The VFS directory to start walking the @a pszRelPath
+ *                          relative to.
+ * @param   pszRelPath      The path to the directory that should be removed.
+ * @param   fFlags          Reserved, MBZ.
+ */
+RTDECL(int) RTVfsDirRemoveDir(RTVFSDIR hVfsDir, const char *pszRelPath, uint32_t fFlags);
+
+/**
  * Reads the next entry in the directory returning extended information.
  *
  * @returns VINF_SUCCESS and data in pDirEntry on success.
@@ -1513,6 +1559,8 @@ RTDECL(int) RTVfsFsStrmToDirUndo(RTVFSFSSTREAM hVfsFss);
 RTDECL(int) RTVfsChainOpenVfs(const char *pszSpec, PRTVFS phVfs, uint32_t *poffError, PRTERRINFO pErrInfo);
 RTDECL(int) RTVfsChainOpenFsStream(const char *pszSpec, PRTVFSFSSTREAM  phVfsFss, uint32_t *poffError, PRTERRINFO pErrInfo);
 RTDECL(int) RTVfsChainOpenDir(const char *pszSpec, uint32_t fOpen, PRTVFSDIR phVfsDir, uint32_t *poffError, PRTERRINFO pErrInfo);
+RTDECL(int) RTVfsChainOpenParentDir(const char *pszSpec, uint32_t fOpen, PRTVFSDIR phVfsDir, const char **ppszChild,
+                                    uint32_t *poffError, PRTERRINFO pErrInfo);
 RTDECL(int) RTVfsChainOpenFile(const char *pszSpec, uint64_t fOpen, PRTVFSFILE phVfsFile, uint32_t *poffError, PRTERRINFO pErrInfo);
 RTDECL(int) RTVfsChainOpenIoStream(const char *pszSpec, uint64_t fOpen, PRTVFSIOSTREAM phVfsIos, uint32_t *poffError, PRTERRINFO pErrInfo);
 RTDECL(int) RTVfsChainOpenSymlink(const char *pszSpec, PRTVFSSYMLINK phVfsSym, uint32_t *poffError, PRTERRINFO pErrInfo);
@@ -1544,6 +1592,23 @@ RTDECL(bool) RTVfsChainIsSpec(const char *pszSpec);
 RTDECL(int) RTVfsChainQueryFinalPath(const char *pszSpec, char **ppszFinalPath, uint32_t *poffError);
 
 /**
+ * Splits the given chain spec into a final path and the preceeding spec.
+ *
+ * This works on plain paths too.
+ *
+ * @returns IPRT status code.
+ * @param   pszSpec         The chain spec to split.  This will be modified!
+ * @param   ppszSpec        Where to return the pointer to the chain spec part.
+ *                          This is set to NULL if it's a plain path or a chain
+ *                          spec with only a final-path element.
+ * @param   ppszFinalPath   Where to return the pointer to the final path.  This
+ *                          is set to NULL if no final path.
+ * @param   poffError       Where to on error return an offset into @a pszSpec
+ *                          of what cause the error.  Optional.
+ */
+RTDECL(int) RTVfsChainSplitOffFinalPath(char *pszSpec, char **ppszSpec, char **ppszFinalPath, uint32_t *poffError);
+
+/**
  * Common code for reporting errors of a RTVfsChainOpen* API.
  *
  * @param   pszFunction The API called.
diff --git a/include/iprt/vfslowlevel.h b/include/iprt/vfslowlevel.h
index 4a59dda..a969059 100644
--- a/include/iprt/vfslowlevel.h
+++ b/include/iprt/vfslowlevel.h
@@ -251,6 +251,8 @@ typedef struct RTVFSOPS
     DECLCALLBACKMEMBER(int, pfnTraverse)(void *pvThis, const char *pszPath, size_t *poffPath, PRTVFS??? phVfs?, ???* p???);
 #endif
 
+    /** @todo need rename API */
+
     /** Marks the end of the structure (RTVFSOPS_VERSION). */
     uintptr_t               uEndMarker;
 } RTVFSOPS;
@@ -561,7 +563,9 @@ typedef struct RTVFSDIROPS
      * @returns IPRT status code.
      * @param   pvThis      The implementation specific directory data.
      * @param   pszSubDir   The name of the immediate subdirectory to open.
+     * @param   fFlags      RTDIR_F_XXX.
      * @param   phVfsDir    Where to return the handle to the opened directory.
+     *                      Optional.
      * @sa      RTDirOpen.
      */
     DECLCALLBACKMEMBER(int, pfnOpenDir)(void *pvThis, const char *pszSubDir, uint32_t fFlags, PRTVFSDIR phVfsDir);
@@ -644,6 +648,9 @@ typedef struct RTVFSDIROPS
      *                      (RTFS_TYPE_XXX).
      * @param   pszNewName  The new entry name.
      * @sa      RTPathRename
+     *
+     * @todo    This API is not flexible enough, must be able to rename between
+     *          directories within a file system.
      */
     DECLCALLBACKMEMBER(int, pfnRenameEntry)(void *pvThis, const char *pszEntry, RTFMODE fType, const char *pszNewName);
 
@@ -1002,6 +1009,8 @@ typedef struct RTVFSPARSEDPATH
      * reference and not a file reference.  The slash has been removed from
      * the copy. */
     bool            fDirSlash;
+    /** Set if absolute. */
+    bool            fAbsolute;
     /** The offset where each path component starts, i.e. the char after the
      * slash.  The array has cComponents + 1 entries, where the final one is
      * cch + 1 so that one can always terminate the current component by
diff --git a/include/iprt/x86.mac b/include/iprt/x86.mac
index 0b534ee..245a558 100644
--- a/include/iprt/x86.mac
+++ b/include/iprt/x86.mac
@@ -1,3 +1,30 @@
+;; @file
+; IPRT - X86 and AMD64 Structures and Definitions.
+;
+; Automatically generated by various.sed.  DO NOT EDIT!
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
 %ifndef ___iprt_x86_h
 %define ___iprt_x86_h
 %ifndef VBOX_FOR_DTRACE_LIB
@@ -219,6 +246,8 @@
 %define X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER              RT_BIT(10)
 %define X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER_THRESHOLD    RT_BIT(12)
 %define X86_CPUID_SVM_FEATURE_EDX_AVIC                      RT_BIT(13)
+%define X86_CPUID_SVM_FEATURE_EDX_VIRT_VMSAVE_VMLOAD        RT_BIT(15)
+%define X86_CPUID_SVM_FEATURE_EDX_VGIF                      RT_BIT(16)
 %define X86_CR0_PE                          RT_BIT_32(0)
 %define X86_CR0_PROTECTION_ENABLE           RT_BIT_32(0)
 %define X86_CR0_MP                          RT_BIT_32(1)
@@ -781,26 +810,26 @@
 %define X86_FCW_RC_UP       0x0800
 %define X86_FCW_RC_ZERO     0x0c00
 %define X86_FCW_ZERO_MASK   0xf080
-%define X86_MXSCR_IE          RT_BIT_32(0)
-%define X86_MXSCR_DE          RT_BIT_32(1)
-%define X86_MXSCR_ZE          RT_BIT_32(2)
-%define X86_MXSCR_OE          RT_BIT_32(3)
-%define X86_MXSCR_UE          RT_BIT_32(4)
-%define X86_MXSCR_PE          RT_BIT_32(5)
-%define X86_MXSCR_DAZ         RT_BIT_32(6)
-%define X86_MXSCR_IM          RT_BIT_32(7)
-%define X86_MXSCR_DM          RT_BIT_32(8)
-%define X86_MXSCR_ZM          RT_BIT_32(9)
-%define X86_MXSCR_OM          RT_BIT_32(10)
-%define X86_MXSCR_UM          RT_BIT_32(11)
-%define X86_MXSCR_PM          RT_BIT_32(12)
-%define X86_MXSCR_RC_MASK     0x6000
-%define X86_MXSCR_RC_NEAREST  0x0000
-%define X86_MXSCR_RC_DOWN     0x2000
-%define X86_MXSCR_RC_UP       0x4000
-%define X86_MXSCR_RC_ZERO     0x6000
-%define X86_MXSCR_FZ          RT_BIT_32(15)
-%define X86_MXSCR_MM          RT_BIT_32(17)
+%define X86_MXCSR_IE          RT_BIT_32(0)
+%define X86_MXCSR_DE          RT_BIT_32(1)
+%define X86_MXCSR_ZE          RT_BIT_32(2)
+%define X86_MXCSR_OE          RT_BIT_32(3)
+%define X86_MXCSR_UE          RT_BIT_32(4)
+%define X86_MXCSR_PE          RT_BIT_32(5)
+%define X86_MXCSR_DAZ         RT_BIT_32(6)
+%define X86_MXCSR_IM          RT_BIT_32(7)
+%define X86_MXCSR_DM          RT_BIT_32(8)
+%define X86_MXCSR_ZM          RT_BIT_32(9)
+%define X86_MXCSR_OM          RT_BIT_32(10)
+%define X86_MXCSR_UM          RT_BIT_32(11)
+%define X86_MXCSR_PM          RT_BIT_32(12)
+%define X86_MXCSR_RC_MASK     0x6000
+%define X86_MXCSR_RC_NEAREST  0x0000
+%define X86_MXCSR_RC_DOWN     0x2000
+%define X86_MXCSR_RC_UP       0x4000
+%define X86_MXCSR_RC_ZERO     0x6000
+%define X86_MXCSR_FZ          RT_BIT_32(15)
+%define X86_MXCSR_MM          RT_BIT_32(17)
 %ifndef VBOX_FOR_DTRACE_LIB
 %endif
 %ifndef VBOX_FOR_DTRACE_LIB
@@ -839,6 +868,8 @@
 %define XSAVE_C_PKRU            RT_BIT_64(XSAVE_C_PKRU_BIT)
 %define XSAVE_C_LWP_BIT         62
 %define XSAVE_C_LWP             RT_BIT_64(XSAVE_C_LWP_BIT)
+%define XSAVE_C_X_BIT           63
+%define XSAVE_C_X               RT_BIT_64(XSAVE_C_X_BIT)
 %ifndef VBOX_FOR_DTRACE_LIB
 %endif
 %define X86DESCATTR_TYPE            0x0000000f
diff --git a/include/iprt/x86extra.mac b/include/iprt/x86extra.mac
index 15628cc..61ecaef 100644
--- a/include/iprt/x86extra.mac
+++ b/include/iprt/x86extra.mac
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp b/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
index 89bb9f6..069a93b 100644
--- a/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
+++ b/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxControl/VBoxControl.rc b/src/VBox/Additions/common/VBoxControl/VBoxControl.rc
index aff1dde..5e4383b 100644
--- a/src/VBox/Additions/common/VBoxControl/VBoxControl.rc
+++ b/src/VBox/Additions/common/VBoxControl/VBoxControl.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp b/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
index c8748ba..f3979f1 100644
--- a/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
+++ b/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/.scm-settings b/src/VBox/Additions/common/VBoxGuest/.scm-settings
new file mode 100644
index 0000000..b86af3d
--- /dev/null
+++ b/src/VBox/Additions/common/VBoxGuest/.scm-settings
@@ -0,0 +1,30 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for VBoxGuest
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+# Like the host drivers, this is dual licensed.
+--license-ose-dual
+
+/VBoxGuest-solaris.conf: --treat-as .sh
diff --git a/src/VBox/Additions/common/VBoxGuest/Makefile.kmk b/src/VBox/Additions/common/VBoxGuest/Makefile.kmk
index c0b20fd..ccda485 100644
--- a/src/VBox/Additions/common/VBoxGuest/Makefile.kmk
+++ b/src/VBox/Additions/common/VBoxGuest/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
@@ -201,10 +210,10 @@ ifeq ($(KBUILD_TARGET),linux)
  #
  include $(PATH_SUB_CURRENT)/linux/files_vboxguest
  # sources and stuff.
- INSTALLS += vboxguest-mod
- vboxguest-mod_INST     = $(INST_ADDITIONS)src/vboxguest/
- vboxguest-mod_MODE     = a+r,u+w
- vboxguest-mod_SOURCES  = $(subst ",,$(FILES_VBOXGUEST_NOBIN))
+ INSTALLS += vboxguest-src
+ vboxguest-src_INST     = $(INST_ADDITIONS)src/vboxguest/
+ vboxguest-src_MODE     = a+r,u+w
+ vboxguest-src_SOURCES  = $(subst ",,$(FILES_VBOXGUEST_NOBIN))
 
  INSTALLS += vboxguest-scripts
  vboxguest-scripts_INST    = $(INST_ADDITIONS)src/
@@ -225,10 +234,10 @@ ifeq ($(KBUILD_TARGET),freebsd)
  #
  include $(PATH_SUB_CURRENT)/freebsd/files_vboxguest
  # sources and stuff.
- INSTALLS += vboxguest-mod
- vboxguest-mod_INST     = $(INST_ADDITIONS)src/vboxguest/
- vboxguest-mod_MODE     = a+r,u+w
- vboxguest-mod_SOURCES  = $(subst ",,$(FILES_VBOXGUEST_NOBIN))
+ INSTALLS += vboxguest-src
+ vboxguest-src_INST     = $(INST_ADDITIONS)src/vboxguest/
+ vboxguest-src_MODE     = a+r,u+w
+ vboxguest-src_SOURCES  = $(subst ",,$(FILES_VBOXGUEST_NOBIN))
 
 endif # FreeBSD
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c b/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c
index b56e972..fe37920 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /*
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp
index a813b72..cc3808e 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c
index abb410f..d84ea81 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /** @todo r=bird: This must merge with SUPDrv-freebsd.c before long. The two
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
index b013db2..8d3ec34 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /*
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c
index 72bc988..5064298 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /*
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
index 5405dfc..9a1bdbc 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /*
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
index 128793c..9141ed3 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
@@ -1,4 +1,4 @@
-/* $Rev: 117885 $ */
+/* $Rev: 118839 $ */
 /** @file
  * VBoxGuest - Linux specifics.
  *
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -16,7 +16,16 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-  */
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
 
 
 /*********************************************************************************************************************************
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-netbsd.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-netbsd.c
index a2fddcd..3d8c243 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-netbsd.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-netbsd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /** @todo r=bird: This must merge with SUPDrv-netbsd.c before long. The two
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp
index fe2646d..11cd464 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,8 +13,16 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- * --------------------------------------------------------------------
  *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * VBoxDrv - OS/2 specifics.
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.def b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.def
index dd152a7..afd9534 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.def
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2007-2016 Oracle Corporation
+; Copyright (C) 2007-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 
 PHYSICAL DEVICE VBoxGst
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
index 62fa546..d318a55 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.conf b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.conf
index 3abd533..c751ec9 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.conf
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.conf
@@ -1,7 +1,9 @@
-#
+# $Id: VBoxGuest-solaris.conf $
+## @file
 # OpenSolaris Guest Driver Configuration
+
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp
index 13645be..c496e93 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp
index 85d3bc4..668558d 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
index 9fdfdcd..933907a 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h
index fbd13a4..ccdbefd 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxGuest_win_h
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
index b4cfb3b..73b7362 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm b/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm
index feb0f39..a1e0820 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2007-2016 Oracle Corporation
+; Copyright (C) 2007-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,9 +14,16 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
-; --------------------------------------------------------------------
-; 
-; This code is based on: 
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;-----------------------------------------------------------------------------
+; This code is based on:
 ;
 ; VBoxDrv - OS/2 assembly file, the first file in the link.
 ;
@@ -298,7 +305,7 @@ GLOBALNAME g_bPciBusNo
 GLOBALNAME g_bPciDevFunNo
     db 0
 ;; Flag that is set by the vboxgst$ init routine if VMMDev was found.
-; Both init routines must refuse loading the driver if the 
+; Both init routines must refuse loading the driver if the
 ; device cannot be located.
 GLOBALNAME g_fFoundAdapter
     db 0
@@ -785,7 +792,7 @@ GLOBALNAME vgdrvOS2InitEntrypoint
 ;;
 ; The OS/2 IDC entry point.
 ;
-; This is only used to setup connection, the returned structure 
+; This is only used to setup connection, the returned structure
 ; will provide the entry points that we'll be using.
 ;
 ; @cproto  void far __cdecl VGDrvOS2IDC(VBOXGUESTOS2IDCCONNECT far *fpConnectInfo);
@@ -794,7 +801,7 @@ GLOBALNAME vgdrvOS2InitEntrypoint
 ;
 GLOBALNAME VGDrvOS2IDC
     push    ebp                         ; bp -  0h
-    mov     ebp, esp                    
+    mov     ebp, esp
     ; save everything we might touch.
     push    es                          ; bp -  2h
     push    ds                          ; bp -  4h
@@ -859,8 +866,8 @@ ENDPROC VGDrvOS2IDC
 ;;
 ; The 16-bit IDC entry point, cdecl.
 ;
-; All this does is thunking the request into something that fits 
-; the 32-bit IDC service routine. 
+; All this does is thunking the request into something that fits
+; the 32-bit IDC service routine.
 ;
 ;
 ; @returns VBox status code.
@@ -876,7 +883,7 @@ ENDPROC VGDrvOS2IDC
 ;
 GLOBALNAME VGDrvOS2IDCService16
     push    ebp                         ; bp -  0h
-    mov     ebp, esp                    
+    mov     ebp, esp
     push    es                          ; bp -  2h
     push    ds                          ; bp -  4h
     push    ecx                         ; bp -  8h
@@ -886,7 +893,7 @@ GLOBALNAME VGDrvOS2IDCService16
 
     ; locals
     push    dword 0                     ; esp + 18h (dd): cbDataReturned
-    
+
     ; load our ds (for g_fpfnDevHlp).
     mov     ax, DATA16
     mov     ds, ax
@@ -894,7 +901,7 @@ GLOBALNAME VGDrvOS2IDCService16
     ;
     ; Create the call frame before switching.
     ;
-    movzx   ecx, word [bp + 12h]         
+    movzx   ecx, word [bp + 12h]
     push    ecx                         ; esp + 10h:    cbData
 
     ; thunk data argument if present.
@@ -910,9 +917,9 @@ GLOBALNAME VGDrvOS2IDCService16
     xor     eax, eax
 .finish_data:
     push    eax                         ; esp + 08h:    pvData
-    movzx   edx, word [bp + 0ch]        
+    movzx   edx, word [bp + 0ch]
     push    edx                         ; esp + 04h:    iFunction
-    mov     ecx, [bp + 08h]               
+    mov     ecx, [bp + 08h]
     push    ecx                         ; esp + 00h:    u32Session
 
     JMP16TO32 VGDrvOS2IDCService16_32
@@ -960,7 +967,7 @@ ENDPROC VGDrvOS2IDCService16
 ; calls from 16-bit assembly code.
 ;
 ; @returns ax: VBox status code; cx: The amount of data returned.
-;            
+;
 ; @param   u32Session          eax   - The above session handle.
 ; @param   iFunction           dl    - The requested function.
 ; @param   pvData              es:bx - The input/output data buffer.
@@ -991,10 +998,10 @@ ENDPROC VGDrvOS2IDCService16Asm
 ;;
 ; The 16-bit interrupt service routine.
 ;
-; OS/2 saves all registers according to the docs, although it doesn't say whether 
+; OS/2 saves all registers according to the docs, although it doesn't say whether
 ; this includes the 32-bit parts. Since it doesn't cost much to be careful, save
 ; everything.
-; 
+;
 ; @returns  CF=0 if it's our interrupt, CF=1 it it isn't.
 ;
 ;
@@ -1002,7 +1009,7 @@ GLOBALNAME vgdrvOS2ISR16
     push    ebp
     mov     ebp, esp
     pushf                               ; bp - 02h
-    cli                                 
+    cli
     push    eax                         ; bp - 06h
     push    edx                         ; bp - 0ah
     push    ebx                         ; bp - 0eh
@@ -1389,12 +1396,12 @@ g_szOemHlpDevName:
 ;;
 ; Talks to OEMHLP$ about finding the VMMDev PCI adapter.
 ;
-; On success g_fFoundAdapter is set to 1, and g_cbMMIO, 
-; g_PhysMMIOBase and g_IOPortBase are initialized with 
+; On success g_fFoundAdapter is set to 1, and g_cbMMIO,
+; g_PhysMMIOBase and g_IOPortBase are initialized with
 ; the PCI data.
 ;
 ; @returns  0 on success, non-zero on failure. (eax)
-; 
+;
 ; @remark   ASSUMES DS:DATA16.
 ; @uses     nothing.
 ;
@@ -1522,10 +1529,10 @@ BEGINPROC vgdrvFindAdapter
     call .NestedReadReg
     mov     di, '4'
     test    al, 1h                                  ; Test that it's an I/O space address.
-    jz      .done_err_close                               
+    jz      .done_err_close
     mov     di, '5'
     test    eax, 0ffff0002h                         ; These shall all be 0 according to the specs.
-    jnz     .done_err_close                               
+    jnz     .done_err_close
     and     ax, 0fffeh
     mov     [NAME(g_IOPortBase)], ax
 
@@ -1543,7 +1550,7 @@ BEGINPROC vgdrvFindAdapter
 
     ;or      eax, eax
     ;jz      .done_success                             ; No memory region.
-    ;; @todo If there is a simple way of determining the size do that, if 
+    ;; @todo If there is a simple way of determining the size do that, if
     ;        not we can easily handle it the code that does the actual mapping.
 
 
@@ -1551,7 +1558,7 @@ BEGINPROC vgdrvFindAdapter
     ; Ok, we're good!
     ;
 .done_success:
-    or      [NAME(g_fFoundAdapter)], byte 1     
+    or      [NAME(g_fFoundAdapter)], byte 1
     jmp     .done_close
 
     ;
@@ -1660,4 +1667,3 @@ segment DATA32
 g_pfnDos16Write:
     dd  DOS16WRITE  ; flat
 
-
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
index 6be767a..5600ae9 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile b/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile
index ccf9ac6..738d188 100644
--- a/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile
+++ b/src/VBox/Additions/common/VBoxGuest/freebsd/Makefile
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 KMOD = vboxguest
 
 CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBGL_VBOXGUEST -DVBOX_WITH_HGCM -DVBOX_WITH_64_BITS_GUESTS
@@ -46,7 +55,8 @@ SRCS += \
 .PATH:	${.CURDIR}/common/err
 SRCS += \
 	RTErrConvertFromErrno.c \
-	RTErrConvertToErrno.c
+	RTErrConvertToErrno.c \
+	errinfo.c
 
 .PATH:	${.CURDIR}/common/log
 SRCS += \
@@ -74,6 +84,7 @@ SRCS += \
 
 .PATH:	${.CURDIR}/common/string
 SRCS += \
+	RTStrCat.c \
 	RTStrCopy.c \
 	RTStrCopyEx.c \
 	RTStrCopyP.c \
diff --git a/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest b/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
index b4c1d49..ea337db 100755
--- a/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
+++ b/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxguest $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/include/iprt/alloca.h=>include/iprt/alloca.h \
@@ -89,6 +98,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/alloc/heapsimple.cpp=>alloc/heapsimple.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp=>common/err/RTErrConvertFromErrno.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertToErrno.cpp=>common/err/RTErrConvertToErrno.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/err/errinfo.cpp=>common/err/errinfo.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/log.cpp=>common/log/log.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logellipsis.cpp=>common/log/logellipsis.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logrel.cpp=>common/log/logrel.c \
@@ -108,6 +118,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/RTAssertMsg2Weak.cpp=>common/misc/RTAssertMsg2Weak.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/RTAssertMsg2WeakV.cpp=>common/misc/RTAssertMsg2WeakV.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/assert.cpp=>common/misc/assert.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCat.cpp=>common/string/RTStrCat.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopy.cpp=>common/string/RTStrCopy.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyEx.cpp=>common/string/RTStrCopyEx.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyP.cpp=>common/string/RTStrCopyP.c \
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibCrOgl.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibCrOgl.cpp
index b8dcf7c..30d805d 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibCrOgl.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibCrOgl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp
index 7b8d3c3..11853a5 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCM.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCM.cpp
index f21386d..e98012d 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCM.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCM.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -27,6 +27,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -46,6 +47,7 @@
 *********************************************************************************************************************************/
 #define VBGL_HGCM_ASSERT_MSG AssertReleaseMsg
 
+
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCMInternal.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCMInternal.cpp
index 5d7e4c4..c9e410e 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCMInternal.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibHGCMInternal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -890,8 +890,8 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall(PVBGLIOCHGCMCALL pCallInfo, uint32_t cbCa
          */
         VMMDevHGCMCall *pHGCMCall;
         rc = VbglR0GRAlloc((VMMDevRequestHeader **)&pHGCMCall,
-                         sizeof(VMMDevHGCMCall) + pCallInfo->cParms * sizeof(HGCMFunctionParameter) + cbExtra,
-                         VMMDevReq_HGCMCall);
+                           sizeof(VMMDevHGCMCall) + pCallInfo->cParms * sizeof(HGCMFunctionParameter) + cbExtra,
+                           VMMDevReq_HGCMCall);
         if (RT_SUCCESS(rc))
         {
             bool fLeakIt;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInit.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInit.cpp
index 75cb99d..5787c45 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInit.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInit.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInternal.h b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInternal.h
index 245a363..30ab93d 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInternal.h
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibMouse.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibMouse.cpp
index 4a9fd7d..4873564 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibMouse.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp
index ae4c7ae..ca1a244 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibPhysHeap.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibSharedFolders.c b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibSharedFolders.c
index b4ed539..9f274f3 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibSharedFolders.c
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibSharedFolders.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -175,30 +176,6 @@ DECLVBGL(int) VbglR0SfMapFolder(PVBGLSFCLIENT pClient, PSHFLSTRING szFolderName,
         pMap->root = data.root.u.value32;
         rc         = data.callInfo.Hdr.rc;
     }
-    else if (rc == VERR_NOT_IMPLEMENTED)
-    {
-        /* try the legacy interface too; temporary to assure backwards compatibility */
-        VBoxSFMapFolder_Old OldData;
-
-        VBOX_INIT_CALL(&OldData.callInfo, MAP_FOLDER_OLD, pClient);
-
-        OldData.path.type                    = VMMDevHGCMParmType_LinAddr;
-        OldData.path.u.Pointer.size          = ShflStringSizeOfBuffer (szFolderName);
-        OldData.path.u.Pointer.u.linearAddr  = (uintptr_t)szFolderName;
-
-        OldData.root.type                    = VMMDevHGCMParmType_32bit;
-        OldData.root.u.value32               = 0;
-
-        OldData.delimiter.type               = VMMDevHGCMParmType_32bit;
-        OldData.delimiter.u.value32          = RTPATH_DELIMITER;
-
-        rc = VbglR0HGCMCallRaw(pClient->handle, &OldData.callInfo, sizeof(OldData));
-        if (RT_SUCCESS(rc))
-        {
-            pMap->root = OldData.root.u.value32;
-            rc         = OldData.callInfo.Hdr.rc;
-        }
-    }
     return rc;
 }
 
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibVMMDev.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibVMMDev.cpp
index 652680a..9d57e70 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibVMMDev.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibVMMDev.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3Lib.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3Lib.cpp
index 39db133..04de461 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3Lib.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3Lib.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAdditions.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAdditions.cpp
index ec095d6..daa9080 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAdditions.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAdditions.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAutoLogon.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAutoLogon.cpp
index 8659cc7..1b1da4f 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAutoLogon.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibAutoLogon.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibBalloon.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibBalloon.cpp
index 26aeed9..2f49afe 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibBalloon.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibBalloon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp
index 48f2653..481cabf 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCoreDump.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCoreDump.cpp
index dc64677..dac88a1 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCoreDump.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCoreDump.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCpuHotPlug.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCpuHotPlug.cpp
index b4e0166..8863f08 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCpuHotPlug.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCpuHotPlug.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCredentials.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCredentials.cpp
index 1736aac..3d7df38 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCredentials.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibCredentials.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDaemonize.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDaemonize.cpp
index 06e63f9..37f4533 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDaemonize.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDaemonize.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp
index 6db0df4..2a67abf 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibEvent.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibEvent.cpp
index fb6fc63..5edfc1a 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibEvent.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibEvent.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGR.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGR.cpp
index 1f42e99..7ce2a9d 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGR.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGR.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp
index 60b35fc..ee3f3c9 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestCtrl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestProp.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestProp.cpp
index 04a5cb0..9dbbf23 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestProp.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestProp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestUser.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestUser.cpp
index a9d0140..8327405 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestUser.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibGuestUser.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHGCM.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHGCM.cpp
index 6d5ac49..91b60b0 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHGCM.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHGCM.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostChannel.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostChannel.cpp
index 27fec45..b5b1dc1 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostChannel.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostChannel.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostVersion.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostVersion.cpp
index 8e6fcfa..78826ea 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostVersion.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibHostVersion.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibInternal.h b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibInternal.h
index c7845b8..618e9c3 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibInternal.h
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -114,4 +114,3 @@ RT_C_DECLS_END
 
 #endif
 
-
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibLog.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibLog.cpp
index 5a0ec2b..afc4ec5 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibLog.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibLog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMisc.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMisc.cpp
index e1669f3..453cbb1 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMisc.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMisc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibModule.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibModule.cpp
index 106410f..be5ee66 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibModule.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibModule.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMouse.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMouse.cpp
index a3a1ab8..952f463 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMouse.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibPidFile.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibPidFile.cpp
index 963d94d..ccac20e 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibPidFile.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibPidFile.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibRuntimeXF86.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibRuntimeXF86.cpp
index 0ab634a..b4fb30b 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibRuntimeXF86.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibRuntimeXF86.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSeamless.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSeamless.cpp
index e86a6bd..9869ca2 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSeamless.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSeamless.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSharedFolders.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSharedFolders.cpp
index aaa80db..44792ec 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSharedFolders.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSharedFolders.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibStat.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibStat.cpp
index e3b978f..24d507f 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibStat.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibStat.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibTime.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibTime.cpp
index b231fe4..f0a0f57 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibTime.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibTime.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibVideo.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibVideo.cpp
index 4b96bbd..48156c6 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibVideo.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibVideo.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxGuest/lib/VbglR0CanUsePhysPageList.cpp b/src/VBox/Additions/common/VBoxGuest/lib/VbglR0CanUsePhysPageList.cpp
index 673afd1..f2aa8f1 100644
--- a/src/VBox/Additions/common/VBoxGuest/lib/VbglR0CanUsePhysPageList.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/lib/VbglR0CanUsePhysPageList.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Additions/common/VBoxGuest/linux/Makefile b/src/VBox/Additions/common/VBoxGuest/linux/Makefile
index e34fea7..fdb72b3 100644
--- a/src/VBox/Additions/common/VBoxGuest/linux/Makefile
+++ b/src/VBox/Additions/common/VBoxGuest/linux/Makefile
@@ -1,10 +1,10 @@
-# $Revision: 117871 $
+# $Revision: 119168 $
 ## @file
 # VirtualBox Guest Additions Module Makefile.
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 # Linux kbuild sets this to our source directory if we are called from there
 obj ?= $(CURDIR)
@@ -56,6 +65,7 @@ MOD_OBJS   = \
 	common/alloc/alloc.o \
 	common/err/RTErrConvertFromErrno.o \
 	common/err/RTErrConvertToErrno.o \
+	common/err/errinfo.o \
 	common/log/log.o \
 	common/log/logellipsis.o \
 	common/log/logrel.o \
@@ -71,6 +81,7 @@ MOD_OBJS   = \
 	common/misc/RTAssertMsg2WeakV.o \
 	common/misc/assert.o \
 	common/misc/thread.o \
+	common/string/RTStrCat.o \
 	common/string/RTStrCopy.o \
 	common/string/RTStrCopyEx.o \
 	common/string/RTStrCopyP.o \
diff --git a/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest b/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
index 8563ea5..54cacaa 100755
--- a/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
+++ b/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxguest $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
@@ -100,6 +109,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/alloc/heapsimple.cpp=>common/alloc/heapsimple.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp=>common/err/RTErrConvertFromErrno.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertToErrno.cpp=>common/err/RTErrConvertToErrno.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/err/errinfo.cpp=>common/err/errinfo.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/log.cpp=>common/log/log.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logellipsis.cpp=>common/log/logellipsis.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logrel.cpp=>common/log/logrel.c \
@@ -122,6 +132,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/RTAssertMsg2WeakV.cpp=>common/misc/RTAssertMsg2WeakV.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/assert.cpp=>common/misc/assert.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/thread.cpp=>common/misc/thread.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCat.cpp=>common/string/RTStrCat.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopy.cpp=>common/string/RTStrCopy.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyEx.cpp=>common/string/RTStrCopyEx.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyP.cpp=>common/string/RTStrCopyP.c \
diff --git a/src/VBox/Additions/common/VBoxGuest/solaris/deps.asm b/src/VBox/Additions/common/VBoxGuest/solaris/deps.asm
index b29845a..d467886 100644
--- a/src/VBox/Additions/common/VBoxGuest/solaris/deps.asm
+++ b/src/VBox/Additions/common/VBoxGuest/solaris/deps.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 %include "iprt/solaris/kmoddeps.mac"
 
diff --git a/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.inf b/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.inf
index dbd35ca..8517ee2 100644
--- a/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.inf
+++ b/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.inf
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 Signature="$WINDOWS NT$"
diff --git a/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.rc b/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.rc
index 0d3a618..0872b3b 100644
--- a/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.rc
+++ b/src/VBox/Additions/common/VBoxGuest/win/VBoxGuest.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/Additions/common/VBoxGuest/win/VBoxGuestInst.cpp b/src/VBox/Additions/common/VBoxGuest/win/VBoxGuestInst.cpp
index 624f72d..6ba1b37 100644
--- a/src/VBox/Additions/common/VBoxGuest/win/VBoxGuestInst.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/win/VBoxGuestInst.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService-os2.def b/src/VBox/Additions/common/VBoxService/VBoxService-os2.def
index f9a8b77..048aeaf 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService-os2.def
+++ b/src/VBox/Additions/common/VBoxService/VBoxService-os2.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2007-2016 Oracle Corporation
+; Copyright (C) 2007-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp
index b3709cc..91eaa02 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService-win.rc b/src/VBox/Additions/common/VBoxService/VBoxService-win.rc
index 405c3d8..00fd52e 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService-win.rc
+++ b/src/VBox/Additions/common/VBoxService/VBoxService-win.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService.cpp b/src/VBox/Additions/common/VBoxService/VBoxService.cpp
index 2979738..7b7523d 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxService.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -299,7 +299,8 @@ static DECLCALLBACK(void) vgsvcLogHeaderFooter(PRTLOGGER pLoggerRelease, RTLOGPH
  * Pass NULL to disabled logging.
  *
  * @return  IPRT status code.
- * @param   pszLogFile      Filename for log output.  NULL disables logging.
+ * @param   pszLogFile      Filename for log output.  NULL disables logging
+ *                          (r=bird: No, it doesn't!).
  */
 int VGSvcLogCreate(const char *pszLogFile)
 {
@@ -309,7 +310,6 @@ int VGSvcLogCreate(const char *pszLogFile)
 #if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
     fFlags |= RTLOGFLAGS_USECRLF;
 #endif
-    char szError[RTPATH_MAX + 128] = "";
     int rc = RTLogCreateEx(&g_pLoggerRelease, fFlags, "all",
 #ifdef DEBUG
                            "VBOXSERVICE_LOG",
@@ -319,7 +319,7 @@ int VGSvcLogCreate(const char *pszLogFile)
                            RT_ELEMENTS(s_apszGroups), s_apszGroups,
                            RTLOGDEST_STDOUT | RTLOGDEST_USER,
                            vgsvcLogHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
-                           szError, sizeof(szError), pszLogFile);
+                           NULL /*pErrInfo*/, "%s", pszLogFile ? pszLogFile : "");
     if (RT_SUCCESS(rc))
     {
         /* register this logger as the release logger */
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
index 3c84390..67dcbb2 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -404,20 +404,6 @@ static int vbsvcAutoMountSharedFolder(const char *pszShareName, const char *pszM
                 }
                 r = mount(mntinf.name, pszMountPoint, "vboxsf", fFlags, &mntinf);
             }
-            if (errno == EPROTO)
-            {
-                VGSvcVerbose(3, "vbsvcAutoMountWorker: Re-trying with old mounting structure ...\n");
-
-                /* New mount tool with old vboxsf module? Try again using the old
-                 * vbsf_mount_info_old structure. */
-                struct vbsf_mount_info_old mntinf_old;
-                memcpy(&mntinf_old.name, &mntinf.name, MAX_HOST_NAME);
-                memcpy(&mntinf_old.nls_name, mntinf.nls_name, MAX_NLS_NAME);
-                mntinf_old.uid = mntinf.uid;
-                mntinf_old.gid = mntinf.gid;
-                mntinf_old.ttl = mntinf.ttl;
-                r = mount(mntinf_old.name, pszMountPoint, "vboxsf", fFlags, &mntinf_old);
-            }
             if (r == -1) /* Was there some error from one of the tries above? */
             {
                 switch (errno)
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
index ad7b01a..b8007cb 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
index 18191ec..8896899 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
index 578c08a..80a5787 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
index ab764e3..091eec1 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
index 1bc48d7..9ef3cca 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
index 8c007ca..e3eefb2 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp
index 93dea61..a35be8e 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -82,7 +82,7 @@ typedef struct SYSFSCPUPATH
     /** Number of entries in the array, excluding the terminator. */
     unsigned           cComponents;
     /** Directory handle */
-    PRTDIR             pDir;
+    RTDIR              hDir;
     /** Current directory to try. */
     char              *pszPath;
 } SYSFSCPUPATH, *PSYSFSCPUPATH;
@@ -191,11 +191,11 @@ static int vgsvcCpuHotPlugProbePath(void)
                 PCSYSFSCPUPATHCOMP pPathComponent = &pAcpiCpuPathLvl->aComponentsPossible[iCompCurr];
 
                 /* Open the directory */
-                PRTDIR pDirCurr = NULL;
+                RTDIR hDirCurr = NIL_RTDIR;
                 char *pszPathTmp = RTPathJoinA(pszPath, pPathComponent->pcszName);
                 if (pszPathTmp)
                 {
-                    rc = RTDirOpenFiltered(&pDirCurr, pszPathTmp, RTDIRFILTER_WINNT, 0);
+                    rc = RTDirOpenFiltered(&hDirCurr, pszPathTmp, RTDIRFILTER_WINNT, 0 /*fFlags*/);
                     RTStrFree(pszPathTmp);
                 }
                 else
@@ -212,7 +212,7 @@ static int vgsvcCpuHotPlugProbePath(void)
                 if (pPathComponent->fNumberedSuffix)
                     cchName--;
 
-                while (RT_SUCCESS(RTDirRead(pDirCurr, &DirFolderContent, NULL))) /* Assumption that szName has always enough space */
+                while (RT_SUCCESS(RTDirRead(hDirCurr, &DirFolderContent, NULL))) /* Assumption that szName has always enough space */
                 {
                     if (   DirFolderContent.cbName >= cchName
                         && !strncmp(DirFolderContent.szName, pPathComponent->pcszName, cchName))
@@ -231,7 +231,7 @@ static int vgsvcCpuHotPlugProbePath(void)
                         break;
                     }
                 }
-                RTDirClose(pDirCurr);
+                RTDirClose(hDirCurr);
 
                 if (fFound)
                     break;
@@ -288,7 +288,7 @@ static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore,
         }
 
         /* Open the directory */
-        rc = RTDirOpenFiltered(&pAcpiCpuPathLvl->pDir, pszPath, RTDIRFILTER_WINNT, 0);
+        rc = RTDirOpenFiltered(&pAcpiCpuPathLvl->hDir, pszPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
         if (RT_SUCCESS(rc))
         {
             RTStrFree(pszPath);
@@ -298,7 +298,7 @@ static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore,
             {
                 /* Get the next directory. */
                 RTDIRENTRY DirFolderContent;
-                rc = RTDirRead(pAcpiCpuPathLvl->pDir, &DirFolderContent, NULL);
+                rc = RTDirRead(pAcpiCpuPathLvl->hDir, &DirFolderContent, NULL);
                 if (RT_SUCCESS(rc))
                 {
                     /* Create the new path. */
@@ -360,7 +360,7 @@ static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore,
 
                         pAcpiCpuPathLvl = &g_aAcpiCpuPath[iLvlCurr];
 
-                        Assert(!pAcpiCpuPathLvl->pDir);
+                        Assert(pAcpiCpuPathLvl->hDir == NIL_RTDIR);
                         Assert(!pAcpiCpuPathLvl->pszPath);
                         pAcpiCpuPathLvl->pszPath = pszPathCurr;
                         PCSYSFSCPUPATHCOMP pPathComponent = &pAcpiCpuPathLvl->aComponentsPossible[pAcpiCpuPathLvl->uId];
@@ -377,7 +377,7 @@ static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore,
                         VGSvcVerbose(3, "New path %s\n", pszPathDir);
 
                         /* Open the directory */
-                        rc = RTDirOpenFiltered(&pAcpiCpuPathLvl->pDir, pszPathDir, RTDIRFILTER_WINNT, 0);
+                        rc = RTDirOpenFiltered(&pAcpiCpuPathLvl->hDir, pszPathDir, RTDIRFILTER_WINNT, 0 /*fFlags*/);
                         if (RT_FAILURE(rc))
                             break;
                     }
@@ -387,9 +387,9 @@ static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore,
                     /* Go back one level and try to get the next entry. */
                     Assert(iLvlCurr > 0);
 
-                    RTDirClose(pAcpiCpuPathLvl->pDir);
+                    RTDirClose(pAcpiCpuPathLvl->hDir);
                     RTStrFree(pAcpiCpuPathLvl->pszPath);
-                    pAcpiCpuPathLvl->pDir = NULL;
+                    pAcpiCpuPathLvl->hDir = NIL_RTDIR;
                     pAcpiCpuPathLvl->pszPath = NULL;
 
                     iLvlCurr--;
@@ -402,11 +402,11 @@ static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore,
         /* Cleanup */
         for (unsigned i = 0; i < RT_ELEMENTS(g_aAcpiCpuPath); i++)
         {
-            if (g_aAcpiCpuPath[i].pDir)
-                RTDirClose(g_aAcpiCpuPath[i].pDir);
+            if (g_aAcpiCpuPath[i].hDir)
+                RTDirClose(g_aAcpiCpuPath[i].hDir);
             if (g_aAcpiCpuPath[i].pszPath)
                 RTStrFree(g_aAcpiCpuPath[i].pszPath);
-            g_aAcpiCpuPath[i].pDir = NULL;
+            g_aAcpiCpuPath[i].hDir = NIL_RTDIR;
             g_aAcpiCpuPath[i].pszPath = NULL;
         }
         if (pszPathDir)
@@ -445,12 +445,12 @@ static void vgsvcCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t idCpuPac
 
     do
     {
-        PRTDIR pDirDevices = NULL;
-        int rc = RTDirOpen(&pDirDevices, SYSFS_CPU_PATH);
+        RTDIR hDirDevices = NULL;
+        int rc = RTDirOpen(&hDirDevices, SYSFS_CPU_PATH);
         if (RT_SUCCESS(rc))
         {
             RTDIRENTRY DirFolderContent;
-            while (RT_SUCCESS(RTDirRead(pDirDevices, &DirFolderContent, NULL))) /* Assumption that szName has always enough space */
+            while (RT_SUCCESS(RTDirRead(hDirDevices, &DirFolderContent, NULL))) /* Assumption that szName has always enough space */
             {
                 /** @todo r-bird: This code is bringing all CPUs online; the idCpuCore and
                  *        idCpuPackage parameters are unused!
@@ -493,6 +493,7 @@ static void vgsvcCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t idCpuPac
                                    SYSFS_CPU_PATH, DirFolderContent.szName, rc);
                 }
             }
+            RTDirClose(hDirDevices);
         }
         else
             VGSvcError("CpuHotPlug: Failed to open path %s rc=%Rrc\n", SYSFS_CPU_PATH, rc);
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h b/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h
index 6238ec4..b95c67d 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp b/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
index 2311e6b..f4f0d86 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp
index 1b33002..4ece6db 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h
index 065e336..80cb1a2 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceResource-win.h b/src/VBox/Additions/common/VBoxService/VBoxServiceResource-win.h
index b325809..15c23ec 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceResource-win.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceResource-win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
index bca13f1..332a272 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp
index 2d02abd..3196240 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp
index 38d61ea..f0a86d2 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -739,8 +739,8 @@ static int vgsvcToolboxLsHandleDir(const char *pszDir, uint32_t fFlags, uint32_t
         return rc;
     }
 
-    PRTDIR pDir;
-    rc = RTDirOpen(&pDir, szPathAbs);
+    RTDIR hDir;
+    rc = RTDirOpen(&hDir, szPathAbs);
     if (RT_FAILURE(rc))
     {
         if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
@@ -758,7 +758,7 @@ static int vgsvcToolboxLsHandleDir(const char *pszDir, uint32_t fFlags, uint32_t
     for (;RT_SUCCESS(rc);)
     {
         RTDIRENTRYEX DirEntry;
-        rc = RTDirReadEx(pDir, &DirEntry, NULL, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+        rc = RTDirReadEx(hDir, &DirEntry, NULL, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
         if (RT_SUCCESS(rc))
         {
             PVBOXSERVICETOOLBOXDIRENTRY pNode = (PVBOXSERVICETOOLBOXDIRENTRY)RTMemAlloc(sizeof(VBOXSERVICETOOLBOXDIRENTRY));
@@ -775,7 +775,7 @@ static int vgsvcToolboxLsHandleDir(const char *pszDir, uint32_t fFlags, uint32_t
     if (rc == VERR_NO_MORE_FILES)
         rc = VINF_SUCCESS;
 
-    int rc2 = RTDirClose(pDir);
+    int rc2 = RTDirClose(hDir);
     if (RT_FAILURE(rc2))
     {
         if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.h b/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.h
index 5e4cc61..b66ba08 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
index 97ccad1..8251e6a 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h
index 91ab163..e26e3f9 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
index 49d9ba5..2e3d084 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp
index c273f7e..3627457 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h
index 6e897c2..6a39c4a 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxService/testcase/tstUserInfo.cpp b/src/VBox/Additions/common/VBoxService/testcase/tstUserInfo.cpp
index ed72210..50a5b5c 100644
--- a/src/VBox/Additions/common/VBoxService/testcase/tstUserInfo.cpp
+++ b/src/VBox/Additions/common/VBoxService/testcase/tstUserInfo.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/VBoxVideo/.scm-settings b/src/VBox/Additions/common/VBoxVideo/.scm-settings
new file mode 100644
index 0000000..a6791de
--- /dev/null
+++ b/src/VBox/Additions/common/VBoxVideo/.scm-settings
@@ -0,0 +1,33 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for common/VBoxVideo
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+
+# This graphics stuff is using MIT to encourage kernel upstreaming.
+--license-mit
+
diff --git a/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp b/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
index 5933a53..4efaead 100644
--- a/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
+++ b/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/VBox/Additions/common/VBoxVideo/HGSMIBuffers.cpp b/src/VBox/Additions/common/VBoxVideo/HGSMIBuffers.cpp
index a584bf8..7055d97 100644
--- a/src/VBox/Additions/common/VBoxVideo/HGSMIBuffers.cpp
+++ b/src/VBox/Additions/common/VBoxVideo/HGSMIBuffers.cpp
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/VBox/Additions/common/VBoxVideo/HGSMIHostCmd.cpp b/src/VBox/Additions/common/VBoxVideo/HGSMIHostCmd.cpp
index 3d35959..cd10f58 100644
--- a/src/VBox/Additions/common/VBoxVideo/HGSMIHostCmd.cpp
+++ b/src/VBox/Additions/common/VBoxVideo/HGSMIHostCmd.cpp
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp b/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp
index e631e1b..64cd0cc 100644
--- a/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp
+++ b/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp
@@ -7,22 +7,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp b/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp
index 631e69b..79783b7 100644
--- a/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp
+++ b/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp
@@ -7,22 +7,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/include/iprt/ntwrap.mac b/src/VBox/Additions/common/VBoxVideo/todo-create-library-from-these-files-for-windows
similarity index 100%
copy from include/iprt/ntwrap.mac
copy to src/VBox/Additions/common/VBoxVideo/todo-create-library-from-these-files-for-windows
diff --git a/src/VBox/Additions/common/crOpenGL/.scm-settings b/src/VBox/Additions/common/crOpenGL/.scm-settings
new file mode 100644
index 0000000..1fd1b66
--- /dev/null
+++ b/src/VBox/Additions/common/crOpenGL/.scm-settings
@@ -0,0 +1,62 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for common/crOpenGL.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# Much of this is externally licensed, but not all, sigh.
+--external-copyright --no-convert-tabs
+
+/array/arrayspu.rc:             --no-external-copyright --convert-tabs
+
+/feedback/feedbackspu.rc:       --no-external-copyright --convert-tabs
+/feedback/feedback_context.c:   --no-external-copyright --convert-tabs
+
+/pack/packspu.rc:               --no-external-copyright --convert-tabs
+/pack/packspu_framebuffer.c:    --no-external-copyright --convert-tabs
+/pack/packspu_getshaders.c:     --no-external-copyright --convert-tabs
+/pack/packspu_glsl.c:           --no-external-copyright --convert-tabs
+/pack/packspu_texture.c:        --no-external-copyright --convert-tabs
+
+/passthrough/passthroughspu.rc: --no-external-copyright --convert-tabs
+
+/.scm-settings:                 --no-external-copyright --convert-tabs
+/dri_drv.c:                     --no-external-copyright --convert-tabs
+/dri_drv.h:                     --no-external-copyright --convert-tabs
+/dri_glx.h:                     --no-external-copyright --convert-tabs
+/egl.c:                         --no-external-copyright --convert-tabs
+/fakedri_drv.c:                 --no-external-copyright --convert-tabs
+/fakedri_drv.h:                 --no-external-copyright --convert-tabs
+/fakedri_glfuncsList.h:         --no-external-copyright --convert-tabs
+/fakedri_glxfuncsList.h:        --no-external-copyright --convert-tabs
+/glx.c:                         --no-external-copyright --convert-tabs
+/glx_c_exports.c:               --no-external-copyright --convert-tabs
+/glx_proto.h:                   --no-external-copyright --convert-tabs
+/icd_drv.c:                     --no-external-copyright --convert-tabs
+/icd_drv.h:                     --no-external-copyright --convert-tabs
+/Linux_i386_glxapi_exports.py:  --no-external-copyright --convert-tabs
+/Makefile.kmk:                  --no-external-copyright --convert-tabs
+/SunOS_i386_exports.py:         --no-external-copyright --convert-tabs
+/SunOS_i386_exports_dri.py:     --no-external-copyright --convert-tabs
+/SunOS_i386_glxapi_exports.py:  --no-external-copyright --convert-tabs
+/VBoxCROGL.rc:                  --no-external-copyright --convert-tabs
+/VBoxICDList.h:                 --no-external-copyright
+
+*_special: --treat-as Makefile
+
+# Ignore some stuff.
+--filter-out-files /COPYRIGHT.LLNL
+--filter-out-files /COPYRIGHT.REDHAT
+--filter-out-files /LICENSE
+
diff --git a/src/VBox/Additions/common/crOpenGL/DD_glc.py b/src/VBox/Additions/common/crOpenGL/DD_glc.py
index db5c321..33aee4d 100755
--- a/src/VBox/Additions/common/crOpenGL/DD_glc.py
+++ b/src/VBox/Additions/common/crOpenGL/DD_glc.py
@@ -5,7 +5,7 @@ print("""
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2016 """ """Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/DD_glh.py b/src/VBox/Additions/common/crOpenGL/DD_glh.py
index 73eb550..38d9ba6 100755
--- a/src/VBox/Additions/common/crOpenGL/DD_glh.py
+++ b/src/VBox/Additions/common/crOpenGL/DD_glh.py
@@ -5,7 +5,7 @@ print("""
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2016 """ """Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/Linux_i386_glxapi_exports.py b/src/VBox/Additions/common/crOpenGL/Linux_i386_glxapi_exports.py
index 087861f..5b12774 100755
--- a/src/VBox/Additions/common/crOpenGL/Linux_i386_glxapi_exports.py
+++ b/src/VBox/Additions/common/crOpenGL/Linux_i386_glxapi_exports.py
@@ -1,5 +1,8 @@
+from __future__ import print_function
+
+__copyright__ = \
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
@@ -10,7 +13,6 @@ VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 """
 
-from __future__ import print_function
 import sys
 
 #Note, this should match the fakedri_glxfuncsList.h order
@@ -89,6 +91,8 @@ print("extern glxim")
 print("%endif")
 print("")
 
+## r=bird: This could all be done with macros in the assembler.
+
 for index in range(len(glx_functions)):
     func_name = glx_functions[index]
 
diff --git a/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports.py b/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports.py
index 48611f8..5828f84 100755
--- a/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports.py
+++ b/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports.py
@@ -1,5 +1,5 @@
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports_dri.py b/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports_dri.py
index 1166b83..4632ce2 100755
--- a/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports_dri.py
+++ b/src/VBox/Additions/common/crOpenGL/SunOS_i386_exports_dri.py
@@ -1,5 +1,5 @@
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/SunOS_i386_glxapi_exports.py b/src/VBox/Additions/common/crOpenGL/SunOS_i386_glxapi_exports.py
index 0659767..f38139f 100755
--- a/src/VBox/Additions/common/crOpenGL/SunOS_i386_glxapi_exports.py
+++ b/src/VBox/Additions/common/crOpenGL/SunOS_i386_glxapi_exports.py
@@ -1,5 +1,5 @@
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc b/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc
index cda4a5b..1c55cfe 100644
--- a/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc
+++ b/src/VBox/Additions/common/crOpenGL/VBoxCROGL.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/VBoxICDList.h b/src/VBox/Additions/common/crOpenGL/VBoxICDList.h
index 49ed339..c34b804 100644
--- a/src/VBox/Additions/common/crOpenGL/VBoxICDList.h
+++ b/src/VBox/Additions/common/crOpenGL/VBoxICDList.h
@@ -1,8 +1,10 @@
+/* $Id: VBoxICDList.h $ */
 /** @file
- *
  * VirtualBox Windows NT/2000/XP guest OpenGL ICD
- *
- * Copyright (C) 2006-2016 Oracle Corporation
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/array/arrayspu.c b/src/VBox/Additions/common/crOpenGL/array/arrayspu.c
index 98fd234..da230ee 100644
--- a/src/VBox/Additions/common/crOpenGL/array/arrayspu.c
+++ b/src/VBox/Additions/common/crOpenGL/array/arrayspu.c
@@ -478,7 +478,7 @@ static void ARRAYSPU_APIENTRY arrayspu_DrawElements(GLenum mode, GLsizei count,
     }
 #endif
     //crDebug("arrayspu_DrawElements mode:0x%x, count:%d, type:0x%x", mode, count, type);
-    
+
 
     array_spu.self.Begin(mode);
     switch (type)
@@ -663,7 +663,7 @@ static void ARRAYSPU_APIENTRY arrayspu_Disable(GLenum cap)
      array_spu.child.Disable(cap);
 }
 
-/*@todo: it's a hack, as GLSL shouldn't blindly reuse this bit from nv_vertex_program*/
+/** @todo it's a hack, as GLSL shouldn't blindly reuse this bit from nv_vertex_program*/
 static void ARRAYSPU_APIENTRY arrayspu_UseProgram(GLuint program)
 {
     crStateGetCurrent()->program.vpEnabled = program>0;
@@ -671,7 +671,7 @@ static void ARRAYSPU_APIENTRY arrayspu_UseProgram(GLuint program)
 }
 
 static void ARRAYSPU_APIENTRY
-arrayspu_VertexAttribPointerARB(GLuint index, GLint size, GLenum type, 
+arrayspu_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
                                 GLboolean normalized, GLsizei stride,
                                 const GLvoid *pointer)
 {
@@ -844,7 +844,7 @@ arrayspu_MakeCurrent( GLint window, GLint nativeWindow, GLint ctx )
 
         crStateMakeCurrent(array_spu.context[slot].clientState);
     }
-    else 
+    else
     {
         crStateMakeCurrent(NULL);
     }
diff --git a/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc b/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc
index bcdbde5..4dbe5b5 100644
--- a/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc
+++ b/src/VBox/Additions/common/crOpenGL/array/arrayspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c b/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c
index f05ee5b..bd773f5 100644
--- a/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c
+++ b/src/VBox/Additions/common/crOpenGL/array/arrayspu_init.c
@@ -44,7 +44,7 @@ static SPUFunctions *arraySPUInit( int id, SPU *child, SPU *self,
     arrayspuSetVBoxConfiguration();
 
     crStateInit();
-/*@todo seems default context ain't needed at all*/
+/** @todo seems default context ain't needed at all*/
     array_spu.defaultctx = crStateCreateContext( NULL, 0, NULL );
 #ifdef CR_ARB_vertex_buffer_object
     array_spu.defaultctx->bufferobject.retainBufferData = GL_TRUE;
@@ -81,6 +81,6 @@ int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
     *cleanup = arraySPUCleanup;
     *options = arraySPUOptions;
     *flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
-    
+
     return 1;
 }
diff --git a/src/VBox/Additions/common/crOpenGL/context.c b/src/VBox/Additions/common/crOpenGL/context.c
index 9068baf..29b93aa 100644
--- a/src/VBox/Additions/common/crOpenGL/context.c
+++ b/src/VBox/Additions/common/crOpenGL/context.c
@@ -5,7 +5,7 @@
  */
 
 /**
- * \mainpage OpenGL_stub 
+ * \mainpage OpenGL_stub
  *
  * \section OpenGL_stubIntroduction Introduction
  *
@@ -74,7 +74,7 @@ stubSetDispatch( SPUDispatchTable *table )
      * to get a pointer to the dispatch table, and jump through it.
      */
     }
-    else 
+    else
 #endif
     {
     /* Single thread mode - just install the caller's dispatch table */
@@ -256,7 +256,7 @@ stubNewWindow( const char *dpyName, GLint visBits )
 static XErrorHandler oldErrorHandler;
 static unsigned char lastXError = Success;
 
-static int 
+static int
 errorHandler (Display *dpy, XErrorEvent *e)
 {
     RT_NOREF(dpy);
@@ -280,7 +280,7 @@ stubIsWindowVisible(WindowInfo *win)
     return GL_TRUE;
 #elif defined(GLX)
     Display *dpy = stubGetWindowDisplay(win);
-    if (dpy) 
+    if (dpy)
     {
         XWindowAttributes attr;
         XLOCK(dpy);
@@ -317,7 +317,7 @@ stubIsWindowVisible(WindowInfo *win)
             XLOCK(dpy);
             XSync(dpy, false);
             oldErrorHandler = XSetErrorHandler(errorHandler);
-            /*@todo this will create new pixmap for window every call*/
+            /** @todo this will create new pixmap for window every call*/
             p = XCompositeNameWindowPixmap(dpy, win->drawable);
             XSync(dpy, false);
             XSetErrorHandler(oldErrorHandler);
@@ -751,8 +751,8 @@ GetCursorPosition(WindowInfo *window, int pos[2])
     unsigned int NativeHeight, NativeWidth, ChromiumHeight, ChromiumWidth;
     float WidthRatio, HeightRatio;
     static int DebugFlag = 0;
-    
-    // apparently the "window" parameter passed to this 
+
+    // apparently the "window" parameter passed to this
     // function contains the native window information
     HWND NATIVEhwnd = window->hWnd;
 
@@ -773,7 +773,7 @@ GetCursorPosition(WindowInfo *window, int pos[2])
     // get the ratio of the size of the native window to the cr window
     WidthRatio = (float)ChromiumWidth / (float)NativeWidth;
     HeightRatio = (float)ChromiumHeight / (float)NativeHeight;
-    
+
     // output some debug information at the beginning
     if(DebugFlag)
     {
@@ -784,12 +784,12 @@ GetCursorPosition(WindowInfo *window, int pos[2])
         crDebug("Chromium Width = %i", ChromiumWidth);
         crDebug("Chromium Height = %i", ChromiumHeight);
     }
-        
-    if (NATIVEhwnd) 
-    { 
+
+    if (NATIVEhwnd)
+    {
         GetClientRect( NATIVEhwnd, &rect );
         GetCursorPos (&point);
-        
+
         // make sure these coordinates are relative to the native window,
         // not the whole desktop
         ScreenToClient(NATIVEhwnd, &point);
@@ -798,7 +798,7 @@ GetCursorPosition(WindowInfo *window, int pos[2])
         pos[0] = (int)(point.x * WidthRatio);
         pos[1] = (int)((NativeHeight - point.y) * HeightRatio);
     }
-    else 
+    else
     {
         pos[0] = 0;
         pos[1] = 0;
@@ -865,9 +865,9 @@ stubGetWindowGeometry(WindowInfo *window, int *x, int *y, unsigned int *w, unsig
 
     dpy = stubGetWindowDisplay(window);
 
-    //@todo: Performing those checks is expensive operation, especially for simple apps with high FPS.
+    /// @todo Performing those checks is expensive operation, especially for simple apps with high FPS.
     //       Disabling those triples glxgears fps, thus using xevents instead of per frame polling is much more preferred.
-    //@todo: Check similar on windows guests, though doubtful as there're no XSync like calls on windows.
+    /// @todo Check similar on windows guests, though doubtful as there're no XSync like calls on windows.
     if (window && dpy)
     {
         XLOCK(dpy);
@@ -877,7 +877,7 @@ stubGetWindowGeometry(WindowInfo *window, int *x, int *y, unsigned int *w, unsig
         || !dpy
         || !window->drawable
         || !XGetGeometry(dpy, window->drawable, &root, x, y, w, h, &border, &depth)
-        || !XTranslateCoordinates(dpy, window->drawable, root, 0, 0, x, y, &child)) 
+        || !XTranslateCoordinates(dpy, window->drawable, root, 0, 0, x, y, &child))
     {
         crWarning("Failed to get windows geometry for %p, try xwininfo", window);
         *x = *y = 0;
@@ -1020,21 +1020,21 @@ stubCheckUseChromium( WindowInfo *window )
     }
 
     /* If the user's specified a minimum window size for Chromium, see if
-     * this window satisfies that criterium. 
+     * this window satisfies that criterium.
      */
-    if (stub.minChromiumWindowWidth > 0 && 
+    if (stub.minChromiumWindowWidth > 0 &&
         stub.minChromiumWindowHeight > 0) {
         stubGetWindowGeometry( window, &x, &y, &w, &h );
-        if (w >= stub.minChromiumWindowWidth && 
+        if (w >= stub.minChromiumWindowWidth &&
             h >= stub.minChromiumWindowHeight) {
 
             /* Check for maximum sized window now too */
-            if (stub.maxChromiumWindowWidth && 
+            if (stub.maxChromiumWindowWidth &&
                 stub.maxChromiumWindowHeight) {
                 if (w < stub.maxChromiumWindowWidth &&
                     h < stub.maxChromiumWindowHeight)
                     return GL_TRUE;
-                else 
+                else
                     return GL_FALSE;
             }
 
@@ -1283,7 +1283,7 @@ stubMakeCurrent( WindowInfo *window, ContextInfo *context )
 # endif
                         );
 #endif
-                if (context->currentDrawable && context->currentDrawable->type==CHROMIUM 
+                if (context->currentDrawable && context->currentDrawable->type==CHROMIUM
                     && context->currentDrawable->pOwner==context)
                 {
 #ifdef WINDOWS
@@ -1303,7 +1303,7 @@ stubMakeCurrent( WindowInfo *window, ContextInfo *context )
                         }
                         XUNLOCK(context->currentDrawable->dpy);
 #endif
-                    
+
                 }
             }
 
diff --git a/src/VBox/Additions/common/crOpenGL/cr_gl.py b/src/VBox/Additions/common/crOpenGL/cr_gl.py
index 5b8ec2e..12e332a 100755
--- a/src/VBox/Additions/common/crOpenGL/cr_gl.py
+++ b/src/VBox/Additions/common/crOpenGL/cr_gl.py
@@ -5,7 +5,7 @@ print("""
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2016 """ """Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/defs.py b/src/VBox/Additions/common/crOpenGL/defs.py
index c03f515..c070308 100755
--- a/src/VBox/Additions/common/crOpenGL/defs.py
+++ b/src/VBox/Additions/common/crOpenGL/defs.py
@@ -428,7 +428,7 @@ for func_name in keys:
     except KeyError:
         pass
 
-for func_name in ( "wglChoosePixelFormat", 
+for func_name in ( "wglChoosePixelFormat",
            "wglCopyContext",
            "wglCreateContext",
            "wglCreateLayerContext",
@@ -451,7 +451,7 @@ for func_name in ( "wglChoosePixelFormat",
            "wglUseFontBitmapsA",
            "wglUseFontBitmapsW",
            "wglUseFontOutlinesA",
-           "wglUseFontOutlinesW", 
+           "wglUseFontOutlinesW",
            "wglChoosePixelFormatEXT",
            "wglGetPixelFormatAttribivEXT",
            "wglGetPixelFormatAttribfvEXT",
diff --git a/src/VBox/Additions/common/crOpenGL/defs64.py b/src/VBox/Additions/common/crOpenGL/defs64.py
index b1ac349..58971b9 100755
--- a/src/VBox/Additions/common/crOpenGL/defs64.py
+++ b/src/VBox/Additions/common/crOpenGL/defs64.py
@@ -425,7 +425,7 @@ for func_name in keys:
     if func_name in exports_special:
         print("gl%s = cr_gl%s" % (func_name,func_name))
 
-for func_name in ( "wglChoosePixelFormat", 
+for func_name in ( "wglChoosePixelFormat",
            "wglCopyContext",
            "wglCreateContext",
            "wglCreateLayerContext",
@@ -448,7 +448,7 @@ for func_name in ( "wglChoosePixelFormat",
            "wglUseFontBitmapsA",
            "wglUseFontBitmapsW",
            "wglUseFontOutlinesA",
-           "wglUseFontOutlinesW", 
+           "wglUseFontOutlinesW",
            "wglChoosePixelFormatEXT",
            "wglGetPixelFormatAttribivEXT",
            "wglGetPixelFormatAttribfvEXT",
diff --git a/src/VBox/Additions/common/crOpenGL/dri_drv.c b/src/VBox/Additions/common/crOpenGL/dri_drv.c
index be36d78..c0a53c8 100644
--- a/src/VBox/Additions/common/crOpenGL/dri_drv.c
+++ b/src/VBox/Additions/common/crOpenGL/dri_drv.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -148,7 +148,7 @@ vboxDDUpdateState(GLcontext * ctx, GLuint new_state)
 }
 
 #if 0  /* See comment in vboxdriInitFuncs */
-static void 
+static void
 vboxDDGetBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
 {
     /*do something, note it's obsolete*/
@@ -222,7 +222,7 @@ vboxDDTexImage2D(GLcontext *ctx, GLenum target, GLint level,
                  struct gl_texture_image *texImage)
 {
 }
-   
+
 static void
 vboxDDTexImage3D(GLcontext *ctx, GLenum target, GLint level,
                  GLint internalFormat,
@@ -244,7 +244,7 @@ vboxDDTexSubImage1D(GLcontext *ctx, GLenum target, GLint level,
                     struct gl_texture_image *texImage)
 {
 }
-   
+
 static void
 vboxDDTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
                     GLint xoffset, GLint yoffset,
@@ -257,7 +257,7 @@ vboxDDTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
 {
 }
 
-   
+
 static void
 vboxDDTexSubImage3D(GLcontext *ctx, GLenum target, GLint level,
                     GLint xoffset, GLint yoffset, GLint zoffset,
@@ -316,13 +316,13 @@ vboxDDClipPlane(GLcontext *ctx, GLenum plane, const GLfloat *equation)
 {
 }
 
-/*@todo Enable or disable server-side gl capabilities, not related to glEnable? */
+/** @todo Enable or disable server-side gl capabilities, not related to glEnable? */
 static void
 vboxDDEnable(GLcontext *ctx, GLenum cap, GLboolean state)
 {
-    if (state) 
+    if (state)
         cr_glEnable(cap);
-    else 
+    else
         cr_glDisable(cap);
 }
 
@@ -339,46 +339,46 @@ vboxDDTexParameter(GLcontext *ctx, GLenum target,
 {
 }
 
-/*Note, checking glGetError before and after those calls is the only way 
+/*Note, checking glGetError before and after those calls is the only way
  *to return if we succeeded to get value or not, but it will add 2 sync calls and
  *will reset glGetError value returned in case application calls it explicitly
  */
-static GLboolean 
+static GLboolean
 vboxDDGetBooleanv(GLcontext *ctx, GLenum pname, GLboolean *result)
 {
     cr_glGetBooleanv(pname, result);
     return GL_TRUE;
 }
 
-static GLboolean 
+static GLboolean
 vboxDDGetDoublev(GLcontext *ctx, GLenum pname, GLdouble *result)
 {
     cr_glGetDoublev(pname, result);
     return GL_TRUE;
 }
 
-static GLboolean 
+static GLboolean
 vboxDDGetFloatv(GLcontext *ctx, GLenum pname, GLfloat *result)
 {
     cr_glGetFloatv(pname, result);
     return GL_TRUE;
 }
 
-static GLboolean 
+static GLboolean
 vboxDDGetIntegerv(GLcontext *ctx, GLenum pname, GLint *result)
 {
     cr_glGetIntegerv(pname, result);
     return GL_TRUE;
 }
 
-static GLboolean 
+static GLboolean
 vboxDDGetPointerv(GLcontext *ctx, GLenum pname, GLvoid **result)
 {
     cr_glGetPointerv(pname, result);
     return GL_TRUE;
 }
 
-/** @todo 
+/** @todo
  * change stub's createcontext to reuse driver private part of mesa's ctx to store stub ctx info.
  */
 #define VBOX_GL_FUNC(func) vboxDD_gl##func
@@ -527,7 +527,7 @@ vboxdriInitFuncs(struct dd_function_table *driver)
    driver->GetIntegerv = vboxDDGetIntegerv;
    driver->GetPointerv = vboxDDGetPointerv;
 
-/** @todo */   
+/** @todo */
 #if FEATURE_ARB_vertex_buffer_object
    // driver->NewBufferObject = _mesa_new_buffer_object;
    // driver->DeleteBuffer = _mesa_delete_buffer_object;
@@ -776,7 +776,7 @@ static __GLcontextModes *vboxdriFillInModes(unsigned pixel_bits,
 /**
  * This is the driver specific part of the createNewScreen entry point.
  * Called when using legacy DRI.
- * 
+ *
  * return the __GLcontextModes supported by this driver
  */
 static const __DRIconfig **vboxdriInitScreen(__DRIscreenPrivate *psp)
@@ -875,7 +875,7 @@ vboxdriCreateContext(const __GLcontextModes * mesaVis,
     /* Allocate context information for Mesa. */
     if (sharedContextPrivate)
       shareCtx = ((tdfxContextPtr) sharedContextPrivate)->glCtx;
-   else 
+   else
       shareCtx = NULL;
     /** @todo save ctx, or be more confident that we can don't need to. */
     ctx = _mesa_create_context(mesaVis, shareCtx, &functions,
@@ -890,7 +890,7 @@ vboxdriCreateContext(const __GLcontextModes * mesaVis,
      * driParseConfigFiles.  We will probably get any information via guest
      * properties. */
 
-   /* Set various context configuration.  We take these values from the 
+   /* Set various context configuration.  We take these values from the
     * TDFX driver. */
    /** @r=Leonid, stub.spu->dispatch_table.GetIntegerv(GL_MAX_TEXTURE_UNITS_ARB,&value) etc.
     * Those would be cached where possible, see include/state/cr_limits.h, VBoxOGLgen/packspu_get.c
diff --git a/src/VBox/Additions/common/crOpenGL/dri_drv.h b/src/VBox/Additions/common/crOpenGL/dri_drv.h
index 1bbbdca..e81a8a5 100644
--- a/src/VBox/Additions/common/crOpenGL/dri_drv.h
+++ b/src/VBox/Additions/common/crOpenGL/dri_drv.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/dri_glx.h b/src/VBox/Additions/common/crOpenGL/dri_glx.h
index 72be798..a7a633d 100644
--- a/src/VBox/Additions/common/crOpenGL/dri_glx.h
+++ b/src/VBox/Additions/common/crOpenGL/dri_glx.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -52,7 +52,7 @@ extern DECLEXPORT(GLXPixmap) VBOXGLXTAG(glXCreateGLXPixmapMESA)(Display *dpy, XV
 #endif
 
 /*Common glX functions*/
-extern DECLEXPORT(void) VBOXGLXTAG(glXCopyContext)( Display *dpy, GLXContext src, GLXContext dst, 
+extern DECLEXPORT(void) VBOXGLXTAG(glXCopyContext)( Display *dpy, GLXContext src, GLXContext dst,
 #if defined(SunOS)
 unsigned long mask);
 #else
diff --git a/src/VBox/Additions/common/crOpenGL/dri_util.c b/src/VBox/Additions/common/crOpenGL/dri_util.c
index 23884fd..5041e07 100644
--- a/src/VBox/Additions/common/crOpenGL/dri_util.c
+++ b/src/VBox/Additions/common/crOpenGL/dri_util.c
@@ -7,7 +7,7 @@
  * driver doesn't really \e have to use any of this - it's optional.  But, some
  * useful stuff is done here that otherwise would have to be duplicated in most
  * drivers.
- * 
+ *
  * Basically, these utility functions take care of some of the dirty details of
  * screen initialization, context creation, context binding, DRM setup, etc.
  *
@@ -47,10 +47,10 @@ const __DRIextension driReadDrawableExtension = {
 
 /**
  * Print message to \c stderr if the \c LIBGL_DEBUG environment variable
- * is set. 
- * 
+ * is set.
+ *
  * Is called from the drivers.
- * 
+ *
  * \param f \c printf like format string.
  */
 void
@@ -87,19 +87,19 @@ driIntersectArea( drm_clip_rect_t rect1, drm_clip_rect_t rect2 )
 
 /**
  * Unbind context.
- * 
+ *
  * \param scrn the screen.
  * \param gc context.
  *
  * \return \c GL_TRUE on success, or \c GL_FALSE on failure.
- * 
+ *
  * \internal
  * This function calls __DriverAPIRec::UnbindContext, and then decrements
  * __DRIdrawablePrivateRec::refcount which must be non-zero for a successful
  * return.
- * 
+ *
  * While casting the opaque private pointers associated with the parameters
- * into their respective real types it also assures they are not \c NULL. 
+ * into their respective real types it also assures they are not \c NULL.
  */
 static int driUnbindContext(__DRIcontext *pcp)
 {
@@ -196,7 +196,7 @@ static int driBindContext(__DRIcontext *pcp,
 	    __driUtilUpdateDrawableInfo(pdp);
 	    DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
 	}
-	
+
 	if ((pdp != prp) && (!prp->pStamp || *prp->pStamp != prp->lastStamp)) {
 	    DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);
 	    __driUtilUpdateDrawableInfo(prp);
@@ -222,7 +222,7 @@ static int driBindContext(__DRIcontext *pcp,
  * Update private drawable information.
  *
  * \param pdp pointer to the private drawable information to update.
- * 
+ *
  * This function basically updates the __DRIdrawablePrivate struct's
  * cliprect information by calling \c __DRIinterfaceMethods::getDrawableInfo.
  * This is usually called by the DRI_VALIDATE_DRAWABLE_INFO macro which
@@ -235,22 +235,22 @@ __driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp)
 {
     __DRIscreenPrivate *psp = pdp->driScreenPriv;
     __DRIcontextPrivate *pcp = pdp->driContextPriv;
-    
-    if (!pcp 
+
+    if (!pcp
 	|| ((pdp != pcp->driDrawablePriv) && (pdp != pcp->driReadablePriv))) {
-	/* ERROR!!! 
+	/* ERROR!!!
 	 * ...but we must ignore it. There can be many contexts bound to a
 	 * drawable.
 	 */
     }
 
     if (pdp->pClipRects) {
-	_mesa_free(pdp->pClipRects); 
+	_mesa_free(pdp->pClipRects);
 	pdp->pClipRects = NULL;
     }
 
     if (pdp->pBackClipRects) {
-	_mesa_free(pdp->pBackClipRects); 
+	_mesa_free(pdp->pBackClipRects);
 	pdp->pBackClipRects = NULL;
     }
 
@@ -329,13 +329,13 @@ __driParseEvents(__DRIcontextPrivate *pcp, __DRIdrawablePrivate *pdp)
 
        case DRI2_EVENT_BUFFER_ATTACH:
 	  ba = (__DRIBufferAttachEvent *) p;
-	  if (ba->drawable == pdp->dri2.drawable_id && 
+	  if (ba->drawable == pdp->dri2.drawable_id &&
 	      ba->buffer.attachment == DRI_DRAWABLE_BUFFER_FRONT_LEFT)
 	     last_ba = ba;
 	  break;
        }
     }
-	  
+
     if (last_dc) {
        if (pdp->w != last_dc->width || pdp->h != last_dc->height)
 	  changed = 1;
@@ -448,10 +448,10 @@ static void driReportDamage(__DRIdrawable *pdp,
  * Swap buffers.
  *
  * \param drawablePrivate opaque pointer to the per-drawable private info.
- * 
+ *
  * \internal
  * This function calls __DRIdrawablePrivate::swapBuffers.
- * 
+ *
  * Is called directly from glXSwapBuffers().
  */
 static void driSwapBuffers(__DRIdrawable *dPriv)
@@ -594,7 +594,7 @@ driCreateNewDrawable(__DRIscreen *psp, const __DRIconfig *config,
 
     /* This special default value is replaced with the configured
      * default value when the drawable is first bound to a direct
-     * rendering context. 
+     * rendering context.
      */
     pdp->swap_interval = (unsigned)-1;
 
@@ -650,7 +650,7 @@ driDestroyDrawable(__DRIdrawable *pdp)
 
 /**
  * Destroy the per-context private information.
- * 
+ *
  * \internal
  * This function calls __DriverAPIRec::DestroyContext on \p contextPrivate, calls
  * drmDestroyContext(), and finally frees \p contextPrivate.
@@ -667,14 +667,14 @@ driDestroyContext(__DRIcontext *pcp)
 
 /**
  * Create the per-drawable private driver information.
- * 
+ *
  * \param render_type   Type of rendering target.  \c GLX_RGBA is the only
  *                      type likely to ever be supported for direct-rendering.
  * \param shared        Context with which to share textures, etc. or NULL
  *
  * \returns An opaque pointer to the per-context private information on
  *          success, or \c NULL on failure.
- * 
+ *
  * \internal
  * This function allocates and fills a __DRIcontextPrivateRec structure.  It
  * performs some device independent initialization and passes all the
@@ -684,7 +684,7 @@ driDestroyContext(__DRIcontext *pcp)
  */
 static __DRIcontext *
 driCreateNewContext(__DRIscreen *psp, const __DRIconfig *config,
-		    int render_type, __DRIcontext *shared, 
+		    int render_type, __DRIcontext *shared,
 		    drm_context_t hwContext, void *data)
 {
     __DRIcontext *pcp;
@@ -755,7 +755,7 @@ driCopyContext(__DRIcontext *dest, __DRIcontext *src, unsigned long mask)
 
 /**
  * Destroy the per-screen private information.
- * 
+ *
  * \internal
  * This function calls __DriverAPIRec::DestroyScreen on \p screenPrivate, calls
  * drmClose(), and finally frees \p screenPrivate.
@@ -812,7 +812,7 @@ setupLoaderExtensions(__DRIscreen *psp,
  * pbuffers.
  *
  * For legacy DRI.
- * 
+ *
  * \param scrn  Index of the screen
  * \param ddx_version Version of the 2D DDX.  This may not be meaningful for
  *                    all drivers.
@@ -825,7 +825,7 @@ setupLoaderExtensions(__DRIscreen *psp,
  * \param extensions   ??
  * \param driver_modes  Returns modes supported by the driver
  * \param loaderPrivate  ??
- * 
+ *
  * \note There is no need to check the minimum API version in this
  * function.  Since the name of this function is versioned, it is
  * impossible for a loader that is too old to even load this driver.
@@ -836,7 +836,7 @@ driCreateNewScreen(int scrn,
 		   const __DRIversion *dri_version,
 		   const __DRIversion *drm_version,
 		   const __DRIframebuffer *frame_buffer,
-		   drmAddress pSAREA, int fd, 
+		   drmAddress pSAREA, int fd,
 		   const __DRIextension **extensions,
 		   const __DRIconfig ***driver_modes,
 		   void *loaderPrivate)
@@ -1048,22 +1048,22 @@ driQueryFrameTracking(__DRIdrawable *dpriv,
 const __DRIframeTrackingExtension driFrameTrackingExtension = {
     { __DRI_FRAME_TRACKING, __DRI_FRAME_TRACKING_VERSION },
     driFrameTracking,
-    driQueryFrameTracking    
+    driQueryFrameTracking
 };
 
 /**
  * Calculate amount of swap interval used between GLX buffer swaps.
- * 
+ *
  * The usage value, on the range [0,max], is the fraction of total swap
  * interval time used between GLX buffer swaps is calculated.
  *
  *            \f$p = t_d / (i * t_r)\f$
- * 
+ *
  * Where \f$t_d\f$ is the time since the last GLX buffer swap, \f$i\f$ is the
  * swap interval (as set by \c glXSwapIntervalSGI), and \f$t_r\f$ time
  * required for a single vertical refresh period (as returned by \c
  * glXGetMscRateOML).
- * 
+ *
  * See the documentation for the GLX_MESA_swap_frame_usage extension for more
  * details.
  *
@@ -1075,7 +1075,7 @@ const __DRIframeTrackingExtension driFrameTrackingExtension = {
  *          a number greater than 1.0 will be returned.
  *
  * \sa glXSwapIntervalSGI glXGetMscRateOML
- * 
+ *
  * \todo Instead of caching the \c glXGetMscRateOML function pointer, would it
  *       be possible to cache the sync rate?
  */
@@ -1110,7 +1110,7 @@ driCalculateSwapUsage( __DRIdrawablePrivate *dPriv, int64_t last_swap_ust,
       usage /= (interval * d);
       usage /= 1000000.0;
    }
-   
+
    return usage;
 }
 
diff --git a/src/VBox/Additions/common/crOpenGL/egl.c b/src/VBox/Additions/common/crOpenGL/egl.c
index 784f58d..00f150a 100644
--- a/src/VBox/Additions/common/crOpenGL/egl.c
+++ b/src/VBox/Additions/common/crOpenGL/egl.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -16,9 +16,10 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/cdefs.h>
 #include <iprt/types.h>
 
@@ -35,9 +36,10 @@
 #define EGL_ASSERT(expr) \
     if (!(expr)) { printf("Assertion failed: %s\n", #expr); exit(1); }
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 
 struct VBEGLTLS
 {
@@ -55,9 +57,10 @@ struct VBEGLTLS
     EGLSurface hCurrentRead;
 };
 
-/*******************************************************************************
-*   Defined Constants And Macros                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
 /** @note IDs returned for surfaces should always be lower than these constants.
  */
 /** This is OR-ed with a surface ID to mark it as a window, as GLX needs to
@@ -71,9 +74,10 @@ struct VBEGLTLS
 #define VBEGL_PIXMAP_SURFACE  0x80000000
 #define VBEGL_ANY_SURFACE     (VBEGL_WINDOW_SURFACE | VBEGL_PBUFFER_SURFACE | VBEGL_PIXMAP_SURFACE)
 
-/*******************************************************************************
-*   Global variables                                                           *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Global variables                                                                                                             *
+*********************************************************************************************************************************/
 
 static pthread_key_t  g_tls;
 static pthread_once_t g_tlsOnce = PTHREAD_ONCE_INIT;
diff --git a/src/VBox/Additions/common/crOpenGL/entrypoints.py b/src/VBox/Additions/common/crOpenGL/entrypoints.py
index a1a3a1f..bdd93e7 100755
--- a/src/VBox/Additions/common/crOpenGL/entrypoints.py
+++ b/src/VBox/Additions/common/crOpenGL/entrypoints.py
@@ -178,4 +178,3 @@ def GenerateEntrypoints(hacks = []):
             print("}")
             print("")
 
-
diff --git a/src/VBox/Additions/common/crOpenGL/entrypoints.pyc b/src/VBox/Additions/common/crOpenGL/entrypoints.pyc
index f6c6bab..8f1074b 100644
Binary files a/src/VBox/Additions/common/crOpenGL/entrypoints.pyc and b/src/VBox/Additions/common/crOpenGL/entrypoints.pyc differ
diff --git a/src/VBox/Additions/common/crOpenGL/fakedri_drv.c b/src/VBox/Additions/common/crOpenGL/fakedri_drv.c
index 6a378a7..92b4ffc 100644
--- a/src/VBox/Additions/common/crOpenGL/fakedri_drv.c
+++ b/src/VBox/Additions/common/crOpenGL/fakedri_drv.c
@@ -1,11 +1,10 @@
 /* $Id: fakedri_drv.c $ */
-
 /** @file
  * VBox OpenGL DRI driver functions
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -40,24 +39,24 @@
 
 /** X server message type definitions. */
 typedef enum {
-    X_PROBED,			/* Value was probed */
-    X_CONFIG,			/* Value was given in the config file */
-    X_DEFAULT,			/* Value is a default */
-    X_CMDLINE,			/* Value was given on the command line */
-    X_NOTICE,			/* Notice */
-    X_ERROR,			/* Error message */
-    X_WARNING,			/* Warning message */
-    X_INFO,			/* Informational message */
-    X_NONE,			/* No prefix */
-    X_NOT_IMPLEMENTED,		/* Not implemented */
-    X_UNKNOWN = -1		/* unknown -- this must always be last */
+    X_PROBED,                   /* Value was probed */
+    X_CONFIG,                   /* Value was given in the config file */
+    X_DEFAULT,                  /* Value is a default */
+    X_CMDLINE,                  /* Value was given on the command line */
+    X_NOTICE,                   /* Notice */
+    X_ERROR,                    /* Error message */
+    X_WARNING,                  /* Warning message */
+    X_INFO,                     /* Informational message */
+    X_NONE,                     /* No prefix */
+    X_NOT_IMPLEMENTED,          /* Not implemented */
+    X_UNKNOWN = -1              /* unknown -- this must always be last */
 } MessageType;
 
 #define VBOX_NO_MESA_PATCH_REPORTS
 
 //#define DEBUG_DRI_CALLS
 
-//@todo this could be different...
+/// @todo this could be different...
 #ifdef RT_ARCH_AMD64
 # ifdef RT_OS_FREEBSD
 #  define DRI_DEFAULT_DRIVER_DIR "/usr/local/lib/dri"
@@ -218,7 +217,7 @@ vboxApplyPatch(const char* psFuncName, void *pDst, const void *pSrc, unsigned lo
 
     crMemcpy(pDst, pSrc, size);
 
-    /*@todo Restore the protection, probably have to check what was it before us...*/
+    /** @todo Restore the protection, probably have to check what was it before us...*/
     rv = RTMemProtect(alPatch, pDst-alPatch+size, RTMEM_PROT_READ|RTMEM_PROT_EXEC);
     if (RT_FAILURE(rv))
     {
@@ -231,79 +230,79 @@ vboxApplyPatch(const char* psFuncName, void *pDst, const void *pSrc, unsigned lo
 #if defined(RT_OS_FREEBSD)
 /* Provide basic dladdr1 flags */
 enum {
-	RTLD_DL_SYMENT	= 1
+        RTLD_DL_SYMENT  = 1
 };
 
 /* Provide a minimal local version of dladdr1 */
 static int
 dladdr1(const void *address, Dl_info *dlip, void **info, int flags)
 {
-	static DRI_ELFSYM desym;
-	GElf_Sym sym;
-	GElf_Shdr shdr;
-	Elf *elf;
-	Elf_Scn *scn;
-	Elf_Data *data;
-	int ret, fd, count, i;
-
-	/* Initialize variables */
-	fd = -1;
-	elf = NULL;
-
-	/* Call dladdr first */
-	ret = dladdr(address, dlip);
-	if (ret == 0) goto err_exit;
-
-	/* Check for supported flags */
-	if (flags != RTLD_DL_SYMENT) return 1;
-
-	/* Open shared library's ELF file */
-	if (elf_version(EV_CURRENT) == EV_NONE) goto err_exit;
-	fd = open(dlip->dli_fname, O_RDONLY);
-	if (fd < 0) goto err_exit;
-	elf = elf_begin(fd, ELF_C_READ, NULL);
-	if (elf == NULL) goto err_exit;
-
-	/* Find the '.dynsym' section */
-	scn = elf_nextscn(elf, NULL);
-	while (scn != NULL) {
-		if (gelf_getshdr(scn, &shdr) == NULL) goto err_exit;
-		if (shdr.sh_type == SHT_DYNSYM) break;
-		scn = elf_nextscn(elf, scn);
-	}
-	if (scn == NULL) goto err_exit;
-
-	/* Search for the requested symbol by name and offset */
-	data = elf_getdata(scn, NULL);
-	count = shdr.sh_size / shdr.sh_entsize;
-	for (i = 0; i < count; i++) {
-		gelf_getsym(data, i, &sym);
-		if ((strcmp(dlip->dli_sname,
-		        elf_strptr(elf, shdr.sh_link, sym.st_name)) == 0) &&
-		    (sym.st_value == (dlip->dli_saddr - dlip->dli_fbase))) {
-			break;
-		}
-	}
-
-	/* Close ELF file */
-	elf_end(elf);
-	close(fd);
-
-	/* Return symbol entry in native format */
-	desym.st_name = sym.st_name;
-	desym.st_info = sym.st_info;
-	desym.st_other = sym.st_other;
-	desym.st_shndx = sym.st_shndx;
-	desym.st_value = sym.st_value;
-	desym.st_size = sym.st_size;
-	*info = &desym;
-	return 1;
-
-	/* Error handler */
+        static DRI_ELFSYM desym;
+        GElf_Sym sym;
+        GElf_Shdr shdr;
+        Elf *elf;
+        Elf_Scn *scn;
+        Elf_Data *data;
+        int ret, fd, count, i;
+
+        /* Initialize variables */
+        fd = -1;
+        elf = NULL;
+
+        /* Call dladdr first */
+        ret = dladdr(address, dlip);
+        if (ret == 0) goto err_exit;
+
+        /* Check for supported flags */
+        if (flags != RTLD_DL_SYMENT) return 1;
+
+        /* Open shared library's ELF file */
+        if (elf_version(EV_CURRENT) == EV_NONE) goto err_exit;
+        fd = open(dlip->dli_fname, O_RDONLY);
+        if (fd < 0) goto err_exit;
+        elf = elf_begin(fd, ELF_C_READ, NULL);
+        if (elf == NULL) goto err_exit;
+
+        /* Find the '.dynsym' section */
+        scn = elf_nextscn(elf, NULL);
+        while (scn != NULL) {
+                if (gelf_getshdr(scn, &shdr) == NULL) goto err_exit;
+                if (shdr.sh_type == SHT_DYNSYM) break;
+                scn = elf_nextscn(elf, scn);
+        }
+        if (scn == NULL) goto err_exit;
+
+        /* Search for the requested symbol by name and offset */
+        data = elf_getdata(scn, NULL);
+        count = shdr.sh_size / shdr.sh_entsize;
+        for (i = 0; i < count; i++) {
+                gelf_getsym(data, i, &sym);
+                if ((strcmp(dlip->dli_sname,
+                        elf_strptr(elf, shdr.sh_link, sym.st_name)) == 0) &&
+                    (sym.st_value == (dlip->dli_saddr - dlip->dli_fbase))) {
+                        break;
+                }
+        }
+
+        /* Close ELF file */
+        elf_end(elf);
+        close(fd);
+
+        /* Return symbol entry in native format */
+        desym.st_name = sym.st_name;
+        desym.st_info = sym.st_info;
+        desym.st_other = sym.st_other;
+        desym.st_shndx = sym.st_shndx;
+        desym.st_value = sym.st_value;
+        desym.st_size = sym.st_size;
+        *info = &desym;
+        return 1;
+
+        /* Error handler */
 err_exit:
-	if (elf != NULL) elf_end(elf);
-	if (fd >= 0) close(fd);
-	return 0;
+        if (elf != NULL) elf_end(elf);
+        if (fd >= 0) close(fd);
+        return 0;
 }
 #endif
 
@@ -372,9 +371,9 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd
 #endif
         /* Try to insert 5 bytes jmp/jmpq to our stub code */
 
-    	if (sym->st_size<5)
+        if (sym->st_size<5)
         {
-            /*@todo we don't really know the size of targeted static function, but it's long enough in practice. We will also patch same place twice, but it's ok.*/
+            /** @todo we don't really know the size of targeted static function, but it's long enough in practice. We will also patch same place twice, but it's ok.*/
             if (!crStrcmp(psFuncName, "glXDestroyContext") || !crStrcmp(psFuncName, "glXFreeContextEXT"))
             {
                 if (((unsigned char*)dlip.dli_saddr)[0]==0xEB)
@@ -391,7 +390,7 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd
             }
             else if (!crStrcmp(psFuncName, "glXCreateGLXPixmapMESA"))
             {
-                /*@todo it's just a return 0, which we're fine with for now*/
+                /** @todo it's just a return 0, which we're fine with for now*/
                 return;
             }
             else
@@ -439,7 +438,7 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd
                 pNode->pDstStart = dlip.dli_saddr;
                 pNode->pDstEnd = dlip.dli_saddr+sym->st_size;
                 pNode->pSrcStart = pStart;
-                pNode->pSrcEnd = pEnd; 
+                pNode->pSrcEnd = pEnd;
                 pNode->pNext = g_pRepatchList;
                 g_pRepatchList = pNode;
                 return;
@@ -469,7 +468,7 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd
         {
                 pNode->psFuncName = psFuncName;
                 pNode->pDstStart = dlip.dli_saddr+(pEnd-pStart);
-                pNode->pDstEnd = dlip.dli_saddr+sym->st_size; 
+                pNode->pDstEnd = dlip.dli_saddr+sym->st_size;
                 pNode->pSrcStart = dlip.dli_saddr;
                 pNode->pSrcEnd = NULL;
                 pNode->pNext = g_pFreeList;
@@ -522,7 +521,7 @@ vboxRepatchMesaExports(void)
         patch[0] = 0xE9;
         crMemcpy(&patch[1], &offset, 4);
 # ifndef VBOX_NO_MESA_PATCH_REPORTS
-        crDebug("Adding jmp from mesa %s to mesa %s+%#lx", pPatchNode->psFuncName, pFreeNode->psFuncName, 
+        crDebug("Adding jmp from mesa %s to mesa %s+%#lx", pPatchNode->psFuncName, pFreeNode->psFuncName,
                 pFreeNode->pDstStart-pFreeNode->pSrcStart);
 # endif
         vboxApplyPatch(pPatchNode->psFuncName, pPatchNode->pDstStart, &patch[0], 5);
@@ -603,15 +602,15 @@ bool vbox_load_sw_dri()
         libPaths = DRI_DEFAULT_DRIVER_DIR;
 
     handle = NULL;
-    for (p = libPaths; *p; p = next) 
+    for (p = libPaths; *p; p = next)
     {
         next = strchr(p, ':');
-        if (next == NULL) 
+        if (next == NULL)
         {
             len = strlen(p);
             next = p + len;
-        } 
-        else 
+        }
+        else
         {
             len = next - p;
             next++;
@@ -634,7 +633,7 @@ bool vbox_load_sw_dri()
     }
     crDebug("loaded %s", realDriverName);
 
-    for (i = 0; gppSwDriExternsion[i]; i++) 
+    for (i = 0; gppSwDriExternsion[i]; i++)
     {
         if (strcmp(gppSwDriExternsion[i]->name, __DRI_CORE) == 0)
             gpSwDriCoreExternsion = (__DRIcoreExtension *) gppSwDriExternsion[i];
@@ -715,7 +714,7 @@ vboxdriCreateNewScreen(int screen, int fd, unsigned int sarea_handle,
     SWDRI_SAFERET_SWRAST(createNewScreen, screen, extensions, driverConfigs, loaderPrivate);
 }
 
-static void 
+static void
 vboxdriDestroyScreen(__DRIscreen *screen)
 {
     SWDRI_SAFECALL_CORE(destroyScreen, screen);
@@ -754,7 +753,7 @@ vboxdriCreateNewDrawable(__DRIscreen *screen,
     SWDRI_SAFERET_SWRAST(createNewDrawable, screen, config, loaderPrivate);
 }
 
-static void 
+static void
 vboxdriDestroyDrawable(__DRIdrawable *drawable)
 {
     SWDRI_SAFECALL_CORE(destroyDrawable, drawable);
@@ -775,7 +774,7 @@ vboxdriCreateNewContext(__DRIscreen *screen,
     SWDRI_SAFERET_CORE(createNewContext, screen, config, shared, loaderPrivate);
 }
 
-static int 
+static int
 vboxdriCopyContext(__DRIcontext *dest,
                    __DRIcontext *src,
                    unsigned long mask)
@@ -783,13 +782,13 @@ vboxdriCopyContext(__DRIcontext *dest,
     SWDRI_SAFERET_CORE(copyContext, dest, src, mask);
 }
 
-static void 
+static void
 vboxdriDestroyContext(__DRIcontext *context)
 {
     SWDRI_SAFECALL_CORE(destroyContext, context);
 }
 
-static int 
+static int
 vboxdriBindContext(__DRIcontext *ctx,
                    __DRIdrawable *pdraw,
                    __DRIdrawable *pread)
@@ -797,7 +796,7 @@ vboxdriBindContext(__DRIcontext *ctx,
     SWDRI_SAFERET_CORE(bindContext, ctx, pdraw, pread);
 }
 
-static int 
+static int
 vboxdriUnbindContext(__DRIcontext *ctx)
 {
     SWDRI_SAFERET_CORE(unbindContext, ctx)
@@ -811,7 +810,7 @@ vboxdriCreateNewScreen_Legacy(int scrn,
                               const __DRIversion *dri_version,
                               const __DRIversion *drm_version,
                               const __DRIframebuffer *frame_buffer,
-                              drmAddress pSAREA, int fd, 
+                              drmAddress pSAREA, int fd,
                               const __DRIextension **extensions,
                               const __DRIconfig ***driver_modes,
                               void *loaderPrivate)
@@ -838,7 +837,7 @@ vboxdriCreateNewDrawable_Legacy(__DRIscreen *psp, const __DRIconfig *config,
 
 static __DRIcontext *
 vboxdriCreateNewContext_Legacy(__DRIscreen *psp, const __DRIconfig *config,
-                               int render_type, __DRIcontext *shared, 
+                               int render_type, __DRIcontext *shared,
                                drm_context_t hwContext, void *data)
 {
     (void) render_type;
diff --git a/src/VBox/Additions/common/crOpenGL/fakedri_drv.h b/src/VBox/Additions/common/crOpenGL/fakedri_drv.h
index 35b185d..7c37773 100644
--- a/src/VBox/Additions/common/crOpenGL/fakedri_drv.h
+++ b/src/VBox/Additions/common/crOpenGL/fakedri_drv.h
@@ -1,12 +1,10 @@
 /* $Id: fakedri_drv.h $ */
-
 /** @file
- *
  * VirtualBox guest OpenGL DRI header
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -118,5 +116,5 @@ extern void VBOXGLXENTRYTAG(glXSelectEvent)(Display *dpy, GLXDrawable draw, unsi
 # undef GLXAPI_ENTRY
 #endif
 
-#endif /* ___CROPENGL_FAKEDRIDRV_H */
+#endif /* !___CROPENGL_FAKEDRIDRV_H */
 
diff --git a/src/VBox/Additions/common/crOpenGL/fakedri_glfuncsList.h b/src/VBox/Additions/common/crOpenGL/fakedri_glfuncsList.h
index 1d25c66..b587cef 100644
--- a/src/VBox/Additions/common/crOpenGL/fakedri_glfuncsList.h
+++ b/src/VBox/Additions/common/crOpenGL/fakedri_glfuncsList.h
@@ -1,11 +1,10 @@
 /* $Id: fakedri_glfuncsList.h $ */
-
 /** @file
  * VBox OpenGL list of opengl functions common in Mesa and vbox opengl stub
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/fakedri_glxfuncsList.h b/src/VBox/Additions/common/crOpenGL/fakedri_glxfuncsList.h
index 304cd8a..fbf271b 100644
--- a/src/VBox/Additions/common/crOpenGL/fakedri_glxfuncsList.h
+++ b/src/VBox/Additions/common/crOpenGL/fakedri_glxfuncsList.h
@@ -1,11 +1,10 @@
 /* $Id: fakedri_glxfuncsList.h $ */
-
 /** @file
  * VBox OpenGL list of opengl functions common in Mesa and vbox opengl stub
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedback_context.c b/src/VBox/Additions/common/crOpenGL/feedback/feedback_context.c
index 9e57faa..fae7451 100644
--- a/src/VBox/Additions/common/crOpenGL/feedback/feedback_context.c
+++ b/src/VBox/Additions/common/crOpenGL/feedback/feedback_context.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -28,7 +28,7 @@ void FEEDBACKSPU_APIENTRY   feedbackspu_MakeCurrent( GLint window, GLint nativeW
 void FEEDBACKSPU_APIENTRY   feedbackspu_DestroyContext( GLint ctx );
 
 
-/*@todo Multithreading case. (See feedback_spu.self.RenderMode)*/
+/** @todo Multithreading case. (See feedback_spu.self.RenderMode)*/
 
 GLint FEEDBACKSPU_APIENTRY
 feedbackspu_VBoxCreateContext( GLint con, const char *dpyName, GLint visual, GLint shareCtx )
@@ -93,7 +93,7 @@ feedbackspu_MakeCurrent( GLint window, GLint nativeWindow, GLint ctx )
             feedback_spu.self.RenderMode(oldmode);
         }
     }
-    else 
+    else
     {
         crStateMakeCurrent(NULL);
     }
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedback_state_special b/src/VBox/Additions/common/crOpenGL/feedback/feedback_state_special
index 2416df8..15bec65 100644
--- a/src/VBox/Additions/common/crOpenGL/feedback/feedback_state_special
+++ b/src/VBox/Additions/common/crOpenGL/feedback/feedback_state_special
@@ -63,4 +63,4 @@ MakeCurrent
 DestroyContext
 VBoxAttachThread
 VBoxDetachThread
-VBoxCreateContext
\ No newline at end of file
+VBoxCreateContext
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc
index 9bf449b..cef8af8 100644
--- a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc
+++ b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c
index 97fc506..f264763 100644
--- a/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c
+++ b/src/VBox/Additions/common/crOpenGL/feedback/feedbackspu_init.c
@@ -81,6 +81,6 @@ int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
 	*cleanup = feedbackSPUCleanup;
 	*options = feedbackSPUOptions;
 	*flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
-	
+
 	return 1;
 }
diff --git a/src/VBox/Additions/common/crOpenGL/glx.c b/src/VBox/Additions/common/crOpenGL/glx.c
index 063812f..344fbba 100644
--- a/src/VBox/Additions/common/crOpenGL/glx.c
+++ b/src/VBox/Additions/common/crOpenGL/glx.c
@@ -1,11 +1,10 @@
-/* $Id: dri_drv.c $ */
-
+/* $Id: glx.c $ */
 /** @file
  * VBox OpenGL GLX implementation
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -39,12 +38,12 @@
 /* Force full pixmap update if there're more damaged regions than this number*/
 #define CR_MAX_DAMAGE_REGIONS_TRACKED 50
 
-/* Force "bigger" update (full or clip) if it's reducing number of regions updated 
+/* Force "bigger" update (full or clip) if it's reducing number of regions updated
  * but doesn't increase updated area more than given number
  */
 #define CR_MIN_DAMAGE_PROFIT_SIZE 64*64
 
-/*@todo combine it in some other place*/
+/** @todo combine it in some other place*/
 /* Size of pack spu buffer - some delta for commands packing, see pack/packspu_config.c*/
 
 /** Ramshankar: Solaris compiz fix */
@@ -217,7 +216,7 @@ VBOXGLXTAG(glXChooseVisual)( Display *dpy, int screen, int *attribList )
     searchvis.visualid = XVisualIDFromVisual(DefaultVisual(dpy, screen));
     pret = XGetVisualInfo(dpy, VisualIDMask, &searchvis, &nvisuals);
     XUNLOCK(dpy);
-      
+
     if (nvisuals!=1) crWarning("glXChooseVisual: XGetVisualInfo returned %i visuals for %x", nvisuals, (unsigned int) searchvis.visualid);
     if (pret)
       crDebug("glXChooseVisual returned %x depth=%i", (unsigned int)pret->visualid, pret->depth);
@@ -231,7 +230,7 @@ err_exit:
 /**
  **  There is a problem with glXCopyContext.
  ** IRIX and Mesa both define glXCopyContext
- ** to have the mask argument being a 
+ ** to have the mask argument being a
  ** GLuint.  XFree 4 and oss.sgi.com
  ** define it to be an unsigned long.
  ** Solution: We don't support
@@ -239,7 +238,7 @@ err_exit:
  ** \#ifdef out the code.
  */
 DECLEXPORT(void)
-VBOXGLXTAG(glXCopyContext)( Display *dpy, GLXContext src, GLXContext dst, 
+VBOXGLXTAG(glXCopyContext)( Display *dpy, GLXContext src, GLXContext dst,
 #if defined(AIX) || defined(PLAYSTATION2)
 GLuint mask
 #elif defined(SunOS)
@@ -376,7 +375,7 @@ DECLEXPORT(Bool) VBOXGLXTAG(glXMakeCurrent)( Display *dpy, GLXDrawable drawable,
 
         if (pGlxPixmap)
         {
-            /*@todo*/
+            /** @todo */
             crWarning("Unimplemented glxMakeCurrent call with GLXPixmap passed, unexpected things might happen.");
         }
     }
@@ -522,14 +521,14 @@ DECLEXPORT(int) VBOXGLXTAG(glXGetConfig)( Display *dpy, XVisualInfo *vis, int at
             break;
 #if defined(SunOS) || 1
         /*
-          I don't think this is even a valid attribute for glxGetConfig. 
+          I don't think this is even a valid attribute for glxGetConfig.
           No idea why this gets called under SunOS but we simply ignore it
           -- jw
         */
         case GLX_X_VISUAL_TYPE:
           crWarning ("Ignoring Unsupported GLX Call: glxGetConfig with attrib 0x%x", attrib);
           break;
-#endif 
+#endif
 
         case GLX_TRANSPARENT_TYPE:
             *value = GLX_NONE_EXT;
@@ -678,7 +677,7 @@ DECLEXPORT(const char *) VBOXGLXTAG(glXGetClientString)( Display *dpy, int name
             break;
 
         case GLX_EXTENSIONS:
-            /*@todo should be a screen not a name...but it's not used anyway*/
+            /** @todo should be a screen not a name...but it's not used anyway*/
             retval  = glXQueryExtensionsString(dpy, name);
             break;
 
@@ -729,7 +728,7 @@ DECLEXPORT(CR_GLXFuncPtr) VBOXGLXTAG(glXGetProcAddress)( const GLubyte *name )
 
 #if GLX_EXTRAS
 
-DECLEXPORT(GLXPbufferSGIX) 
+DECLEXPORT(GLXPbufferSGIX)
 VBOXGLXTAG(glXCreateGLXPbufferSGIX)(Display *dpy, GLXFBConfigSGIX config,
                                     unsigned int width, unsigned int height,
                                     int *attrib_list)
@@ -781,14 +780,14 @@ DECLEXPORT(int) VBOXGLXTAG(glXGetFBConfigAttribSGIX)(Display *dpy, GLXFBConfig c
     return VBOXGLXTAG(glXGetFBConfigAttrib)(dpy, config, attribute, value);
 }
 
-DECLEXPORT(GLXFBConfigSGIX *) 
+DECLEXPORT(GLXFBConfigSGIX *)
 VBOXGLXTAG(glXChooseFBConfigSGIX)(Display *dpy, int screen,
                                   int *attrib_list, int *nelements)
 {
     return VBOXGLXTAG(glXChooseFBConfig)(dpy, screen, attrib_list, nelements);
 }
 
-DECLEXPORT(GLXPixmap) 
+DECLEXPORT(GLXPixmap)
 VBOXGLXTAG(glXCreateGLXPixmapWithConfigSGIX)(Display *dpy,
                                              GLXFBConfig config,
                                              Pixmap pixmap)
@@ -796,7 +795,7 @@ VBOXGLXTAG(glXCreateGLXPixmapWithConfigSGIX)(Display *dpy,
     return VBOXGLXTAG(glXCreatePixmap)(dpy, config, pixmap, NULL);
 }
 
-DECLEXPORT(GLXContext) 
+DECLEXPORT(GLXContext)
 VBOXGLXTAG(glXCreateContextWithConfigSGIX)(Display *dpy, GLXFBConfig config,
                                            int render_type,
                                            GLXContext share_list,
@@ -811,7 +810,7 @@ VBOXGLXTAG(glXCreateContextWithConfigSGIX)(Display *dpy, GLXFBConfig config,
     return VBOXGLXTAG(glXCreateContext)(dpy, NULL, share_list, direct);
 }
 
-DECLEXPORT(XVisualInfo *) 
+DECLEXPORT(XVisualInfo *)
 VBOXGLXTAG(glXGetVisualFromFBConfigSGIX)(Display *dpy,
                                          GLXFBConfig config)
 {
@@ -968,7 +967,7 @@ err_exit:
     return NULL;
 }
 
-DECLEXPORT(GLXContext) 
+DECLEXPORT(GLXContext)
 VBOXGLXTAG(glXCreateNewContext)(Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct)
 {
     (void) dpy;
@@ -986,7 +985,7 @@ VBOXGLXTAG(glXCreateNewContext)(Display *dpy, GLXFBConfig config, int render_typ
     return VBOXGLXTAG(glXCreateContext)(dpy, NULL, share_list, direct);
 }
 
-DECLEXPORT(GLXPbuffer) 
+DECLEXPORT(GLXPbuffer)
 VBOXGLXTAG(glXCreatePbuffer)(Display *dpy, GLXFBConfig config, ATTRIB_TYPE *attrib_list)
 {
     (void) dpy;
@@ -999,7 +998,7 @@ VBOXGLXTAG(glXCreatePbuffer)(Display *dpy, GLXFBConfig config, ATTRIB_TYPE *attr
 /* Note: there're examples where glxpixmaps are created without current context, so can't do much of the work here.
  * Instead we'd do necessary initialization on first use of those pixmaps.
  */
-DECLEXPORT(GLXPixmap) 
+DECLEXPORT(GLXPixmap)
 VBOXGLXTAG(glXCreatePixmap)(Display *dpy, GLXFBConfig config, Pixmap pixmap, ATTRIB_TYPE *attrib_list)
 {
     ATTRIB_TYPE *attrib;
@@ -1084,7 +1083,7 @@ VBOXGLXTAG(glXCreatePixmap)(Display *dpy, GLXFBConfig config, Pixmap pixmap, ATT
     return (GLXPixmap) pixmap;
 }
 
-DECLEXPORT(GLXWindow) 
+DECLEXPORT(GLXWindow)
 VBOXGLXTAG(glXCreateWindow)(Display *dpy, GLXFBConfig config, Window win, ATTRIB_TYPE *attrib_list)
 {
     GLXFBConfig *realcfg;
@@ -1293,7 +1292,7 @@ DECLEXPORT(int) VBOXGLXTAG(glXGetFBConfigAttrib)(Display *dpy, GLXFBConfig confi
             *value = 0;
             break;
         default:
-            crDebug("glXGetFBConfigAttrib: unknown attribute=0x%x", attribute); 
+            crDebug("glXGetFBConfigAttrib: unknown attribute=0x%x", attribute);
             return GLX_BAD_ATTRIBUTE;
     }
 
@@ -1439,7 +1438,7 @@ static void stubInitXSharedMemory(Display *dpy)
     stub.bShmInitFailed = GL_FALSE;
     crInfo("Using XSHM for GLX_EXT_texture_from_pixmap");
 
-    /*Anyway mark to be deleted when our process detaches it, in case of segfault etc*/   
+    /*Anyway mark to be deleted when our process detaches it, in case of segfault etc*/
 
 /* Ramshankar: Solaris compiz fix */
 #ifndef RT_OS_SOLARIS
@@ -1452,7 +1451,7 @@ void stubQueryXDamageExtension(Display *dpy, ContextInfo *pContext)
     int erb, vma, vmi;
 
     CRASSERT(pContext);
-    
+
     if (pContext->damageQueryFailed)
         return;
 
@@ -1478,7 +1477,7 @@ static void stubFetchDamageOnDrawable(Display *dpy, GLX_Pixmap_t *pGlxPixmap)
         XRectangle *returnRects;
         int        nReturnRects;
 
-        /* Get the damage region as a server region */ 
+        /* Get the damage region as a server region */
         XserverRegion serverDamageRegion = XFixesCreateRegion (dpy, NULL, 0);
 
         /* Unite damage region with server region and clear damage region */
@@ -1609,7 +1608,7 @@ static GLX_Pixmap_t* stubInitGlxPixmap(GLX_Pixmap_t* pCreateInfoPixmap, Display
         xgcv.subwindow_mode = IncludeInferiors;
         pGlxPixmap->gc = XCreateGC(dpy, (Pixmap)draw, GCGraphicsExposures|GCSubwindowMode, &xgcv);
 
-        pGlxPixmap->hShmPixmap = XShmCreatePixmap(dpy, pGlxPixmap->root, stub.xshmSI.shmaddr, &stub.xshmSI, 
+        pGlxPixmap->hShmPixmap = XShmCreatePixmap(dpy, pGlxPixmap->root, stub.xshmSI.shmaddr, &stub.xshmSI,
                                                   pGlxPixmap->w, pGlxPixmap->h, pGlxPixmap->depth);
     }
     else
@@ -1640,12 +1639,12 @@ static GLX_Pixmap_t* stubInitGlxPixmap(GLX_Pixmap_t* pCreateInfoPixmap, Display
         pGlxPixmap->pDamageRegion = NULL;
     }
 
-    /* glTexSubImage2D generates GL_INVALID_OP if texture array hasn't been defined by a call to glTexImage2D first. 
+    /* glTexSubImage2D generates GL_INVALID_OP if texture array hasn't been defined by a call to glTexImage2D first.
      * It's fine for small textures which would be updated in stubXshmUpdateWholeImage, but we'd never call glTexImage2D for big ones.
      * Note that we're making empty texture by passing NULL as pixels pointer, so there's no overhead transferring data to host.*/
     if (CR_MAX_TRANSFER_SIZE < 4*pGlxPixmap->w*pGlxPixmap->h)
     {
-        stub.spu->dispatch_table.TexImage2D(pGlxPixmap->target, 0, pGlxPixmap->format, pGlxPixmap->w, pGlxPixmap->h, 0, 
+        stub.spu->dispatch_table.TexImage2D(pGlxPixmap->target, 0, pGlxPixmap->format, pGlxPixmap->w, pGlxPixmap->h, 0,
                                             GL_BGRA, GL_UNSIGNED_BYTE, NULL);
     }
 
@@ -1659,7 +1658,7 @@ static void stubXshmUpdateWholeImage(Display *dpy, GLXDrawable draw, GLX_Pixmap_
 {
     /* To limit the size of transferring buffer, split bigger texture into regions
      * which fit into connection buffer. Could be done in hgcm or packspu but implementation in this place allows to avoid
-     * unnecessary memcpy. 
+     * unnecessary memcpy.
      * This also workarounds guest driver failures when sending 6+mb texture buffers on linux.
      */
     if (CR_MAX_TRANSFER_SIZE < 4*pGlxPixmap->w*pGlxPixmap->h)
@@ -1690,19 +1689,19 @@ static void stubXshmUpdateWholeImage(Display *dpy, GLXDrawable draw, GLX_Pixmap_
         CRPixelPackState unpackState;
 
         XLOCK(dpy);
-        XCopyArea(dpy, (Pixmap)draw, pGlxPixmap->hShmPixmap, pGlxPixmap->gc, 
+        XCopyArea(dpy, (Pixmap)draw, pGlxPixmap->hShmPixmap, pGlxPixmap->gc,
                   pGlxPixmap->x, pGlxPixmap->y, pGlxPixmap->w, pGlxPixmap->h, 0, 0);
         /* Have to make sure XCopyArea is processed */
         XSync(dpy, False);
         XUNLOCK(dpy);
-        
+
         stubGetUnpackState(&unpackState);
         stubSetUnpackState(&defaultPacking);
-        stub.spu->dispatch_table.TexImage2D(pGlxPixmap->target, 0, pGlxPixmap->format, pGlxPixmap->w, pGlxPixmap->h, 0, 
+        stub.spu->dispatch_table.TexImage2D(pGlxPixmap->target, 0, pGlxPixmap->format, pGlxPixmap->w, pGlxPixmap->h, 0,
                                             GL_BGRA, GL_UNSIGNED_BYTE, stub.xshmSI.shmaddr);
         stubSetUnpackState(&unpackState);
-        /*crDebug("Sync texture for drawable 0x%x(dmg handle 0x%x) [%i,%i,%i,%i]", 
-                  (unsigned int) draw, (unsigned int)pGlxPixmap->hDamage, 
+        /*crDebug("Sync texture for drawable 0x%x(dmg handle 0x%x) [%i,%i,%i,%i]",
+                  (unsigned int) draw, (unsigned int)pGlxPixmap->hDamage,
                   pGlxPixmap->x, pGlxPixmap->y, pGlxPixmap->w, pGlxPixmap->h);*/
     }
 }
@@ -1738,7 +1737,7 @@ static void stubXshmUpdateImageRect(Display *dpy, GLXDrawable draw, GLX_Pixmap_t
         CRPixelPackState unpackState;
 
         XLOCK(dpy);
-        XCopyArea(dpy, (Pixmap)draw, pGlxPixmap->hShmPixmap, pGlxPixmap->gc, 
+        XCopyArea(dpy, (Pixmap)draw, pGlxPixmap->hShmPixmap, pGlxPixmap->gc,
                   pRect->x, pRect->y, pRect->width, pRect->height, 0, 0);
         /* Have to make sure XCopyArea is processed */
         XSync(dpy, False);
@@ -1750,12 +1749,12 @@ static void stubXshmUpdateImageRect(Display *dpy, GLXDrawable draw, GLX_Pixmap_t
         {
             stub.spu->dispatch_table.PixelStorei(GL_UNPACK_ROW_LENGTH, pGlxPixmap->w);
         }
-        stub.spu->dispatch_table.TexSubImage2D(pGlxPixmap->target, 0, pRect->x, pRect->y, pRect->width, pRect->height, 
+        stub.spu->dispatch_table.TexSubImage2D(pGlxPixmap->target, 0, pRect->x, pRect->y, pRect->width, pRect->height,
                                                GL_BGRA, GL_UNSIGNED_BYTE, stub.xshmSI.shmaddr);
         stubSetUnpackState(&unpackState);
 
-        /*crDebug("Region sync texture for drawable 0x%x(dmg handle 0x%x) [%i,%i,%i,%i]", 
-                (unsigned int) draw, (unsigned int)pGlxPixmap->hDamage, 
+        /*crDebug("Region sync texture for drawable 0x%x(dmg handle 0x%x) [%i,%i,%i,%i]",
+                (unsigned int) draw, (unsigned int)pGlxPixmap->hDamage,
                 pRect->x, pRect->y, pRect->width, pRect->height);*/
     }
 }
@@ -1768,7 +1767,7 @@ Bool checkevents(Display *display, XEvent *event, XPointer arg)
     {
         ContextInfo *context = stubGetCurrentContext();
         XDamageNotifyEvent *e = (XDamageNotifyEvent *) event;
-        /* we're interested in pixmaps only...and those have e->drawable set to 0 or other strange value for some odd reason 
+        /* we're interested in pixmaps only...and those have e->drawable set to 0 or other strange value for some odd reason
          * so have to walk glxpixmaps hashtable to find if we have damage event handle assigned to some pixmap
          */
         /*crDebug("Event: Damage for drawable 0x%x, handle 0x%x (level=%i) [%i,%i,%i,%i]",
@@ -1781,7 +1780,7 @@ Bool checkevents(Display *display, XEvent *event, XPointer arg)
 }
 #endif
 
-/*@todo check what error codes could we throw for failures here*/
+/** @todo check what error codes could we throw for failures here*/
 DECLEXPORT(void) VBOXGLXTAG(glXBindTexImageEXT)(Display *dpy, GLXDrawable draw, int buffer, const int *attrib_list)
 {
     ContextInfo *context = stubGetCurrentContext();
@@ -1825,7 +1824,7 @@ DECLEXPORT(void) VBOXGLXTAG(glXBindTexImageEXT)(Display *dpy, GLXDrawable draw,
     /* No shared memory? Rollback to use slow x protocol then */
     if (stub.xshmSI.shmid<0)
     {
-        /*@todo add damage support here too*/
+        /** @todo add damage support here too*/
         XImage *pxim;
         CRPixelPackState unpackState;
 
@@ -1859,7 +1858,7 @@ DECLEXPORT(void) VBOXGLXTAG(glXBindTexImageEXT)(Display *dpy, GLXDrawable draw,
 
         stubGetUnpackState(&unpackState);
         stubSetUnpackState(&defaultPacking);
-        stub.spu->dispatch_table.TexImage2D(pGlxPixmap->target, 0, pGlxPixmap->format, pxim->width, pxim->height, 0, 
+        stub.spu->dispatch_table.TexImage2D(pGlxPixmap->target, 0, pGlxPixmap->format, pxim->width, pxim->height, 0,
                                             GL_BGRA, GL_UNSIGNED_BYTE, (void*)(&(pxim->data[0])));
         stubSetUnpackState(&unpackState);
         XDestroyImage(pxim);
@@ -1899,7 +1898,7 @@ DECLEXPORT(void) VBOXGLXTAG(glXBindTexImageEXT)(Display *dpy, GLXDrawable draw,
                     if (damageArea>clipdamageArea || clipdamageArea>fullArea)
                     {
                         crWarning("glXBindTexImageEXT, damage regions seems to be broken, forcing full update");
-                        /*crDebug("**FULL** update for 0x%x, numRect=%li, *FS*=%li, CS=%li, DS=%li", 
+                        /*crDebug("**FULL** update for 0x%x, numRect=%li, *FS*=%li, CS=%li, DS=%li",
                                 (unsigned int)draw, pGlxPixmap->pDamageRegion->numRects, fullArea, clipdamageArea, damageArea);*/
                         stubXshmUpdateWholeImage(dpy, draw, pGlxPixmap);
                     }
@@ -1907,25 +1906,25 @@ DECLEXPORT(void) VBOXGLXTAG(glXBindTexImageEXT)(Display *dpy, GLXDrawable draw,
                     {
                         if (CR_MIN_DAMAGE_PROFIT_SIZE > (fullArea-damageArea))
                         {
-                            /*crDebug("**FULL** update for 0x%x, numRect=%li, *FS*=%li, CS=%li, DS=%li", 
+                            /*crDebug("**FULL** update for 0x%x, numRect=%li, *FS*=%li, CS=%li, DS=%li",
                                     (unsigned int)draw, pGlxPixmap->pDamageRegion->numRects, fullArea, clipdamageArea, damageArea);*/
                             stubXshmUpdateWholeImage(dpy, draw, pGlxPixmap);
                         }
                         else if (CR_MIN_DAMAGE_PROFIT_SIZE > (clipdamageArea-damageArea))
                         {
-                            /*crDebug("**PARTIAL** update for 0x%x, numRect=%li, FS=%li, *CS*=%li, DS=%li", 
+                            /*crDebug("**PARTIAL** update for 0x%x, numRect=%li, FS=%li, *CS*=%li, DS=%li",
                                     (unsigned int)draw, pGlxPixmap->pDamageRegion->numRects, fullArea, clipdamageArea, damageArea);*/
                             stubXshmUpdateImageRect(dpy, draw, pGlxPixmap, &damageClipBox);
                         }
                         else
                         {
-                            /*crDebug("**PARTIAL** update for 0x%x, numRect=*%li*, FS=%li, CS=%li, *DS*=%li", 
+                            /*crDebug("**PARTIAL** update for 0x%x, numRect=*%li*, FS=%li, CS=%li, *DS*=%li",
                                     (unsigned int)draw, pGlxPixmap->pDamageRegion->numRects, fullArea, clipdamageArea, damageArea);*/
                             for (i=0; i<pGlxPixmap->pDamageRegion->numRects; ++i)
                             {
                                 XRectangle rect;
                                 BoxPtr pBox = &pGlxPixmap->pDamageRegion->rects[i];
-                                
+
                                 rect.x = pBox->x1;
                                 rect.y = pBox->y1;
                                 rect.width = pBox->x2-pBox->x1;
diff --git a/src/VBox/Additions/common/crOpenGL/glx_c_exports.c b/src/VBox/Additions/common/crOpenGL/glx_c_exports.c
index 17e1ea4..3fe66a1 100644
--- a/src/VBox/Additions/common/crOpenGL/glx_c_exports.c
+++ b/src/VBox/Additions/common/crOpenGL/glx_c_exports.c
@@ -1,11 +1,10 @@
 /* $Id: glx_c_exports.c $ */
 /** @file
- *
  * VirtualBox guest OpenGL DRI GLX C stubs
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/glx_proto.h b/src/VBox/Additions/common/crOpenGL/glx_proto.h
index f73b4a3..8f1566e 100644
--- a/src/VBox/Additions/common/crOpenGL/glx_proto.h
+++ b/src/VBox/Additions/common/crOpenGL/glx_proto.h
@@ -1,11 +1,10 @@
 /* $Id: glx_proto.h $ */
 /** @file
- *
  * VirtualBox guest OpenGL DRI GLX header C prototypes
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/icd_drv.c b/src/VBox/Additions/common/crOpenGL/icd_drv.c
index b80236a..78c2cc7 100644
--- a/src/VBox/Additions/common/crOpenGL/icd_drv.c
+++ b/src/VBox/Additions/common/crOpenGL/icd_drv.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -28,7 +28,7 @@
 
 #include <iprt/win/windows.h>
 
-//TODO: consider
+/// @todo consider
 /* We can modify chronium dispatch table functions order to match the one required by ICD,
  * but it'd render us incompatible with other chromium SPUs and require more changes.
  * In current state, we can use unmodified binary chromium SPUs. Question is do we need it?
@@ -64,7 +64,7 @@ static GLuint desiredVisual = CR_RGB_BIT;
  */
 static GLuint ComputeVisBits( HDC hdc )
 {
-    PIXELFORMATDESCRIPTOR pfd; 
+    PIXELFORMATDESCRIPTOR pfd;
     int iPixelFormat;
     GLuint b = 0;
 
@@ -106,7 +106,7 @@ BOOL APIENTRY DrvValidateVersion(DWORD version)
         return TRUE;
     }
 
-    crDebug("DrvValidateVersion %x -> FALSE, going to use system default opengl32.dll\n", version); 
+    crDebug("DrvValidateVersion %x -> FALSE, going to use system default opengl32.dll\n", version);
     return FALSE;
 }
 
@@ -202,7 +202,7 @@ HGLRC APIENTRY DrvCreateLayerContext(HDC hdc, int iLayerPlane)
         crError( "DrvCreateLayerContext (%x,%x): unsupported", hdc, iLayerPlane);
         return NULL;
     }
-    
+
 }
 
 BOOL APIENTRY DrvDescribeLayerPlane(HDC hdc,int iPixelFormat,
@@ -391,7 +391,7 @@ BOOL APIENTRY DrvSwapBuffers(HDC hdc)
 
     CR_DDI_PROLOGUE();
     /*crDebug( "DrvSwapBuffers(0x%x) called", hdc );*/
-    window = stubGetWindowInfo(hdc);    
+    window = stubGetWindowInfo(hdc);
     stubSwapBuffers( window, 0 );
     return 1;
 }
diff --git a/src/VBox/Additions/common/crOpenGL/icd_drv.h b/src/VBox/Additions/common/crOpenGL/icd_drv.h
index 15b263f..7c22f79 100644
--- a/src/VBox/Additions/common/crOpenGL/icd_drv.h
+++ b/src/VBox/Additions/common/crOpenGL/icd_drv.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -49,4 +49,4 @@ BOOL APIENTRY DrvRealizeLayerPalette(HDC hdc, int iLayerPlane, BOOL bRealize);
 BOOL APIENTRY DrvSwapLayerBuffers(HDC hdc, UINT fuPlanes);
 BOOL APIENTRY DrvSwapBuffers(HDC hdc);
 
-#endif /* !___ICDDRV_H___ */
\ No newline at end of file
+#endif /* !___ICDDRV_H___ */
diff --git a/src/VBox/Additions/common/crOpenGL/load.c b/src/VBox/Additions/common/crOpenGL/load.c
index ed57316..7ed012e 100644
--- a/src/VBox/Additions/common/crOpenGL/load.c
+++ b/src/VBox/Additions/common/crOpenGL/load.c
@@ -105,7 +105,7 @@ static void stubCheckWindowState(WindowInfo *window, GLboolean bFlushOnChange)
     bool bChanged = false;
 
 #ifdef WINDOWS
-    /* @todo install hook and track for WM_DISPLAYCHANGE */
+    /** @todo install hook and track for WM_DISPLAYCHANGE */
     {
         DEVMODE devMode;
 
@@ -951,7 +951,7 @@ stubInitLocked(void)
     crDebug("Stub launched for %s", response);
 
 #if defined(CR_NEWWINTRACK) && !defined(WINDOWS)
-    /*@todo when vm boots with compiz turned on, new code causes hang in xcb_wait_for_reply in the sync thread
+    /** @todo when vm boots with compiz turned on, new code causes hang in xcb_wait_for_reply in the sync thread
      * as at the start compiz runs our code under XGrabServer.
      */
     if (!crStrcmp(response, "compiz") || !crStrcmp(response, "compiz_real") || !crStrcmp(response, "compiz.real")
@@ -961,7 +961,7 @@ stubInitLocked(void)
     }
 #endif
 
-    /* @todo check if it'd be of any use on other than guests, no use for windows */
+    /** @todo check if it'd be of any use on other than guests, no use for windows */
     app_id = crGetenv( "CR_APPLICATION_ID_NUMBER" );
 
     crNetInit( NULL, NULL );
@@ -1020,7 +1020,7 @@ stubInitLocked(void)
         disable_sync = 1;
         crDebug("running with %s", VBOX_MODNAME_DISPD3D);
         stub.trackWindowVisibleRgn = 0;
-        /* @todo: should we enable that? */
+        /** @todo should we enable that? */
         stub.trackWindowSize = 0;
         stub.trackWindowPos = 0;
         stub.trackWindowVisibility = 0;
@@ -1478,7 +1478,7 @@ BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
             stub.spu->dispatch_table.VBoxDetachThread();
         }
 
-        
+
 #if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
         VBoxCrHgsmiTerm();
 #endif
diff --git a/src/VBox/Additions/common/crOpenGL/pack/pack.py b/src/VBox/Additions/common/crOpenGL/pack/pack.py
index d7a81fb..e25066b 100755
--- a/src/VBox/Additions/common/crOpenGL/pack/pack.py
+++ b/src/VBox/Additions/common/crOpenGL/pack/pack.py
@@ -38,8 +38,8 @@ pack_specials = []
 
 for func_name in keys:
     if ("get" in apiutil.Properties(func_name) or
-        apiutil.FindSpecial( "packspu", func_name ) or 
-        apiutil.FindSpecial( "packspu_flush", func_name ) or 
+        apiutil.FindSpecial( "packspu", func_name ) or
+        apiutil.FindSpecial( "packspu_flush", func_name ) or
         apiutil.FindSpecial( "packspu_vertex", func_name )):
       pack_specials.append( func_name )
 
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu.rc b/src/VBox/Additions/common/crOpenGL/pack/packspu.rc
index 6bd4841..79aaeb7 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu.rc
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_bufferobject.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_bufferobject.c
index 53cd3af..65f64bd 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_bufferobject.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_bufferobject.c
@@ -38,7 +38,7 @@ packspu_MapBufferARB( GLenum target, GLenum access )
         pBufObj = crStateGetBoundBufferObject(target, &ctx->clientState->bufferobject);
         CRASSERT(pBufObj);
 
-        if (pBufObj->bResyncOnRead && 
+        if (pBufObj->bResyncOnRead &&
             access != GL_WRITE_ONLY_ARB)
         {
             /*fetch data from host side*/
@@ -65,7 +65,7 @@ void PACKSPU_APIENTRY packspu_GetBufferSubDataARB( GLenum target, GLintptrARB of
         return;
     }
 #endif
-    
+
     crStateGetBufferSubDataARB(target, offset, size, data);
 }
 
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_client.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_client.c
index cb52d5a..19c1188 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_client.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_client.c
@@ -339,7 +339,7 @@ static void packspuZvaDisable(CR_ZVA_RESTORE_CTX *pRestoreCtx)
 void PACKSPU_APIENTRY
 packspu_ArrayElement( GLint index )
 {
-/*@todo cash guest/host pointers calculation and use appropriate path here without crStateUseServerArrays call*/
+/** @todo cash guest/host pointers calculation and use appropriate path here without crStateUseServerArrays call*/
 #if 1
     GLboolean serverArrays = GL_FALSE;
     GLuint cZvaValues = 0;
@@ -856,7 +856,7 @@ GLboolean PACKSPU_APIENTRY packspu_IsEnabled(GLenum cap)
 {
     GLboolean res = crStateIsEnabled(cap);
 #ifdef DEBUG
-    {    
+    {
     	GET_THREAD(thread);
 	    int writeback = 1;
 	    GLboolean return_val = (GLboolean) 0;
@@ -892,7 +892,7 @@ void PACKSPU_APIENTRY packspu_LockArraysEXT(GLint first, GLint count)
           so we'd pass data to host right before the glDrawSomething or glBegin call.
         */
         /*crPackLockArraysEXT(first, count);*/
-    } 
+    }
     else crDebug("Ignoring packspu_LockArraysEXT: first:%i, count:%i", first, count);
 }
 
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_config.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_config.c
index c852aea..70d6f01 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_config.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_config.c
@@ -36,10 +36,10 @@ static void set_swapbuffer_sync( void *foo, const char *response )
 
 
 
-/* No SPU options yet. Well.. not really.. 
+/* No SPU options yet. Well.. not really..
  */
 SPUOptions packSPUOptions[] = {
-    { "emit_GATHER_POST_SWAPBUFFERS", CR_BOOL, 1, "0", NULL, NULL, 
+    { "emit_GATHER_POST_SWAPBUFFERS", CR_BOOL, 1, "0", NULL, NULL,
       "Emit a parameter after SwapBuffers", (SPUOptionCB)set_emit },
 
     { "swapbuffer_sync", CR_BOOL, 1, "1", NULL, NULL,
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c
index 183b73a..26e81db 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_context.c
@@ -374,9 +374,9 @@ packspu_VBoxCreateContext( GLint con, const char *dpyName, GLint visual, GLint s
          * some sort of #define'd constants somewhere so the client and the
          * server could be aware of how each other were numbering things in
          * cases like file networking where they actually
-         * care. 
+         * care.
          *
-         *  -Humper 
+         *  -Humper
          *
          */
         serverCtx = 5000;
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_framebuffer.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_framebuffer.c
index b7ec27c..c233e3b 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_framebuffer.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_framebuffer.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -45,28 +45,28 @@ packspu_FramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarg
 void PACKSPU_APIENTRY
 packspu_BindFramebufferEXT(GLenum target, GLuint framebuffer)
 {
-	crStateBindFramebufferEXT(target, framebuffer);
+        crStateBindFramebufferEXT(target, framebuffer);
     crPackBindFramebufferEXT(target, framebuffer);
 }
 
 void PACKSPU_APIENTRY
 packspu_DeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers)
 {
-	crStateDeleteFramebuffersEXT(n, framebuffers);
+        crStateDeleteFramebuffersEXT(n, framebuffers);
     crPackDeleteFramebuffersEXT(n, framebuffers);
 }
 
 void PACKSPU_APIENTRY
 packspu_DeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers)
 {
-	crStateDeleteRenderbuffersEXT(n, renderbuffers);
+        crStateDeleteRenderbuffersEXT(n, renderbuffers);
     crPackDeleteRenderbuffersEXT(n, renderbuffers);
 }
 
 void PACKSPU_APIENTRY
 packspu_FramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
-	crStateFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
+        crStateFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
     crPackFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
 }
 
@@ -80,8 +80,8 @@ packspu_BindRenderbufferEXT(GLenum target, GLuint renderbuffer)
 GLenum PACKSPU_APIENTRY
 packspu_CheckFramebufferStatusEXT(GLenum target)
 {
-	GET_THREAD(thread);
-	int writeback = 1;
+        GET_THREAD(thread);
+        int writeback = 1;
     GLenum status = crStateCheckFramebufferStatusEXT(target);
 
     if (status!=GL_FRAMEBUFFER_UNDEFINED)
@@ -91,7 +91,7 @@ packspu_CheckFramebufferStatusEXT(GLenum target)
 
     crPackCheckFramebufferStatusEXT(target, &status, &writeback);
 
-	packspuFlush((void *) thread);
+        packspuFlush((void *) thread);
     CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
 
     crStateSetFramebufferStatus(target, status);
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py
index 5a4a49d..371abea 100755
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_get.py
@@ -50,12 +50,12 @@ static GLboolean crPackIsPixelStoreParm(GLenum pname)
 
 from get_sizes import *
 
-easy_swaps = { 
+easy_swaps = {
     'GenTextures': '(unsigned int) n',
     'GetClipPlane': '4',
     'GetPolygonStipple': '0'
 }
-    
+
 simple_funcs = [ 'GetIntegerv', 'GetFloatv', 'GetDoublev', 'GetBooleanv' ]
 simple_swaps = [ 'SWAP32', 'SWAPFLOAT', 'SWAPDOUBLE', '(GLboolean) SWAP32' ]
 
@@ -122,7 +122,7 @@ for func_name in keys:
 #ifdef GL_EXT_framebuffer_object
         || pname == GL_FRAMEBUFFER_BINDING_EXT
         || pname == GL_READ_FRAMEBUFFER_BINDING_EXT
-        || pname == GL_DRAW_FRAMEBUFFER_BINDING_EXT 
+        || pname == GL_DRAW_FRAMEBUFFER_BINDING_EXT
 #endif
         || pname == GL_ARRAY_BUFFER_BINDING
         || pname == GL_ELEMENT_ARRAY_BUFFER_BINDING
@@ -160,10 +160,10 @@ for func_name in keys:
                 crState%s(pname, params);
                 return;
             }
-            
+
         }
             """ % (params[-1][1], params[-1][1], func_name, func_name, apiutil.MakeCallString(params), func_name, func_name))
-            
+
         if func_name in vertattr_get_funcs:
             print("""
     if (pname != GL_CURRENT_VERTEX_ATTRIB_ARB)
@@ -188,7 +188,7 @@ for func_name in keys:
         crState%s(pname, params);
 #endif
         return;
-    } 
+    }
             """ % (params[-1][1], params[-1][1], func_name, func_name, apiutil.MakeCallString(params), func_name, func_name))
 
         params.append( ("&writeback", "foo", 0) )
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c
index f418980..5cfaa7d 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +23,7 @@
 #include "cr_mem.h"
 #include <iprt/assert.h>
 
-/*@todo combine with the one from server_getshaders.c*/
+/** @todo combine with the one from server_getshaders.c*/
 typedef struct _crGetActive_t
 {
     GLsizei length;
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_getstring.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_getstring.c
index 541cb20..c5890bf 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_getstring.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_getstring.c
@@ -86,7 +86,7 @@ GetExtensions(void)
         ext = crStateMergeExtensions(1, &extensions);
 
 #ifdef Linux
-        /*@todo
+        /** @todo
          *That's a hack to allow running Unity, it uses libnux which is calling extension functions
          *without checking if it's being supported/exported.
          *glActiveStencilFaceEXT seems to be actually supported but the extension string isn't exported (for ex. on ATI HD4870),
@@ -122,7 +122,7 @@ const GLubyte * PACKSPU_APIENTRY packspu_GetString( GLenum name )
             if (packspuRunningUnderWine())
             {
                 GetString(GL_REAL_VERSION, ctx->pszRealVersion);
-                return ctx->pszRealVersion;               
+                return ctx->pszRealVersion;
             }
             else
 #endif
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c
index a61c283..b3bf8e5 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_glsl.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -80,7 +80,7 @@ static GLint packspu_GetUniformLocationUncached(GLuint program, const char * nam
 
 GLint PACKSPU_APIENTRY packspu_GetUniformLocation(GLuint program, const char * name)
 {
-    if (!crStateIsProgramUniformsCached(program))  
+    if (!crStateIsProgramUniformsCached(program))
     {
         GET_THREAD(thread);
         int writeback = 1;
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c
index 8600ede..0b65be9 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_misc.c
@@ -18,7 +18,7 @@ void PACKSPU_APIENTRY packspu_ChromiumParametervCR(GLenum target, GLenum type, G
     GLboolean fFlush = GL_FALSE;
     GET_THREAD(thread);
 
-    
+
     switch(target)
     {
         case GL_GATHER_PACK_CR:
@@ -103,7 +103,7 @@ GLboolean packspuSyncOnFlushes(void)
     crStateGetIntegerv(GL_DRAW_BUFFER, &buffer);
     /*Usually buffer==GL_BACK, so put this extra check to simplify boolean eval on runtime*/
     return  (buffer != GL_BACK)
-            && (buffer == GL_FRONT_LEFT 
+            && (buffer == GL_FRONT_LEFT
                 || buffer == GL_FRONT_RIGHT
                 || buffer == GL_FRONT
                 || buffer == GL_FRONT_AND_BACK
@@ -794,7 +794,7 @@ BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
 {
     (void) lpvReserved;
 
-    switch (fdwReason) 
+    switch (fdwReason)
     {
         case DLL_PROCESS_ATTACH:
         {
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_net.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_net.c
index 4d6cbdb..6d5d41d 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_net.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_net.c
@@ -30,12 +30,12 @@ packspuWriteback( const CRMessageWriteback *wb )
 static void
 packspuReadback( const CRMessageReadback *rb, unsigned int len )
 {
-    /* minus the header, the destination pointer, 
+    /* minus the header, the destination pointer,
      * *and* the implicit writeback pointer at the head. */
 
     int payload_len = len - sizeof( *rb );
     int *writeback;
-    void *dest_ptr; 
+    void *dest_ptr;
     crMemcpy( &writeback, &(rb->writeback_ptr), sizeof( writeback ) );
     crMemcpy( &dest_ptr, &(rb->readback_ptr), sizeof( dest_ptr ) );
 
@@ -89,7 +89,7 @@ __prependHeader( CRPackBuffer *buf, unsigned int *len, unsigned int senderID )
     CRASSERT( buf->data_current <= buf->data_end );
 
     num_opcodes = buf->opcode_start - buf->opcode_current;
-    hdr = (CRMessageOpcodes *) 
+    hdr = (CRMessageOpcodes *)
         ( buf->data_start - ( ( num_opcodes + 3 ) & ~0x3 ) - sizeof(*hdr) );
 
     CRASSERT( (void *) hdr >= buf->pack );
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_pixel.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_pixel.c
index 32172bb..06734b1 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_pixel.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_pixel.c
@@ -2,7 +2,7 @@
    All rights reserved.
 
    See the file LICENSE.txt for information on redistributing this software. */
-    
+
 #include "cr_packfunctions.h"
 #include "cr_glstate.h"
 #include "cr_pixeldata.h"
@@ -139,7 +139,7 @@ static GLboolean packspu_CheckTexImageInternalFormat(GLint internalformat)
         && internalformat!=GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
 # endif
 #endif
-        /*@todo ARB_texture_float*/
+        /** @todo ARB_texture_float*/
         && internalformat!=GL_RGBA32F_ARB
         && internalformat!=GL_RGB32F_ARB
         && internalformat!=GL_ALPHA32F_ARB
@@ -300,7 +300,7 @@ void PACKSPU_APIENTRY packspu_ReadPixels( GLint x, GLint y, GLsizei width, GLsiz
     GET_THREAD(thread);
     ContextInfo *ctx = thread->currentContext;
     CRClientState *clientState = &(ctx->clientState->client);
-    int writeback;    
+    int writeback;
 
     if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
     {
@@ -325,7 +325,7 @@ void PACKSPU_APIENTRY packspu_ReadPixels( GLint x, GLint y, GLsizei width, GLsiz
     }
 }
 
-/*@todo check with pbo's*/
+/** @todo check with pbo's*/
 void PACKSPU_APIENTRY packspu_CopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type )
 {
     GET_THREAD(thread);
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_proto.py b/src/VBox/Additions/common/crOpenGL/pack/packspu_proto.py
index 5d33567..5feed9a 100755
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_proto.py
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_proto.py
@@ -31,8 +31,8 @@ keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
 # make list of special functions
 for func_name in keys:
     if ("get" in apiutil.Properties(func_name) or
-        apiutil.FindSpecial( "packspu", func_name ) or 
-        apiutil.FindSpecial( "packspu_flush", func_name ) or 
+        apiutil.FindSpecial( "packspu", func_name ) or
+        apiutil.FindSpecial( "packspu_flush", func_name ) or
         apiutil.FindSpecial( "packspu_vertex", func_name )):
       pack_specials.append( func_name )
 
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_special b/src/VBox/Additions/common/crOpenGL/pack/packspu_special
index d891e69..13c3e0a 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_special
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_special
@@ -135,4 +135,4 @@ GenTextures
 CompileShader
 NewList
 EndList
-GetError
\ No newline at end of file
+GetError
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_swapbuf.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_swapbuf.c
index b6e00be..bc1895f 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_swapbuf.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_swapbuf.c
@@ -65,7 +65,7 @@ void PACKSPU_APIENTRY packspu_SwapBuffers( GLint window, GLint flags )
          *
          * This is complicated because writeback in the pack spu is
          * overridden to always set the value to zero when the
-         * reply is received, rather than decrementing it: 
+         * reply is received, rather than decrementing it:
          */
         switch( thread->writeback ) {
         case 0:
diff --git a/src/VBox/Additions/common/crOpenGL/pack/packspu_texture.c b/src/VBox/Additions/common/crOpenGL/pack/packspu_texture.c
index 51dcc4f..c8fa517 100644
--- a/src/VBox/Additions/common/crOpenGL/pack/packspu_texture.c
+++ b/src/VBox/Additions/common/crOpenGL/pack/packspu_texture.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc b/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc
index 276292f..c919bf2 100644
--- a/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc
+++ b/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c b/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c
index 9682a8c..c08a17a 100644
--- a/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c
+++ b/src/VBox/Additions/common/crOpenGL/passthrough/passthroughspu_init.c
@@ -59,6 +59,6 @@ int SPULoad( char **name, char **super, SPUInitFuncPtr *init,
 	*cleanup = passthroughSPUCleanup;
 	*options = passthroughSPUOptions;
 	*flags = (SPU_NO_PACKER|SPU_NOT_TERMINAL|SPU_MAX_SERVERS_ZERO);
-	
+
 	return 1;
 }
diff --git a/src/VBox/Additions/common/crOpenGL/stub.c b/src/VBox/Additions/common/crOpenGL/stub.c
index 6ffc1d2..f5369c6 100644
--- a/src/VBox/Additions/common/crOpenGL/stub.c
+++ b/src/VBox/Additions/common/crOpenGL/stub.c
@@ -5,8 +5,8 @@
  */
 
 #include "cr_spu.h"
-#include "cr_error.h" 
-#include "cr_mem.h" 
+#include "cr_error.h"
+#include "cr_mem.h"
 #include "stub.h"
 #include <iprt/thread.h>
 
@@ -198,7 +198,7 @@ GLboolean stubUpdateWindowGeometry(WindowInfo *pWindow, GLboolean bForceUpdate)
 
     stubGetWindowGeometry(pWindow, &winX, &winY, &winW, &winH);
 
-    /* @todo remove "if (winW && winH)"?*/
+    /** @todo remove "if (winW && winH)"?*/
     if (winW && winH) {
         if (stub.trackWindowSize) {
             if (bForceUpdate || winW != pWindow->width || winH != pWindow->height) {
@@ -256,13 +256,13 @@ GLboolean stubUpdateWindowVisibileRegions(WindowInfo *pWindow)
         crWarning("Window(%i) DC is no longer valid", pWindow->spuWindow);
         return GL_FALSE;
     }
-    
+
     hVisRgn = CreateRectRgn(0,0,0,0);
     iret = GetRandomRgn(pWindow->drawable, hVisRgn, SYSRGN);
 
     if (iret==1)
     {
-        /*@todo check win95/win98 here, as rects should be already in client space there*/
+        /** @todo check win95/win98 here, as rects should be already in client space there*/
         /* Convert screen related rectangles to client related rectangles */
         pt.x = 0;
         pt.y = 0;
@@ -284,7 +284,7 @@ GLboolean stubUpdateWindowVisibileRegions(WindowInfo *pWindow)
         crFree(lpRgnData);
         */
 
-        if (pWindow->hVisibleRegion==INVALID_HANDLE_VALUE 
+        if (pWindow->hVisibleRegion==INVALID_HANDLE_VALUE
             || !EqualRgn(pWindow->hVisibleRegion, hVisRgn))
         {
             DeleteObject(pWindow->hVisibleRegion);
@@ -308,7 +308,7 @@ GLboolean stubUpdateWindowVisibileRegions(WindowInfo *pWindow)
             DeleteObject(hVisRgn);
         }
     }
-    else 
+    else
     {
         crWarning("GetRandomRgn returned (%d) instead of (1), VisibleRegions update failed", iret);
         DeleteObject(hVisRgn);
@@ -394,7 +394,7 @@ LRESULT CALLBACK stubCBWindowMessageHookProc(int nCode, WPARAM wParam, LPARAM lP
                 break;
             }
 
-            /* @todo remove it*/
+            /** @todo remove it*/
             default:
             {
                 /*crDebug("hook: unknown message (%d)", pMsgInfo->message);*/
@@ -432,15 +432,15 @@ void stubCheckXExtensions(WindowInfo *pWindow)
     stub.trackWindowVisibleRgn = 0;
 
     XLOCK(dpy);
-    if (XCompositeQueryExtension(dpy, &evb, &erb) 
-        && XCompositeQueryVersion(dpy, &vma, &vmi) 
+    if (XCompositeQueryExtension(dpy, &evb, &erb)
+        && XCompositeQueryVersion(dpy, &vma, &vmi)
         && (vma>0 || vmi>=4))
     {
         stub.bHaveXComposite = GL_TRUE;
         crDebug("XComposite %i.%i", vma, vmi);
         vma=0;
         vmi=0;
-        if (XFixesQueryExtension(dpy, &evb, &erb) 
+        if (XFixesQueryExtension(dpy, &evb, &erb)
             && XFixesQueryVersion(dpy, &vma, &vmi)
             && vma>=2)
         {
@@ -487,7 +487,7 @@ GLboolean stubUpdateWindowVisibileRegions(WindowInfo *pWindow)
 
     dpy = stubGetWindowDisplay(pWindow);
 
-    /*@todo see comment regarding size/position updates and XSync, same applies to those functions but
+    /** @todo see comment regarding size/position updates and XSync, same applies to those functions but
     * it seems there's no way to get even based updates for this. Or I've failed to find the appropriate extension.
     */
     XLOCK(dpy);
@@ -504,7 +504,7 @@ GLboolean stubUpdateWindowVisibileRegions(WindowInfo *pWindow)
 
     if (!bNoUpdate
         && (!pWindow->pVisibleRegions
-            || pWindow->cVisibleRegions!=cRects 
+            || pWindow->cVisibleRegions!=cRects
             || (pWindow->pVisibleRegions && crMemcmp(pWindow->pVisibleRegions, pXRects, cRects * sizeof(XRectangle)))))
     {
         if (pWindow->pVisibleRegions)
@@ -530,7 +530,7 @@ GLboolean stubUpdateWindowVisibileRegions(WindowInfo *pWindow)
             pGLRects[4*i+1] = pXRects[i].y;
             pGLRects[4*i+2] = pXRects[i].x+pXRects[i].width;
             pGLRects[4*i+3] = pXRects[i].y+pXRects[i].height;
-            //crDebug("Rect[%i]=(%i,%i,%i,%i)", i, pGLRects[4*i+0], pGLRects[4*i+1], pGLRects[4*i+2], pGLRects[4*i+3]);                   
+            //crDebug("Rect[%i]=(%i,%i,%i,%i)", i, pGLRects[4*i+0], pGLRects[4*i+1], pGLRects[4*i+2], pGLRects[4*i+3]);
         }
 
         crDebug("Dispatched WindowVisibleRegion (%i, cRects=%i)", pWindow->spuWindow, cRects);
diff --git a/src/VBox/Additions/common/crOpenGL/stub_common.py b/src/VBox/Additions/common/crOpenGL/stub_common.py
index 7d2bbfc..0512734 100755
--- a/src/VBox/Additions/common/crOpenGL/stub_common.py
+++ b/src/VBox/Additions/common/crOpenGL/stub_common.py
@@ -75,7 +75,7 @@ def LoadAnnotations(filename):
 	except:
 		annotations[filename] = {}
 		return {}
-	
+
 	for line in f.readlines():
 		line = line.strip()
 		if line == "" or line[0] == '#':
@@ -95,7 +95,7 @@ def GetAnnotations( filename, key ):
 		table = annotations[filename]
 	except KeyError:
 		table = LoadAnnotations(filename)
-	
+
 	try:
 		subtable = table[key]
 	except KeyError:
@@ -109,7 +109,7 @@ def FindAnnotation( filename, key, subkey ):
 		table = annotations[filename]
 	except KeyError:
 		table = LoadAnnotations(filename)
-	
+
 	try:
 	    	subtable = table[key]
 	except KeyError:
@@ -119,7 +119,7 @@ def FindAnnotation( filename, key, subkey ):
 		return subtable[subkey]
 	except KeyError:
 		return 0
-		
+
 
 
 specials = {}
@@ -131,13 +131,13 @@ def LoadSpecials( filename ):
 	except:
 		specials[filename] = {}
 		return {}
-	
+
 	for line in f.readlines():
 		line = string.strip(line)
 		if line == "" or line[0] == '#':
 			continue
 		table[line] = 1
-	
+
 	specials[filename] = table
 	return table
 
@@ -148,7 +148,7 @@ def FindSpecial( table_file, glName ):
 		table = specials[filename]
 	except KeyError:
 		table = LoadSpecials( filename )
-	
+
 	try:
 		if (table[glName] == 1):
 			return 1
@@ -164,7 +164,7 @@ def AllSpecials( table_file ):
 		table = specials[filename]
 	except KeyError:
 		table = LoadSpecials( filename )
-	
+
 	return sorted(table.keys())
 
 def AllSpecials( table_file ):
@@ -175,9 +175,9 @@ def AllSpecials( table_file ):
 		table = specials[filename]
 	except KeyError:
 		table = LoadSpecials(filename)
-	
+
 	return sorted(table.keys())
-	
+
 def NumSpecials( table_file ):
 	filename = table_file + "_special"
 
@@ -256,7 +256,7 @@ def ArgumentString( arg_names, arg_types ):
 	"""Return InternalArgumentString inside parenthesis."""
 	output = '( ' + InternalArgumentString(arg_names, arg_types) + ' )'
 	return output
-	
+
 def InternalCallString( arg_names ):
 	output = ''
 	for index in range(0,len(arg_names)):
diff --git a/src/VBox/Additions/common/crOpenGL/utils.c b/src/VBox/Additions/common/crOpenGL/utils.c
index 3aa33cc..a220d09 100644
--- a/src/VBox/Additions/common/crOpenGL/utils.c
+++ b/src/VBox/Additions/common/crOpenGL/utils.c
@@ -47,7 +47,7 @@ int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #endif
 
 unsigned
-driParseDebugString( const char * debug, 
+driParseDebugString( const char * debug,
 		     const struct dri_debug_control * control  )
 {
    unsigned   flag;
@@ -72,19 +72,19 @@ driParseDebugString( const char * debug,
 
 /**
  * Create the \c GL_RENDERER string for DRI drivers.
- * 
+ *
  * Almost all DRI drivers use a \c GL_RENDERER string of the form:
  *
  *    "Mesa DRI <chip> <driver date> <AGP speed) <CPU information>"
  *
  * Using the supplied chip name, driver data, and AGP speed, this function
  * creates the string.
- * 
+ *
  * \param buffer         Buffer to hold the \c GL_RENDERER string.
  * \param hardware_name  Name of the hardware.
  * \param driver_date    Driver date.
  * \param agp_mode       AGP mode (speed).
- * 
+ *
  * \returns
  * The length of the string stored in \c buffer.  This does \b not include
  * the terminating \c NUL character.
@@ -111,7 +111,7 @@ driGetRendererString( char * buffer, const char * hardware_name,
    case 8:
       offset += sprintf( & buffer[ offset ], " AGP %ux", agp_mode );
       break;
-	
+
    default:
       break;
    }
@@ -214,7 +214,7 @@ static const struct dri_extension all_mesa_extensions[] = {
 
 /**
  * Enable extensions supported by the driver.
- * 
+ *
  * \bug
  * ARB_imaging isn't handled properly.  In Mesa, enabling ARB_imaging also
  * enables all the sub-extensions that are folded into it.  This means that
@@ -251,10 +251,10 @@ void driInitExtensions( GLcontext * ctx,
 
 /**
  * Enable and add dispatch functions for a single extension
- * 
+ *
  * \param ctx  Context where extension is to be enabled.
  * \param ext  Extension that is to be enabled.
- * 
+ *
  * \sa driInitExtensions, _mesa_enable_extension, _glapi_add_entrypoint
  *
  * \todo
@@ -314,7 +314,7 @@ void driInitSingleExtension( GLcontext * ctx,
 			"to add %s!\n", functions[0]);
 	    }
 	    else if (ext->functions[i].remap_index != -1) {
-		driDispatchRemapTable[ ext->functions[i].remap_index ] = 
+		driDispatchRemapTable[ ext->functions[i].remap_index ] =
 		  offset;
 	    }
 	    else if (ext->functions[i].offset != offset) {
@@ -343,10 +343,10 @@ void driInitSingleExtension( GLcontext * ctx,
  * \param ddxExpected  Minimum DDX minor and range of DDX major version required by the driver.
  * \param drmActual    Actual DRM version supplied __driCreateNewScreen.
  * \param drmExpected  Minimum DRM version required by the driver.
- * 
+ *
  * \returns \c GL_TRUE if all version requirements are met.  Otherwise,
  *          \c GL_FALSE is returned.
- * 
+ *
  * \sa __driCreateNewScreen, driCheckDriDdxDrmVersions2, __driUtilMessage
  *
  * \todo
@@ -387,7 +387,7 @@ driCheckDriDdxDrmVersions3(const char * driver_name,
 		       ddxActual->major, ddxActual->minor, ddxActual->patch);
       return GL_FALSE;
    }
-   
+
    /* Check that the DRM driver version is compatible */
    if ( (drmActual->major != drmExpected->major)
 	|| (drmActual->minor < drmExpected->minor) ) {
@@ -454,11 +454,11 @@ GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
 
 /**
  * Creates a set of \c __GLcontextModes that a driver will expose.
- * 
+ *
  * A set of \c __GLcontextModes will be created based on the supplied
  * parameters.  The number of modes processed will be 2 *
  * \c num_depth_stencil_bits * \c num_db_modes.
- * 
+ *
  * For the most part, data is just copied from \c depth_bits, \c stencil_bits,
  * \c db_modes, and \c visType into each \c __GLcontextModes element.
  * However, the meanings of \c fb_format and \c fb_type require further
@@ -470,7 +470,7 @@ GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
  * \c GL_UNSIGNED_SHORT_5_6_5_REV is specified with \c GL_RGB, bits [15:11]
  * are the blue value, bits [10:5] are the green value, and bits [4:0] are
  * the red value.
- * 
+ *
  * One subtle issue is the combination of \c GL_RGB  or \c GL_BGR and either
  * of the \c GL_UNSIGNED_INT_8_8_8_8 modes.  The resulting mask values in the
  * \c __GLcontextModes structure is \b identical to the \c GL_RGBA or
@@ -479,7 +479,7 @@ GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
  * still uses 32-bits.
  *
  * If in doubt, look at the tables used in the function.
- * 
+ *
  * \param ptr_to_modes  Pointer to a pointer to a linked list of
  *                      \c __GLcontextModes.  Upon completion, a pointer to
  *                      the next element to be process will be stored here.
@@ -489,7 +489,7 @@ GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
  * \param fb_format     Format of the framebuffer.  Currently only \c GL_RGB,
  *                      \c GL_RGBA, \c GL_BGR, and \c GL_BGRA are supported.
  * \param fb_type       Type of the pixels in the framebuffer.  Currently only
- *                      \c GL_UNSIGNED_SHORT_5_6_5, 
+ *                      \c GL_UNSIGNED_SHORT_5_6_5,
  *                      \c GL_UNSIGNED_SHORT_5_6_5_REV,
  *                      \c GL_UNSIGNED_INT_8_8_8_8, and
  *                      \c GL_UNSIGNED_INT_8_8_8_8_REV are supported.
@@ -506,17 +506,17 @@ GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer,
  * \param num_db_modes  Number of entries in \c db_modes.
  * \param visType       GLX visual type.  Usually either \c GLX_TRUE_COLOR or
  *                      \c GLX_DIRECT_COLOR.
- * 
+ *
  * \returns
  * \c GL_TRUE on success or \c GL_FALSE on failure.  Currently the only
  * cause of failure is a bad parameter (i.e., unsupported \c fb_format or
  * \c fb_type).
- * 
+ *
  * \todo
  * There is currently no way to support packed RGB modes (i.e., modes with
  * exactly 3 bytes per pixel) or floating-point modes.  This could probably
  * be done by creating some new, private enums with clever names likes
- * \c GL_UNSIGNED_3BYTE_8_8_8, \c GL_4FLOAT_32_32_32_32, 
+ * \c GL_UNSIGNED_3BYTE_8_8_8, \c GL_4FLOAT_32_32_32_32,
  * \c GL_4HALF_16_16_16_16, etc.  We can cross that bridge when we come to it.
  */
 __DRIconfig **
@@ -745,7 +745,7 @@ const __DRIconfig **driConcatConfigs(__DRIconfig **a, __DRIconfig **b)
     j = 0;
     while (b[j] != NULL)
 	j++;
-   
+
     all = _mesa_malloc((i + j + 1) * sizeof *all);
     index = 0;
     for (i = 0; a[i] != NULL; i++)
@@ -843,7 +843,7 @@ driGetConfigAttribIndex(const __DRIconfig *config,
     default:
 	*value = *(unsigned int *)
 	    ((char *) &config->modes + attribMap[index].offset);
-	
+
 	break;
     }
 
diff --git a/src/VBox/Additions/common/crOpenGL/vboxdri_drv.c b/src/VBox/Additions/common/crOpenGL/vboxdri_drv.c
index 13d58f5..e82975e 100644
--- a/src/VBox/Additions/common/crOpenGL/vboxdri_drv.c
+++ b/src/VBox/Additions/common/crOpenGL/vboxdri_drv.c
@@ -30,11 +30,11 @@
  *
  * NOTES:
  *   -- No mechanism for cliprects or resize notification --
- *      assumes this is a fullscreen device.  
- *   -- No locking -- assumes this is the only driver accessing this 
+ *      assumes this is a fullscreen device.
+ *   -- No locking -- assumes this is the only driver accessing this
  *      device.
  *   -- Doesn't (yet) make use of any acceleration or other interfaces
- *      provided by fb.  Would be entirely happy working against any 
+ *      provided by fb.  Would be entirely happy working against any
  *	fullscreen interface.
  *   -- HOWEVER: only a small number of pixelformats are supported, and
  *      the mechanism for choosing between them makes some assumptions
@@ -124,11 +124,11 @@ typedef struct {
    GLcontext *glCtx;		/* Mesa context */
 
    struct {
-      __DRIcontextPrivate *context;	
-      __DRIscreenPrivate *screen;	
+      __DRIcontextPrivate *context;
+      __DRIscreenPrivate *screen;
       __DRIdrawablePrivate *drawable; /* drawable bound to this ctx */
    } dri;
-   
+
 } fbContext, *fbContextPtr;
 
 #define FB_CONTEXT(ctx)		((fbContextPtr)(ctx->DriverCtx))
@@ -420,7 +420,7 @@ static const __DRIconfig **fbFillInModes(unsigned pixel_bits,
 /**
  * This is the driver specific part of the createNewScreen entry point.
  * Called when using legacy DRI.
- * 
+ *
  * return the __GLcontextModes supported by this driver
  */
 static const __DRIconfig **fbInitScreen(__DRIscreenPrivate *psp)
@@ -436,7 +436,7 @@ static const __DRIconfig **fbInitScreen(__DRIscreenPrivate *psp)
           & psp->drm_version, & drm_expected ) ) {
              return NULL;
           }
-      
+
 	     driInitExtensions( NULL, card_extensions, GL_FALSE );
 
 	     return fbFillInModes( psp->fbBPP,
@@ -475,7 +475,7 @@ fbCreateContext( const __GLcontextModes *glVisual,
    else
       shareCtx = NULL;
 
-   ctx = fbmesa->glCtx = _mesa_create_context(glVisual, shareCtx, 
+   ctx = fbmesa->glCtx = _mesa_create_context(glVisual, shareCtx,
 					      &functions, (void *) fbmesa);
    if (!fbmesa->glCtx) {
       _mesa_free(fbmesa);
@@ -541,7 +541,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
 		GLboolean isPixmap )
 {
    struct gl_framebuffer *mesa_framebuffer;
-   
+
    if (isPixmap) {
       return GL_FALSE; /* not implemented */
    }
@@ -550,7 +550,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
       const GLboolean swAlpha = mesaVis->alphaBits > 0;
       const GLboolean swAccum = mesaVis->accumRedBits > 0;
       const GLboolean swStencil = mesaVis->stencilBits > 0;
-      
+
       mesa_framebuffer = _mesa_create_framebuffer(mesaVis);
       if (!mesa_framebuffer)
          return 0;
@@ -589,7 +589,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv,
                                    swAccum,
                                    swAlpha, /* or always zero? */
                                    GL_FALSE /* aux */);
-      
+
       driDrawPriv->driverPrivate = mesa_framebuffer;
 
       return 1;
@@ -619,7 +619,7 @@ fbSwapBuffers( __DRIdrawablePrivate *dPriv )
    if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
       fbContextPtr fbmesa = (fbContextPtr) dPriv->driContextPriv->driverPrivate;
       GLcontext *ctx = fbmesa->glCtx;
-      
+
       if (ctx->Visual.doubleBufferMode) {
 	 int i;
 	 int offset = 0;
@@ -637,7 +637,7 @@ fbSwapBuffers( __DRIdrawablePrivate *dPriv )
                           currentPitch);
             offset += currentPitch;
 	 }
-	    
+
 	 _mesa_free(tmp);
       }
    }
@@ -657,12 +657,12 @@ fbMakeCurrent( __DRIcontextPrivate *driContextPriv,
 	       __DRIdrawablePrivate *driReadPriv )
 {
    if ( driContextPriv ) {
-      fbContextPtr newFbCtx = 
+      fbContextPtr newFbCtx =
             (fbContextPtr) driContextPriv->driverPrivate;
 
       newFbCtx->dri.drawable = driDrawPriv;
 
-      _mesa_make_current( newFbCtx->glCtx, 
+      _mesa_make_current( newFbCtx->glCtx,
                            driDrawPriv->driverPrivate,
                            driReadPriv->driverPrivate);
    } else {
diff --git a/src/VBox/Additions/common/crOpenGL/wgl.c b/src/VBox/Additions/common/crOpenGL/wgl.c
index 7333fab..fd2ea0a 100644
--- a/src/VBox/Additions/common/crOpenGL/wgl.c
+++ b/src/VBox/Additions/common/crOpenGL/wgl.c
@@ -41,7 +41,7 @@ static GLuint desiredVisual = CR_RGB_BIT;
  */
 static GLuint ComputeVisBits( HDC hdc )
 {
-    PIXELFORMATDESCRIPTOR pfd; 
+    PIXELFORMATDESCRIPTOR pfd;
     int iPixelFormat;
     GLuint b = 0;
 
@@ -76,7 +76,7 @@ DECLEXPORT(int) WINAPI wglChoosePixelFormat_prox( HDC hdc, CONST PIXELFORMATDESC
 
     stubInit();
 
-    /* 
+    /*
      * NOTE!!!
      * Here we're telling the renderspu not to use the GDI
      * equivalent's of ChoosePixelFormat/DescribePixelFormat etc
@@ -96,7 +96,7 @@ DECLEXPORT(int) WINAPI wglChoosePixelFormat_prox( HDC hdc, CONST PIXELFORMATDESC
             PFD_DOUBLEBUFFER_DONTCARE |
             PFD_SWAP_EXCHANGE         |
             PFD_SWAP_COPY             |
-            /* @todo: this is disabled due to VSG Open Inventor interop issues
+            /** @todo this is disabled due to VSG Open Inventor interop issues
              * it does not make any sense actually since reporting this
              * as well as choosing a pixel format with this cap would not do anything
              * since ICD stuff has its own pixelformat state var */
@@ -143,7 +143,7 @@ DECLEXPORT(int) WINAPI wglChoosePixelFormat_prox( HDC hdc, CONST PIXELFORMATDESC
     if ( pfd->cDepthBits > 32 ) {
         crError( "wglChoosePixelFormat; asked for too many depth bits\n" );
     }
-    
+
     if ( pfd->cDepthBits > 0 )
         desiredVisual |= CR_DEPTH_BIT;
 
@@ -240,9 +240,9 @@ DECLEXPORT(int) WINAPI wglDescribePixelFormat_prox( HDC hdc, int pixelFormat, UI
 {
     CR_DDI_PROLOGUE();
 
-/*  if ( pixelFormat != 1 ) { 
- *      crError( "wglDescribePixelFormat: pixelFormat=%d?\n", pixelFormat ); 
- *      return 0; 
+/*  if ( pixelFormat != 1 ) {
+ *      crError( "wglDescribePixelFormat: pixelFormat=%d?\n", pixelFormat );
+ *      return 0;
  *  } */
 
     if ( !pfd ) {
@@ -604,7 +604,7 @@ DECLEXPORT(BOOL) WINAPI wglChoosePixelFormatEXT_prox
 
     stubInit();
 
-    /* TODO : Need to check pfAttributes too ! */
+    /** @todo : Need to check pfAttributes too ! */
 
     for ( pi = (int *)piAttributes; *pi != 0; pi++ )
     {
@@ -640,7 +640,7 @@ DECLEXPORT(BOOL) WINAPI wglChoosePixelFormatEXT_prox
             case WGL_STEREO_EXT:
                 if (pi[1] > 0)
                 {
-                    /* @todo: this is disabled due to VSG Open Inventor interop issues
+                    /** @todo this is disabled due to VSG Open Inventor interop issues
                      * it does not make any sense actually since reporting this
                      * as well as choosing a pixel format with this cap would not do anything
                      * since ICD stuff has its own pixelformat state var */
@@ -675,7 +675,7 @@ DECLEXPORT(BOOL) WINAPI wglChoosePixelFormatEXT_prox
             case WGL_SAMPLES_EXT:
                 if (pi[1] > 0)
                 {
-                    /* @todo: this is disabled due to VSG Open Inventor interop issues
+                    /** @todo this is disabled due to VSG Open Inventor interop issues
                      * it does not make any sense actually since reporting this
                      * as well as choosing a pixel format with this cap would not do anything
                      * since ICD stuff has its own pixelformat state var */
@@ -693,7 +693,7 @@ DECLEXPORT(BOOL) WINAPI wglChoosePixelFormatEXT_prox
                 break;
 
             case WGL_PIXEL_TYPE_ARB:
-                if(pi[1]!=WGL_TYPE_RGBA_ARB) 
+                if(pi[1]!=WGL_TYPE_RGBA_ARB)
                 {
                     crWarning("WGL_PIXEL_TYPE 0x%x not supported!", pi[1]);
                     return 0;
@@ -747,7 +747,7 @@ DECLEXPORT(BOOL) WINAPI wglGetPixelFormatAttribivEXT_prox
                 pValues[i] = 1;
                 break;
             case WGL_STEREO_ARB:
-                /* @todo: this is disabled due to VSG Open Inventor interop issues
+                /** @todo this is disabled due to VSG Open Inventor interop issues
                  * it does not make any sense actually since reporting this
                  * as well as choosing a pixel format with this cap would not do anything
                  * since ICD stuff has its own pixelformat state var */
@@ -826,14 +826,14 @@ DECLEXPORT(BOOL) WINAPI wglGetPixelFormatAttribivEXT_prox
                 pValues[i] = 0;
                 break;
             case WGL_SAMPLE_BUFFERS_EXT:
-                /* @todo: this is disabled due to VSG Open Inventor interop issues
+                /** @todo this is disabled due to VSG Open Inventor interop issues
                  * it does not make any sense actually since reporting this
                  * as well as choosing a pixel format with this cap would not do anything
                  * since ICD stuff has its own pixelformat state var */
                 pValues[i] = 0;
                 break;
             case WGL_SAMPLES_EXT:
-                /* @todo: this is disabled due to VSG Open Inventor interop issues
+                /** @todo this is disabled due to VSG Open Inventor interop issues
                  * it does not make any sense actually since reporting this
                  * as well as choosing a pixel format with this cap would not do anything
                  * since ICD stuff has its own pixelformat state var */
@@ -882,7 +882,7 @@ DECLEXPORT(BOOL) WINAPI wglGetPixelFormatAttribfvEXT_prox
                 pValues[i] = 1.f;
                 break;
             case WGL_STEREO_ARB:
-                /* @todo: this is disabled due to VSG Open Inventor interop issues
+                /** @todo this is disabled due to VSG Open Inventor interop issues
                  * it does not make any sense actually since reporting this
                  * as well as choosing a pixel format with this cap would not do anything
                  * since ICD stuff has its own pixelformat state var */
@@ -961,14 +961,14 @@ DECLEXPORT(BOOL) WINAPI wglGetPixelFormatAttribfvEXT_prox
                 pValues[i] = 0.f;
                 break;
             case WGL_SAMPLE_BUFFERS_EXT:
-                /* @todo: this is disabled due to VSG Open Inventor interop issues
+                /** @todo this is disabled due to VSG Open Inventor interop issues
                  * it does not make any sense actually since reporting this
                  * as well as choosing a pixel format with this cap would not do anything
                  * since ICD stuff has its own pixelformat state var */
                 pValues[i] = 0.f;
                 break;
             case WGL_SAMPLES_EXT:
-                /* @todo: this is disabled due to VSG Open Inventor interop issues
+                /** @todo this is disabled due to VSG Open Inventor interop issues
                  * it does not make any sense actually since reporting this
                  * as well as choosing a pixel format with this cap would not do anything
                  * since ICD stuff has its own pixelformat state var */
diff --git a/src/VBox/Additions/common/crOpenGL/windows_exports.py b/src/VBox/Additions/common/crOpenGL/windows_exports.py
index 6c756b5..974d482 100755
--- a/src/VBox/Additions/common/crOpenGL/windows_exports.py
+++ b/src/VBox/Additions/common/crOpenGL/windows_exports.py
@@ -92,7 +92,7 @@ def GenerateEntrypoints():
 			print("")
 
 
-		
+
 
 GenerateEntrypoints()
 
diff --git a/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py b/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py
index e9f668e..0899d9d 100755
--- a/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py
+++ b/src/VBox/Additions/common/crOpenGL/windows_getprocaddress.py
@@ -144,7 +144,7 @@ CR_PROC CR_APIENTRY crGetProcAddress( const char *name )
     if (!crStrcmp(name, "wglGetPixelFormatAttribfvARB")) return (CR_PROC) wglGetPixelFormatAttribfvEXT;
 
     if (!crStrcmp(name, "wglSwapIntervalEXT")) return (CR_PROC) wglSwapIntervalEXT;
-    
+
     crDebug("Returning GetProcAddress:NULL for %s", name);
     return NULL;
 }
diff --git a/src/VBox/Additions/common/pam/pam_vbox.cpp b/src/VBox/Additions/common/pam/pam_vbox.cpp
index 87c50ac..75b3154 100644
--- a/src/VBox/Additions/common/pam/pam_vbox.cpp
+++ b/src/VBox/Additions/common/pam/pam_vbox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/common/testcase/tstPageFusion.cpp b/src/VBox/Additions/common/testcase/tstPageFusion.cpp
index 5e4acbf..0c5bec0 100644
--- a/src/VBox/Additions/common/testcase/tstPageFusion.cpp
+++ b/src/VBox/Additions/common/testcase/tstPageFusion.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/Installer/.scm-settings b/src/VBox/Additions/darwin/Installer/.scm-settings
new file mode 100644
index 0000000..d987c0b
--- /dev/null
+++ b/src/VBox/Additions/darwin/Installer/.scm-settings
@@ -0,0 +1,27 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for OS X guest additions installer.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+--filter-out-files /VBoxGuestAdditions_mpkg/Conclusion.rtf
+--filter-out-files /VBoxGuestAdditions_mpkg/Welcome.rtf
+--filter-out-files /VBoxGuestAdditions_mpkg/Localizable.strings
+
+/DiskImage/Uninstall.tool:                              --treat-as .sh
+/VBoxGuestAdditionsKEXTs/postflight:                    --treat-as .sh
+/VBoxGuestAdditionsToolsAndServices/VBoxServiceWrapper: --treat-as .sh
+/VBoxGuestAdditions_mpkg/distribution.dist:             --treat-as .xml
+
diff --git a/src/VBox/Additions/darwin/Installer/DiskImage/Uninstall.tool b/src/VBox/Additions/darwin/Installer/DiskImage/Uninstall.tool
index 5cb068c..769a544 100755
--- a/src/VBox/Additions/darwin/Installer/DiskImage/Uninstall.tool
+++ b/src/VBox/Additions/darwin/Installer/DiskImage/Uninstall.tool
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: Uninstall.tool $
+## #file
 # VirtualBox Uninstaller Script.
 #
-# Copyright (C) 2007-2013 Oracle Corporation
+
+#
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -103,3 +106,4 @@ done
 
 echo "Done."
 exit 0;
+
diff --git a/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsKEXTs/postflight b/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsKEXTs/postflight
index baca999..bd1107d 100755
--- a/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsKEXTs/postflight
+++ b/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsKEXTs/postflight
@@ -1,7 +1,11 @@
 #!/bin/sh
+# $Id: postflight $
+## @file
+# Post flight installer script for the VirtualBox OS X kernel extensions.
+#
 
 #
-# Copyright (C) 2007-2013 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsToolsAndServices/VBoxServiceWrapper b/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsToolsAndServices/VBoxServiceWrapper
index 6dc0a8f..1224286 100755
--- a/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsToolsAndServices/VBoxServiceWrapper
+++ b/src/VBox/Additions/darwin/Installer/VBoxGuestAdditionsToolsAndServices/VBoxServiceWrapper
@@ -1,10 +1,12 @@
 #!/bin/sh
-#
+## @file
 # VBoxService wrapper script.
 #
 # Load required kernel extensions before start service (if necessary).
 #
-# Copyright (C) 2007-2013 Oracle Corporation
+
+#
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/VBoxClient/VBoxClient.cpp b/src/VBox/Additions/darwin/VBoxClient/VBoxClient.cpp
index ded0cb0..11931c3 100644
--- a/src/VBox/Additions/darwin/VBoxClient/VBoxClient.cpp
+++ b/src/VBox/Additions/darwin/VBoxClient/VBoxClient.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboard.cpp b/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboard.cpp
index d7ac178..cdb8e74 100644
--- a/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboard.cpp
+++ b/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardGuestToHost.cpp b/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardGuestToHost.cpp
index 3c67a4f..424e397 100644
--- a/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardGuestToHost.cpp
+++ b/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardGuestToHost.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardHostToGuest.cpp b/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardHostToGuest.cpp
index be32551..86421a7 100644
--- a/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardHostToGuest.cpp
+++ b/src/VBox/Additions/darwin/VBoxClient/VBoxClientClipboardHostToGuest.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/VBoxClient/VBoxClientInternal.h b/src/VBox/Additions/darwin/VBoxClient/VBoxClientInternal.h
index 2ffa183..4c92248 100644
--- a/src/VBox/Additions/darwin/VBoxClient/VBoxClientInternal.h
+++ b/src/VBox/Additions/darwin/VBoxClient/VBoxClientInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/vboxfs/.scm-settings b/src/VBox/Additions/darwin/vboxfs/.scm-settings
new file mode 100644
index 0000000..e5eb205
--- /dev/null
+++ b/src/VBox/Additions/darwin/vboxfs/.scm-settings
@@ -0,0 +1,19 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the OS X shared folders driver.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+--filter-out-files /vboxfs.git.tar.bz2
+
diff --git a/src/VBox/Additions/darwin/vboxfs/Makefile.kmk b/src/VBox/Additions/darwin/vboxfs/Makefile.kmk
index c3ab52c..9a097d4 100644
--- a/src/VBox/Additions/darwin/vboxfs/Makefile.kmk
+++ b/src/VBox/Additions/darwin/vboxfs/Makefile.kmk
@@ -1,9 +1,19 @@
 # $Id: Makefile.kmk $
+## @file
+# sub-makefile for the Mac OS addition file system driver.
 #
-# VirtualBox Shared Folders driver
+
 #
 # Copyright (C) 2007-2017 Oracle Corporation
 #
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
 
 SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp
index 7524ff2..874f930 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp
index ad87f9b..6412080 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp
index fd02f1c..b144ead 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp
index 1fb5077..dac6234 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/vboxfs/mount.vboxvfs.c b/src/VBox/Additions/darwin/vboxfs/mount.vboxvfs.c
index 4a55dd9..129469f 100644
--- a/src/VBox/Additions/darwin/vboxfs/mount.vboxvfs.c
+++ b/src/VBox/Additions/darwin/vboxfs/mount.vboxvfs.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/darwin/vboxfs/vboxvfs.h b/src/VBox/Additions/darwin/vboxfs/vboxvfs.h
index ad2c5cb..c2c04cf 100644
--- a/src/VBox/Additions/darwin/vboxfs/vboxvfs.h
+++ b/src/VBox/Additions/darwin/vboxfs/vboxvfs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/.scm-settings b/src/VBox/Additions/freebsd/.scm-settings
new file mode 100644
index 0000000..9c0385c
--- /dev/null
+++ b/src/VBox/Additions/freebsd/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the FreeBSD guest additions.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+--filter-out-files /Installer/pkg-descr
+/drm/vboxvideo_drm.c: --no-convert-tabs
+
diff --git a/src/VBox/Additions/freebsd/Installer/vboxguest.sh b/src/VBox/Additions/freebsd/Installer/vboxguest.sh
index 85bec4e..d511912 100755
--- a/src/VBox/Additions/freebsd/Installer/vboxguest.sh
+++ b/src/VBox/Additions/freebsd/Installer/vboxguest.sh
@@ -1,8 +1,11 @@
 #!/bin/bash
-#
+# $Id: vboxguest.sh $
+## @file
 # VirtualBox Guest Additions kernel module control script for FreeBSD.
 #
-# Copyright (C) 2008-2010 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/Makefile b/src/VBox/Additions/freebsd/Makefile
index 1d78b3a..2832f0e 100644
--- a/src/VBox/Additions/freebsd/Makefile
+++ b/src/VBox/Additions/freebsd/Makefile
@@ -3,8 +3,7 @@
 #
 
 #
-#
-# Copyright (C) 2009-2010 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/drm/Makefile b/src/VBox/Additions/freebsd/drm/Makefile
index 5c88003..4777fc7 100644
--- a/src/VBox/Additions/freebsd/drm/Makefile
+++ b/src/VBox/Additions/freebsd/drm/Makefile
@@ -4,8 +4,7 @@
 #
 
 #
-#
-# Copyright (C) 2006-2010 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/drm/files_vboxvideo_drm b/src/VBox/Additions/freebsd/drm/files_vboxvideo_drm
index 67fdecb..63f7e52 100755
--- a/src/VBox/Additions/freebsd/drm/files_vboxvideo_drm
+++ b/src/VBox/Additions/freebsd/drm/files_vboxvideo_drm
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxvideo_drm $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2010 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/drm/vboxvideo_drm.c b/src/VBox/Additions/freebsd/drm/vboxvideo_drm.c
index ed66e43..c51d05a 100644
--- a/src/VBox/Additions/freebsd/drm/vboxvideo_drm.c
+++ b/src/VBox/Additions/freebsd/drm/vboxvideo_drm.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h
index 5846c58..70aa234 100644
--- a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h
+++ b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c
index b2177dd..506963c 100644
--- a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c
+++ b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vnops.c b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vnops.c
index da83420..f9415d8 100644
--- a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vnops.c
+++ b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vnops.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/.scm-settings b/src/VBox/Additions/haiku/.scm-settings
new file mode 100644
index 0000000..9a562ff
--- /dev/null
+++ b/src/VBox/Additions/haiku/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for haiku guest additions.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/VBoxTray/VBoxTray.rdef: --treat-as .rc
+
diff --git a/src/VBox/Additions/haiku/SharedFolders/OpenHashTable.h b/src/VBox/Additions/haiku/SharedFolders/OpenHashTable.h
index e0266b9..3f2b16e 100644
--- a/src/VBox/Additions/haiku/SharedFolders/OpenHashTable.h
+++ b/src/VBox/Additions/haiku/SharedFolders/OpenHashTable.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/SharedFolders/kernel_cpp.h b/src/VBox/Additions/haiku/SharedFolders/kernel_cpp.h
index 398033d..26e93e7 100644
--- a/src/VBox/Additions/haiku/SharedFolders/kernel_cpp.h
+++ b/src/VBox/Additions/haiku/SharedFolders/kernel_cpp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/SharedFolders/lock.h b/src/VBox/Additions/haiku/SharedFolders/lock.h
index 07c9e61..897879d 100644
--- a/src/VBox/Additions/haiku/SharedFolders/lock.h
+++ b/src/VBox/Additions/haiku/SharedFolders/lock.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/SharedFolders/vboxsf.c b/src/VBox/Additions/haiku/SharedFolders/vboxsf.c
index 9f90d1b..b2dfa02 100644
--- a/src/VBox/Additions/haiku/SharedFolders/vboxsf.c
+++ b/src/VBox/Additions/haiku/SharedFolders/vboxsf.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/SharedFolders/vboxsf.h b/src/VBox/Additions/haiku/SharedFolders/vboxsf.h
index 48c3dc6..7a3846b 100644
--- a/src/VBox/Additions/haiku/SharedFolders/vboxsf.h
+++ b/src/VBox/Additions/haiku/SharedFolders/vboxsf.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/SharedFolders/vnode_cache.cpp b/src/VBox/Additions/haiku/SharedFolders/vnode_cache.cpp
index 92bee8f..2e5bc6c 100644
--- a/src/VBox/Additions/haiku/SharedFolders/vnode_cache.cpp
+++ b/src/VBox/Additions/haiku/SharedFolders/vnode_cache.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.cpp b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.cpp
index a6389c6..b857ed1 100644
--- a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.cpp
+++ b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.h b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.h
index 4f740bc..a859632 100644
--- a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.h
+++ b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouse.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.cpp b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.cpp
index 35e362c..f66569e 100644
--- a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.cpp
+++ b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.h b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.h
index 9e8fde3..1d41cdd 100644
--- a/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.h
+++ b/src/VBox/Additions/haiku/VBoxMouse/VBoxMouseFilter.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.cpp b/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.cpp
index 13467b2..f7c05a9 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.cpp
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.h b/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.h
index 56f8486..5876604 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.h
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxClipboard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.cpp b/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.cpp
index e17bbb1..4508762 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.cpp
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.h b/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.h
index d91456c..d3fb3ec 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.h
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxDisplay.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.cpp b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.cpp
index 37c229a..3dd5f11 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.cpp
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.h b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.h
index 4c9288b..c861943 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.h
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestApplication.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.cpp b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.cpp
index 677aa6c..51c1b54 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.cpp
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.h b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.h
index 51d032e..fc3d34c 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.h
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxGuestDeskbarView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxServiceDescriptor.h b/src/VBox/Additions/haiku/VBoxTray/VBoxServiceDescriptor.h
index a7822c8..44d29db 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxServiceDescriptor.h
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxServiceDescriptor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxTray/VBoxTray.rdef b/src/VBox/Additions/haiku/VBoxTray/VBoxTray.rdef
index 333366c..6257071 100644
--- a/src/VBox/Additions/haiku/VBoxTray/VBoxTray.rdef
+++ b/src/VBox/Additions/haiku/VBoxTray/VBoxTray.rdef
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,9 +13,8 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/*
+ *-----------------------------------------------------------------------------
+ *
  * This code is based on:
  *
  * VirtualBox Guest Additions for Haiku.
diff --git a/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.cpp b/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.cpp
index f9b51a2..3293a31 100644
--- a/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.cpp
+++ b/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.h b/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.h
index b15f980..c922cae 100644
--- a/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.h
+++ b/src/VBox/Additions/haiku/VBoxVideo/accelerant/accelerant.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxVideo/common/VBoxVideo_common.h b/src/VBox/Additions/haiku/VBoxVideo/common/VBoxVideo_common.h
index 3354806..3ee1e4a 100644
--- a/src/VBox/Additions/haiku/VBoxVideo/common/VBoxVideo_common.h
+++ b/src/VBox/Additions/haiku/VBoxVideo/common/VBoxVideo_common.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/VBoxVideo/driver/driver.cpp b/src/VBox/Additions/haiku/VBoxVideo/driver/driver.cpp
index cc74394..43dd7c5 100644
--- a/src/VBox/Additions/haiku/VBoxVideo/driver/driver.cpp
+++ b/src/VBox/Additions/haiku/VBoxVideo/driver/driver.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/include/VBoxGuestInternal.h b/src/VBox/Additions/haiku/include/VBoxGuestInternal.h
index e0f16d0..59a0529 100644
--- a/src/VBox/Additions/haiku/include/VBoxGuestInternal.h
+++ b/src/VBox/Additions/haiku/include/VBoxGuestInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/include/lock.h b/src/VBox/Additions/haiku/include/lock.h
index 5d53ac7..814ffc5 100644
--- a/src/VBox/Additions/haiku/include/lock.h
+++ b/src/VBox/Additions/haiku/include/lock.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/haiku/load.sh b/src/VBox/Additions/haiku/load.sh
index 61567b6..682ae8a 100755
--- a/src/VBox/Additions/haiku/load.sh
+++ b/src/VBox/Additions/haiku/load.sh
@@ -1,4 +1,20 @@
 #!/bin/bash
+# $Id: load.sh $
+## @file
+# Driver load script.
+#
+
+#
+# Copyright (C) 2012-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
 
 outdir=out/haiku.x86/debug/bin/additions
 instdir=/boot/apps/VBoxAdditions
diff --git a/src/VBox/Additions/haiku/unload.sh b/src/VBox/Additions/haiku/unload.sh
index c5d65a6..af70257 100755
--- a/src/VBox/Additions/haiku/unload.sh
+++ b/src/VBox/Additions/haiku/unload.sh
@@ -1,4 +1,20 @@
 #!/bin/bash
+# $Id: unload.sh $
+## @file
+# Driver unload script.
+#
+
+#
+# Copyright (C) 2012-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
 
 basedir=/boot/home/config/add-ons/
 rm -f $basedir/input_server/devices/VBoxMouse
diff --git a/src/VBox/Additions/linux/Makefile b/src/VBox/Additions/linux/Makefile
index 7e37d7e..da78fa1 100644
--- a/src/VBox/Additions/linux/Makefile
+++ b/src/VBox/Additions/linux/Makefile
@@ -3,8 +3,7 @@
 #
 
 #
-#
-# Copyright (C) 2009-2012 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/Makefile.kmk b/src/VBox/Additions/linux/Makefile.kmk
index a56efd0..ff60dc8 100644
--- a/src/VBox/Additions/linux/Makefile.kmk
+++ b/src/VBox/Additions/linux/Makefile.kmk
@@ -360,29 +360,12 @@ if   defined(VBOX_WITH_TESTCASES) \
  && !defined(VBOX_ONLY_DOCS) \
  && !defined(VBOX_ONLY_VALIDATIONKIT) \
  && !defined(VBOX_WITHOUT_LINUX_TEST_BUILDS) \
+ && "$(KBUILD_TARGET)" == "linux" \
  && "$(KBUILD_HOST_ARCH)" == "$(KBUILD_TARGET_ARCH)"
 
- KBUILD_VERBOSE ?=
-
-##
-# Using the extra expansion to replace $(ver) before eval, thus everything
-# else needs escaped dollars.
- define def_vboxadd_mod_test
-  TESTING      += $$(PATH_TARGET)/tst$(module)_mod.run
-  OTHERS       += $$(PATH_TARGET)/tst$(module)_mod.run
-  OTHERS_CLEAN += $$(PATH_TARGET)/tst$(module)_mod.run
-  $$$$(PATH_TARGET)/tst$(module)_mod.run: $$$$($(module)-mod_2_STAGE_TARGETS)
-	$(QUIET)$$(call MSG_L1,Doing a test build of the $(module) kernel module)
-	$(QUIET)$$(RM) -f -- "$@"
-	$(QUIET)$$(RM) -Rf -- "$$(PATH_TARGET)/tst$(module)_mod"
-	$(QUIET)$$(MKDIR) -p -- "$$(PATH_TARGET)/tst$(module)_mod"
-	$(QUIET)$$(CP) -R -- "$$(PATH_STAGE_BIN)/additions/src/$(module)/" "$$(PATH_TARGET)/tst$(module)_mod/"
-	+ $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C $$(PATH_TARGET)/tst$(module)_mod clean
-	+ $(QUIET)make KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C $$(PATH_TARGET)/tst$(module)_mod
-	$(QUIET)$$(RM) -Rf -- $$(PATH_TARGET)/tst$(module)_mod
-	$(QUIET)$$(APPEND) -t "$$@" "done"
- endef
- $(foreach module, vboxguest vboxsf vboxvideo, $(eval $(def_vboxadd_mod_test)))
+ ifneq ($(KERN_DIR),)
+  $(foreach module, vboxguest-src vboxsf-src vboxvideo-src, $(eval $(VBOX_LINUX_GENERATE_KMOD_TEST)))
+ endif
 
 endif
 
diff --git a/src/VBox/Additions/linux/drm/.scm-settings b/src/VBox/Additions/linux/drm/.scm-settings
new file mode 100644
index 0000000..d708ee8
--- /dev/null
+++ b/src/VBox/Additions/linux/drm/.scm-settings
@@ -0,0 +1,25 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for linux drm driver.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+#Sources are MIT licensed for simplier upstreaming, several files are external.
+/*.c|/*.h:     --license-based-on-mit --no-convert-tabs
+/vbox_hgsmi.c: --license-mit
+/Makefile.module.kms: --treat-as Makefile
+
+--filter-out-files /README.testing
+
diff --git a/src/VBox/Additions/linux/drm/Makefile.kmk b/src/VBox/Additions/linux/drm/Makefile.kmk
index dfeff84..5462db9 100644
--- a/src/VBox/Additions/linux/drm/Makefile.kmk
+++ b/src/VBox/Additions/linux/drm/Makefile.kmk
@@ -21,17 +21,17 @@ include $(KBUILD_PATH)/subheader.kmk
 #
 # Populate FILES_VBOXVIDEO_DRM_NOBIN
 #
-INSTALLS += vboxvideo-mod
+INSTALLS += vboxvideo-src
 include $(PATH_SUB_CURRENT)/files_vboxvideo_drv
-vboxvideo-mod_DEPS         = \
+vboxvideo-src_DEPS         = \
 	$(PATH_ROOT)/src/VBox/Additions/linux/drm/files_vboxvideo_drv \
 	$(PATH_ROOT)/src/VBox/Additions/linux/drm/indent.sed
-vboxvideo-mod_INST         = $(INST_ADDITIONS)src/vboxvideo/
-vboxvideo-mod_SOURCES      = \
+vboxvideo-src_INST         = $(INST_ADDITIONS)src/vboxvideo/
+vboxvideo-src_SOURCES      = \
 	$(subst $(DQUOTE),,$(FILES_VBOXVIDEO_DRM_NOBIN))
-vboxvideo-mod_EXEC_SOURCES = \
+vboxvideo-src_EXEC_SOURCES = \
 	$(subst $(DQUOTE),,$(FILES_VBOXVIDEO_DRM_BIN))
-vboxvideo-mod_INSTALLER = $(RM_EXT) -f -- "$2" && \
+vboxvideo-src_INSTALLER = $(RM_EXT) -f -- "$2" && \
     $(if $(filter %.c %.h,$2),$(SED) -f $(PATH_ROOT)/src/VBox/Additions/linux/drm/indent.sed \
     --output "$2" "$1",$(CP_EXT) "$1" "$2") && \
     $(CHMOD_EXT) "$(if $(mode),$(mode),0644)" "$2"
diff --git a/src/VBox/Additions/linux/drm/Makefile.module.kms b/src/VBox/Additions/linux/drm/Makefile.module.kms
index df10044..49849da 100644
--- a/src/VBox/Additions/linux/drm/Makefile.module.kms
+++ b/src/VBox/Additions/linux/drm/Makefile.module.kms
@@ -6,7 +6,7 @@
 #
 
 #
-# Copyright (C) 2006-2010 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -21,20 +21,15 @@
 obj ?= $(CURDIR)
 include $(obj)/Makefile.include.header
 
-BUILD = 1
+BUILD =
 
-# We want to build on Linux 3.11 and later, plus the 3.10 EL 7.3 and later
-# kernels.  This file was added in 3.11 and back-ported to the EL 7.3 kernel.
-ifeq ($(wildcard $(KERN_INCL)/drm/drm_rect.h),)
- BUILD =
+# We want to build on Linux 3.11 and later and on all EL 7 kernels.
+ifneq ($(filter-out 1.% 2.% 3.0.% 3.1.% 3.2.% 3.3.% 3.4.% 3.5.% 3.6.% 3.7.% \
+                    3.8.% 3.9.% 3.10.%,$(KERN_VER)),)
+ BUILD = 1
 endif
-
-# And we do not want to build on EL6, regardless of what may have been
-# backported.
-ifneq ($(wildcard /etc/redhat-release),)
- ifneq ($(shell grep "Enterprise.*release 6" /etc/redhat-release),)
-  BUILD =
- endif
+ifeq ($(filter-out %.el7.x86_64,$(KERN_VER)),)
+ BUILD = 1
 endif
 
 ifneq ($(BUILD),)
diff --git a/src/VBox/Additions/linux/drm/files_vboxvideo_drv b/src/VBox/Additions/linux/drm/files_vboxvideo_drv
index 7a78b13..3705b00 100755
--- a/src/VBox/Additions/linux/drm/files_vboxvideo_drv
+++ b/src/VBox/Additions/linux/drm/files_vboxvideo_drv
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxvideo_drv $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2011 Oracle Corporation
+# Copyright (C) 2011-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/drm/indent.sed b/src/VBox/Additions/linux/drm/indent.sed
index 5532f7f..6d47740 100644
--- a/src/VBox/Additions/linux/drm/indent.sed
+++ b/src/VBox/Additions/linux/drm/indent.sed
@@ -42,9 +42,9 @@ s/^    /\t/g
   d
 }
 /^\/\* \$Id:.*\*\/$/d
-/^typedef .* HGSMIOFFSET;$/d
-/^typedef .* HGSMISIZE;$/d
-s/^#\( *\)include <\([^/]*\)>$/#\1include "\2"/g
+/^typedef .* HGSMIOFFSET;/d
+/^typedef .* HGSMISIZE;/d
+s/^#\( *\)include <\([^/]*\)>/#\1include "\2"/g
 
 # File names:
 s/\bHGSMIBase\.h\b/vbox_drv.h/g
@@ -87,16 +87,18 @@ s/\bVBVO_PORT_READ_U32\b/inl/g
 s/\bVBVO_PORT_WRITE_U8\b *( *\(\b[^(),]*\b\) *, *\(\b[^(),]*\b\) *)/outb(\2, \1)/g
 s/\bVBVO_PORT_WRITE_U16\b *( *\(\b[^(),]*\b\) *, *\(\b[^(),]*\b\) *)/outw(\2, \1)/g
 s/\bVBVO_PORT_WRITE_U32\b *( *\(\b[^(),]*\b\) *, *\(\b[^(),]*\b\) *)/outl(\2, \1)/g
+s/\bVBVO_PORT_WRITE_U[0-9]*\b/VBVO_PORT_WRITE_statement_should_be_on_one_line/g
 
 # Macros:
 s/\b_1K\b/1024/g
 s/\b_4M\b/4*1024*1024/g
-s/\bAssert\b\([^;]*\);$/WARN_ON_ONCE(!(\1));/g
+s/\bAssert\b\([^;]*\);/WARN_ON_ONCE(!(\1));/g
 s/\bAssertCompile\b/assert_compile/g
 s/\bAssertCompileSize\b/assert_compile_size/g
-s/\bAssertPtr\b\([^;]*\);$/WARN_ON_ONCE(!(\1));/g
+s/\bAssertPtr\b\([^;]*\);/WARN_ON_ONCE(!(\1));/g
 /AssertPtrNullReturnVoid/d
-s/\bAssertRC\b\([^;]*\);$/WARN_ON_ONCE(RT_FAILURE\1);/g
+s/\bAssertRC\b\([^;]*\);/WARN_ON_ONCE(RT_FAILURE\1);/g
+s/\bAssertRC\b/Assert_RC_statement_should_be_on_one_line/g
 s/\bDECLCALLBACK\b(\([^)]*\))/\1/g
 s/\bDECLCALLBACKMEMBER\b(\([^,)]*\), *\([^,)]*\))/\1 (*\2)/g
 s/^\bDECLHIDDEN\b(\([^)]*\))/\1/g
diff --git a/src/VBox/Additions/linux/drm/vbox_drv.c b/src/VBox/Additions/linux/drm/vbox_drv.c
index 54fd28f..313938d 100644
--- a/src/VBox/Additions/linux/drm/vbox_drv.c
+++ b/src/VBox/Additions/linux/drm/vbox_drv.c
@@ -272,7 +272,9 @@ static struct drm_driver driver = {
 	.master_set = vbox_master_set,
 	.master_drop = vbox_master_drop,
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73)
+# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
 	.set_busid = drm_pci_set_busid,
+# endif
 #endif
 
 	.fops = &vbox_fops,
@@ -307,7 +309,7 @@ static struct drm_driver driver = {
 
 static int __init vbox_init(void)
 {
-#ifdef CONFIG_VGA_CONSOLE
+#if defined(CONFIG_VGA_CONSOLE) || LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)
 	if (vgacon_text_force() && vbox_modeset == -1)
 		return -EINVAL;
 #endif
@@ -315,12 +317,12 @@ static int __init vbox_init(void)
 	if (vbox_modeset == 0)
 		return -EINVAL;
 
-	return drm_pci_init(&driver, &vbox_pci_driver);
+	return pci_register_driver(&vbox_pci_driver);
 }
 
 static void __exit vbox_exit(void)
 {
-	drm_pci_exit(&driver, &vbox_pci_driver);
+	pci_unregister_driver(&vbox_pci_driver);
 }
 
 module_init(vbox_init);
diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h b/src/VBox/Additions/linux/drm/vbox_drv.h
index 9b5b7b6..87be4da 100644
--- a/src/VBox/Additions/linux/drm/vbox_drv.h
+++ b/src/VBox/Additions/linux/drm/vbox_drv.h
@@ -252,7 +252,6 @@ int vbox_framebuffer_init(struct drm_device *dev,
 int vbox_fbdev_init(struct drm_device *dev);
 void vbox_fbdev_fini(struct drm_device *dev);
 void vbox_fbdev_set_suspend(struct drm_device *dev, int state);
-void vbox_fbdev_set_base(struct vbox_private *vbox, unsigned long gpu_addr);
 
 struct vbox_bo {
 	struct ttm_buffer_object bo;
diff --git a/src/VBox/Additions/linux/drm/vbox_fb.c b/src/VBox/Additions/linux/drm/vbox_fb.c
index 178a727..3870868 100644
--- a/src/VBox/Additions/linux/drm/vbox_fb.c
+++ b/src/VBox/Additions/linux/drm/vbox_fb.c
@@ -314,6 +314,8 @@ static int vboxfb_create(struct drm_fb_helper *helper,
 		return -ENOMEM;
 	info->apertures->ranges[0].base = pci_resource_start(dev->pdev, 0);
 	info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0);
+	info->fix.smem_start = 0;
+	info->fix.smem_len = size;
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
 	drm_fb_helper_fill_fix(info, fb->pitches[0], fb->format->depth);
@@ -338,22 +340,7 @@ static int vboxfb_create(struct drm_fb_helper *helper,
 	return 0;
 }
 
-static void vbox_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
-			      u16 blue, int regno)
-{
-}
-
-static void vbox_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
-			      u16 *blue, int regno)
-{
-	*red = regno;
-	*green = regno;
-	*blue = regno;
-}
-
 static struct drm_fb_helper_funcs vbox_fb_helper_funcs = {
-	.gamma_set = vbox_fb_gamma_set,
-	.gamma_get = vbox_fb_gamma_get,
 	.fb_probe = vboxfb_create,
 };
 
@@ -466,11 +453,3 @@ void vbox_fbdev_set_suspend(struct drm_device *dev, int state)
 
 	fb_set_suspend(vbox->fbdev->helper.fbdev, state);
 }
-
-void vbox_fbdev_set_base(struct vbox_private *vbox, unsigned long gpu_addr)
-{
-	vbox->fbdev->helper.fbdev->fix.smem_start =
-	    vbox->fbdev->helper.fbdev->apertures->ranges[0].base + gpu_addr;
-	vbox->fbdev->helper.fbdev->fix.smem_len =
-	    vbox->available_vram_size - gpu_addr;
-}
diff --git a/src/VBox/Additions/linux/drm/vbox_hgsmi.c b/src/VBox/Additions/linux/drm/vbox_hgsmi.c
index eff5618..5c3cb79 100644
--- a/src/VBox/Additions/linux/drm/vbox_hgsmi.c
+++ b/src/VBox/Additions/linux/drm/vbox_hgsmi.c
@@ -3,29 +3,30 @@
  */
 
 /*
- * Copyright (C) 2017 Oracle Corporation
+ * Contributed by Hans de Goede <hdegoede at redhat.com>
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
+ * Copyright (C) 2017 Oracle Corporation
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * Authors: Hans de Goede <hdegoede at redhat.com>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #include <HGSMIBase.h>
diff --git a/src/VBox/Additions/linux/drm/vbox_mode.c b/src/VBox/Additions/linux/drm/vbox_mode.c
index c23e791..018a386 100644
--- a/src/VBox/Additions/linux/drm/vbox_mode.c
+++ b/src/VBox/Additions/linux/drm/vbox_mode.c
@@ -151,10 +151,6 @@ static int vbox_set_view(struct drm_crtc *crtc)
 	return 0;
 }
 
-static void vbox_crtc_load_lut(struct drm_crtc *crtc)
-{
-}
-
 static void vbox_crtc_dpms(struct drm_crtc *crtc, int mode)
 {
 	struct vbox_crtc *vbox_crtc = to_vbox_crtc(crtc);
@@ -278,16 +274,10 @@ static int vbox_crtc_do_set_base(struct drm_crtc *crtc,
 		return ret;
 
 	ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, &gpu_addr);
-	if (ret) {
-		vbox_bo_unreserve(bo);
-		return ret;
-	}
-
-	if (&vbox->fbdev->afb == vbox_fb)
-		vbox_fbdev_set_base(vbox, gpu_addr);
 	vbox_bo_unreserve(bo);
+	if (ret)
+		return ret;
 
-	/* vbox_set_start_address_crt1(crtc, (u32)gpu_addr); */
 	vbox_crtc->fb_offset = gpu_addr;
 	if (vbox_set_up_input_mapping(vbox)) {
 		struct drm_crtc *crtci;
@@ -348,7 +338,6 @@ static const struct drm_crtc_helper_funcs vbox_crtc_helper_funcs = {
 	.mode_set = vbox_crtc_mode_set,
 	/* .mode_set_base = vbox_crtc_mode_set_base, */
 	.disable = vbox_crtc_disable,
-	.load_lut = vbox_crtc_load_lut,
 	.prepare = vbox_crtc_prepare,
 	.commit = vbox_crtc_commit,
 };
diff --git a/src/VBox/Additions/linux/drm/vbox_prime.c b/src/VBox/Additions/linux/drm/vbox_prime.c
index 9893855..a38d9c0 100644
--- a/src/VBox/Additions/linux/drm/vbox_prime.c
+++ b/src/VBox/Additions/linux/drm/vbox_prime.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 Oracle Corporation
+ * This file is based on ????.c?
  * Copyright 2017 Canonical
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
diff --git a/src/VBox/Additions/linux/export_modules b/src/VBox/Additions/linux/export_modules
deleted file mode 100755
index 33fe111..0000000
--- a/src/VBox/Additions/linux/export_modules
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/bin/sh
-
-#
-# Create a tar archive containing the sources of the Linux guest kernel
-# modules
-#
-# Copyright (C) 2006-2010 Oracle Corporation
-#
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-#
-
-# The below is GNU-specific.  See VBox.sh for the longer Solaris/OS X version.
-TARGET=`readlink -e -- "${0}"` || exit 1
-MY_DIR="${TARGET%/[!/]*}"
-
-if [ -z "$1" ]; then
-    echo "Usage: $0 <filename.tar.gz>"
-    echo "  Export VirtualBox kernel modules to <filename.tar.gz>"
-    exit 1
-fi
-
-PATH_TMP="`cd \`dirname $1\`; pwd`/.vbox_modules"
-PATH_OUT=$PATH_TMP
-FILE_OUT="`cd \`dirname $1\`; pwd`/`basename $1`"
-PATH_ROOT="`cd ${MY_DIR}/../../../..; pwd`"
-PATH_LINUX="$PATH_ROOT/src/VBox/Additions/linux"
-PATH_VBOXGUEST="$PATH_ROOT/src/VBox/Additions/common/VBoxGuest"
-PATH_VBOXSF="$PATH_ROOT/src/VBox/Additions/linux/sharedfolders"
-PATH_VBOXVIDEO="$PATH_ROOT/src/VBox/Additions/linux/drm"
-
-VBOX_VERSION_MAJOR=`sed -e "s/^ *VBOX_VERSION_MAJOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Config.kmk`
-VBOX_VERSION_MINOR=`sed -e "s/^ *VBOX_VERSION_MINOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Config.kmk`
-VBOX_VERSION_BUILD=`sed -e "s/^ *VBOX_VERSION_BUILD *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Config.kmk`
-VBOX_SVN_REV=`sed -e 's/^ *VBOX_SVN_REV_FALLBACK *:= \+\$(patsubst *%:,, *\$Rev: *\([0-9]\+\) *\$ *) */\1/;t;d' $PATH_ROOT/Config.kmk`
-VBOX_VENDOR=`sed -e 's/^ *VBOX_VENDOR *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`
-VBOX_VENDOR_SHORT=`sed -e 's/^ *VBOX_VENDOR_SHORT *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`
-VBOX_PRODUCT=`sed -e 's/^ *VBOX_PRODUCT *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`
-VBOX_C_YEAR=`date +%Y`
-
-. $PATH_VBOXGUEST/linux/files_vboxguest
-. $PATH_VBOXSF/files_vboxsf
-. $PATH_VBOXVIDEO/files_vboxvideo_drv
-
-# Temporary path for creating the modules, will be removed later
-mkdir $PATH_TMP || exit 1
-
-# Create auto-generated version file, needed by all modules
-echo "#ifndef ___version_generated_h___" > $PATH_TMP/version-generated.h
-echo "#define ___version_generated_h___" >> $PATH_TMP/version-generated.h
-echo "" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_MAJOR $VBOX_VERSION_MAJOR" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_MINOR $VBOX_VERSION_MINOR" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_BUILD $VBOX_VERSION_BUILD" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_STRING_RAW \"$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD\"" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_STRING \"$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD\"" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_API_VERSION_STRING \"${VBOX_VERSION_MAJOR}_${VBOX_VERSION_MINOR}\"" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_PRIVATE_BUILD_DESC \"Private build with export_modules\"" >> $PATH_TMP/version-generated.h
-echo "" >> $PATH_TMP/version-generated.h
-echo "#endif" >> $PATH_TMP/version-generated.h
-
-# Create auto-generated revision file, needed by all modules
-echo "#ifndef __revision_generated_h__" > $PATH_TMP/revision-generated.h
-echo "#define __revision_generated_h__" >> $PATH_TMP/revision-generated.h
-echo "" >> $PATH_TMP/revision-generated.h
-echo "#define VBOX_SVN_REV $VBOX_SVN_REV" >> $PATH_TMP/revision-generated.h
-echo "" >> $PATH_TMP/revision-generated.h
-echo "#endif" >> $PATH_TMP/revision-generated.h
-
-# Create auto-generated product file, needed by all modules
-echo "#ifndef ___product_generated_h___" > $PATH_TMP/product-generated.h
-echo "#define ___product_generated_h___" >> $PATH_TMP/product-generated.h
-echo "" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_VENDOR \"$VBOX_VENDOR\"" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_VENDOR_SHORT \"$VBOX_VENDOR_SHORT\"" >> $PATH_TMP/product-generated.h
-echo "" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_PRODUCT \"$VBOX_PRODUCT\"" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_C_YEAR \"$VBOX_C_YEAR\"" >> $PATH_TMP/product-generated.h
-echo "" >> $PATH_TMP/product-generated.h
-echo "#endif" >> $PATH_TMP/product-generated.h
-
-# vboxguest (VirtualBox guest kernel module)
-mkdir $PATH_TMP/vboxguest || exit 1
-for f in $FILES_VBOXGUEST_NOBIN; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxguest/`echo $f|cut -d'>' -f2`"
-done
-for f in $FILES_VBOXGUEST_BIN; do
-    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxguest/`echo $f|cut -d'>' -f2`"
-done
-
-# vboxsf (VirtualBox guest kernel module for shared folders)
-mkdir $PATH_TMP/vboxsf || exit 1
-for f in $FILES_VBOXSF_NOBIN; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxsf/`echo $f|cut -d'>' -f2`"
-done
-for f in $FILES_VBOXSF_BIN; do
-    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxsf/`echo $f|cut -d'>' -f2`"
-done
-
-# vboxvideo (VirtualBox guest kernel module for drm support)
-mkdir $PATH_TMP/vboxvideo || exit 1
-for f in $FILES_VBOXVIDEO_DRM_NOBIN; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxvideo/`echo $f|cut -d'>' -f2`"
-done
-for f in $FILES_VBOXVIDEO_DRM_BIN; do
-    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxvideo/`echo $f|cut -d'>' -f2`"
-done
-
-# convenience Makefile
-install -D -m 0644 $PATH_LINUX/Makefile "$PATH_TMP/Makefile"
-
-# Only temporary, omit from archive
-rm $PATH_TMP/version-generated.h
-rm $PATH_TMP/revision-generated.h
-rm $PATH_TMP/product-generated.h
-
-# Create the archive
-tar -czf $FILE_OUT -C $PATH_TMP . || exit 1
-
-# Remove the temporary directory
-rm -r $PATH_TMP
-
diff --git a/src/VBox/Additions/linux/export_modules.sh b/src/VBox/Additions/linux/export_modules.sh
new file mode 100755
index 0000000..95a6629
--- /dev/null
+++ b/src/VBox/Additions/linux/export_modules.sh
@@ -0,0 +1,136 @@
+#!/bin/sh
+# $Id$
+## @file
+# Create a tar archive containing the sources of the Linux guest kernel modules.
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# The below is GNU-specific.  See VBox.sh for the longer Solaris/OS X version.
+TARGET=`readlink -e -- "${0}"` || exit 1
+MY_DIR="${TARGET%/[!/]*}"
+
+if [ -z "$1" ]; then
+    echo "Usage: $0 <filename.tar.gz>"
+    echo "  Export VirtualBox kernel modules to <filename.tar.gz>"
+    exit 1
+fi
+
+PATH_TMP="`cd \`dirname $1\`; pwd`/.vbox_modules"
+PATH_OUT=$PATH_TMP
+FILE_OUT="`cd \`dirname $1\`; pwd`/`basename $1`"
+PATH_ROOT="`cd ${MY_DIR}/../../../..; pwd`"
+PATH_LOG=/tmp/vbox-export-guest.log
+PATH_LINUX="$PATH_ROOT/src/VBox/Additions/linux"
+PATH_VBOXGUEST="$PATH_ROOT/src/VBox/Additions/common/VBoxGuest"
+PATH_VBOXSF="$PATH_ROOT/src/VBox/Additions/linux/sharedfolders"
+PATH_VBOXVIDEO="$PATH_ROOT/src/VBox/Additions/linux/drm"
+
+VBOX_VERSION_MAJOR=`sed -e "s/^ *VBOX_VERSION_MAJOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Version.kmk`
+VBOX_VERSION_MINOR=`sed -e "s/^ *VBOX_VERSION_MINOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Version.kmk`
+VBOX_VERSION_BUILD=`sed -e "s/^ *VBOX_VERSION_BUILD *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Version.kmk`
+VBOX_SVN_REV=`sed -e 's/^ *VBOX_SVN_REV_FALLBACK *:= \+\$(patsubst *%:,, *\$Rev: *\([0-9]\+\) *\$ *) */\1/;t;d' $PATH_ROOT/Config.kmk`
+VBOX_VENDOR=`sed -e 's/^ *VBOX_VENDOR *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`
+VBOX_VENDOR_SHORT=`sed -e 's/^ *VBOX_VENDOR_SHORT *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`
+VBOX_PRODUCT=`sed -e 's/^ *VBOX_PRODUCT *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`
+VBOX_C_YEAR=`date +%Y`
+
+. $PATH_VBOXGUEST/linux/files_vboxguest
+. $PATH_VBOXSF/files_vboxsf
+. $PATH_VBOXVIDEO/files_vboxvideo_drv
+
+# Temporary path for creating the modules, will be removed later
+mkdir $PATH_TMP || exit 1
+
+# Create auto-generated version file, needed by all modules
+echo "#ifndef ___version_generated_h___" > $PATH_TMP/version-generated.h
+echo "#define ___version_generated_h___" >> $PATH_TMP/version-generated.h
+echo "" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_MAJOR $VBOX_VERSION_MAJOR" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_MINOR $VBOX_VERSION_MINOR" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_BUILD $VBOX_VERSION_BUILD" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_STRING_RAW \"$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD\"" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_STRING \"$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD\"" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_API_VERSION_STRING \"${VBOX_VERSION_MAJOR}_${VBOX_VERSION_MINOR}\"" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_PRIVATE_BUILD_DESC \"Private build with export_modules\"" >> $PATH_TMP/version-generated.h
+echo "" >> $PATH_TMP/version-generated.h
+echo "#endif" >> $PATH_TMP/version-generated.h
+
+# Create auto-generated revision file, needed by all modules
+echo "#ifndef __revision_generated_h__" > $PATH_TMP/revision-generated.h
+echo "#define __revision_generated_h__" >> $PATH_TMP/revision-generated.h
+echo "" >> $PATH_TMP/revision-generated.h
+echo "#define VBOX_SVN_REV $VBOX_SVN_REV" >> $PATH_TMP/revision-generated.h
+echo "" >> $PATH_TMP/revision-generated.h
+echo "#endif" >> $PATH_TMP/revision-generated.h
+
+# Create auto-generated product file, needed by all modules
+echo "#ifndef ___product_generated_h___" > $PATH_TMP/product-generated.h
+echo "#define ___product_generated_h___" >> $PATH_TMP/product-generated.h
+echo "" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_VENDOR \"$VBOX_VENDOR\"" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_VENDOR_SHORT \"$VBOX_VENDOR_SHORT\"" >> $PATH_TMP/product-generated.h
+echo "" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_PRODUCT \"$VBOX_PRODUCT\"" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_C_YEAR \"$VBOX_C_YEAR\"" >> $PATH_TMP/product-generated.h
+echo "" >> $PATH_TMP/product-generated.h
+echo "#endif" >> $PATH_TMP/product-generated.h
+
+# vboxguest (VirtualBox guest kernel module)
+mkdir $PATH_TMP/vboxguest || exit 1
+for f in $FILES_VBOXGUEST_NOBIN; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxguest/`echo $f|cut -d'>' -f2`"
+done
+for f in $FILES_VBOXGUEST_BIN; do
+    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxguest/`echo $f|cut -d'>' -f2`"
+done
+
+# vboxsf (VirtualBox guest kernel module for shared folders)
+mkdir $PATH_TMP/vboxsf || exit 1
+for f in $FILES_VBOXSF_NOBIN; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxsf/`echo $f|cut -d'>' -f2`"
+done
+for f in $FILES_VBOXSF_BIN; do
+    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxsf/`echo $f|cut -d'>' -f2`"
+done
+
+# vboxvideo (VirtualBox guest kernel module for drm support)
+mkdir $PATH_TMP/vboxvideo || exit 1
+for f in $FILES_VBOXVIDEO_DRM_NOBIN; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxvideo/`echo $f|cut -d'>' -f2`"
+done
+for f in $FILES_VBOXVIDEO_DRM_BIN; do
+    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxvideo/`echo $f|cut -d'>' -f2`"
+done
+sed -f $PATH_VBOXVIDEO/indent.sed -i $PATH_TMP/vboxvideo/*.[ch]
+
+# convenience Makefile
+install -D -m 0644 $PATH_LINUX/Makefile "$PATH_TMP/Makefile"
+
+# Only temporary, omit from archive
+rm $PATH_TMP/version-generated.h
+rm $PATH_TMP/revision-generated.h
+rm $PATH_TMP/product-generated.h
+
+# Do a test build
+echo Doing a test build, this may take a while.
+make -C $PATH_TMP > $PATH_LOG 2>&1 &&
+    make -C $PATH_TMP clean >> $PATH_LOG 2>&1 ||
+    echo "Warning: test build failed.  Please check $PATH_LOG"
+
+# Create the archive
+tar -czf $FILE_OUT -C $PATH_TMP . || exit 1
+
+# Remove the temporary directory
+rm -r $PATH_TMP
+
diff --git a/src/VBox/Additions/linux/installer/.scm-settings b/src/VBox/Additions/linux/installer/.scm-settings
new file mode 100644
index 0000000..c7781b1
--- /dev/null
+++ b/src/VBox/Additions/linux/installer/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for linux guest additions installer.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/install.sh.in: --treat-as .sh
+/deffiles:      --treat-as files_
diff --git a/src/VBox/Additions/linux/installer/autorun.sh b/src/VBox/Additions/linux/installer/autorun.sh
index 3317268..4c2618c 100755
--- a/src/VBox/Additions/linux/installer/autorun.sh
+++ b/src/VBox/Additions/linux/installer/autorun.sh
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: autorun.sh $
-#
+## @file
 # VirtualBox Guest Additions installation script for *nix guests
 #
 
 #
-# Copyright (C) 2009-2011 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/installer/deffiles b/src/VBox/Additions/linux/installer/deffiles
index 02d5466..43deb4f 100644
--- a/src/VBox/Additions/linux/installer/deffiles
+++ b/src/VBox/Additions/linux/installer/deffiles
@@ -1,9 +1,10 @@
+# $Id: deffiles $
 ## @file
 # VirtualBox linux Guest Additions default files list
 #
 
 #
-# Copyright (C) 2009-2010 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/installer/install.sh.in b/src/VBox/Additions/linux/installer/install.sh.in
index 40b9f9a..391be9a 100755
--- a/src/VBox/Additions/linux/installer/install.sh.in
+++ b/src/VBox/Additions/linux/installer/install.sh.in
@@ -5,7 +5,7 @@
 # for Linux Guest Additions
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -316,7 +316,7 @@ done
 # If the currently installed Additions have provided an uninstallation hook, try
 # that first.
 if test -x "${PUBLIC_UNINSTALL_HOOK}"; then
-  "${PUBLIC_UNINSTALL_HOOK}" 1>&2 || 
+  "${PUBLIC_UNINSTALL_HOOK}" 1>&2 ||
     abort "Failed to remove existing installation.  Aborting..."
 fi
 
diff --git a/src/VBox/Additions/linux/installer/module-autologon.sh b/src/VBox/Additions/linux/installer/module-autologon.sh
index fa5ad99..348632c 100644
--- a/src/VBox/Additions/linux/installer/module-autologon.sh
+++ b/src/VBox/Additions/linux/installer/module-autologon.sh
@@ -1,8 +1,11 @@
 # Oracle VM VirtualBox
+# $Id: module-autologon.sh $
+## @file
 # VirtualBox Linux Guest Additions installer - autologon module
 #
 
-# Copyright (C) 2012 Oracle Corporation
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/installer/vboxadd-service.sh b/src/VBox/Additions/linux/installer/vboxadd-service.sh
index 3c3e8d4..c788608 100755
--- a/src/VBox/Additions/linux/installer/vboxadd-service.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd-service.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: vboxadd-service.sh $
+## @file
 # Linux Additions Guest Additions service daemon init script.
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/installer/vboxadd-x11.sh b/src/VBox/Additions/linux/installer/vboxadd-x11.sh
index c816f3f..1bab70d 100755
--- a/src/VBox/Additions/linux/installer/vboxadd-x11.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd-x11.sh
@@ -1,10 +1,11 @@
 #! /bin/sh
-#
-# Linux Additions X11 setup init script ($Revision: 117937 $)
+# $Id: vboxadd-x11.sh $
+## @file
+# Linux Additions X11 setup init script ($Revision: 118839 $)
 #
 
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/installer/vboxadd.sh b/src/VBox/Additions/linux/installer/vboxadd.sh
index a696062..29a5372 100755
--- a/src/VBox/Additions/linux/installer/vboxadd.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd.sh
@@ -1,10 +1,11 @@
 #! /bin/sh
-#
-# Linux Additions kernel module init script ($Revision: 118374 $)
+# $Id: vboxadd.sh $
+## @file
+# Linux Additions kernel module init script ($Revision: 118913 $)
 #
 
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -291,14 +292,8 @@ stop()
     if ! umount -a -t vboxsf 2>/dev/null; then
         fail "Cannot unmount vboxsf folders"
     fi
-    test -n "${INSTALL_NO_MODULE_BUILDS}" && return 0
-    modprobe -q -r -a vboxvideo vboxsf vboxguest
-    if egrep -q 'vboxguest|vboxsf|vboxvideo' /proc/modules; then
+    test -n "${INSTALL_NO_MODULE_BUILDS}" ||
         info "You may need to restart your guest system to finish removing the guest drivers."
-    else
-        rm -f $userdev || fail "Cannot unlink $userdev"
-        rm -f $dev || fail "Cannot unlink $dev"
-    fi
     return 0
 }
 
diff --git a/src/VBox/Additions/linux/lightdm-greeter/.scm-settings b/src/VBox/Additions/linux/lightdm-greeter/.scm-settings
new file mode 100644
index 0000000..a7c3ca2
--- /dev/null
+++ b/src/VBox/Additions/linux/lightdm-greeter/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for light-dm greeter.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/liblightdm-gobject-*/*.c|/liblightdm-gobject-*/*.h: --external-copyright --no-strip-trailing-blanks --no-convert-tabs --lgpl-disclaimer
+
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/greeter.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/greeter.c
index 7964f98..3d44b56 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/greeter.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/greeter.c
@@ -8,6 +8,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include "config.h"
 
 #include <stdlib.h>
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/language.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/language.c
index cc7e26f..9709619 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/language.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/language.c
@@ -8,6 +8,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include <string.h>
 #include <locale.h>
 #include <langinfo.h>
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/layout.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/layout.c
index eb2b854..d505745 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/layout.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/layout.c
@@ -9,6 +9,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include <libxklavier/xklavier.h>
 
 #include "lightdm/layout.h"
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/power.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/power.c
index 8838708..f7830ff 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/power.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/power.c
@@ -8,6 +8,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include "config.h"
 
 #include <string.h>
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/session.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/session.c
index f1ccf6c..2df3a1a 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/session.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/session.c
@@ -8,6 +8,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include <string.h>
 #include <gio/gdesktopappinfo.h>
 
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/system.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/system.c
index 3b99df3..77f8a18 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/system.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/system.c
@@ -8,6 +8,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include <sys/utsname.h>
 
 #include "lightdm/system.h"
diff --git a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/user.c b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/user.c
index 5d1cc18..8df1907 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/user.c
+++ b/src/VBox/Additions/linux/lightdm-greeter/liblightdm-gobject-1.5.0/user.c
@@ -9,6 +9,15 @@
  * See http://www.gnu.org/copyleft/lgpl.html the full text of the license.
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #include "config.h"
 
 #include <errno.h>
diff --git a/src/VBox/Additions/linux/lightdm-greeter/vbox-greeter.cpp b/src/VBox/Additions/linux/lightdm-greeter/vbox-greeter.cpp
index cc66644..ea43db8 100644
--- a/src/VBox/Additions/linux/lightdm-greeter/vbox-greeter.cpp
+++ b/src/VBox/Additions/linux/lightdm-greeter/vbox-greeter.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -935,12 +935,11 @@ static int vboxGreeterLogCreate(const char *pszLogFile)
 #if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
     fFlags |= RTLOGFLAGS_USECRLF;
 #endif
-    char szError[RTPATH_MAX + 128] = "";
     int rc = RTLogCreateEx(&g_pLoggerRelease, fFlags, "all",
                            "VBOXGREETER_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups,
                            RTLOGDEST_STDOUT,
                            vboxGreeterLogHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
-                           szError, sizeof(szError), pszLogFile);
+                           NULL /*pErrInfo*/, pszLogFile);
     if (RT_SUCCESS(rc))
     {
         /* register this logger as the release logger */
diff --git a/src/VBox/Additions/linux/sharedfolders/.scm-settings b/src/VBox/Additions/linux/sharedfolders/.scm-settings
new file mode 100644
index 0000000..25b2fd3
--- /dev/null
+++ b/src/VBox/Additions/linux/sharedfolders/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for linux shared folders driver.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/Makefile.module: --treat-as Makefile
+
diff --git a/src/VBox/Additions/linux/sharedfolders/Makefile.kmk b/src/VBox/Additions/linux/sharedfolders/Makefile.kmk
index 30a35a4..718058d 100644
--- a/src/VBox/Additions/linux/sharedfolders/Makefile.kmk
+++ b/src/VBox/Additions/linux/sharedfolders/Makefile.kmk
@@ -22,12 +22,12 @@ include $(KBUILD_PATH)/subheader.kmk
 #
 # Populate FILES_VBOXSF_NOBIN
 #
-INSTALLS += vboxsf-mod
+INSTALLS += vboxsf-src
 include $(PATH_SUB_CURRENT)/files_vboxsf
-vboxsf-mod_INST         = $(INST_ADDITIONS)src/vboxsf/
-vboxsf-mod_SOURCES      = \
+vboxsf-src_INST         = $(INST_ADDITIONS)src/vboxsf/
+vboxsf-src_SOURCES      = \
 	$(subst $(DQUOTE),,$(FILES_VBOXSF_NOBIN))
-vboxsf-mod_EXEC_SOURCES = \
+vboxsf-src_EXEC_SOURCES = \
 	$(subst $(DQUOTE),,$(FILES_VBOXSF_BIN))
 
 
diff --git a/src/VBox/Additions/linux/sharedfolders/Makefile.module b/src/VBox/Additions/linux/sharedfolders/Makefile.module
index 5a2803c..54e4728 100644
--- a/src/VBox/Additions/linux/sharedfolders/Makefile.module
+++ b/src/VBox/Additions/linux/sharedfolders/Makefile.module
@@ -1,9 +1,12 @@
-#
+# $Id: Makefile.module $
+## @file
 # VirtualBox Guest Additions Module Makefile.
 #
 # (For 2.6.x this file must be 'Makefile'!)
 #
-# Copyright (C) 2006-2011 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/sharedfolders/dirops.c b/src/VBox/Additions/linux/sharedfolders/dirops.c
index c92f3ed..6fee787 100644
--- a/src/VBox/Additions/linux/sharedfolders/dirops.c
+++ b/src/VBox/Additions/linux/sharedfolders/dirops.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/sharedfolders/files_vboxsf b/src/VBox/Additions/linux/sharedfolders/files_vboxsf
index 20bf199..17512c8 100755
--- a/src/VBox/Additions/linux/sharedfolders/files_vboxsf
+++ b/src/VBox/Additions/linux/sharedfolders/files_vboxsf
@@ -1,7 +1,7 @@
 #!/bin/sh
 # $Id: files_vboxsf $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
diff --git a/src/VBox/Additions/linux/sharedfolders/lnkops.c b/src/VBox/Additions/linux/sharedfolders/lnkops.c
index e43b84c..b512602 100644
--- a/src/VBox/Additions/linux/sharedfolders/lnkops.c
+++ b/src/VBox/Additions/linux/sharedfolders/lnkops.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c b/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
index 20a3ee5..8f53a21 100644
--- a/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
+++ b/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -503,18 +503,6 @@ main(int argc, char **argv)
         }
         err = mount(host_name, mount_point, "vboxsf", flags, &mntinf);
     }
-    if (err == -1 && errno == EPROTO)
-    {
-        /* New mount tool with old vboxsf module? Try again using the old
-         * vbsf_mount_info_old structure. */
-        struct vbsf_mount_info_old mntinf_old;
-        memcpy(&mntinf_old.name, &mntinf.name, MAX_HOST_NAME);
-        memcpy(&mntinf_old.nls_name, mntinf.nls_name, MAX_NLS_NAME);
-        mntinf_old.uid = mntinf.uid;
-        mntinf_old.gid = mntinf.gid;
-        mntinf_old.ttl = mntinf.ttl;
-        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/linux/sharedfolders/regops.c b/src/VBox/Additions/linux/sharedfolders/regops.c
index 20b0da5..f36ebe1 100644
--- a/src/VBox/Additions/linux/sharedfolders/regops.c
+++ b/src/VBox/Additions/linux/sharedfolders/regops.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -234,6 +234,7 @@ static ssize_t sf_reg_write(struct file *file, const char *buf, size_t size, lof
 
         err = VbglR0SfWritePhysCont(&client_handle, &sf_g->map, sf_r->handle,
                                     pos, &nwritten, tmp_phys);
+        err = RT_FAILURE(err) ? -EPROTO : 0;
         if (err)
             goto fail;
 
@@ -561,15 +562,14 @@ struct file_operations sf_reg_fops =
     .release     = sf_reg_release,
     .mmap        = sf_reg_mmap,
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23)
+# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31)
+/** @todo This code is known to cause caching of data which should not be
+ * cached.  Investigate. */
+#  if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23)
     .splice_read = generic_file_splice_read,
-# else
+#  else
     .sendfile    = generic_file_sendfile,
-# endif
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)
-    .read_iter   = generic_file_read_iter,
-    .write_iter  = generic_file_write_iter,
-# else
+#  endif
     .aio_read    = generic_file_aio_read,
     .aio_write   = generic_file_aio_write,
 # endif
diff --git a/src/VBox/Additions/linux/sharedfolders/utils.c b/src/VBox/Additions/linux/sharedfolders/utils.c
index 799f87a..749205a 100644
--- a/src/VBox/Additions/linux/sharedfolders/utils.c
+++ b/src/VBox/Additions/linux/sharedfolders/utils.c
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/sharedfolders/vbsfmount.c b/src/VBox/Additions/linux/sharedfolders/vbsfmount.c
index ad9359e..98a7b53 100644
--- a/src/VBox/Additions/linux/sharedfolders/vbsfmount.c
+++ b/src/VBox/Additions/linux/sharedfolders/vbsfmount.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/sharedfolders/vbsfmount.h b/src/VBox/Additions/linux/sharedfolders/vbsfmount.h
index 632859e..b080982 100644
--- a/src/VBox/Additions/linux/sharedfolders/vbsfmount.h
+++ b/src/VBox/Additions/linux/sharedfolders/vbsfmount.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -17,28 +17,24 @@
 #ifndef VBFS_MOUNT_H
 #define VBFS_MOUNT_H
 
+/* Linux constraints the size of data mount argument to PAGE_SIZE - 1. */
 #define MAX_HOST_NAME  256
 #define MAX_NLS_NAME    32
 
-/* Linux constraints the size of data mount argument to PAGE_SIZE - 1. */
-struct vbsf_mount_info_old
-{
-    char name[MAX_HOST_NAME];
-    char nls_name[MAX_NLS_NAME];
-    int  uid;
-    int  gid;
-    int  ttl;
-};
-
 #define VBSF_MOUNT_SIGNATURE_BYTE_0 '\377'
 #define VBSF_MOUNT_SIGNATURE_BYTE_1 '\376'
 #define VBSF_MOUNT_SIGNATURE_BYTE_2 '\375'
 
 struct vbsf_mount_info_new
 {
-    char nullchar;              /* name cannot be '\0' -- we use this field
-                                   to distinguish between the old structure
-                                   and the new structure */
+    /*
+     * The old version of the mount_info struct started with a
+     * char name[MAX_HOST_NAME] field, where name cannot be '\0'.
+     * So the new version of the mount_info struct starts with a
+     * nullchar field which is always 0 so that we can detect and
+     * reject the old structure being passed.
+     */
+    char nullchar;
     char signature[3];          /* signature */
     int  length;                /* length of the whole structure */
     char name[MAX_HOST_NAME];   /* share name */
diff --git a/src/VBox/Additions/linux/sharedfolders/vfsmod.c b/src/VBox/Additions/linux/sharedfolders/vfsmod.c
index 3c50340..c180928 100644
--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.c
+++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.c
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -74,32 +74,14 @@ static int sf_glob_alloc(struct vbsf_mount_info_new *info, struct sf_glob_info *
         || info->signature[1] != VBSF_MOUNT_SIGNATURE_BYTE_1
         || info->signature[2] != VBSF_MOUNT_SIGNATURE_BYTE_2)
     {
-        /* An old version of mount.vboxsf made the syscall. Translate the
-         * old parameters to the new structure. */
-        struct vbsf_mount_info_old *info_old = (struct vbsf_mount_info_old *)info;
-        static struct vbsf_mount_info_new info_compat;
-
-        info = &info_compat;
-        memset(info, 0, sizeof(*info));
-        memcpy(&info->name, &info_old->name, MAX_HOST_NAME);
-        memcpy(&info->nls_name, &info_old->nls_name, MAX_NLS_NAME);
-        info->length = offsetof(struct vbsf_mount_info_new, dmode);
-        info->uid    = info_old->uid;
-        info->gid    = info_old->gid;
-        info->ttl    = info_old->ttl;
+        err = -EINVAL;
+        goto fail1;
     }
 
     info->name[sizeof(info->name) - 1] = 0;
     info->nls_name[sizeof(info->nls_name) - 1] = 0;
 
     name_len = strlen(info->name);
-    if (name_len > 0xfffe)
-    {
-        err = -ENAMETOOLONG;
-        LogFunc(("map name too big\n"));
-        goto fail1;
-    }
-
     str_len = offsetof(SHFLSTRING, String.utf8) + name_len + 1;
     str_name = kmalloc(str_len, GFP_KERNEL);
     if (!str_name)
diff --git a/src/VBox/Additions/linux/sharedfolders/vfsmod.h b/src/VBox/Additions/linux/sharedfolders/vfsmod.h
index 2f12206..23d11d3 100644
--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.h
+++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/linux/testcase/TimesyncBackdoor.c b/src/VBox/Additions/linux/testcase/TimesyncBackdoor.c
index ca52261..fcfdfc3 100644
--- a/src/VBox/Additions/linux/testcase/TimesyncBackdoor.c
+++ b/src/VBox/Additions/linux/testcase/TimesyncBackdoor.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/.scm-settings b/src/VBox/Additions/solaris/.scm-settings
new file mode 100644
index 0000000..fbd1e72
--- /dev/null
+++ b/src/VBox/Additions/solaris/.scm-settings
@@ -0,0 +1,44 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the Solaris guest additions.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+# The whole lot is dual licensed.
+--license-ose-dual
+
+--filter-out-dirs  "/DRM/include/."
+
+--filter-out-files /Installer/vboxguest.depend
+--filter-out-files /Installer/vboxguest.pkginfo
+--filter-out-files /Installer/vboxguest.space
+/Installer/postinstall.sh: --no-convert-tabs --license-ose-dual
+/Installer/vbox_vendor_select: --treat-as .sh --license-based-on-mit --no-convert-tabs
+
+/Mouse/vboxms.conf: --treat-as .sh
+
+--filter-out-dirs  "/SharedFolders/solaris10/sys/."
+/SharedFolders/*: --no-convert-tabs
+
+/DRM/vboxvideo_drm.c: --no-convert-tabs
+
diff --git a/src/VBox/Additions/solaris/DRM/deps.asm b/src/VBox/Additions/solaris/DRM/deps.asm
index 03bce84..098598f 100644
--- a/src/VBox/Additions/solaris/DRM/deps.asm
+++ b/src/VBox/Additions/solaris/DRM/deps.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/DRM/vboxvideo_drm.c b/src/VBox/Additions/solaris/DRM/vboxvideo_drm.c
index 496fbba..3fb4466 100644
--- a/src/VBox/Additions/solaris/DRM/vboxvideo_drm.c
+++ b/src/VBox/Additions/solaris/DRM/vboxvideo_drm.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Installer/VBox.sh b/src/VBox/Additions/solaris/Installer/VBox.sh
index 5beedbc..4cf0e2f 100755
--- a/src/VBox/Additions/solaris/Installer/VBox.sh
+++ b/src/VBox/Additions/solaris/Installer/VBox.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: VBox.sh $
+## @file
 # VirtualBox startup script for Solaris Guests Additions
 #
-# Copyright (C) 2008-2011 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Installer/makepackage.sh b/src/VBox/Additions/solaris/Installer/makepackage.sh
index 0fe9aeb..b7c0fd7 100755
--- a/src/VBox/Additions/solaris/Installer/makepackage.sh
+++ b/src/VBox/Additions/solaris/Installer/makepackage.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: makepackage.sh $
+## @file
 # VirtualBox Solaris Guest Additions package creation script.
 #
-# Copyright (C) 2008-2012 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Installer/postinstall.sh b/src/VBox/Additions/solaris/Installer/postinstall.sh
index c62b5eb..664e8a1 100755
--- a/src/VBox/Additions/solaris/Installer/postinstall.sh
+++ b/src/VBox/Additions/solaris/Installer/postinstall.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2008-2013 Oracle Corporation
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Installer/preremove.sh b/src/VBox/Additions/solaris/Installer/preremove.sh
index 10e04eb..98d1604 100755
--- a/src/VBox/Additions/solaris/Installer/preremove.sh
+++ b/src/VBox/Additions/solaris/Installer/preremove.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2008-2013 Oracle Corporation
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Installer/vbox_vendor_select b/src/VBox/Additions/solaris/Installer/vbox_vendor_select
index 4dfe297..95c29ab 100755
--- a/src/VBox/Additions/solaris/Installer/vbox_vendor_select
+++ b/src/VBox/Additions/solaris/Installer/vbox_vendor_select
@@ -1,6 +1,13 @@
 #!/bin/ksh93
+# $Id: vbox_vendor_select $
+## @file
+# ???
 #
-# Based on mesa_vendor_select from Solaris 11.3 with the following copyright:
+
+#
+# Copyright (C) 2013-2017 Oracle Corporation
+#
+# This file is based on mesa_vendor_select from Solaris 11.3 with the following copyright:
 #
 # Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
 #
@@ -23,7 +30,6 @@
 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 # DEALINGS IN THE SOFTWARE.
 #
-#
 
 LINKDIR=/system/volatile/opengl
 MESA_SELECT=/lib/opengl/ogl_select/mesa_vendor_select
diff --git a/src/VBox/Additions/solaris/Installer/vboxdevlink.sed b/src/VBox/Additions/solaris/Installer/vboxdevlink.sed
index 82cbedf..4aff323 100644
--- a/src/VBox/Additions/solaris/Installer/vboxdevlink.sed
+++ b/src/VBox/Additions/solaris/Installer/vboxdevlink.sed
@@ -1,4 +1,29 @@
+# $Id$
+## @file
 # sed class script to modify /etc/devlink.tab
+#
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
 !install
 /name=vboxguest/d
 $i\
diff --git a/src/VBox/Additions/solaris/Installer/vboxguest.sh b/src/VBox/Additions/solaris/Installer/vboxguest.sh
index 8c8781f..30d4eff 100755
--- a/src/VBox/Additions/solaris/Installer/vboxguest.sh
+++ b/src/VBox/Additions/solaris/Installer/vboxguest.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: vboxguest.sh $
+## @file
 # VirtualBox Guest Additions kernel module control script for Solaris.
 #
-# Copyright (C) 2008-2012 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Mouse/deps.asm b/src/VBox/Additions/solaris/Mouse/deps.asm
index 405c8c7..057f15e 100644
--- a/src/VBox/Additions/solaris/Mouse/deps.asm
+++ b/src/VBox/Additions/solaris/Mouse/deps.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Mouse/testcase/solaris.h b/src/VBox/Additions/solaris/Mouse/testcase/solaris.h
index 7111419..2b59bf9 100644
--- a/src/VBox/Additions/solaris/Mouse/testcase/solaris.h
+++ b/src/VBox/Additions/solaris/Mouse/testcase/solaris.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Mouse/testcase/tstVBoxMouse-solaris.c b/src/VBox/Additions/solaris/Mouse/testcase/tstVBoxMouse-solaris.c
index a0d88fe..ba30dbc 100644
--- a/src/VBox/Additions/solaris/Mouse/testcase/tstVBoxMouse-solaris.c
+++ b/src/VBox/Additions/solaris/Mouse/testcase/tstVBoxMouse-solaris.c
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Mouse/vboxms.c b/src/VBox/Additions/solaris/Mouse/vboxms.c
index 9b8f7d5..1c67884 100644
--- a/src/VBox/Additions/solaris/Mouse/vboxms.c
+++ b/src/VBox/Additions/solaris/Mouse/vboxms.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Additions/solaris/Mouse/vboxms.conf b/src/VBox/Additions/solaris/Mouse/vboxms.conf
index 52ca607..d13c153 100644
--- a/src/VBox/Additions/solaris/Mouse/vboxms.conf
+++ b/src/VBox/Additions/solaris/Mouse/vboxms.conf
@@ -1,7 +1,10 @@
-#
+# $Id: vboxms.conf $
+## @file
 # OpenSolaris Guest Mouse Driver Configuration
 #
-# Copyright (C) 2012 Oracle Corporation
+
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -11,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 # This needs to go into /usr/kernel/drv,
 # while the 64-bit driver object goes into the amd64
diff --git a/src/VBox/Additions/solaris/Mouse/vboxmslnk.c b/src/VBox/Additions/solaris/Mouse/vboxmslnk.c
index bb24645..7d09f26 100644
--- a/src/VBox/Additions/solaris/Mouse/vboxmslnk.c
+++ b/src/VBox/Additions/solaris/Mouse/vboxmslnk.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/deps.asm b/src/VBox/Additions/solaris/SharedFolders/deps.asm
index 405c8c7..057f15e 100644
--- a/src/VBox/Additions/solaris/SharedFolders/deps.asm
+++ b/src/VBox/Additions/solaris/SharedFolders/deps.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs.h b/src/VBox/Additions/solaris/SharedFolders/vboxfs.h
index a80c8bc..828cca2 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs.h
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_mount.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_mount.c
index f75ed91..0d8d0a6 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_mount.c
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_mount.c
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
index b582230..72c6e12 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
index 46672da..a2239d1 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c
index cf9a7cd..3059769 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.h b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.h
index 24a7368..9bac5b8 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.h
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c
index dda374f..5678cee 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.h b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.h
index e467660..d9ae531 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.h
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Virtio/Virtio-solaris.c b/src/VBox/Additions/solaris/Virtio/Virtio-solaris.c
index 706e5b2..d8a254d 100644
--- a/src/VBox/Additions/solaris/Virtio/Virtio-solaris.c
+++ b/src/VBox/Additions/solaris/Virtio/Virtio-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Virtio/Virtio-solaris.h b/src/VBox/Additions/solaris/Virtio/Virtio-solaris.h
index 265829a..5592d7d 100644
--- a/src/VBox/Additions/solaris/Virtio/Virtio-solaris.h
+++ b/src/VBox/Additions/solaris/Virtio/Virtio-solaris.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Virtio/VirtioNet-solaris.c b/src/VBox/Additions/solaris/Virtio/VirtioNet-solaris.c
index 9fef6c2..c5f40fd 100644
--- a/src/VBox/Additions/solaris/Virtio/VirtioNet-solaris.c
+++ b/src/VBox/Additions/solaris/Virtio/VirtioNet-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.c b/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.c
index 888a9de..878cd99 100644
--- a/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.c
+++ b/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.h b/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.h
index 17d054a..14b0b77 100644
--- a/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.h
+++ b/src/VBox/Additions/solaris/Virtio/VirtioPci-solaris.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/solaris/Virtio/VirtioRing-solaris.c b/src/VBox/Additions/solaris/Virtio/VirtioRing-solaris.c
index 61468e9..842304a 100644
--- a/src/VBox/Additions/solaris/Virtio/VirtioRing-solaris.c
+++ b/src/VBox/Additions/solaris/Virtio/VirtioRing-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/.scm-settings b/src/VBox/Additions/x11/.scm-settings
new file mode 100644
index 0000000..6127167
--- /dev/null
+++ b/src/VBox/Additions/x11/.scm-settings
@@ -0,0 +1,37 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the x11 guest addition components.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+--filter-out-files /undefined_*
+
+# x11include
+--filter-out-files /x11include/*README
+/x11include/*: --external-copyright --no-convert-tabs --strip-no-trailing-lines --no-strip-trailing-blanks --no-fix-flower-box-markers --no-convert-eol --no-force-final-eol --dont-set-svn-eol --dont-set-svn-keywords
+/x11include/*h.in: --treat-as .h
+
+# vboxvideo
+--filter-out-files /vboxvideo/README.testing
+/vboxvideo/*.c|/vboxvideo/*.h: --license-mit
+/vboxvideo/vboxvideo*.c|/vboxvideo/vboxvideo*.h: --license-based-on-mit --no-convert-tabs --dont-set-svn-keywords
+/vboxvideo/edid.c: --license-based-on-mit
+/vboxvideo/setmode.c: --license-based-on-mit
+
+# Installer
+/Installer/98vboxadd-xclient: --treat-as .sh
+--filter-out-files /Installer/vboxvideo.ids
+--filter-out-files /Installer/linux_xorg_suse11.conf
+--filter-out-files /Installer/solaris_xorg.conf
+--filter-out-files /Installer/solaris_xorg_modeless.conf
diff --git a/src/VBox/Additions/x11/Installer/98vboxadd-xclient b/src/VBox/Additions/x11/Installer/98vboxadd-xclient
index 236a4cc..985e9e7 100755
--- a/src/VBox/Additions/x11/Installer/98vboxadd-xclient
+++ b/src/VBox/Additions/x11/Installer/98vboxadd-xclient
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2007-2012 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/Installer/x11config.pl b/src/VBox/Additions/x11/Installer/x11config.pl
index 333c659..43dd0b4 100755
--- a/src/VBox/Additions/x11/Installer/x11config.pl
+++ b/src/VBox/Additions/x11/Installer/x11config.pl
@@ -1,8 +1,11 @@
 #!/usr/bin/perl -w
-#
+# $Id: x11config.pl $
+## @file
 # Guest Additions X11 config update script
 #
-# Copyright (C) 2006-2010 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/Installer/x11config.sh b/src/VBox/Additions/x11/Installer/x11config.sh
index f844f89..47a80d5 100755
--- a/src/VBox/Additions/x11/Installer/x11config.sh
+++ b/src/VBox/Additions/x11/Installer/x11config.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: x11config.sh $
+## @file
 # Guest Additions X11 config update script
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/Installer/x11config15.pl b/src/VBox/Additions/x11/Installer/x11config15.pl
index 877add3..ceb52b3 100755
--- a/src/VBox/Additions/x11/Installer/x11config15.pl
+++ b/src/VBox/Additions/x11/Installer/x11config15.pl
@@ -1,8 +1,11 @@
 #!/usr/bin/perl -w
-#
+# $Id: x11config15.pl $
+## @file
 # Guest Additions X11 config update script for X.org 1.5
 #
-# Copyright (C) 2006-2010 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/Installer/x11config15sol.pl b/src/VBox/Additions/x11/Installer/x11config15sol.pl
index 8981251..d6aa68a 100755
--- a/src/VBox/Additions/x11/Installer/x11config15sol.pl
+++ b/src/VBox/Additions/x11/Installer/x11config15sol.pl
@@ -1,8 +1,11 @@
 #!/usr/bin/perl
-#
+# $Id: x11config15sol.pl $
+## @file
 # Guest Additions X11 config update script
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -59,8 +62,8 @@ foreach $cfg (@cfg_files)
                     $in_section = 1;
                 }
             }
-			else
-		    {
+            else
+            {
                 if ($line =~ /^\s*EndSection/i)
                 {
                     $in_section = 0;
diff --git a/src/VBox/Additions/x11/Installer/x11config15suse.pl b/src/VBox/Additions/x11/Installer/x11config15suse.pl
index e75fdcc..48122d6 100755
--- a/src/VBox/Additions/x11/Installer/x11config15suse.pl
+++ b/src/VBox/Additions/x11/Installer/x11config15suse.pl
@@ -1,8 +1,11 @@
 #!/usr/bin/perl -w
-#
+# $Id: x11config15suse.pl $
+## @file
 # Guest Additions X11 config update script
 #
-# Copyright (C) 2006-2010 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/Installer/x11restore.pl b/src/VBox/Additions/x11/Installer/x11restore.pl
index 47e6b71..1eaa065 100755
--- a/src/VBox/Additions/x11/Installer/x11restore.pl
+++ b/src/VBox/Additions/x11/Installer/x11restore.pl
@@ -1,9 +1,11 @@
 #!/usr/bin/perl -w
-# $Revision: 83575 $
-#
+# $Id: x11restore.pl $
+## @file
 # Restore xorg.conf while removing Guest Additions.
 #
-# Copyright (C) 2008-2012 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/Makefile.kmk b/src/VBox/Additions/x11/Makefile.kmk
index 628db30..ba5fdfd 100644
--- a/src/VBox/Additions/x11/Makefile.kmk
+++ b/src/VBox/Additions/x11/Makefile.kmk
@@ -3,6 +3,7 @@
 # Sub-Makefile for the X11 Guest Additions.
 #
 
+#
 # Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/Additions/x11/VBoxClient/VBoxClient.h b/src/VBox/Additions/x11/VBoxClient/VBoxClient.h
index eb34868..65f038b 100644
--- a/src/VBox/Additions/x11/VBoxClient/VBoxClient.h
+++ b/src/VBox/Additions/x11/VBoxClient/VBoxClient.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/check3d.cpp b/src/VBox/Additions/x11/VBoxClient/check3d.cpp
index 90d575f..f26ace8 100644
--- a/src/VBox/Additions/x11/VBoxClient/check3d.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/check3d.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/clipboard.cpp b/src/VBox/Additions/x11/VBoxClient/clipboard.cpp
index dcc1957..5bf6a40 100644
--- a/src/VBox/Additions/x11/VBoxClient/clipboard.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/clipboard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/display-svga.cpp b/src/VBox/Additions/x11/VBoxClient/display-svga.cpp
index c3309c1..a0e41fd 100644
--- a/src/VBox/Additions/x11/VBoxClient/display-svga.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/display-svga.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -25,7 +25,7 @@
  *    screens in any environment which handles kernel resize notifications,
  *    including at log-in screens.  Test GNOME Shell Wayland and GNOME Shell
  *    under X.Org or Unity or KDE at the log-in screen and after log-in.
- *  - Linux 4.10 changed the user-kernel-ABI introduced in 4.6: test both. 
+ *  - Linux 4.10 changed the user-kernel-ABI introduced in 4.6: test both.
  *  - On other guests (than Linux 4.6 or later) running X.Org Server 1.3 or
  *    later, VBoxClient --vmsvga should never be running as root, and should run
  *    (and dynamic resizing and screen enable/disable should work for all
diff --git a/src/VBox/Additions/x11/VBoxClient/display.cpp b/src/VBox/Additions/x11/VBoxClient/display.cpp
index f7394ba..b622a6b 100644
--- a/src/VBox/Additions/x11/VBoxClient/display.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/display.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp b/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp
index 5471713..845cf34 100644
--- a/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/hostversion.cpp b/src/VBox/Additions/x11/VBoxClient/hostversion.cpp
index e3b720d..10c2475 100644
--- a/src/VBox/Additions/x11/VBoxClient/hostversion.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/hostversion.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/main.cpp b/src/VBox/Additions/x11/VBoxClient/main.cpp
index ba2456f..06e5eec 100644
--- a/src/VBox/Additions/x11/VBoxClient/main.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/main.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp b/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp
index 583c556..172baa0 100644
--- a/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/seamless-x11.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/seamless-x11.h b/src/VBox/Additions/x11/VBoxClient/seamless-x11.h
index 59756d5..e60f7b0 100644
--- a/src/VBox/Additions/x11/VBoxClient/seamless-x11.h
+++ b/src/VBox/Additions/x11/VBoxClient/seamless-x11.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/seamless.cpp b/src/VBox/Additions/x11/VBoxClient/seamless.cpp
index eecfe97..2c92ca6 100644
--- a/src/VBox/Additions/x11/VBoxClient/seamless.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/seamless.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/seamless.h b/src/VBox/Additions/x11/VBoxClient/seamless.h
index ea2b7ab..764ed05 100644
--- a/src/VBox/Additions/x11/VBoxClient/seamless.h
+++ b/src/VBox/Additions/x11/VBoxClient/seamless.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp
index 326edf0..83a928c 100644
--- a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11-auto.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp
index 7747fab..422d101 100644
--- a/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp
+++ b/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/vboxmouse/vboxmouse.c b/src/VBox/Additions/x11/vboxmouse/vboxmouse.c
index 675c090..8860712 100644
--- a/src/VBox/Additions/x11/vboxmouse/vboxmouse.c
+++ b/src/VBox/Additions/x11/vboxmouse/vboxmouse.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Additions/x11/vboxvideo/HGSMIMemAlloc.h b/src/VBox/Additions/x11/vboxvideo/HGSMIMemAlloc.h
index bf742c8..d79f02c 100644
--- a/src/VBox/Additions/x11/vboxvideo/HGSMIMemAlloc.h
+++ b/src/VBox/Additions/x11/vboxvideo/HGSMIMemAlloc.h
@@ -2,23 +2,26 @@
 /*
  * Copyright (C) 2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 
diff --git a/src/VBox/Additions/x11/vboxvideo/VBoxVideoIPRT.h b/src/VBox/Additions/x11/vboxvideo/VBoxVideoIPRT.h
index 9abf9b0..d5346d8 100644
--- a/src/VBox/Additions/x11/vboxvideo/VBoxVideoIPRT.h
+++ b/src/VBox/Additions/x11/vboxvideo/VBoxVideoIPRT.h
@@ -2,23 +2,26 @@
 /*
  * Copyright (C) 2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 /* In builds inside of the VirtualBox source tree we override the default
diff --git a/src/VBox/Additions/x11/vboxvideo/edid.c b/src/VBox/Additions/x11/vboxvideo/edid.c
index 9e14064..5f73941 100644
--- a/src/VBox/Additions/x11/vboxvideo/edid.c
+++ b/src/VBox/Additions/x11/vboxvideo/edid.c
@@ -7,7 +7,7 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * This code is based on drmmode_display.c from the X.Org xf86-video-intel
+ * This file is based on drmmode_display.c from the X.Org xf86-video-intel
  * driver with the following copyright notice:
  *
  * Copyright © 2007 Red Hat, Inc.
diff --git a/src/VBox/Additions/x11/vboxvideo/getmode.c b/src/VBox/Additions/x11/vboxvideo/getmode.c
index 9a3108b..5838fbb 100644
--- a/src/VBox/Additions/x11/vboxvideo/getmode.c
+++ b/src/VBox/Additions/x11/vboxvideo/getmode.c
@@ -6,23 +6,26 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #include "vboxvideo.h"
diff --git a/src/VBox/Additions/x11/vboxvideo/hgsmimemalloc.c b/src/VBox/Additions/x11/vboxvideo/hgsmimemalloc.c
index ecacd8d..3702ff9 100644
--- a/src/VBox/Additions/x11/vboxvideo/hgsmimemalloc.c
+++ b/src/VBox/Additions/x11/vboxvideo/hgsmimemalloc.c
@@ -2,23 +2,26 @@
 /*
  * Copyright (C) 2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 /*
diff --git a/src/VBox/Additions/x11/vboxvideo/pointer.c b/src/VBox/Additions/x11/vboxvideo/pointer.c
index 733385a..d151226 100644
--- a/src/VBox/Additions/x11/vboxvideo/pointer.c
+++ b/src/VBox/Additions/x11/vboxvideo/pointer.c
@@ -6,23 +6,26 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #ifndef PCIACCESS
diff --git a/src/VBox/Additions/x11/vboxvideo/setmode.c b/src/VBox/Additions/x11/vboxvideo/setmode.c
index a15639f..7dc5989 100644
--- a/src/VBox/Additions/x11/vboxvideo/setmode.c
+++ b/src/VBox/Additions/x11/vboxvideo/setmode.c
@@ -6,9 +6,7 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * This code is based on:
- *
- * X11 VESA driver
+ * This file is based on X11 VESA driver (hardly any traces left here):
  *
  * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
  *
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
index fcbec6b..194af2f 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
@@ -6,7 +6,7 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * This code is based on the X.Org VESA driver with the following copyrights:
+ * This file is based on the X.Org VESA driver:
  *
  * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
  * Copyright 2008 Red Hat, Inc.
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
index fe9d714..6036dfe 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
@@ -6,9 +6,7 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * This code is based on:
- *
- * X11 VESA driver
+ * This file is based on the X11 VESA driver:
  *
  * Copyright (c) 2000 by Conectiva S.A. (http://www.conectiva.com)
  *
@@ -236,5 +234,5 @@ extern void vbvxCleanUpLinuxACPI(ScreenPtr pScreen);
 extern Bool VBOXEDIDSet(struct _xf86Output *output, DisplayModePtr pmode);
 #endif
 
-#endif /* _VBOXVIDEO_H_ */
+#endif /* !_VBOXVIDEO_H_ */
 
diff --git a/src/VBox/Additions/x11/vboxvideo/vbva.c b/src/VBox/Additions/x11/vboxvideo/vbva.c
index 0761967..594ba34 100644
--- a/src/VBox/Additions/x11/vboxvideo/vbva.c
+++ b/src/VBox/Additions/x11/vboxvideo/vbva.c
@@ -6,23 +6,26 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #if defined(IN_XF86_MODULE) && !defined(NO_ANSIC)
diff --git a/src/VBox/Artwork/.scm-settings b/src/VBox/Artwork/.scm-settings
new file mode 100644
index 0000000..a803ab4
--- /dev/null
+++ b/src/VBox/Artwork/.scm-settings
@@ -0,0 +1,21 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the Artwork.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+--filter-out-files /unused/VirtualBox.ai
+--filter-out-files *.svg
+--filter-out-files *.txt
+
diff --git a/src/VBox/Artwork/win/.scm-settings b/src/VBox/Artwork/win/.scm-settings
new file mode 100644
index 0000000..bc7cba5
--- /dev/null
+++ b/src/VBox/Artwork/win/.scm-settings
@@ -0,0 +1,29 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for windows artwork related files.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+# These files are included into lots of different things, so dual licensed.
+--license-ose-dual
+
diff --git a/src/VBox/Artwork/win/TemplateDll.rc b/src/VBox/Artwork/win/TemplateDll.rc
index 8846a1d..e6a85ed 100644
--- a/src/VBox/Artwork/win/TemplateDll.rc
+++ b/src/VBox/Artwork/win/TemplateDll.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Artwork/win/TemplateDrv.rc b/src/VBox/Artwork/win/TemplateDrv.rc
index b6671ea..cb7b7c8 100644
--- a/src/VBox/Artwork/win/TemplateDrv.rc
+++ b/src/VBox/Artwork/win/TemplateDrv.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Artwork/win/TemplateExe.rc b/src/VBox/Artwork/win/TemplateExe.rc
index e61b957..409f958 100644
--- a/src/VBox/Artwork/win/TemplateExe.rc
+++ b/src/VBox/Artwork/win/TemplateExe.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Artwork/win/TemplateR0.rc b/src/VBox/Artwork/win/TemplateR0.rc
index e454193..cb4bb4d 100644
--- a/src/VBox/Artwork/win/TemplateR0.rc
+++ b/src/VBox/Artwork/win/TemplateR0.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Artwork/win/TemplateRC.rc b/src/VBox/Artwork/win/TemplateRC.rc
index 6ca2b80..a57ea32 100644
--- a/src/VBox/Artwork/win/TemplateRC.rc
+++ b/src/VBox/Artwork/win/TemplateRC.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Artwork/win/TemplateRsrcDefs.h b/src/VBox/Artwork/win/TemplateRsrcDefs.h
index 335e881..d1e09a1 100644
--- a/src/VBox/Artwork/win/TemplateRsrcDefs.h
+++ b/src/VBox/Artwork/win/TemplateRsrcDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCBuiltInSymbols.cpp b/src/VBox/Debugger/DBGCBuiltInSymbols.cpp
index e681e61..eb62fa5 100644
--- a/src/VBox/Debugger/DBGCBuiltInSymbols.cpp
+++ b/src/VBox/Debugger/DBGCBuiltInSymbols.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCCmdHlp.cpp b/src/VBox/Debugger/DBGCCmdHlp.cpp
index b078ae1..5769890 100644
--- a/src/VBox/Debugger/DBGCCmdHlp.cpp
+++ b/src/VBox/Debugger/DBGCCmdHlp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCCmdWorkers.cpp b/src/VBox/Debugger/DBGCCmdWorkers.cpp
index c532358..1f69610 100644
--- a/src/VBox/Debugger/DBGCCmdWorkers.cpp
+++ b/src/VBox/Debugger/DBGCCmdWorkers.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCCommands.cpp b/src/VBox/Debugger/DBGCCommands.cpp
index d9739c5..fd7630e 100644
--- a/src/VBox/Debugger/DBGCCommands.cpp
+++ b/src/VBox/Debugger/DBGCCommands.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCEmulateCodeView.cpp b/src/VBox/Debugger/DBGCEmulateCodeView.cpp
index 15a7589..f5cf431 100644
--- a/src/VBox/Debugger/DBGCEmulateCodeView.cpp
+++ b/src/VBox/Debugger/DBGCEmulateCodeView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCEval.cpp b/src/VBox/Debugger/DBGCEval.cpp
index b65218b..e9e4799 100644
--- a/src/VBox/Debugger/DBGCEval.cpp
+++ b/src/VBox/Debugger/DBGCEval.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCFunctions.cpp b/src/VBox/Debugger/DBGCFunctions.cpp
index 0bda635..487db51 100644
--- a/src/VBox/Debugger/DBGCFunctions.cpp
+++ b/src/VBox/Debugger/DBGCFunctions.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCGdbRemoteStub.cpp b/src/VBox/Debugger/DBGCGdbRemoteStub.cpp
index 4d05603..b334893 100644
--- a/src/VBox/Debugger/DBGCGdbRemoteStub.cpp
+++ b/src/VBox/Debugger/DBGCGdbRemoteStub.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCInternal.h b/src/VBox/Debugger/DBGCInternal.h
index 7254f3a..9e411d6 100644
--- a/src/VBox/Debugger/DBGCInternal.h
+++ b/src/VBox/Debugger/DBGCInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCOps.cpp b/src/VBox/Debugger/DBGCOps.cpp
index 5aa4415..35dfffa 100644
--- a/src/VBox/Debugger/DBGCOps.cpp
+++ b/src/VBox/Debugger/DBGCOps.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGCScreenAscii.cpp b/src/VBox/Debugger/DBGCScreenAscii.cpp
index cae7c8b..8ddc5f4 100644
--- a/src/VBox/Debugger/DBGCScreenAscii.cpp
+++ b/src/VBox/Debugger/DBGCScreenAscii.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -28,6 +28,7 @@
 
 #include "DBGCInternal.h"
 
+
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
@@ -239,7 +240,7 @@ DECLHIDDEN(void) dbgcScreenAsciiDestroy(DBGCSCREEN hScreen)
  * @param   pfnBlit             Blitting callback.
  * @param   pvUser              Opaque user data to pass to the dumper callback.
  * @param   fAddColors          Flag whether to use the color info inserting
- *                              appropriate escape sequences. 
+ *                              appropriate escape sequences.
  */
 DECLHIDDEN(int) dbgcScreenAsciiBlit(DBGCSCREEN hScreen, PFNDGCSCREENBLIT pfnBlit, void *pvUser, bool fAddColors)
 {
diff --git a/src/VBox/Debugger/DBGCTcp.cpp b/src/VBox/Debugger/DBGCTcp.cpp
index 71b155b..247d2e1 100644
--- a/src/VBox/Debugger/DBGCTcp.cpp
+++ b/src/VBox/Debugger/DBGCTcp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGConsole.cpp b/src/VBox/Debugger/DBGConsole.cpp
index ac92169..c596677 100644
--- a/src/VBox/Debugger/DBGConsole.cpp
+++ b/src/VBox/Debugger/DBGConsole.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInCommonELF.cpp b/src/VBox/Debugger/DBGPlugInCommonELF.cpp
index 7afb424..0f6c5f7 100644
--- a/src/VBox/Debugger/DBGPlugInCommonELF.cpp
+++ b/src/VBox/Debugger/DBGPlugInCommonELF.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInCommonELF.h b/src/VBox/Debugger/DBGPlugInCommonELF.h
index a71a426..fd1a0be 100644
--- a/src/VBox/Debugger/DBGPlugInCommonELF.h
+++ b/src/VBox/Debugger/DBGPlugInCommonELF.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -19,8 +19,8 @@
 #define ___Debugger_DBGPlugInCommonELF_h
 
 #include <VBox/types.h>
-#include "../Runtime/include/internal/ldrELF32.h"
-#include "../Runtime/include/internal/ldrELF64.h"
+#include <iprt/formats/elf32.h>
+#include <iprt/formats/elf64.h>
 
 /** @name DBGDiggerCommonParseElf32Mod and DBGDiggerCommonParseElf64Mod flags
  * @{ */
diff --git a/src/VBox/Debugger/DBGPlugInCommonELFTmpl.cpp.h b/src/VBox/Debugger/DBGPlugInCommonELFTmpl.cpp.h
index 643b337..853b656 100644
--- a/src/VBox/Debugger/DBGPlugInCommonELFTmpl.cpp.h
+++ b/src/VBox/Debugger/DBGPlugInCommonELFTmpl.cpp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInDarwin.cpp b/src/VBox/Debugger/DBGPlugInDarwin.cpp
index ccb3225..b78dc63 100644
--- a/src/VBox/Debugger/DBGPlugInDarwin.cpp
+++ b/src/VBox/Debugger/DBGPlugInDarwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInDiggers.cpp b/src/VBox/Debugger/DBGPlugInDiggers.cpp
index 36088fc..628eabc 100644
--- a/src/VBox/Debugger/DBGPlugInDiggers.cpp
+++ b/src/VBox/Debugger/DBGPlugInDiggers.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInFreeBsd.cpp b/src/VBox/Debugger/DBGPlugInFreeBsd.cpp
index a5a190c..d4f46f7 100644
--- a/src/VBox/Debugger/DBGPlugInFreeBsd.cpp
+++ b/src/VBox/Debugger/DBGPlugInFreeBsd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -89,7 +89,7 @@ typedef union FBSDMSGBUF
         uint32_t        msg_wseq;
         /** Read sequence number. */
         uint32_t        msg_rseq;
-        /** @todo: More fields which are not required atm. */
+        /** @todo More fields which are not required atm. */
     } Hdr32;
     /** 64bit version. */
     struct
@@ -104,7 +104,7 @@ typedef union FBSDMSGBUF
         uint32_t        msg_wseq;
         /** Read sequence number. */
         uint32_t        msg_rseq;
-        /** @todo: More fields which are not required atm. */
+        /** @todo More fields which are not required atm. */
     } Hdr64;
 } FBSDMSGBUF;
 /** Pointer to a message buffer structure. */
@@ -174,11 +174,13 @@ typedef DBGDIGGERFBSD *PDBGDIGGERFBSD;
 /** Versioned and bitness wrapper. */
 #define FBSD_UNION(a_pThis, a_pUnion, a_Member)  ((a_pThis)->f64Bit ? (a_pUnion)->Hdr64. a_Member : (a_pUnion)->Hdr32. a_Member )
 
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
 static DECLCALLBACK(int)  dbgDiggerFreeBsdInit(PUVM pUVM, void *pvData);
 
+
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Debugger/DBGPlugInLinux.cpp b/src/VBox/Debugger/DBGPlugInLinux.cpp
index a93091f..7722a90 100644
--- a/src/VBox/Debugger/DBGPlugInLinux.cpp
+++ b/src/VBox/Debugger/DBGPlugInLinux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInOS2.cpp b/src/VBox/Debugger/DBGPlugInOS2.cpp
index f0bc432..2851e99 100644
--- a/src/VBox/Debugger/DBGPlugInOS2.cpp
+++ b/src/VBox/Debugger/DBGPlugInOS2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInSolaris.cpp b/src/VBox/Debugger/DBGPlugInSolaris.cpp
index c083ddb..d8a1d13 100644
--- a/src/VBox/Debugger/DBGPlugInSolaris.cpp
+++ b/src/VBox/Debugger/DBGPlugInSolaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugInWinNt.cpp b/src/VBox/Debugger/DBGPlugInWinNt.cpp
index c4858bb..fdabb4b 100644
--- a/src/VBox/Debugger/DBGPlugInWinNt.cpp
+++ b/src/VBox/Debugger/DBGPlugInWinNt.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/DBGPlugIns.h b/src/VBox/Debugger/DBGPlugIns.h
index 1a0691e..148020f 100644
--- a/src/VBox/Debugger/DBGPlugIns.h
+++ b/src/VBox/Debugger/DBGPlugIns.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbg.cpp b/src/VBox/Debugger/VBoxDbg.cpp
index bb01f4e..65085d7 100644
--- a/src/VBox/Debugger/VBoxDbg.cpp
+++ b/src/VBox/Debugger/VBoxDbg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgBase.cpp b/src/VBox/Debugger/VBoxDbgBase.cpp
index 344b96a..3fc2198 100644
--- a/src/VBox/Debugger/VBoxDbgBase.cpp
+++ b/src/VBox/Debugger/VBoxDbgBase.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgBase.h b/src/VBox/Debugger/VBoxDbgBase.h
index f4e987e..ac0aa03 100644
--- a/src/VBox/Debugger/VBoxDbgBase.h
+++ b/src/VBox/Debugger/VBoxDbgBase.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgConsole.cpp b/src/VBox/Debugger/VBoxDbgConsole.cpp
index 496a8ed..b58a0aa 100644
--- a/src/VBox/Debugger/VBoxDbgConsole.cpp
+++ b/src/VBox/Debugger/VBoxDbgConsole.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -177,7 +177,7 @@ VBoxDbgConsoleOutput::setColorGreenOnBlack()
        When used as a trigger, the checked is done automatically by Qt. */
     if (!m_pGreenOnBlackAction->isChecked())
         m_pGreenOnBlackAction->setChecked(true);
-    
+
     /* Make this setting persistent */
     if (m_pVirtualBox)
         m_pVirtualBox->SetExtraData(com::Bstr("DbgConsole/ColorScheme").raw(), com::Bstr("GreenOnBlack").raw());
@@ -214,7 +214,7 @@ VBoxDbgConsoleOutput::setFontCourier()
 
     if (!m_pCourierFontAction->isChecked())
         m_pCourierFontAction->setChecked(true);
-    
+
     /* Make this setting persistent */
     if (m_pVirtualBox)
         m_pVirtualBox->SetExtraData(com::Bstr("DbgConsole/Font").raw(), com::Bstr("Courier").raw());
diff --git a/src/VBox/Debugger/VBoxDbgConsole.h b/src/VBox/Debugger/VBoxDbgConsole.h
index b59e427..ddad855 100644
--- a/src/VBox/Debugger/VBoxDbgConsole.h
+++ b/src/VBox/Debugger/VBoxDbgConsole.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgDisas.h b/src/VBox/Debugger/VBoxDbgDisas.h
index 7031899..a093875 100644
--- a/src/VBox/Debugger/VBoxDbgDisas.h
+++ b/src/VBox/Debugger/VBoxDbgDisas.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgGui.cpp b/src/VBox/Debugger/VBoxDbgGui.cpp
index e4361af..744e326 100644
--- a/src/VBox/Debugger/VBoxDbgGui.cpp
+++ b/src/VBox/Debugger/VBoxDbgGui.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgGui.h b/src/VBox/Debugger/VBoxDbgGui.h
index e534e1a..3f8e5b4 100644
--- a/src/VBox/Debugger/VBoxDbgGui.h
+++ b/src/VBox/Debugger/VBoxDbgGui.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgStatsQt.cpp b/src/VBox/Debugger/VBoxDbgStatsQt.cpp
index 7b57918..0699542 100644
--- a/src/VBox/Debugger/VBoxDbgStatsQt.cpp
+++ b/src/VBox/Debugger/VBoxDbgStatsQt.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/VBoxDbgStatsQt.h b/src/VBox/Debugger/VBoxDbgStatsQt.h
index d2298c5..48a323b 100644
--- a/src/VBox/Debugger/VBoxDbgStatsQt.h
+++ b/src/VBox/Debugger/VBoxDbgStatsQt.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/testcase/tstDBGCParser.cpp b/src/VBox/Debugger/testcase/tstDBGCParser.cpp
index b0b24f3..ce32e56 100644
--- a/src/VBox/Debugger/testcase/tstDBGCParser.cpp
+++ b/src/VBox/Debugger/testcase/tstDBGCParser.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/testcase/tstDBGCStubs.cpp b/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
index 18aff17..1bb3062 100644
--- a/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
+++ b/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Debugger/testcase/tstVBoxDbg.cpp b/src/VBox/Debugger/testcase/tstVBoxDbg.cpp
index 107ea80..fa80921 100644
--- a/src/VBox/Debugger/testcase/tstVBoxDbg.cpp
+++ b/src/VBox/Debugger/testcase/tstVBoxDbg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Audio/AudioMixer.h b/src/VBox/Devices/Audio/AudioMixer.h
index bdd6cd9..5fe0f98 100644
--- a/src/VBox/Devices/Audio/AudioMixer.h
+++ b/src/VBox/Devices/Audio/AudioMixer.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Audio/DevHDA.cpp b/src/VBox/Devices/Audio/DevHDA.cpp
index b56e377..6d0b02d 100644
--- a/src/VBox/Devices/Audio/DevHDA.cpp
+++ b/src/VBox/Devices/Audio/DevHDA.cpp
@@ -730,7 +730,18 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
         rc = PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), pThis->u64CORBBase, pThis->pu32CorbBuf, pThis->cbCorbBuf);
         if (RT_FAILURE(rc))
             AssertRCReturn(rc, rc);
-# ifdef DEBUG_CMD_BUFFER
+    }
+    else
+    {
+        Assert((HDA_REG(pThis, RIRBCTL) & HDA_RIRBCTL_RDMAEN));
+        rc = PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns), pThis->u64RIRBBase, pThis->pu64RirbBuf, pThis->cbRirbBuf);
+        if (RT_FAILURE(rc))
+            AssertRCReturn(rc, rc);
+    }
+
+#ifdef DEBUG_CMD_BUFFER
+        LogFunc(("fLocal=%RTbool\n", fLocal));
+
         uint8_t i = 0;
         do
         {
@@ -739,28 +750,19 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
             do
             {
                 const char *pszPrefix;
-                if ((i + j) == HDA_REG(pThis, CORBRP));
+                if ((i + j) == HDA_REG(pThis, CORBRP))
                     pszPrefix = "[R]";
-                else if ((i + j) == HDA_REG(pThis, CORBWP));
+                else if ((i + j) == HDA_REG(pThis, CORBWP))
                     pszPrefix = "[W]";
                 else
                     pszPrefix = "   "; /* three spaces */
-                LogFunc(("%s%08x", pszPrefix, pThis->pu32CorbBuf[i + j]));
+                Log((" %s%08x", pszPrefix, pThis->pu32CorbBuf[i + j]));
                 j++;
             } while (j < 8);
-            LogFunc(("\n"));
+            Log(("\n"));
             i += 8;
         } while(i != 0);
-# endif
-    }
-    else
-    {
-        Assert((HDA_REG(pThis, RIRBCTL) & HDA_RIRBCTL_RDMAEN));
-        rc = PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns), pThis->u64RIRBBase, pThis->pu64RirbBuf, pThis->cbRirbBuf);
-        if (RT_FAILURE(rc))
-            AssertRCReturn(rc, rc);
-# ifdef DEBUG_CMD_BUFFER
-        uint8_t i = 0;
+
         do {
             LogFunc(("RIRB%02x: ", i));
             uint8_t j = 0;
@@ -770,13 +772,12 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
                     prefix = "[W]";
                 else
                     prefix = "   ";
-                LogFunc((" %s%016lx", prefix, pThis->pu64RirbBuf[i + j]));
+                Log((" %s%016lx", prefix, pThis->pu64RirbBuf[i + j]));
             } while (++j < 8);
-            LogFunc(("\n"));
+            Log(("\n"));
             i += 8;
         } while (i != 0);
-# endif
-    }
+#endif
     return rc;
 }
 
@@ -789,65 +790,75 @@ static int hdaCmdSync(PHDASTATE pThis, bool fLocal)
  */
 static int hdaCORBCmdProcess(PHDASTATE pThis)
 {
-    int rc = hdaCmdSync(pThis, true);
-    if (RT_FAILURE(rc))
-        AssertRCReturn(rc, rc);
+    int rc = hdaCmdSync(pThis, true /* Sync from guest */);
+    AssertRCReturn(rc, rc);
 
     uint8_t corbRp = HDA_REG(pThis, CORBRP);
     uint8_t corbWp = HDA_REG(pThis, CORBWP);
     uint8_t rirbWp = HDA_REG(pThis, RIRBWP);
 
-    Assert((corbWp != corbRp));
-    Log3Func(("CORB(RP:%x, WP:%x) RIRBWP:%x\n", HDA_REG(pThis, CORBRP), HDA_REG(pThis, CORBWP), HDA_REG(pThis, RIRBWP)));
+    Log3Func(("CORB(RP:%x, WP:%x) RIRBWP:%x\n", corbRp, corbWp, rirbWp));
 
     while (corbRp != corbWp)
     {
-        uint64_t uResp;
-        uint32_t uCmd = pThis->pu32CorbBuf[++corbRp];
+        corbRp = (corbRp + 1) % HDA_CORB_SIZE; /* Advance +1 as the first command(s) are at CORBWP + 1. */
 
-        int rc2 = pThis->pCodec->pfnLookup(pThis->pCodec, HDA_CODEC_CMD(uCmd, 0 /* Codec index */), &uResp);
-        if (RT_FAILURE(rc2))
-            LogFunc(("Codec lookup failed with rc=%Rrc\n", rc2));
+        uint64_t uResp = 0;
+        uint32_t uCmd = pThis->pu32CorbBuf[corbRp];
 
-        (rirbWp)++;
+        rc = pThis->pCodec->pfnLookup(pThis->pCodec, HDA_CODEC_CMD(uCmd, 0 /* Codec index */), &uResp);
+        if (RT_FAILURE(rc))
+            LogFunc(("Codec lookup failed with rc=%Rrc\n", rc));
+
+        LogFunc(("verb:%08x -> %016lx\n", uCmd, uResp));
 
         if (   (uResp & CODEC_RESPONSE_UNSOLICITED)
             && !(HDA_REG(pThis, GCTL) & HDA_GCTL_UNSOL))
         {
-            LogFunc(("Unexpected unsolicited response\n"));
+            LogFunc(("Unexpected unsolicited response.\n"));
             HDA_REG(pThis, CORBRP) = corbRp;
+
+            /** @todo r=andy No CORB/RIRB syncing to guest required in that case? */
             return rc;
         }
 
+        rirbWp = (rirbWp + 1) % HDA_RIRB_SIZE;
+
         pThis->pu64RirbBuf[rirbWp] = uResp;
 
-        pThis->u8RespIntCnt++;
-        if (pThis->u8RespIntCnt == RINTCNT_N(pThis))
+        pThis->u16RespIntCnt++;
+        if (pThis->u16RespIntCnt > HDA_MAX_RINTCNT) /* Make sure that the guest can't hang the host. */
+        {
+            LogRel(("HDA: Maximum response interrupt count (%d) reached, bailing out\n", HDA_MAX_RINTCNT));
+            pThis->u16RespIntCnt = HDA_MAX_RINTCNT;
             break;
+        }
     }
 
     HDA_REG(pThis, CORBRP) = corbRp;
     HDA_REG(pThis, RIRBWP) = rirbWp;
 
-    rc = hdaCmdSync(pThis, false);
+    rc = hdaCmdSync(pThis, false /* Sync to guest */);
+    AssertRCReturn(rc, rc);
 
-    Log3Func(("CORB(RP:%x, WP:%x) RIRBWP:%x\n",
-              HDA_REG(pThis, CORBRP), HDA_REG(pThis, CORBWP), HDA_REG(pThis, RIRBWP)));
+    Log3Func(("CORB(RP:%x, WP:%x) RIRBWP:%x, uRespIntCnt=%RU16\n", corbRp, corbWp, rirbWp, pThis->u16RespIntCnt));
 
-    if (HDA_REG(pThis, RIRBCTL) & HDA_RIRBCTL_RINTCTL) /* Response Interrupt Control (RINTCTL) enabled? */
+    if (pThis->u16RespIntCnt)
     {
-        if (pThis->u8RespIntCnt)
+        if (HDA_REG(pThis, RIRBCTL) & HDA_RIRBCTL_RINTCTL) /* Response Interrupt Control (RINTCTL) enabled? */
         {
-            pThis->u8RespIntCnt = 0;
-
             HDA_REG(pThis, RIRBSTS) |= HDA_RIRBSTS_RINTFL;
+            HDA_REG(pThis, RINTCNT)  = RT_LO_U8(pThis->u16RespIntCnt);
 
 #ifndef DEBUG
             rc = hdaProcessInterrupt(pThis);
 #else
             rc = hdaProcessInterrupt(pThis, __FUNCTION__);
 #endif
+            pThis->u16RespIntCnt--;
         }
+        else /* Not enabled -- just reset our internal counter. */
+            pThis->u16RespIntCnt = 0;
     }
 
     if (RT_FAILURE(rc))
@@ -2829,6 +2840,9 @@ static void hdaGCTLReset(PHDASTATE pThis)
     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;
+    HDA_REG(pThis, RINTCNT)  = 0x0;
 
     /*
      * Stop any audio currently playing and/or recording.
@@ -2875,19 +2889,22 @@ static void hdaGCTLReset(PHDASTATE pThis)
     hdaMixerSetStream(pThis, PDMAUDIOMIXERCTL_REAR      , 5 /* SD4 */, 0 /* Channel */);
 #endif
 
-    pThis->cbCorbBuf = 256 * sizeof(uint32_t); /** @todo Use a define here. */
+    pThis->cbCorbBuf = HDA_CORB_SIZE * sizeof(uint32_t);
 
     if (pThis->pu32CorbBuf)
         RT_BZERO(pThis->pu32CorbBuf, pThis->cbCorbBuf);
     else
         pThis->pu32CorbBuf = (uint32_t *)RTMemAllocZ(pThis->cbCorbBuf);
 
-    pThis->cbRirbBuf = 256 * sizeof(uint64_t); /** @todo Use a define here. */
+    pThis->cbRirbBuf = HDA_RIRB_SIZE * sizeof(uint64_t);
     if (pThis->pu64RirbBuf)
         RT_BZERO(pThis->pu64RirbBuf, pThis->cbRirbBuf);
     else
         pThis->pu64RirbBuf = (uint64_t *)RTMemAllocZ(pThis->cbRirbBuf);
 
+    /* Clear our internal response interrupt counter. */
+    pThis->u16RespIntCnt = 0;
+
     for (uint8_t uSD = 0; uSD < HDA_MAX_STREAMS; ++uSD)
     {
         /* Remove the RUN bit from SDnCTL in case the stream was in a running state before. */
diff --git a/src/VBox/Devices/Audio/DevHDA.h b/src/VBox/Devices/Audio/DevHDA.h
index 0133cd3..2ad1cc7 100644
--- a/src/VBox/Devices/Audio/DevHDA.h
+++ b/src/VBox/Devices/Audio/DevHDA.h
@@ -203,11 +203,11 @@ typedef struct HDASTATE
     uint8_t                            au8Padding2[7];
 #endif
     /** Response Interrupt Count (RINTCNT). */
-    uint8_t                            u8RespIntCnt;
+    uint16_t                           u16RespIntCnt;
     /** Current IRQ level. */
     uint8_t                            u8IRQL;
     /** Padding for alignment. */
-    uint8_t                            au8Padding3[6];
+    uint8_t                            au8Padding3[5];
 #ifdef DEBUG
     HDASTATEDBGINFO                    Dbg;
 #endif
diff --git a/src/VBox/Devices/Audio/DevHDACommon.h b/src/VBox/Devices/Audio/DevHDACommon.h
index 4b6c973..783904f 100644
--- a/src/VBox/Devices/Audio/DevHDACommon.h
+++ b/src/VBox/Devices/Audio/DevHDACommon.h
@@ -230,7 +230,11 @@ extern const HDAREGDESC g_aHdaRegMap[HDA_NUM_REGS];
 
 #define HDA_REG_CORBSIZE            21          /* 0x4E */
 #define HDA_RMX_CORBSIZE            19
-/** NB: Up to and including ICH 10, sizes of CORB and RIRB are fixed at 256 entries. */
+
+/** Number of CORB buffer entries. */
+#define HDA_CORB_SIZE               256
+/** Number of RIRB buffer entries. */
+#define HDA_RIRB_SIZE               256
 
 #define HDA_REG_RIRBLBASE           22          /* 0x50 */
 #define HDA_RMX_RIRBLBASE           20
@@ -244,7 +248,9 @@ extern const HDAREGDESC g_aHdaRegMap[HDA_NUM_REGS];
 
 #define HDA_REG_RINTCNT             25          /* 0x5A */
 #define HDA_RMX_RINTCNT             23
-#define RINTCNT_N(pThis)            (HDA_REG(pThis, RINTCNT) & 0xff)
+
+/** Maximum number of Response Interrupts. */
+#define HDA_MAX_RINTCNT             256
 
 #define HDA_REG_RIRBCTL             26          /* 0x5C */
 #define HDA_RMX_RIRBCTL             24
diff --git a/src/VBox/Devices/Audio/DevSB16.cpp b/src/VBox/Devices/Audio/DevSB16.cpp
index 2e367e2..8563725 100644
--- a/src/VBox/Devices/Audio/DevSB16.cpp
+++ b/src/VBox/Devices/Audio/DevSB16.cpp
@@ -79,6 +79,7 @@
     DECLCALLBACK(int) name (PPDMDEVINS pDevIns, void *opaque,       \
                             RTIOPORT nport, uint32_t val, unsigned cb)
 
+
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Devices/Audio/DrvAudioCommon.cpp b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
index 367b07c..b27b710 100644
--- a/src/VBox/Devices/Audio/DrvAudioCommon.cpp
+++ b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
@@ -18,6 +18,7 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Devices/Audio/HDACodec.h b/src/VBox/Devices/Audio/HDACodec.h
index 2b7085c..ad51415 100644
--- a/src/VBox/Devices/Audio/HDACodec.h
+++ b/src/VBox/Devices/Audio/HDACodec.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Audio/HDAStreamPeriod.cpp b/src/VBox/Devices/Audio/HDAStreamPeriod.cpp
index 8784429..5a8e313 100644
--- a/src/VBox/Devices/Audio/HDAStreamPeriod.cpp
+++ b/src/VBox/Devices/Audio/HDAStreamPeriod.cpp
@@ -76,20 +76,22 @@ void hdaStreamPeriodDestroy(PHDASTREAMPERIOD pPeriod)
 /**
  * Initializes a given stream period with needed parameters.
  *
+ * @return  VBox status code.
  * @param   pPeriod             Stream period to (re-)initialize. Must be created with hdaStreamPeriodCreate() first.
  * @param   u8SD                Stream descriptor (serial data #) number to assign this stream period to.
  * @param   u16LVI              The HDA stream's LVI value to use for the period calculation.
  * @param   u32CBL              The HDA stream's CBL value to use for the period calculation.
  * @param   pStreamCfg          Audio stream configuration to use for this period.
  */
-void hdaStreamPeriodInit(PHDASTREAMPERIOD pPeriod,
-                         uint8_t u8SD, uint16_t u16LVI, uint32_t u32CBL, PPDMAUDIOSTREAMCFG pStreamCfg)
+int hdaStreamPeriodInit(PHDASTREAMPERIOD pPeriod,
+                        uint8_t u8SD, uint16_t u16LVI, uint32_t u32CBL, PPDMAUDIOSTREAMCFG pStreamCfg)
 {
-
-    /* Sanity. */
-    AssertReturnVoid(u16LVI);
-    AssertReturnVoid(u32CBL);
-    AssertReturnVoid(DrvAudioHlpStreamCfgIsValid(pStreamCfg));
+    if (   !u16LVI
+        || !u32CBL
+        || !DrvAudioHlpStreamCfgIsValid(pStreamCfg))
+    {
+        return VERR_INVALID_PARAMETER;
+    }
 
     /*
      * Linux guests (at least Ubuntu):
@@ -118,6 +120,8 @@ void hdaStreamPeriodInit(PHDASTREAMPERIOD pPeriod,
     Log3Func(("[SD%RU8] %RU64 long, Hz=%RU32, CBL=%RU32, LVI=%RU16 -> %u periods, %RU32 frames each\n",
               pPeriod->u8SD, pPeriod->u64DurationWalClk, pPeriod->u32Hz, u32CBL, u16LVI,
               cTotalPeriods, pPeriod->framesToTransfer));
+
+    return VINF_SUCCESS;
 }
 
 /**
diff --git a/src/VBox/Devices/Audio/HDAStreamPeriod.h b/src/VBox/Devices/Audio/HDAStreamPeriod.h
index 76566aa..c1e5f3b 100644
--- a/src/VBox/Devices/Audio/HDAStreamPeriod.h
+++ b/src/VBox/Devices/Audio/HDAStreamPeriod.h
@@ -84,7 +84,7 @@ typedef struct HDASTREAMPERIOD
 #ifdef IN_RING3
 int      hdaStreamPeriodCreate(PHDASTREAMPERIOD pPeriod);
 void     hdaStreamPeriodDestroy(PHDASTREAMPERIOD pPeriod);
-void     hdaStreamPeriodInit(PHDASTREAMPERIOD pPeriod, uint8_t u8SD, uint16_t u16LVI, uint32_t u32CBL, PPDMAUDIOSTREAMCFG pStreamCfg);
+int      hdaStreamPeriodInit(PHDASTREAMPERIOD pPeriod, uint8_t u8SD, uint16_t u16LVI, uint32_t u32CBL, PPDMAUDIOSTREAMCFG pStreamCfg);
 void     hdaStreamPeriodReset(PHDASTREAMPERIOD pPeriod);
 int      hdaStreamPeriodBegin(PHDASTREAMPERIOD pPeriod, uint64_t u64WalClk);
 void     hdaStreamPeriodEnd(PHDASTREAMPERIOD pPeriod);
diff --git a/src/VBox/Devices/Audio/alsa_stubs.h b/src/VBox/Devices/Audio/alsa_stubs.h
index 9ae16e1..d97eff4 100644
--- a/src/VBox/Devices/Audio/alsa_stubs.h
+++ b/src/VBox/Devices/Audio/alsa_stubs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/BiosCommonCode/commondefs.inc b/src/VBox/Devices/BiosCommonCode/commondefs.inc
index 39fd1de..95c2c4a 100644
--- a/src/VBox/Devices/BiosCommonCode/commondefs.inc
+++ b/src/VBox/Devices/BiosCommonCode/commondefs.inc
@@ -19,16 +19,16 @@
 ;; Switches back to default CPU mode.
 SET_DEFAULT_CPU macro
  if VBOX_BIOS_CPU eq 8086
-		.8086
+        .8086
  elseif VBOX_BIOS_CPU eq 80186
-		.186
+        .186
  elseif VBOX_BIOS_CPU eq 80286
-		.286
+        .286
  elseif VBOX_BIOS_CPU eq 80386
-		.386
+        .386
  else
   .errnz 1, Unsupported target CPU value: VBOX_BIOS_CPU
-		.386
+        .386
  endif
 endm
 
@@ -36,11 +36,11 @@ endm
 ;; Switches back to default CPU mode, max 286.
 SET_DEFAULT_CPU_286 macro
  if VBOX_BIOS_CPU eq 8086
-		.8086
+        .8086
  elseif VBOX_BIOS_CPU eq 80186
-		.186
+        .186
  else
-		.286
+        .286
  endif
 endm
 
@@ -231,12 +231,11 @@ endm
 BIOSORG_CHECK macro addr
 public biosorg_check_at_&addr
 biosorg_check_at_&addr:
-		endm
+        endm
 
 ;; Adds a special label that will have its address checked after linking.
 BIOSORG_CHECK_BEFORE macro addr
-public	biosorg_check_before_or_at_&addr
+public biosorg_check_before_or_at_&addr
 biosorg_check_before_or_at_&addr:
-		endm
-
+        endm
 
diff --git a/src/VBox/Devices/EFI/.scm-settings b/src/VBox/Devices/EFI/.scm-settings
new file mode 100644
index 0000000..2806a12
--- /dev/null
+++ b/src/VBox/Devices/EFI/.scm-settings
@@ -0,0 +1,135 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for EFI.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/DevEFI.h: --license-ose-dual
+
+/Firmware/*:     --external-copyright --dont-set-svn-keywords --no-convert-tabs --no-strip-trailing-blanks \
+                 --strip-no-trailing-lines --no-force-final-eol --no-fix-todos
+/Firmware/*.kmk: --no-external-copyright --set-svn-keywords --convert-tabs --strip-trailing-blanks --strip-trailing-lines \
+                 --force-final-eol --fix-todos --license-ose-dual
+
+/Firmware/MdeModulePkg/Universal/Disk/PartitionDxe/Apple.c: \
+                 --no-external-copyright --set-svn-keywords --convert-tabs --strip-trailing-blanks --strip-trailing-lines \
+                 --force-final-eol --fix-todos --license-ose-dual
+
+/Firmware/VBox*: --no-external-copyright --set-svn-keywords --convert-tabs --strip-trailing-blanks --strip-trailing-lines \
+                 --force-final-eol --fix-todos --license-ose-dual
+
+
+# Build related files using '#' for comments.
+/Firmware/*.dec:        --treat-as Makefile
+/Firmware/*.dsc:        --treat-as Makefile
+/Firmware/*.fdf:        --treat-as Makefile
+/Firmware/*.inf:        --treat-as Makefile
+/Firmware/BaseTools/Conf/build_rule.template:   --treat-as Makefile
+/Firmware/BaseTools/Conf/target.template:       --treat-as Makefile
+/Firmware/BaseTools/Conf/tools_def.template:    --treat-as Makefile
+
+# IASL sources.
+/Firmware/*.asl:        --treat-as *.h
+/Firmware/*.aslc:       --treat-as *.h
+
+# NASM source.
+/Firmware/*.nasm:       --treat-as .asm
+/Firmware/*.nasmb:      --treat-as .asm
+/Firmware/*.asm16:      --treat-as .asm
+
+# cpp processed assembly files.
+/Firmware/*.s:          --treat-as .h
+/Firmware/*.i:          --treat-as .h
+
+# GAS assembly files w/o preprocessing.
+/Firmware/*.S:          --treat-as Makefile
+
+# Not quite sure what this is, uses C++ comment style.
+/Firmware/*.vfr:        --treat-as .h
+/Firmware/*.Vfr:        --treat-as .h
+
+# Linker scripts.
+/Firmware/*-ld-script:  --treat-as .h
+
+# Grammar files. Treat as C for now.
+/Firmware/*.g:          --treat-as .c
+
+# Not entirely sure what the .dlg files are, but they seems to contain C like license headers.
+/Firmware/*.dlg:        --treat-as .h
+
+# Misc.
+*.xsd:                  --treat-as .xml
+/Firmware/*.ini:        --treat-as Makefile
+/Firmware/BaseTools/Conf/FrameworkDatabase.template:    --treat-as .xml
+/Firmware/BaseTools/Source/C/VfrCompile/Pccts/*.r:      --treat-as .h
+/Firmware/BaseTools/BuildEnv:                           --treat-as .sh
+
+# Some normal makefiles (external code, convenience, ...)
+/Firmware/*.mak:        --treat-as Makefile
+/Firmware/*/makefile1:  --treat-as Makefile
+/Firmware/*/makefile.cygwin:                            --treat-as Makefile
+/Firmware/*/makefile.old:                               --treat-as Makefile
+/Firmware/BaseTools/Source/C/Makefiles/*.makefile:      --treat-as Makefile
+/Firmware/BaseTools/Source/C/Makefiles/ms.*:            --treat-as Makefile
+
+# Ignore text files, usually no license stuff there.
+--filter-out-files *.txt
+--filter-out-files *.rtf
+--filter-out-files *.1
+--filter-out-files /Firmware/*/README
+--filter-out-files /Firmware/BaseTools/Source/C/VfrCompile/Pccts/MPW_Read_Me
+--filter-out-files /Firmware/BaseTools/Source/C/VfrCompile/Pccts/NOTES.bcc
+--filter-out-files /Firmware/BaseTools/Source/C/VfrCompile/Pccts/NOTES.msvc
+--filter-out-files /Firmware/BaseTools/Source/C/VfrCompile/Pccts/RIGHTS
+--filter-out-files /Firmware/ReadMe.vbox
+
+# Ignore binary files.
+--filter-out-files *.raw
+--filter-out-files *.efi
+--filter-out-files *.bin
+--filter-out-files *.obj
+--filter-out-files *.dll
+--filter-out-files *.docx
+--filter-out-files /FirmwareBin/*.fd
+
+# The .uni files are UTF-16LE encoded and scm doesn't grok that yet.
+--filter-out-files *.uni
+
+# Ignore patches.
+--filter-out-files *.patch
+
+# Ignore visual C++ project stuff.
+--filter-out-files *.sln
+--filter-out-files *.suo
+--filter-out-files *.vcproj
+
+# Misc
+--filter-out-files */.gitignore
+--filter-out-files *.ps
+--filter-out-files /Firmware/BaseTools/Source/Python/Rsa2048Sha256Sign/TestSigningPrivateKey.pem
+--filter-out-dirs  /Firmware/StdLib/Efi/StdLib/etc/.
+
+#
+# VBoxPkg
+#
+/Firmware/VBoxPkg/VBoxFsDxe/test/*: --external-copyright --no-strip-trailing-blanks --no-fix-todos --strip-no-trailing-lines
+/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaFont*.h: --external-copyright
+
+
+#/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaDxe/Edid.c: --no-convert-tabs
+#/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxFsDxe/*.*: --no-convert-tabs
+#/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaDxe/Edid.c: --dont-set-svn-keywords
+#/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxFsDxe/*.*: --dont-set-svn-keywords
+
diff --git a/src/VBox/Devices/EFI/DevEFI.cpp b/src/VBox/Devices/EFI/DevEFI.cpp
index 664f10e..cb7ad69 100644
--- a/src/VBox/Devices/EFI/DevEFI.cpp
+++ b/src/VBox/Devices/EFI/DevEFI.cpp
@@ -1,10 +1,10 @@
-/* $Id: DevEFI.cpp $ */
+/* $Id: DevEFI.cpp 118839 2017-10-28 15:14:05Z bird $ */
 /** @file
  * DevEFI - EFI <-> VirtualBox Integration Framework.
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/DevEFI.h b/src/VBox/Devices/EFI/DevEFI.h
index da1270c..461e024 100644
--- a/src/VBox/Devices/EFI/DevEFI.h
+++ b/src/VBox/Devices/EFI/DevEFI.h
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/DevSmc.cpp b/src/VBox/Devices/EFI/DevSmc.cpp
index 2ed2a5c..e467cc0 100644
--- a/src/VBox/Devices/EFI/DevSmc.cpp
+++ b/src/VBox/Devices/EFI/DevSmc.cpp
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/EfiRom/Makefile.kmk b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/EfiRom/Makefile.kmk
index b27cdcf..6d277ad 100644
--- a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/EfiRom/Makefile.kmk
+++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/EfiRom/Makefile.kmk
@@ -33,5 +33,3 @@ EfiRom_SOURCES = EfiRom.c
 
 include $(FILE_KBUILD_SUB_FOOTER)
 
-
-
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VolInfo/Makefile.kmk b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VolInfo/Makefile.kmk
index ec43cc4..0171772 100644
--- a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VolInfo/Makefile.kmk
+++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/C/VolInfo/Makefile.kmk
@@ -33,5 +33,3 @@ VolInfo_SOURCES = VolInfo.c
 
 include $(FILE_KBUILD_SUB_FOOTER)
 
-
-
diff --git a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/exception.xml b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/exception.xml
index 9102de6..5efff5d 100644
--- a/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/exception.xml
+++ b/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/Ecc/exception.xml
@@ -1,319 +1,319 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ExceptionList xmlns="http://www.uefi.org/2008/2.1" xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance">
-  <Copyright>Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.</Copyright>
-  <License>
-    This program and the accompanying materials are licensed and made available
-    under the terms and conditions of the BSD License which accompanies this distribution.
-    The full text of the license may be found at http://opensource.org/licenses/bsd-license.php
-    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES
-    OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-  </License>
-  <Exception>
-    <KeyWord>__debugbreak</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__readmsr</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__writemsr</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange64</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedDecrement</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedIncrement</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_break</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inp</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpw</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpd</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outp</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpw</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpd</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_ReadWriteBarrier</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>InternalX86DisablePaging32</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>InternalX86EnablePaging32</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>InternalLongJump</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>SetJump</KeyWord>
-    <ErrorID>4002</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__debugbreak</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__readmsr</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__writemsr</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange64</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedDecrement</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedIncrement</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inp</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpw</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpd</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outp</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpw</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpd</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_ReadWriteBarrier</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>IoRead8</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>IoWrite8</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>IoRead16</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>IoWrite16</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>IoRead32</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>IoWrite32</KeyWord>
-    <ErrorID>5001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__debugbreak</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__readmsr</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__writemsr</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange64</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedDecrement</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedIncrement</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inp</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpw</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpd</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outp</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpw</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpd</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_ReadWriteBarrier</KeyWord>
-    <ErrorID>5003</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__debugbreak</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__readmsr</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>__writemsr</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedCompareExchange64</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedDecrement</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_InterlockedIncrement</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inp</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpw</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_inpd</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outp</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpw</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_outpd</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_ReadWriteBarrier</KeyWord>
-    <ErrorID>7001</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>@</KeyWord>
-    <ErrorID>9005</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>@R1</KeyWord>
-    <ErrorID>9005</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>@R2</KeyWord>
-    <ErrorID>9005</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>@Rx</KeyWord>
-    <ErrorID>9005</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>@R2.</KeyWord>
-    <ErrorID>9005</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>_DriverUnloadHandler</KeyWord>
-    <ErrorID>8006</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>ASSERT</KeyWord>
-    <ErrorID>10015</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>REPORT_STATUS_CODE</KeyWord>
-    <ErrorID>10015</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>REPORT_STATUS_CODE_WITH_EXTENDED_DATA</KeyWord>
-    <ErrorID>10015</ErrorID>
-  </Exception>
-  <Exception>
-    <KeyWord>REPORT_STATUS_CODE_WITH_DEVICE_PATH</KeyWord>
-    <ErrorID>10015</ErrorID>
-  </Exception>
+<?xml version="1.0" encoding="UTF-8"?>
+<ExceptionList xmlns="http://www.uefi.org/2008/2.1" xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance">
+  <Copyright>Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.</Copyright>
+  <License>
+    This program and the accompanying materials are licensed and made available
+    under the terms and conditions of the BSD License which accompanies this distribution.
+    The full text of the license may be found at http://opensource.org/licenses/bsd-license.php
+    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES
+    OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+  </License>
+  <Exception>
+    <KeyWord>__debugbreak</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__readmsr</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__writemsr</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange64</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedDecrement</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedIncrement</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_break</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inp</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpw</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpd</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outp</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpw</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpd</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_ReadWriteBarrier</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>InternalX86DisablePaging32</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>InternalX86EnablePaging32</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>InternalLongJump</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>SetJump</KeyWord>
+    <ErrorID>4002</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__debugbreak</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__readmsr</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__writemsr</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange64</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedDecrement</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedIncrement</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inp</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpw</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpd</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outp</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpw</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpd</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_ReadWriteBarrier</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>IoRead8</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>IoWrite8</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>IoRead16</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>IoWrite16</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>IoRead32</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>IoWrite32</KeyWord>
+    <ErrorID>5001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__debugbreak</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__readmsr</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__writemsr</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange64</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedDecrement</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedIncrement</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inp</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpw</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpd</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outp</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpw</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpd</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_ReadWriteBarrier</KeyWord>
+    <ErrorID>5003</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__debugbreak</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__readmsr</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>__writemsr</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedCompareExchange64</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedDecrement</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_InterlockedIncrement</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inp</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpw</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_inpd</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outp</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpw</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_outpd</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_ReadWriteBarrier</KeyWord>
+    <ErrorID>7001</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>@</KeyWord>
+    <ErrorID>9005</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>@R1</KeyWord>
+    <ErrorID>9005</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>@R2</KeyWord>
+    <ErrorID>9005</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>@Rx</KeyWord>
+    <ErrorID>9005</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>@R2.</KeyWord>
+    <ErrorID>9005</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>_DriverUnloadHandler</KeyWord>
+    <ErrorID>8006</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>ASSERT</KeyWord>
+    <ErrorID>10015</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>REPORT_STATUS_CODE</KeyWord>
+    <ErrorID>10015</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>REPORT_STATUS_CODE_WITH_EXTENDED_DATA</KeyWord>
+    <ErrorID>10015</ErrorID>
+  </Exception>
+  <Exception>
+    <KeyWord>REPORT_STATUS_CODE_WITH_DEVICE_PATH</KeyWord>
+    <ErrorID>10015</ErrorID>
+  </Exception>
 </ExceptionList>
\ No newline at end of file
diff --git a/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/Disk/PartitionDxe/Apple.c b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/Disk/PartitionDxe/Apple.c
index 2b87a2e..6579864 100644
--- a/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/Disk/PartitionDxe/Apple.c
+++ b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/Disk/PartitionDxe/Apple.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -96,7 +96,7 @@ PartitionInstallAppleChildHandles (
   EFI_BLOCK_IO_MEDIA       *Media;
   VOID                     *Block;
   //UINTN                   MaxIndex;
-  /** @todo: wrong, as this PT can be on both HDD or CD */
+  /** @todo wrong, as this PT can be on both HDD or CD */
   CDROM_DEVICE_PATH         CdDev;
   //EFI_DEVICE_PATH_PROTOCOL  Dev;
   EFI_STATUS                Found;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/DevEFI.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/DevEFI.h
index 410b9af..fefc491 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/DevEFI.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/DevEFI.h
@@ -1,3 +1,28 @@
+/* $Id: DevEFI.h $ */
+/** @file
+ * EFI for VirtualBox Common Definitions.
+ */
+
+/*
+ * Copyright (C) 2009-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
 
 #include "../../../DevEFI.h"
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/IndustryStandard/VBoxFatImage.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/IndustryStandard/VBoxFatImage.h
index ad9ef6e..f2e82cb 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/IndustryStandard/VBoxFatImage.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/IndustryStandard/VBoxFatImage.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxDebugLib.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxDebugLib.h
index 377aa9a..722cd29 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxDebugLib.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxDebugLib.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxMemLayout.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxMemLayout.h
index 7db09fa..0760202 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxMemLayout.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxMemLayout.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxPkg.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxPkg.h
index 937eb06..b4e2b23 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxPkg.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Include/VBoxPkg.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c
index a146fcb..d65d585 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -26,9 +26,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Base.h>
 #include <Library/DebugAgentLib.h>
 #include <Library/DebugLib.h>
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
index 3168367..8c8408b 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugAgentLib/VBoxDebugAgentLib.inf
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2013-2016 Oracle Corporation
+# Copyright (C) 2013-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c
index de94de9..c0b9344 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,9 +24,10 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Base.h>
 #include <Library/BaseLib.h>
 #include <Library/PrintLib.h>
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf
index a017429..f8dae3c 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf
@@ -5,7 +5,7 @@
 
 
 #
-# Copyright (C) 2009-2016 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -24,7 +24,6 @@
 # You may elect to license modified versions of this file under the
 # terms and conditions of either the GPL or the CDDL or both.
 #
-#/
 
 
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c
index c8d52ad..ddef2cc 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,9 +24,10 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include "VBoxDebugLib.h"
 #include "DevEFI.h"
 #include "iprt/asm.h"
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c
index 37cf0ad..3ef358c 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -27,9 +27,9 @@
 
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include "VBoxDebugLib.h"
 #include "DevEFI.h"
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c
index b7dc4a1..3be9dd1 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -26,9 +26,9 @@
 
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include "VBoxDebugLib.h"
 #include "DevEFI.h"
 #include "iprt/asm.h"
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c
index b5a8c00..922714f 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -26,9 +26,9 @@
 
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <ctype.h>
 #include "VBoxDebugLib.h"
 #include "DevEFI.h"
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintString.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintString.c
index 3da988e..532acc3 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintString.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxDebugLib/VBoxPrintString.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include "VBoxDebugLib.h"
 #include "DevEFI.h"
 #include "iprt/asm.h"
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c
index ee81d17..8d769d3 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c
@@ -5,7 +5,7 @@
 
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -26,9 +26,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Library/ReportStatusCodeLib.h>
 #include <Library/OemHookStatusCodeLib.h>
 #include <Library/PrintLib.h>
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf
index 15b469e..28ba95d 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2009-2016 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +23,6 @@
 # You may elect to license modified versions of this file under the
 # terms and conditions of either the GPL or the CDDL or both.
 #
-#/
 
 [Defines]
         INF_VERSION                = 0x00010005
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c
index a5fe6a2..a9b47fc 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -26,9 +26,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Base.h>
 #include <Library/PeCoffExtraActionLib.h>
 #include <Library/DebugLib.h>
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
index 9bb62f8..aa8672e 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffExtraActionLib/VBoxPeCoffExtraActionLib.inf
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2013-2016 Oracle Corporation
+# Copyright (C) 2013-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoff.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoff.c
index 2664d0e..2114611 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoff.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoff.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoffLibInternals.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoffLibInternals.h
index 9eb23da..985a154 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoffLibInternals.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/BasePeCoffLibInternals.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/PeCoffLoaderEx.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/PeCoffLoaderEx.c
index 2ea1d23..aacb0b4 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/PeCoffLoaderEx.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/PeCoffLoaderEx.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/VBoxPeCoffLib.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/VBoxPeCoffLib.inf
index cf75cd7..ab43829 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/VBoxPeCoffLib.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/Library/VBoxPeCoffLib/VBoxPeCoffLib.inf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -51,7 +51,7 @@
   FILE_GUID                      = 92e02078-d0ca-11de-a547-fb90b709a001
   MODULE_TYPE                    = BASE
   VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = PeCoffLib 
+  LIBRARY_CLASS                  = PeCoffLib
 
 
 #
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Console.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Console.c
index bd9c11d..8b63d70 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Console.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Console.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/ConsoleControl.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/ConsoleControl.h
index 3a89cd4..ae44c22 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/ConsoleControl.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/ConsoleControl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Cpu.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Cpu.c
index e000b91..07c3796 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Cpu.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/Cpu.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
- *   Header Files                                                               *
- *******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Framework/FrameworkInternalFormRepresentation.h>
 
 #include <Library/BaseMemoryLib.h>
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.c
index d284c5b..9c4feda 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Library/BaseMemoryLib.h>
 #include <Library/DebugLib.h>
 #include <Library/UefiBootServicesTableLib.h>
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf
index 8341e53..6eadc1c 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxAppleSim/VBoxAppleSim.inf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -39,7 +39,7 @@
         VBoxAppleSim.c
         Cpu.c
         Console.c
- 
+
 [Packages]
         MdePkg/MdePkg.dec
         MdeModulePkg/MdeModulePkg.dec
@@ -61,13 +61,13 @@
 
 [Guids]
    gEfiProcessorSubClassGuid
-   
+
 [Protocols]
    gEfiDevicePathToTextProtocolGuid
    gEfiDataHubProtocolGuid
 
 [BuildOptions.common]
 
-  GCC:*_*_*_CC_FLAGS = 
+  GCC:*_*_*_CC_FLAGS =
   INTEL:*_*_*_CC_FLAGS =
   MSFT:*_*_*_CC_FLAGS =
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.c
index 110ffb3..c580d5e 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,9 +24,10 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Protocol/ComponentName.h>
 #include <Protocol/ComponentName2.h>
 #include <Protocol/DriverBinding.h>
@@ -37,9 +38,10 @@
 #include <Library/UefiLib.h>
 #include <IndustryStandard/Pci22.h>
 
-/*******************************************************************************
-*   Internal Functions                                                         *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 static EFI_STATUS EFIAPI
 VBoxFsDB_Supported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle,
                    IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL);
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.inf
index 38986e1..5f1a570 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFsDxe.inf
@@ -8,7 +8,7 @@
 #
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFswParam.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFswParam.h
index 56682b4..b7997d3 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFswParam.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxFswParam.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf
index fe3ec4a..a205c02 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxHfs.inf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxIso9660.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxIso9660.inf
index 25d828d..46d4b1b 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxIso9660.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/VBoxIso9660.inf
@@ -1,9 +1,10 @@
 # $Id: VBoxIso9660.inf $
 ## @file
 # VBox ISO9660 FS driver
+#
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -83,4 +84,3 @@
 
   MSFT:*_*_*_CC_FLAGS = -DFSTYPE=iso9660
 
-  
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_base.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_base.h
index 0f408c9..663468f 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_base.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_base.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.c
index 84fca4e..b2208bc 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.c
@@ -3,7 +3,26 @@
  * fsw_core.c - Core file system wrapper abstraction layer code.
  */
 
-/*-
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
@@ -88,7 +107,7 @@ fsw_status_t fsw_mount(void *host_data,
     if (status)
         goto errorexit;
 
-    // TODO: anything else?
+    /// @todo anything else?
 
     *vol_out = vol;
     return FSW_SUCCESS;
@@ -110,7 +129,7 @@ void fsw_unmount(struct fsw_volume *vol)
 {
     if (vol->root)
         fsw_dnode_release(vol->root);
-    // TODO: check that no other dnodes are still around
+    /// @todo check that no other dnodes are still around
 
     vol->fstype_table->volume_free(vol);
 
@@ -146,7 +165,7 @@ fsw_status_t fsw_volume_stat(struct fsw_volume *vol, struct fsw_volume_stat *sb)
 
 void fsw_set_blocksize(struct fsw_volume *vol, fsw_u32 phys_blocksize, fsw_u32 log_blocksize)
 {
-    // TODO: Check the sizes. Both must be powers of 2. log_blocksize must not be smaller than
+    /// @todo Check the sizes. Both must be powers of 2. log_blocksize must not be smaller than
     //  phys_blocksize.
 
     // drop core block cache if present
@@ -184,7 +203,7 @@ fsw_status_t fsw_block_get(struct VOLSTRUCTNAME *vol, fsw_u32 phys_bno, fsw_u32
     fsw_u32         i, discard_level, new_bcache_size;
     struct fsw_blockcache *new_bcache;
 
-    // TODO: allow the host driver to do its own caching; just call through if
+    /// @todo allow the host driver to do its own caching; just call through if
     //  the appropriate function pointers are set
 
     if (cache_level > MAX_CACHE_LEVEL)
@@ -270,7 +289,7 @@ void fsw_block_release(struct VOLSTRUCTNAME *vol, fsw_u32 phys_bno, void *buffer
 {
     fsw_u32 i;
 
-    // TODO: allow the host driver to do its own caching; just call through if
+    /// @todo allow the host driver to do its own caching; just call through if
     //  the appropriate function pointers are set
 
     // update block cache
@@ -339,7 +358,7 @@ fsw_status_t fsw_dnode_create_root(struct fsw_volume *vol, fsw_u32 dnode_id, str
     dno->type = FSW_DNODE_TYPE_DIR;
     dno->refcount = 1;
     dno->name.type = FSW_STRING_TYPE_EMPTY;
-    // TODO: instead, call a function to create an empty string in the native string type
+    /// @todo instead, call a function to create an empty string in the native string type
 
     fsw_dnode_register(vol, dno);
 
@@ -466,7 +485,7 @@ void fsw_dnode_release(struct fsw_dnode *dno)
 
 fsw_status_t fsw_dnode_fill(struct fsw_dnode *dno)
 {
-    // TODO: check a flag right here, call fstype's dnode_fill only once per dnode
+    /// @todo check a flag right here, call fstype's dnode_fill only once per dnode
 
     return dno->vol->fstype_table->dnode_fill(dno->vol, dno);
 }
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.h
index 5393027..3c98e02 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_core.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c
index 3ec352c..7558885 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
@@ -1055,12 +1053,12 @@ EFI_STATUS fsw_efi_dnode_fill_FileInfo(IN FSW_VOLUME_DATA *Volume,
     if (EFI_ERROR(Status))
         return Status;
 
-    // TODO: check/assert that the dno's name is in UTF16
+    /// @todo check/assert that the dno's name is in UTF16
 
     // check buffer size
     RequiredSize = SIZE_OF_EFI_FILE_INFO + fsw_efi_strsize(&dno->name);
     if (*BufferSize < RequiredSize) {
-        // TODO: wind back the directory in this case
+        /// @todo wind back the directory in this case
 
 #if DEBUG_LEVEL
         Print(L"...BUFFER TOO SMALL\n");
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.h
index dae52dd..df65da0 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_base.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_base.h
index f1c0911..ba21432 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_base.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_base.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_lib.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_lib.c
index c5b0654..93b1f72 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_lib.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_efi_lib.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
@@ -144,7 +142,7 @@ VOID fsw_efi_strcpy(CHAR16 *Dest, struct fsw_string *src)
         CopyMem(Dest, src->data, src->size);
         Dest[src->len] = 0;
     } else {
-        // TODO: coerce, recurse
+        /// @todo coerce, recurse
         Dest[0] = 0;
     }
 }
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.c
index 52d90bb..e1e59ef 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.c
@@ -13,7 +13,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -36,9 +36,10 @@
 #include "fsw_hfs.h"
 
 #ifdef HOST_POSIX
+#include <assert.h>
 #define DPRINT(x) printf(x)
 #define DPRINT2(x,y) printf(x,y)
-#define BP(msg)    do { printf("ERROR: %s", msg); asm("int3"); } while (0)
+#define BP(msg)    do { printf("ERROR: %s", msg); assert(0); } while (0)
 #elif defined DEBUG_LEVEL
 #define CONCAT(x,y) x##y
 #define DPRINT(x) Print(CONCAT(L,x))
@@ -654,7 +655,7 @@ static void hfs_fill_info(struct fsw_hfs_volume *vol, HFSPlusCatalogKey *file_ke
     base = (fsw_u8*)file_key + be16_to_cpu(file_key->keyLength) + 2;
     rec_type =  be16_to_cpu(*(fsw_u16*)base);
 
-    /** @todo: read additional info */
+    /** @todo read additional info */
     switch (rec_type)
     {
         case kHFSPlusFolderRecord:
@@ -663,7 +664,7 @@ static void hfs_fill_info(struct fsw_hfs_volume *vol, HFSPlusCatalogKey *file_ke
 
             file_info->id = be32_to_cpu(info->folderID);
             file_info->type = FSW_DNODE_TYPE_DIR;
-            /* @todo: return number of elements, maybe use smth else */
+            /** @todo return number of elements, maybe use smth else */
             file_info->size = be32_to_cpu(info->valence);
             file_info->used = be32_to_cpu(info->valence);
             file_info->ctime = be32_to_cpu(info->createDate);
@@ -927,17 +928,17 @@ fsw_hfs_cmpi_catkey (BTreeKey *key1, BTreeKey *key2)
 
   while(1)
   {
-    /* get next valid character from ckey1 */
+    /* get next valid (non-zero) character from ckey1 */
     for (lc = 0; lc == 0 && apos < key1Len; apos++) {
       ac = be16_to_cpu(p1[apos]);
-      lc = ac ? fsw_to_lower(ac) : 0;
+      lc = fsw_to_lower(ac);    /* NB: 0x0000 is translated to 0xffff */
     };
     ac = (fsw_u16)lc;
 
-    /* get next valid character from ckey2 */
+    /* get next valid (non-zero) character from ckey2 */
     for (lc = 0; lc == 0 && bpos < ckey2->nodeName.length; bpos++) {
       bc = p2[bpos];
-      lc = bc ? fsw_to_lower(bc) : 0;
+      lc = fsw_to_lower(bc);    /* NB: 0x0000 is translated to 0xffff */
     };
     bc = (fsw_u16)lc;
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.h
index 85ba34e..e51accc 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_hfs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.c
index 4de2b59..291b088 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.c
@@ -14,7 +14,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -32,9 +32,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
@@ -495,7 +493,7 @@ static fsw_status_t fsw_iso9660_dir_lookup(struct fsw_iso9660_volume *vol, struc
             continue;
 
         // compare name
-        if (fsw_streq(lookup_name, &dirrec_buffer.name))  // TODO: compare case-insensitively
+        if (fsw_streq(lookup_name, &dirrec_buffer.name))  /// @todo compare case-insensitively
             break;
     }
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.h
index 7a75186..705183b 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_iso9660.h
@@ -3,7 +3,28 @@
  * fsw_iso9660.h - ISO9660 file system driver header.
  */
 
-/*-
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ * ---------------------------------------------------------------------------
+ * This code is based on:
+ *
  * Copyright (c) 2006 Christoph Pfisterer
  *
  * Redistribution and use in source and binary forms, with or without
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_lib.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_lib.c
index 2f03027..3e97118 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_lib.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_lib.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,9 +22,7 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
- */
-
-/*-
+ * ---------------------------------------------------------------------------
  * This code is based on:
  *
  * Copyright (c) 2006 Christoph Pfisterer
@@ -539,7 +537,7 @@ void fsw_strsplit(struct fsw_string *element, struct fsw_string *buffer, char se
         buffer->type = FSW_STRING_TYPE_EMPTY;
     }
 
-    // TODO: support UTF8 and UTF16_SWAPPED
+    /// @todo support UTF8 and UTF16_SWAPPED
 }
 
 /**
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_strfunc.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_strfunc.h
index 5fac6da..79babce 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_strfunc.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/fsw_strfunc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.c
index eee8c5f..6e8255c 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.c
@@ -84,7 +84,7 @@ struct fsw_posix_volume * fsw_posix_mount(const char *path, struct fsw_fstype_ta
     pvol->fd = -1;
 
     // open underlying file/device
-    pvol->fd = open(path, O_RDONLY, 0);
+    pvol->fd = open(path, O_RDONLY | O_BINARY, 0);
     if (pvol->fd < 0) {
         fprintf(stderr, "fsw_posix_mount: %s: %s\n", path, strerror(errno));
         fsw_free(pvol);
@@ -225,11 +225,11 @@ struct fsw_posix_dir * fsw_posix_opendir(struct fsw_posix_volume *pvol, const ch
  * Read the next entry from a directory.
  */
 
-struct dirent * fsw_posix_readdir(struct fsw_posix_dir *dir)
+struct fsw_posix_dirent * fsw_posix_readdir(struct fsw_posix_dir *dir)
 {
-    fsw_status_t        status;
-    struct fsw_dnode    *dno;
-    static struct dirent dent;
+    fsw_status_t                    status;
+    struct fsw_dnode                *dno;
+    static struct fsw_posix_dirent  dent;
 
     // get next entry from file system
     status = fsw_dnode_dir_read(&dir->shand, &dno);
@@ -247,7 +247,7 @@ struct dirent * fsw_posix_readdir(struct fsw_posix_dir *dir)
 
     // fill dirent structure
     dent.d_fileno = dno->dnode_id;
-    dent.d_reclen = 8 + dno->name.size + 1;
+    //dent.d_reclen = 8 + dno->name.size + 1;
     switch (dno->type) {
         case FSW_DNODE_TYPE_FILE:
             dent.d_type = DT_REG;
@@ -373,11 +373,15 @@ fsw_status_t fsw_posix_read_block(struct fsw_volume *vol, fsw_u32 phys_bno, void
     // read from disk
     block_offset = (off_t)phys_bno * vol->phys_blocksize;
     seek_result = lseek(pvol->fd, block_offset, SEEK_SET);
-    if (seek_result != block_offset)
+    if (seek_result != block_offset) {
+        fprintf(stderr, "fsw_posix_read_block: failed to seek to block %u (offset %u)\n", phys_bno, block_offset);
         return FSW_IO_ERROR;
+    }
     read_result = read(pvol->fd, buffer, vol->phys_blocksize);
-    if (read_result != vol->phys_blocksize)
+    if (read_result != vol->phys_blocksize) {
+        fprintf(stderr, "fsw_posix_read_block: failed to read %u bytes at %u\n", vol->phys_blocksize, block_offset);
         return FSW_IO_ERROR;
+    }
 
     return FSW_SUCCESS;
 }
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.h
index 8ab72f5..4df2bbc 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/fsw_posix.h
@@ -42,7 +42,6 @@
 
 #include <fcntl.h>
 #include <sys/types.h>
-#include <sys/dir.h>
 
 
 /**
@@ -79,6 +78,29 @@ struct fsw_posix_dir {
 };
 
 
+#define NAME_MAX    4096
+
+#define DT_UNKNOWN  'u'
+#define DT_REG      'r'
+#define DT_DIR      'd'
+#define DT_LNK      'l'
+
+
+/**
+ * POSIX Host: Private structure for an open directory.
+ */
+
+struct fsw_posix_dirent {
+    char                d_attr;             /* file's attribute */
+    unsigned            d_type;
+    unsigned short int  d_time;             /* file's time */
+    unsigned short int  d_date;             /* file's date */
+    long                d_size;             /* file's size */
+    char                d_name[NAME_MAX+1]; /* file's name */
+    unsigned            d_fileno;           /* file number/inode */
+};
+typedef struct fsw_posix_dirent DIR;
+
 /* functions */
 
 struct fsw_posix_volume * fsw_posix_mount(const char *path, struct fsw_fstype_table *fstype_table);
@@ -90,7 +112,7 @@ off_t fsw_posix_lseek(struct fsw_posix_file *file, off_t offset, int whence);
 int fsw_posix_close(struct fsw_posix_file *file);
 
 struct fsw_posix_dir * fsw_posix_opendir(struct fsw_posix_volume *pvol, const char *path);
-struct dirent * fsw_posix_readdir(struct fsw_posix_dir *dir);
+struct fsw_posix_dirent * fsw_posix_readdir(struct fsw_posix_dir *dir);
 void fsw_posix_rewinddir(struct fsw_posix_dir *dir);
 int fsw_posix_closedir(struct fsw_posix_dir *dir);
 
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lslr.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lslr.c
index d3e4e3c..378b448 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lslr.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lslr.c
@@ -52,7 +52,7 @@ static struct fsw_fstype_table *fstypes[] = {
 static int listdir(struct fsw_posix_volume *vol, char *path, int level)
 {
     struct fsw_posix_dir *dir;
-    struct dirent *dent;
+    struct fsw_posix_dirent *dent;
     int i;
     char subpath[4096];
 
@@ -64,7 +64,7 @@ static int listdir(struct fsw_posix_volume *vol, char *path, int level)
     while ((dent = fsw_posix_readdir(dir)) != NULL) {
         for (i = 0; i < level*2; i++)
             fputc(' ', stdout);
-        printf("%d  %s\n", dent->d_type, dent->d_name);
+        printf("%c  %s\n", dent->d_type, dent->d_name);
 
         if (dent->d_type == DT_DIR) {
             snprintf(subpath, 4095, "%s%s/", path, dent->d_name);
@@ -122,10 +122,10 @@ int main(int argc, char **argv)
         return 1;
     }
 
-    //listdir(vol, "/System/Library/Extensions/udf.kext/", 0);
+    listdir(vol, "/System/Library/CoreServices", 0);
     //listdir(vol, "/System/Library/Extensions/AppleACPIPlatform.kext/", 0);
     //listdir(vol, "/System/Library/Extensions/", 0);
-    catfile(vol, "/System/Library/Extensions/AppleHPET.kext/Contents/Info.plist");
+    catfile(vol, "/System/Library/CoreServices/SystemVersion.plist");
     //listdir(vol, "/", 0);
 
     fsw_posix_unmount(vol);
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lsroot.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lsroot.c
index bb2cba0..b254515 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lsroot.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxFsDxe/test/lsroot.c
@@ -47,10 +47,10 @@ int main(int argc, char **argv)
 {
     struct fsw_posix_volume *vol;
     struct fsw_posix_dir *dir;
-    struct dirent *dent;
+    struct fsw_posix_dirent *dent;
 
-    if (argc != 2) {
-        printf("Usage: lsroot <file/device>\n");
+    if (argc != 3) {
+        printf("Usage: lsroot <file/device> <directory>\n");
         return 1;
     }
 
@@ -62,13 +62,13 @@ int main(int argc, char **argv)
         return 1;
     }
     //dir = fsw_posix_opendir(vol, "/drivers/net/");
-    dir = fsw_posix_opendir(vol, "/");
+    dir = fsw_posix_opendir(vol, argv[2]);
     if (dir == NULL) {
         printf("opendir call failed.\n");
         return 1;
     }
     while ((dent = fsw_posix_readdir(dir)) != NULL) {
-        printf("- %s\n", dent->d_name);
+        printf("%c %s\n", dent->d_type, dent->d_name);
     }
     fsw_posix_closedir(dir);
     fsw_posix_unmount(vol);
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/BootService.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/BootService.c
index ecc3bff..999ea86 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/BootService.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/BootService.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/RunTime.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/RunTime.c
index b893a94..fcc727e 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/RunTime.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/RunTime.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.c
index 7b3f0bb..79148ee 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.h
index 7c54b94..363fc6f 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf
index 72dc169..ec8614a 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf
@@ -4,7 +4,7 @@
 
 
 #
-# Copyright (C) 2009-2016 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +23,6 @@
 # You may elect to license modified versions of this file under the
 # terms and conditions of either the GPL or the CDDL or both.
 #
-#/
 
 [Defines]
   INF_VERSION                    = 0x00010005
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/boot_service_table.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/boot_service_table.h
index f1f4935..a1e1549 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/boot_service_table.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/boot_service_table.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/interceptor.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/interceptor.h
index 00f66c8..00d0ef7 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/interceptor.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/interceptor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/print_types.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/print_types.h
index 9505f56..8af2863 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/print_types.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/print_types.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/runtime_service_table.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/runtime_service_table.h
index e5a939f..bca11db 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/runtime_service_table.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxInterceptorDxe/runtime_service_table.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c
index f21e6a6..f1a9577 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h
index 17c3142..67481bd 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf
index c170815..d80df3c 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf
@@ -4,7 +4,7 @@
 
 
 #
-# Copyright (C) 2009-2016 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +23,6 @@
 # You may elect to license modified versions of this file under the
 # terms and conditions of either the GPL or the CDDL or both.
 #
-#/
 
 [Defines]
   INF_VERSION                    = 0x00010005
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h
index b2f4e7f..ce6e767 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMisc/Makefile b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMisc/Makefile
index e9119bf..e211ccb 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMisc/Makefile
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMisc/Makefile
@@ -1,10 +1,10 @@
 # $Id: Makefile $
-#* @file
+## @file
 # Makefile - assembling the iso image for experimenting with EFI.
-#/
 #
+
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,10 +23,9 @@
 # You may elect to license modified versions of this file under the
 # terms and conditions of either the GPL or the CDDL or both.
 #
-#/
 
 #
-# Here we add modules to be burn on iso-image 
+# Here we add modules to be burn on iso-image
 #
 SOURCES += VBoxInterceptorDxe.efi
 SOURCES += VBoxMimicryDxe.efi
@@ -54,3 +53,4 @@ $(ISO_DIR)/%.efi:$(BUILD_DIR)/%.efi
 
 clean:
 	$(RM) -rf ${DEST} $(FILES_TO_ISO)
+
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxPkg.dec b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxPkg.dec
index 5dbd964..4152df2 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxPkg.dec
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxPkg.dec
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2009-2016 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/LegacyBiosMpTable.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/LegacyBiosMpTable.h
index 53809c3..d4a2380 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/LegacyBiosMpTable.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/LegacyBiosMpTable.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/TableConversion.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/TableConversion.c
index 3403ade..6e516be 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/TableConversion.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/TableConversion.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.c
index 2e116c8..35b8d41 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Library/BaseMemoryLib.h>
 #include <Library/DebugLib.h>
 #include <Library/UefiBootServicesTableLib.h>
@@ -47,9 +47,10 @@
 #include "DevEFI.h"
 #include "iprt/asm.h"
 
-/*******************************************************************************
-*   Internal Functions                                                         *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 
 
 EFI_STATUS EFIAPI
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.inf
index 404ea5c..55ee412 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxSysTables/VBoxSysTables.inf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -39,7 +39,7 @@
 [Sources.common]
         VBoxSysTables.c
         TableConversion.c
- 
+
 [Packages]
         MdePkg/MdePkg.dec
         MdeModulePkg/MdeModulePkg.dec
@@ -65,12 +65,12 @@
    gEfiAcpi20TableGuid
    gEfiProcessorSubClassGuid
    gEfiMpsTableGuid
-   
+
 [Protocols]
    gEfiDevicePathToTextProtocolGuid
 
 [BuildOptions.common]
 
-  GCC:*_*_*_CC_FLAGS = 
+  GCC:*_*_*_CC_FLAGS =
   INTEL:*_*_*_CC_FLAGS =
   MSFT:*_*_*_CC_FLAGS =
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/ComponentName.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/ComponentName.c
index 515ea06..a8161ef 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/ComponentName.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/ComponentName.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/DriverSupportedEfiVersion.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/DriverSupportedEfiVersion.c
index 6bef5e4..9dfcdab 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/DriverSupportedEfiVersion.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/DriverSupportedEfiVersion.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/Edid.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/Edid.c
index 021dd81..e537083 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/Edid.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/Edid.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.c
index 3c7e344..bcb81a7 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.h
index 5c6332f..acb8d12 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVga.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf
index 5db9308..d8113d1 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2016 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c
index 2401299..a905df2 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaGraphicsOutput.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -385,7 +385,7 @@ Returns:
     // Video Fill: Source is BltBuffer, destination is Video
     //
     if (DestinationX == 0 && Width == ScreenWidth) {
-      // @todo assumes that color depth is 32 (*4, EfiPciIoWidthFillUint32) and format matches EFI_GRAPHICS_OUTPUT_BLT_PIXEL
+      /// @todo assumes that color depth is 32 (*4, EfiPciIoWidthFillUint32) and format matches EFI_GRAPHICS_OUTPUT_BLT_PIXEL
       Status = Private->PciIo->Mem.Write (
                                     Private->PciIo,
                                     EfiPciIoWidthFillUint32,
@@ -397,7 +397,7 @@ Returns:
       ASSERT_EFI_ERROR((Status));
     } else {
       for (SrcY = SourceY, DstY = DestinationY; SrcY < (Height + SourceY); SrcY++, DstY++) {
-        // @todo assumes that color depth is 32 (*4, EfiPciIoWidthFillUint32) and format matches EFI_GRAPHICS_OUTPUT_BLT_PIXEL
+        /// @todo assumes that color depth is 32 (*4, EfiPciIoWidthFillUint32) and format matches EFI_GRAPHICS_OUTPUT_BLT_PIXEL
         Status = Private->PciIo->Mem.Write (
                                       Private->PciIo,
                                       EfiPciIoWidthFillUint32,
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.c
index 0ae2792..8a39f46 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.h
index 443ba46..4f01c32 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.h
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaI2c.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaUgaDraw.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaUgaDraw.c
index cd87b3a..23204bc 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaUgaDraw.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaDxe/VBoxVgaUgaDraw.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c
index 3e3a336..a98654d 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c
@@ -5,7 +5,7 @@
 
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -26,9 +26,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <Protocol/ComponentName.h>
 #include <Protocol/ComponentName2.h>
 #include <Protocol/DriverBinding.h>
@@ -45,9 +45,9 @@
 #include "iprt/asm.h"
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /**
  * Instance data for a VGA device this driver handles.
  */
@@ -71,9 +71,9 @@ typedef VBOXVGAMINIPORT *PVBOXVGAMINIPORT;
 #define VBOX_VGA_MINI_PORT_MAGIC_DEAD   0x19920406
 
 
-/*******************************************************************************
-*   Internal Functions                                                         *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 static EFI_STATUS EFIAPI
 VBoxVgaMiniPortDB_Supported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle,
                             IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL);
@@ -109,9 +109,9 @@ VBoxVgaMiniPortCN2_GetControllerName(IN EFI_COMPONENT_NAME2_PROTOCOL *This,
                                      IN CHAR8 *Language,  OUT CHAR16 **ControllerName);
 
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 /** EFI Driver Binding Protocol. */
 static EFI_DRIVER_BINDING_PROTOCOL          g_VBoxVgaMiniPortDB =
 {
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf
index 0354605..c2f052f 100644
--- a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf
@@ -5,7 +5,7 @@
 
 
 #
-# Copyright (C) 2009-2016 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -24,7 +24,6 @@
 # You may elect to license modified versions of this file under the
 # terms and conditions of either the GPL or the CDDL or both.
 #
-#/
 
 
 
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd
index 8171b3c..e8b03fc 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 197b404..0914b33 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/EFI/VBoxSmcUtil-darwin.cpp b/src/VBox/Devices/EFI/VBoxSmcUtil-darwin.cpp
index 848bfa5..f7a28ff 100644
--- a/src/VBox/Devices/EFI/VBoxSmcUtil-darwin.cpp
+++ b/src/VBox/Devices/EFI/VBoxSmcUtil-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/GIMDev/DrvUDP.cpp b/src/VBox/Devices/GIMDev/DrvUDP.cpp
index ce12089..810256d 100644
--- a/src/VBox/Devices/GIMDev/DrvUDP.cpp
+++ b/src/VBox/Devices/GIMDev/DrvUDP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/GIMDev/GIMDev.cpp b/src/VBox/Devices/GIMDev/GIMDev.cpp
index dc851fd..78e7a36 100644
--- a/src/VBox/Devices/GIMDev/GIMDev.cpp
+++ b/src/VBox/Devices/GIMDev/GIMDev.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/.scm-settings b/src/VBox/Devices/Graphics/.scm-settings
new file mode 100644
index 0000000..f68e633
--- /dev/null
+++ b/src/VBox/Devices/Graphics/.scm-settings
@@ -0,0 +1,63 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for graphics.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/BIOS/vbe.c:            --external-copyright --lgpl-disclaimer
+/BIOS/vbe.h:            --external-copyright --lgpl-disclaimer
+/BIOS/vberom.asm:       --external-copyright --lgpl-disclaimer
+/BIOS/vbetables-gen.c:  --external-copyright
+/BIOS/vgabios.c:        --external-copyright --lgpl-disclaimer
+/BIOS/vgabios.h:        --external-copyright
+/BIOS/vgadefs.h:        --external-copyright
+/BIOS/vgadefs.inc:      --external-copyright
+/BIOS/vgafonts.h:       --external-copyright
+/BIOS/vgarom.asm:       --external-copyright --lgpl-disclaimer
+/BIOS/vgatables.h:      --external-copyright
+/BIOS/tests/testbios.c: --external-copyright
+
+--filter-out-files /BIOS/BUGS
+--filter-out-files /BIOS/ChangeLog
+--filter-out-files /BIOS/makefile
+--filter-out-files /BIOS/Notes
+--filter-out-files /BIOS/README
+--filter-out-files /BIOS/TODO
+--filter-out-files /BIOS/vbe_display_api.txt
+--filter-out-files /BIOS/VBoxVgaBiosAlternative*.asm
+--filter-out-files /BIOS/VBoxVgaBiosAlternative*.md5sum
+
+
+/shaderlib/*: --external-copyright --lgpl-disclaimer --no-convert-tabs --no-fix-todos --no-strip-trailing-blanks
+/shaderlib/wine/include/*.idl:       --treat-as .h
+/shaderlib/wine/include/*.rh:        --treat-as .h
+/shaderlib/wine/include/*.h.in:      --treat-as .h
+/shaderlib/wine/include/*-h.in:      --treat-as .h
+/shaderlib/wine/include/*.inl:       --treat-as .h
+/shaderlib/wine/include/*.x:         --treat-as .h
+/shaderlib/wine/include/Makefile.in: --treat-as Makefile
+
+/shaderlib/shaderapi.c:                  --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/shaderlib.h:                  --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/utils.c:                      --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/vboxext.h:                    --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/wine/vbox/VBoxDbgGl.c:        --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/wine/vbox/VBoxDbgGl.h:        --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/wine/vbox/VBoxWineEx.h:       --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/winoverride.h:                --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+
+/vmsvga/*.h: --external-copyright --no-convert-tabs
+/vmsvga_glext/*.h: --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
index 92b956a..e74bf7c 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
@@ -7395,7 +7395,7 @@ vesa_pm_end:                                 ; 0xc4514 LB 0x1
 
 section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
 _msg_vga_init:                               ; 0xc4600 LB 0x2e
-    db  'Oracle VM VirtualBox Version 5.2.0 VGA BIOS', 00dh, 00ah, 000h
+    db  'Oracle VM VirtualBox Version 5.2.1 VGA BIOS', 00dh, 00ah, 000h
 _vga_modes:                                  ; 0xc462e 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
@@ -8292,7 +8292,7 @@ _vbebios_vendor_name:                        ; 0xc7c7b LB 0x13
 _vbebios_product_name:                       ; 0xc7c8e LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
 _vbebios_product_revision:                   ; 0xc7caf LB 0x23
-    db  'Oracle VM VirtualBox Version 5.2.0', 000h
+    db  'Oracle VM VirtualBox Version 5.2.1', 000h
 _vbebios_info_string:                        ; 0xc7cd2 LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
 _no_vbebios_info_string:                     ; 0xc7cfd LB 0x29
@@ -8348,4 +8348,4 @@ section CONST2 progbits vstart=0x7d26 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, 0bah
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0b8h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
index e83aedf..b1c353a 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
@@ -1 +1 @@
-917a92f3aac05ddb8df7b1a61428fe8b *VBoxVgaBios286.rom
+0a8ed06db12a4cce4466ea0a587c9594 *VBoxVgaBios286.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
index a196254..9de48f8 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
@@ -6867,7 +6867,7 @@ vesa_pm_end:                                 ; 0xc4514 LB 0x1
 
 section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
 _msg_vga_init:                               ; 0xc4600 LB 0x2e
-    db  'Oracle VM VirtualBox Version 5.2.0 VGA BIOS', 00dh, 00ah, 000h
+    db  'Oracle VM VirtualBox Version 5.2.1 VGA BIOS', 00dh, 00ah, 000h
 _vga_modes:                                  ; 0xc462e 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
@@ -7764,7 +7764,7 @@ _vbebios_vendor_name:                        ; 0xc7c7b LB 0x13
 _vbebios_product_name:                       ; 0xc7c8e LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
 _vbebios_product_revision:                   ; 0xc7caf LB 0x23
-    db  'Oracle VM VirtualBox Version 5.2.0', 000h
+    db  'Oracle VM VirtualBox Version 5.2.1', 000h
 _vbebios_info_string:                        ; 0xc7cd2 LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
 _no_vbebios_info_string:                     ; 0xc7cfd LB 0x29
@@ -7820,4 +7820,4 @@ section CONST2 progbits vstart=0x7d26 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, 02fh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02dh
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
index 4c24fdf..2ed0b2a 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
@@ -1 +1 @@
-d0a2f49a209529a1f13d76e461c96336 *VBoxVgaBios386.rom
+fe9b994ac5d3fc8e32e1c55bcd1507f0 *VBoxVgaBios386.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
index e6b1754..7a8eccd 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
@@ -7514,7 +7514,7 @@ vesa_pm_end:                                 ; 0xc4514 LB 0x1
 
 section _DATA progbits vstart=0x4600 align=1 ; size=0x3726 class=DATA group=DGROUP
 _msg_vga_init:                               ; 0xc4600 LB 0x2e
-    db  'Oracle VM VirtualBox Version 5.2.0 VGA BIOS', 00dh, 00ah, 000h
+    db  'Oracle VM VirtualBox Version 5.2.1 VGA BIOS', 00dh, 00ah, 000h
 _vga_modes:                                  ; 0xc462e 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
@@ -8411,7 +8411,7 @@ _vbebios_vendor_name:                        ; 0xc7c7b LB 0x13
 _vbebios_product_name:                       ; 0xc7c8e LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
 _vbebios_product_revision:                   ; 0xc7caf LB 0x23
-    db  'Oracle VM VirtualBox Version 5.2.0', 000h
+    db  'Oracle VM VirtualBox Version 5.2.1', 000h
 _vbebios_info_string:                        ; 0xc7cd2 LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
 _no_vbebios_info_string:                     ; 0xc7cfd LB 0x29
@@ -8467,4 +8467,4 @@ section CONST2 progbits vstart=0x7d26 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, 01eh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01ch
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
index c725ea1..89f14a2 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
@@ -1 +1 @@
-5fad8a25787bc5c4158ba542e651c4e4 *VBoxVgaBios8086.rom
+2215881c29ab66c90cf34cfb24feca14 *VBoxVgaBios8086.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/inlines.h b/src/VBox/Devices/Graphics/BIOS/inlines.h
index 4420eb0..e5b33b6 100644
--- a/src/VBox/Devices/Graphics/BIOS/inlines.h
+++ b/src/VBox/Devices/Graphics/BIOS/inlines.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/BIOS/vberom.asm b/src/VBox/Devices/Graphics/BIOS/vberom.asm
index db43b0a..5ff08dd 100644
--- a/src/VBox/Devices/Graphics/BIOS/vberom.asm
+++ b/src/VBox/Devices/Graphics/BIOS/vberom.asm
@@ -39,19 +39,19 @@
 include vgadefs.inc
 include commondefs.inc
 
-public	_vga_compat_setup
-public	dispi_set_enable_
-public	dispi_set_bank_
-public	_dispi_set_bank_farcall
+public  _vga_compat_setup
+public  dispi_set_enable_
+public  dispi_set_bank_
+public  _dispi_set_bank_farcall
 public  _dispi_get_max_bpp
 public  _vbe_has_vbe_display
 
-public	vbe_biosfn_return_current_mode
-public	vbe_biosfn_display_window_control
-public	vbe_biosfn_set_get_display_start
-public	vbe_biosfn_set_get_dac_palette_format
-public	vbe_biosfn_set_get_palette_data
-public	vbe_biosfn_return_protected_mode_interface
+public  vbe_biosfn_return_current_mode
+public  vbe_biosfn_display_window_control
+public  vbe_biosfn_set_get_display_start
+public  vbe_biosfn_set_get_dac_palette_format
+public  vbe_biosfn_set_get_palette_data
+public  vbe_biosfn_return_protected_mode_interface
 
 VGAROM  segment public 'CODE'
 
@@ -62,8 +62,8 @@ VBE_BYTEWISE_IO EQU 1
 ;; Bytewise in/out
 ifdef VBE_BYTEWISE_IO
 
-public	do_out_dx_ax
-public	do_in_ax_dx
+public  do_out_dx_ax
+public  do_in_ax_dx
 
 do_out_dx_ax:
   xchg ah, al
diff --git a/src/VBox/Devices/Graphics/BIOS/vgarom.asm b/src/VBox/Devices/Graphics/BIOS/vgarom.asm
index e95f4ef..e943c37 100644
--- a/src/VBox/Devices/Graphics/BIOS/vgarom.asm
+++ b/src/VBox/Devices/Graphics/BIOS/vgarom.asm
@@ -37,7 +37,7 @@ include commondefs.inc
 
 public  vgabios_int10_handler
 
-VGAROM	segment	public 'CODE'
+VGAROM  segment public 'CODE'
 
 ; Implemented in C
 extrn   _int10_func:near
@@ -45,19 +45,19 @@ extrn   _vgabios_init_func:near
 
 ifdef VBE
 ; Implemented in separate assembly module
-extrn	vbe_biosfn_return_current_mode:near
-extrn	vbe_biosfn_display_window_control:near
-extrn	vbe_biosfn_set_get_display_start:near
-extrn	vbe_biosfn_set_get_dac_palette_format:near
-extrn	vbe_biosfn_set_get_palette_data:near
-extrn	vbe_biosfn_return_protected_mode_interface:near
+extrn   vbe_biosfn_return_current_mode:near
+extrn   vbe_biosfn_display_window_control:near
+extrn   vbe_biosfn_set_get_display_start:near
+extrn   vbe_biosfn_set_get_dac_palette_format:near
+extrn   vbe_biosfn_set_get_palette_data:near
+extrn   vbe_biosfn_return_protected_mode_interface:near
 endif
 
 ifdef VGA_DEBUG
-extrn	_int10_debugmsg:near
-extrn	_printf:near
-extrn	_unimplemented:near
-extrn	_unknown:near
+extrn   _int10_debugmsg:near
+extrn   _printf:near
+extrn   _unimplemented:near
+extrn   _unknown:near
 endif
 
 vgabios_start:
@@ -70,9 +70,9 @@ vgabios_entry_point:
 
   jmp _vgabios_init_func
 
-	org	1Eh
+        org     1Eh
 
-	db	'IBM',0
+        db      'IBM',0
 
 ;;
 ;;  int10 handled here
@@ -830,7 +830,7 @@ get_dac_16_page:
 ifdef VBOX
   mov   dx, VGAREG_ACTL_RESET
   in    al, dx
-endif ; VBOX 
+endif ; VBOX
   pop   dx
   pop   ax
   ret
@@ -1088,6 +1088,6 @@ msg_alt_dcc:
 db "Alternate Display code (%02x) was discarded", 13, 10, 0
 endif
 
-VGAROM	ends
+VGAROM  ends
 
-	end
+        end
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
index b46a807..57bed1c 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
@@ -11,7 +11,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -208,7 +208,7 @@ typedef struct
  */
 typedef struct VMSVGAR3STATE
 {
-    GMR                     aGMR[VMSVGA_MAX_GMR_IDS];
+    GMR                    *paGMR; // [VMSVGAState::cGMR]
     struct
     {
         SVGAGuestPtr        ptr;
@@ -360,7 +360,7 @@ static SSMFIELD const g_aGMRFields[] =
  */
 static SSMFIELD const g_aVMSVGAR3STATEFields[] =
 {
-    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, aGMR),
+    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, paGMR),
     SSMFIELD_ENTRY(             VMSVGAR3STATE, GMRFB),
     SSMFIELD_ENTRY(             VMSVGAR3STATE, Cursor.fActive),
     SSMFIELD_ENTRY(             VMSVGAR3STATE, Cursor.xHotspot),
@@ -493,6 +493,7 @@ static SSMFIELD const g_aVGAStateSVGAFields[] =
     SSMFIELD_ENTRY(                 VMSVGAState, fVRAMTracking),
     SSMFIELD_ENTRY_IGNORE(          VMSVGAState, u8FIFOExtCommand),
     SSMFIELD_ENTRY_IGNORE(          VMSVGAState, fFifoExtCommandWakeup),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGAState, cGMR),
     SSMFIELD_ENTRY_TERM()
 };
 
@@ -1083,7 +1084,7 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
 
     case SVGA_REG_GMR_MAX_IDS:
         STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrMaxIdsRd);
-        *pu32 = VMSVGA_MAX_GMR_IDS;
+        *pu32 = pThis->svga.cGMR;
         break;
 
     case SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH:
@@ -1185,7 +1186,9 @@ PDMBOTHCBDECL(int) vmsvgaReadPort(PVGASTATE pThis, uint32_t *pu32)
             rc = VINF_IOM_R3_IOPORT_READ;
 #else
             STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownRd);
+# ifndef DEBUG_sunlover
             AssertMsgFailed(("reg=%#x\n", idxReg));
+# endif
 #endif
         }
         break;
@@ -1579,7 +1582,7 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
 
         /* Validate current GMR id. */
         uint32_t idGMR = pThis->svga.u32CurrentGMRId;
-        AssertBreak(idGMR < VMSVGA_MAX_GMR_IDS);
+        AssertBreak(idGMR < pThis->svga.cGMR);
 
         /* Free the old GMR if present. */
         vmsvgaGMRFree(pThis, idGMR);
@@ -1639,13 +1642,13 @@ PDMBOTHCBDECL(int) vmsvgaWritePort(PVGASTATE pThis, uint32_t u32)
         if (RT_SUCCESS(rc))
         {
             /* Commit the GMR. */
-            pSVGAState->aGMR[idGMR].paDesc         = paDescs;
-            pSVGAState->aGMR[idGMR].numDescriptors = iDesc;
-            pSVGAState->aGMR[idGMR].cMaxPages      = cPagesTotal;
-            pSVGAState->aGMR[idGMR].cbTotal        = cPagesTotal * PAGE_SIZE;
-            Assert((pSVGAState->aGMR[idGMR].cbTotal >> PAGE_SHIFT) == cPagesTotal);
+            pSVGAState->paGMR[idGMR].paDesc         = paDescs;
+            pSVGAState->paGMR[idGMR].numDescriptors = iDesc;
+            pSVGAState->paGMR[idGMR].cMaxPages      = cPagesTotal;
+            pSVGAState->paGMR[idGMR].cbTotal        = cPagesTotal * PAGE_SIZE;
+            Assert((pSVGAState->paGMR[idGMR].cbTotal >> PAGE_SHIFT) == cPagesTotal);
             Log(("Defined new gmr %x numDescriptors=%d cbTotal=%x (%#x pages)\n",
-                 idGMR, iDesc, pSVGAState->aGMR[idGMR].cbTotal, cPagesTotal));
+                 idGMR, iDesc, pSVGAState->paGMR[idGMR].cbTotal, cPagesTotal));
         }
         else
         {
@@ -2246,9 +2249,9 @@ vmsvgaR3GMRAccessHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void *pvPhys, v
 
     Log(("vmsvgaR3GMRAccessHandler: GMR access to page %RGp\n", GCPhys));
 
-    for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
+    for (uint32_t i = 0; i < pThis->svga.cGMR; ++i)
     {
-        PGMR pGMR = &pSVGAState->aGMR[i];
+        PGMR pGMR = &pSVGAState->paGMR[i];
 
         if (pGMR->numDescriptors)
         {
@@ -2277,7 +2280,7 @@ static DECLCALLBACK(int) vmsvgaRegisterGMR(PPDMDEVINS pDevIns, uint32_t gmrId)
 {
     PVGASTATE       pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     PVMSVGAR3STATE  pSVGAState = pThis->svga.pSvgaR3State;
-    PGMR pGMR = &pSVGAState->aGMR[gmrId];
+    PGMR pGMR = &pSVGAState->paGMR[gmrId];
     int rc;
 
     for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
@@ -2295,7 +2298,7 @@ static DECLCALLBACK(int) vmsvgaDeregisterGMR(PPDMDEVINS pDevIns, uint32_t gmrId)
 {
     PVGASTATE       pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     PVMSVGAR3STATE  pSVGAState = pThis->svga.pSvgaR3State;
-    PGMR pGMR = &pSVGAState->aGMR[gmrId];
+    PGMR pGMR = &pSVGAState->paGMR[gmrId];
 
     for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
     {
@@ -2310,9 +2313,9 @@ static DECLCALLBACK(int) vmsvgaResetGMRHandlers(PVGASTATE pThis)
 {
     PVMSVGAR3STATE pSVGAState = pThis->svga.pSvgaR3State;
 
-    for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
+    for (uint32_t i = 0; i < pThis->svga.cGMR; ++i)
     {
-        PGMR pGMR = &pSVGAState->aGMR[i];
+        PGMR pGMR = &pSVGAState->paGMR[i];
 
         if (pGMR->numDescriptors)
         {
@@ -2929,10 +2932,11 @@ static void *vmsvgaFIFOGetCmdPayload(uint32_t cbPayloadReq, uint32_t volatile *p
 
     /*
      * Do we have sufficient payload data available already?
+     * The host should not read beyond [SVGA_FIFO_NEXT_CMD], therefore '>=' in the condition below.
      */
     uint32_t cbAfter, cbBefore;
     uint32_t offNextCmd = pFIFO[SVGA_FIFO_NEXT_CMD];
-    if (offNextCmd > offCurrentCmd)
+    if (offNextCmd >= offCurrentCmd)
     {
         if (RT_LIKELY(offNextCmd < offFifoMax))
             cbAfter = offNextCmd - offCurrentCmd;
@@ -2978,7 +2982,7 @@ static void *vmsvgaFIFOGetCmdPayload(uint32_t cbPayloadReq, uint32_t volatile *p
             SUPSemEventWaitNoResume(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem, i < 16 ? 1 : 2);
 
             offNextCmd = pFIFO[SVGA_FIFO_NEXT_CMD];
-            if (offNextCmd > offCurrentCmd)
+            if (offNextCmd >= offCurrentCmd)
             {
                 cbAfter = RT_MIN(offNextCmd, offFifoMax) - offCurrentCmd;
                 cbBefore = 0;
@@ -3420,7 +3424,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineGmr2);
 
                 /* Validate current GMR id. */
-                AssertBreak(pCmd->gmrId < VMSVGA_MAX_GMR_IDS);
+                AssertBreak(pCmd->gmrId < pThis->svga.cGMR);
                 AssertBreak(pCmd->numPages <= VMSVGA_MAX_GMR_PAGES);
 
                 if (!pCmd->numPages)
@@ -3430,7 +3434,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 }
                 else
                 {
-                    PGMR pGMR = &pSVGAState->aGMR[pCmd->gmrId];
+                    PGMR pGMR = &pSVGAState->paGMR[pCmd->gmrId];
                     if (pGMR->cMaxPages)
                         STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineGmr2Modify);
 
@@ -3454,7 +3458,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdRemapGmr2);
 
                 Log(("vmsvgaFIFOLoop: SVGA_CMD_REMAP_GMR2 id=%x flags=%x offset=%x npages=%x\n", pCmd->gmrId, pCmd->flags, pCmd->offsetPages, pCmd->numPages));
-                AssertBreak(pCmd->gmrId < VMSVGA_MAX_GMR_IDS);
+                AssertBreak(pCmd->gmrId < pThis->svga.cGMR);
 
                 /* Calculate the size of what comes after next and fetch it. */
                 uint32_t cbCmd = sizeof(SVGAFifoCmdRemapGMR2);
@@ -3477,8 +3481,8 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                 VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRemapGMR2, cbCmd);
 
                 /* Validate current GMR id and size. */
-                AssertBreak(pCmd->gmrId < VMSVGA_MAX_GMR_IDS);
-                PGMR pGMR = &pSVGAState->aGMR[pCmd->gmrId];
+                AssertBreak(pCmd->gmrId < pThis->svga.cGMR);
+                PGMR pGMR = &pSVGAState->paGMR[pCmd->gmrId];
                 AssertBreak(   (uint64_t)pCmd->offsetPages + pCmd->numPages
                             <= RT_MIN(pGMR->cMaxPages, RT_MIN(VMSVGA_MAX_GMR_PAGES, UINT32_MAX / X86_PAGE_SIZE)));
                 AssertBreak(!pCmd->offsetPages || pGMR->paDesc); /** @todo */
@@ -4051,7 +4055,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                         VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
                         STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dDrawPrimitives);
 
-                        uint32_t cVertexDivisor = (pHdr->size - sizeof(*pCmd) - sizeof(SVGA3dVertexDecl) * pCmd->numVertexDecls - sizeof(SVGA3dPrimitiveRange) * pCmd->numRanges);
+                        uint32_t cVertexDivisor = (pHdr->size - sizeof(*pCmd) - sizeof(SVGA3dVertexDecl) * pCmd->numVertexDecls - sizeof(SVGA3dPrimitiveRange) * pCmd->numRanges) / sizeof(uint32_t);
                         Assert(pCmd->numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES);
                         Assert(pCmd->numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS);
                         Assert(!cVertexDivisor || cVertexDivisor == pCmd->numVertexDecls);
@@ -4208,7 +4212,7 @@ void vmsvgaGMRFree(PVGASTATE pThis, uint32_t idGMR)
     PVMSVGAR3STATE pSVGAState = pThis->svga.pSvgaR3State;
 
     /* Free the old descriptor if present. */
-    PGMR pGMR = &pSVGAState->aGMR[idGMR];
+    PGMR pGMR = &pSVGAState->paGMR[idGMR];
     if (   pGMR->numDescriptors
         || pGMR->paDesc /* needed till we implement SVGA_REMAP_GMR2_VIA_GMR */)
     {
@@ -4264,8 +4268,8 @@ int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType enmTransferType,
     }
     else
     {
-        AssertReturn(src.gmrId < VMSVGA_MAX_GMR_IDS, VERR_INVALID_PARAMETER);
-        pGMR = &pSVGAState->aGMR[src.gmrId];
+        AssertReturn(src.gmrId < pThis->svga.cGMR, VERR_INVALID_PARAMETER);
+        pGMR = &pSVGAState->paGMR[src.gmrId];
         cbGmrTotal = pGMR->cbTotal;
     }
 
@@ -4681,7 +4685,7 @@ static DECLCALLBACK(void) vmsvgaR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, c
  */
 int vmsvgaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
-    RT_NOREF(uVersion, uPass);
+    RT_NOREF(uPass);
     PVGASTATE       pThis = PDMINS_2_DATA(pDevIns, PVGASTATE);
     PVMSVGAR3STATE  pSVGAState = pThis->svga.pSvgaR3State;
     int             rc;
@@ -4724,10 +4728,31 @@ int vmsvgaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint3
         AssertRCReturn(rc, rc);
     }
 
-    /* Load the GMR state */
-    for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
+    /* Load the GMR state. */
+    uint32_t cGMR = 256; /* Hardcoded in previous saved state versions. */
+    if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_GMR_COUNT)
+    {
+        rc = SSMR3GetU32(pSSM, &cGMR);
+        AssertRCReturn(rc, rc);
+        /* Numbers of GMRs was never less than 256. 1MB is a large arbitrary limit. */
+        AssertLogRelMsgReturn(cGMR <= _1M && cGMR >= 256,
+                              ("cGMR=%#x - expected 256B..1MB\n", cGMR),
+                              VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
+    }
+
+    if (pThis->svga.cGMR != cGMR)
+    {
+        /* Reallocate GMR array. */
+        Assert(pSVGAState->paGMR != NULL);
+        RTMemFree(pSVGAState->paGMR);
+        pSVGAState->paGMR = (PGMR)RTMemAllocZ(cGMR * sizeof(GMR));
+        AssertReturn(pSVGAState->paGMR, VERR_NO_MEMORY);
+        pThis->svga.cGMR = cGMR;
+    }
+
+    for (uint32_t i = 0; i < cGMR; ++i)
     {
-        PGMR pGMR = &pSVGAState->aGMR[i];
+        PGMR pGMR = &pSVGAState->paGMR[i];
 
         rc = SSMR3GetStructEx(pSSM, pGMR, sizeof(*pGMR), 0, g_aGMRFields, NULL);
         AssertRCReturn(rc, rc);
@@ -4738,7 +4763,7 @@ int vmsvgaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint3
             pGMR->paDesc = (PVMSVGAGMRDESCRIPTOR)RTMemAllocZ(pGMR->numDescriptors * sizeof(VMSVGAGMRDESCRIPTOR));
             AssertReturn(pGMR->paDesc, VERR_NO_MEMORY);
 
-            for (uint32_t j = 0; j < pGMR->numDescriptors; j++)
+            for (uint32_t j = 0; j < pGMR->numDescriptors; ++j)
             {
                 rc = SSMR3GetStructEx(pSSM, &pGMR->paDesc[j], sizeof(pGMR->paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
                 AssertRCReturn(rc, rc);
@@ -4824,14 +4849,18 @@ int vmsvgaSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
     }
 
     /* Save the GMR state */
-    for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
+    rc = SSMR3PutU32(pSSM, pThis->svga.cGMR);
+    AssertLogRelRCReturn(rc, rc);
+    for (uint32_t i = 0; i < pThis->svga.cGMR; ++i)
     {
-        rc = SSMR3PutStructEx(pSSM, &pSVGAState->aGMR[i], sizeof(pSVGAState->aGMR[i]), 0, g_aGMRFields, NULL);
+        PGMR pGMR = &pSVGAState->paGMR[i];
+
+        rc = SSMR3PutStructEx(pSSM, pGMR, sizeof(*pGMR), 0, g_aGMRFields, NULL);
         AssertLogRelRCReturn(rc, rc);
 
-        for (uint32_t j = 0; j < pSVGAState->aGMR[i].numDescriptors; j++)
+        for (uint32_t j = 0; j < pGMR->numDescriptors; ++j)
         {
-            rc = SSMR3PutStructEx(pSSM, &pSVGAState->aGMR[i].paDesc[j], sizeof(pSVGAState->aGMR[i].paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
+            rc = SSMR3PutStructEx(pSSM, &pGMR->paDesc[j], sizeof(pGMR->paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
             AssertLogRelRCReturn(rc, rc);
         }
     }
@@ -4941,9 +4970,15 @@ int vmsvgaDestruct(PPDMDEVINS pDevIns)
         if (pSVGAState->Cursor.fActive)
             RTMemFree(pSVGAState->Cursor.pData);
 
-        for (unsigned i = 0; i < RT_ELEMENTS(pSVGAState->aGMR); i++)
-            if (pSVGAState->aGMR[i].paDesc)
-                RTMemFree(pSVGAState->aGMR[i].paDesc);
+        if (pSVGAState->paGMR)
+        {
+            for (unsigned i = 0; i < pThis->svga.cGMR; ++i)
+                if (pSVGAState->paGMR[i].paDesc)
+                    RTMemFree(pSVGAState->paGMR[i].paDesc);
+
+            RTMemFree(pSVGAState->paGMR);
+            pSVGAState->paGMR = NULL;
+        }
 
         RTMemFree(pSVGAState);
         pThis->svga.pSvgaR3State = NULL;
@@ -4991,6 +5026,10 @@ int vmsvgaInit(PPDMDEVINS pDevIns)
     AssertReturn(pThis->svga.pSvgaR3State, VERR_NO_MEMORY);
     pSVGAState = pThis->svga.pSvgaR3State;
 
+    pThis->svga.cGMR = VMSVGA_MAX_GMR_IDS;
+    pSVGAState->paGMR = (PGMR)RTMemAllocZ(pThis->svga.cGMR * sizeof(GMR));
+    AssertReturn(pSVGAState->paGMR, VERR_NO_MEMORY);
+
     /* Necessary for creating a backup of the text mode frame buffer when switching into svga mode. */
     pThis->svga.pbVgaFrameBufferR3 = (uint8_t *)RTMemAllocZ(VMSVGA_VGA_FB_BACKUP_SIZE);
     AssertReturn(pThis->svga.pbVgaFrameBufferR3, VERR_NO_MEMORY);
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.h b/src/VBox/Devices/Graphics/DevVGA-SVGA.h
index 4e9ef31..bf050f7 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA.h
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.h
@@ -3,7 +3,7 @@
  * VMware SVGA device
  */
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -36,7 +36,7 @@
 /** Maximum GMR pages. */
 #define VMSVGA_MAX_GMR_PAGES            0x100000
 /** Maximum nr of GMR ids. */
-#define VMSVGA_MAX_GMR_IDS              0x100
+#define VMSVGA_MAX_GMR_IDS              _8K
 /** Maximum number of GMR descriptors.  */
 #define VMSVGA_MAX_GMR_DESC_LOOP_COUNT  VMSVGA_MAX_GMR_PAGES
 
@@ -194,7 +194,7 @@ typedef struct VMSVGAState
     uint32_t                    u32RegCaps;
     /** Physical address of command mmio range. */
     RTIOPORT                    BasePort;
-    RTIOPORT                    Padding3;
+    RTIOPORT                    Padding0;
     /** Port io index register. */
     uint32_t                    u32IndexReg;
     /** The support driver session handle for use with FIFORequestSem. */
@@ -234,6 +234,9 @@ typedef struct VMSVGAState
     /** FIFO debug access handler type handle. */
     PGMPHYSHANDLERTYPE          hFifoAccessHandlerType;
 #endif
+    /** Number of GMRs. */
+    uint32_t                    cGMR;
+    uint32_t                    u32Padding1;
 
     /** Scratch array.
      * Putting this at the end since it's big it probably not . */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
index 6a6ec27..33b5359 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
index 4d493f8..5ba00b6 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2015 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp
index f5199b4..6fbc4e3 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -96,6 +96,8 @@ static const VMSVGAINFOENUM g_aSVGA3dSurfaceFormats[] =
     { SVGA3D_Z_DF16             , "Z_DF16" },
     { SVGA3D_Z_DF24             , "Z_DF24" },
     { SVGA3D_Z_D24S8_INT        , "Z_D24S8_INT" },
+    { SVGA3D_R8G8B8A8_SNORM     , "R8G8B8A8_SNORM" },
+    { SVGA3D_R16G16_UNORM       , "R16G16_UNORM" },
 };
 VMSVGAINFOENUMMAP_MAKE(RT_NOTHING, g_SVGA3dSurfaceFormat2String, g_aSVGA3dSurfaceFormats, "SVGA3D_");
 
@@ -266,10 +268,7 @@ static int vmsvga3dSurfaceUpdateHeapBuffers(PVMSVGA3DSTATE pState, PVMSVGA3DSURF
      * surfaces both for OpenGL and D3D, so skip these here (don't
      * wast memory on them).
      */
-    uint32_t const fSwitchFlags = pSurface->flags
-                                & (  SVGA3D_SURFACE_HINT_INDEXBUFFER  | SVGA3D_SURFACE_HINT_VERTEXBUFFER
-                                   | SVGA3D_SURFACE_HINT_TEXTURE      | SVGA3D_SURFACE_HINT_RENDERTARGET
-                                   | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP);
+    uint32_t const fSwitchFlags = pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
     if (   fSwitchFlags != SVGA3D_SURFACE_HINT_DEPTHSTENCIL
         && fSwitchFlags != (SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE))
     {
@@ -298,7 +297,7 @@ static int vmsvga3dSurfaceUpdateHeapBuffers(PVMSVGA3DSTATE pState, PVMSVGA3DSURF
 #endif
                 {
                     Assert(pMipmapLevel->cbSurface);
-                    Assert(pMipmapLevel->cbSurface == pMipmapLevel->cbSurfacePitch * pMipmapLevel->size.height); /* correct for depth stuff? */
+                    Assert(pMipmapLevel->cbSurface == pMipmapLevel->cbSurfacePlane * pMipmapLevel->mipmapSize.depth);
 
                     /*
                      * Make sure we've got surface memory buffer.
@@ -314,23 +313,37 @@ static int vmsvga3dSurfaceUpdateHeapBuffers(PVMSVGA3DSTATE pState, PVMSVGA3DSURF
                     /*
                      * D3D specifics.
                      */
-                    HRESULT  hr;
-                    switch (fSwitchFlags)
+                    Assert(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_NONE);
+
+                    HRESULT hr;
+                    switch (pSurface->enmD3DResType)
                     {
-                        case SVGA3D_SURFACE_HINT_TEXTURE:
-                        case SVGA3D_SURFACE_HINT_RENDERTARGET:
-                        case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+                            AssertFailed(); /// @todo
+                            break;
+
+                        case VMSVGA3D_D3DRESTYPE_SURFACE:
+                        case VMSVGA3D_D3DRESTYPE_TEXTURE:
+                        case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
                         {
                             /*
                              * Lock the buffer and make it accessible to memcpy.
                              */
                             D3DLOCKED_RECT LockedRect;
-                            if (fSwitchFlags & SVGA3D_SURFACE_HINT_TEXTURE)
+                            if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+                            {
+                                hr = pSurface->u.pCubeTexture->LockRect(vmsvga3dCubemapFaceFromIndex(iFace),
+                                                                        i, /* texture level */
+                                                                        &LockedRect,
+                                                                        NULL,
+                                                                        D3DLOCK_READONLY);
+                            }
+                            else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
                             {
                                 if (pSurface->bounce.pTexture)
                                 {
                                     if (    !pSurface->fDirty
-                                        &&  fSwitchFlags == (SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET)
+                                        &&  RT_BOOL(fSwitchFlags & SVGA3D_SURFACE_HINT_RENDERTARGET)
                                         &&  i == 0 /* only the first time */)
                                     {
                                         /** @todo stricter checks for associated context */
@@ -381,7 +394,7 @@ static int vmsvga3dSurfaceUpdateHeapBuffers(PVMSVGA3DSTATE pState, PVMSVGA3DSURF
                             if (pMipmapLevel->cbSurfacePitch == (uint32_t)LockedRect.Pitch)
                                 memcpy(pbDst, LockedRect.pBits, pMipmapLevel->cbSurface);
                             else
-                                for (uint32_t j = 0; j < pMipmapLevel->size.height; j++)
+                                for (uint32_t j = 0; j < pMipmapLevel->cBlocksY; j++)
                                     memcpy(pbDst + j * pMipmapLevel->cbSurfacePitch,
                                            (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch,
                                            pMipmapLevel->cbSurfacePitch);
@@ -405,34 +418,31 @@ static int vmsvga3dSurfaceUpdateHeapBuffers(PVMSVGA3DSTATE pState, PVMSVGA3DSURF
                             break;
                         }
 
-                        case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+                        case VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER:
+                        case VMSVGA3D_D3DRESTYPE_INDEX_BUFFER:
                         {
-                            void *pvD3DData = NULL;
-                            hr = pSurface->u.pVertexBuffer->Lock(0, 0, &pvD3DData, D3DLOCK_READONLY);
-                            AssertMsgReturn(hr == D3D_OK, ("Lock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
-
-                            memcpy(pbDst, pvD3DData, pMipmapLevel->cbSurface);
-
-                            hr = pSurface->u.pVertexBuffer->Unlock();
-                            AssertMsg(hr == D3D_OK, ("Unlock vertex failed with %x\n", hr));
-                            break;
-                        }
+                            /* Current type of the buffer. */
+                            const bool fVertex = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER);
 
-                        case SVGA3D_SURFACE_HINT_INDEXBUFFER:
-                        {
                             void *pvD3DData = NULL;
-                            hr = pSurface->u.pIndexBuffer->Lock(0, 0, &pvD3DData, D3DLOCK_READONLY);
-                            AssertMsgReturn(hr == D3D_OK, ("Lock index failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                            if (fVertex)
+                                hr = pSurface->u.pVertexBuffer->Lock(0, 0, &pvD3DData, D3DLOCK_READONLY);
+                            else
+                                hr = pSurface->u.pIndexBuffer->Lock(0, 0, &pvD3DData, D3DLOCK_READONLY);
+                            AssertMsgReturn(hr == D3D_OK, ("Lock %s failed with %x\n", fVertex ? "vertex" : "index", hr), VERR_INTERNAL_ERROR);
 
                             memcpy(pbDst, pvD3DData, pMipmapLevel->cbSurface);
 
-                            hr = pSurface->u.pIndexBuffer->Unlock();
-                            AssertMsg(hr == D3D_OK, ("Unlock index failed with %x\n", hr));
+                            if (fVertex)
+                                hr = pSurface->u.pVertexBuffer->Unlock();
+                            else
+                                hr = pSurface->u.pIndexBuffer->Unlock();
+                            AssertMsg(hr == D3D_OK, ("Unlock %s failed with %x\n", fVertex ? "vertex" : "index", hr));
                             break;
                         }
 
                         default:
-                            AssertMsgFailed(("%#x\n", fSwitchFlags));
+                            AssertMsgFailed(("flags %#x, type %d\n", fSwitchFlags, pSurface->enmD3DResType));
                     }
 
 #elif defined(VMSVGA3D_OPENGL)
@@ -471,6 +481,7 @@ static int vmsvga3dSurfaceUpdateHeapBuffers(PVMSVGA3DSTATE pState, PVMSVGA3DSURF
                             break;
                         }
 
+                        case SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_INDEXBUFFER:
                         case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
                         case SVGA3D_SURFACE_HINT_INDEXBUFFER:
                         {
@@ -844,7 +855,7 @@ void vmsvga3dAsciiPrint(PFMVMSVGAASCIIPRINTLN pfnPrintLine, void *pvUser, void c
     uint32_t cyPerChar = cy / cchMaxY + 1;
     /** @todo try keep aspect...   */
     uint32_t const cchLine = (cx + cxPerChar - 1) / cxPerChar;
-    uint32_t const cbSrcPixel = vmsvga3dSurfaceFormatSize(enmFormat);
+    uint32_t const cbSrcPixel = vmsvga3dSurfaceFormatSize(enmFormat, NULL, NULL);
 
     /*
      * The very simple conversion we're doing in this function is based on
@@ -1542,9 +1553,9 @@ static void vmsvga3dInfoContextWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DCONTEXT pC
 #endif
     pHlp->pfnPrintf(pHlp, "sidRenderTarget:         %#x\n", pContext->sidRenderTarget);
 
-    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
-        if (pContext->aSidActiveTexture[i] != SVGA3D_INVALID_ID)
-            pHlp->pfnPrintf(pHlp, "aSidActiveTexture[%u]:    %#x\n", i, pContext->aSidActiveTexture[i]);
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++)
+        if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
+            pHlp->pfnPrintf(pHlp, "aSidActiveTextures[%u]:    %#x\n", i, pContext->aSidActiveTextures[i]);
 
     pHlp->pfnPrintf(pHlp, "fUpdateFlags:            %#x\n", pContext->state.u32UpdateFlags);
 
@@ -1553,11 +1564,11 @@ static void vmsvga3dInfoContextWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DCONTEXT pC
             pHlp->pfnPrintf(pHlp, "aRenderState[%3d]: %s\n", i,
                             vmsvga3dFormatRenderState(szTmp, sizeof(szTmp), &pContext->state.aRenderState[i]));
 
-    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aTextureState); i++)
-        for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureState[i]); j++)
-            if (pContext->state.aTextureState[i][j].name != SVGA3D_TS_INVALID)
-                pHlp->pfnPrintf(pHlp, "aTextureState[%3d][%3d]: %s\n", i, j,
-                                vmsvga3dFormatTextureState(szTmp, sizeof(szTmp), &pContext->state.aTextureState[i][j]));
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aTextureStates); i++)
+        for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[i]); j++)
+            if (pContext->state.aTextureStates[i][j].name != SVGA3D_TS_INVALID)
+                pHlp->pfnPrintf(pHlp, "aTextureStates[%3d][%3d]: %s\n", i, j,
+                                vmsvga3dFormatTextureState(szTmp, sizeof(szTmp), &pContext->state.aTextureStates[i][j]));
 
     AssertCompile(RT_ELEMENTS(g_apszTransformTypes) == SVGA3D_TRANSFORM_MAX);
     for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aTransformState); i++)
@@ -1814,8 +1825,8 @@ static void vmsvga3dInfoSurfaceWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DSURFACE pS
 #endif
     pHlp->pfnPrintf(pHlp, "Format:                  %s\n",
                     vmsvgaFormatEnumValueEx(szTmp, sizeof(szTmp), NULL, (int)pSurface->format, false, &g_SVGA3dSurfaceFormat2String));
-    pHlp->pfnPrintf(pHlp, "Flags:                   %#x", pSurface->flags);
-    vmsvga3dInfoU32Flags(pHlp, pSurface->flags, "SVGA3D_SURFACE_", g_aSvga3DSurfaceFlags, RT_ELEMENTS(g_aSvga3DSurfaceFlags));
+    pHlp->pfnPrintf(pHlp, "Flags:                   %#x", pSurface->surfaceFlags);
+    vmsvga3dInfoU32Flags(pHlp, pSurface->surfaceFlags, "SVGA3D_SURFACE_", g_aSvga3DSurfaceFlags, RT_ELEMENTS(g_aSvga3DSurfaceFlags));
     pHlp->pfnPrintf(pHlp, "\n");
     if (pSurface->cFaces == 0)
         pHlp->pfnPrintf(pHlp, "Faces:                   %u\n", pSurface->cFaces);
@@ -1830,9 +1841,9 @@ static void vmsvga3dInfoSurfaceWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DSURFACE pS
         {
             pHlp->pfnPrintf(pHlp, "Face #%u, mipmap #%u[%u]:%s  cx=%u, cy=%u, cz=%u, cbSurface=%#x, cbPitch=%#x",
                             iFace, iLevel, iMipmap, iMipmap < 10 ? " " : "",
-                            pSurface->pMipmapLevels[iMipmap].size.width,
-                            pSurface->pMipmapLevels[iMipmap].size.height,
-                            pSurface->pMipmapLevels[iMipmap].size.depth,
+                            pSurface->pMipmapLevels[iMipmap].mipmapSize.width,
+                            pSurface->pMipmapLevels[iMipmap].mipmapSize.height,
+                            pSurface->pMipmapLevels[iMipmap].mipmapSize.depth,
                             pSurface->pMipmapLevels[iMipmap].cbSurface,
                             pSurface->pMipmapLevels[iMipmap].cbSurfacePitch);
             if (pSurface->pMipmapLevels[iMipmap].pSurfaceData)
@@ -1889,14 +1900,14 @@ static void vmsvga3dInfoSurfaceWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DSURFACE pS
                     {
                         pHlp->pfnPrintf(pHlp, "--- Face #%u, mipmap #%u[%u]: cx=%u, cy=%u, cz=%u ---\n",
                                         iFace, iLevel, iMipmap,
-                                        pSurface->pMipmapLevels[iMipmap].size.width,
-                                        pSurface->pMipmapLevels[iMipmap].size.height,
-                                        pSurface->pMipmapLevels[iMipmap].size.depth);
+                                        pSurface->pMipmapLevels[iMipmap].mipmapSize.width,
+                                        pSurface->pMipmapLevels[iMipmap].mipmapSize.height,
+                                        pSurface->pMipmapLevels[iMipmap].mipmapSize.depth);
                         vmsvga3dAsciiPrint(vmsvga3dAsciiPrintlnInfo, (void *)pHlp,
                                            pSurface->pMipmapLevels[iMipmap].pSurfaceData,
                                            pSurface->pMipmapLevels[iMipmap].cbSurface,
-                                           pSurface->pMipmapLevels[iMipmap].size.width,
-                                           pSurface->pMipmapLevels[iMipmap].size.height,
+                                           pSurface->pMipmapLevels[iMipmap].mipmapSize.width,
+                                           pSurface->pMipmapLevels[iMipmap].mipmapSize.height,
                                            pSurface->pMipmapLevels[iMipmap].cbSurfacePitch,
                                            pSurface->format,
                                            fInvY,
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h
index 5fa1484..75045ca 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -395,13 +395,19 @@ typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname,
  */
 typedef struct VMSVGA3DMIPMAPLEVEL
 {
-    /** The mipmap size. */
-    SVGA3dSize              size;
-    /** The size (in bytes) of the mimap data when using the format the surface was
-     *  defined with. */
-    uint32_t                cbSurface;
-    /** The scanline/pitch size in bytes. */
+    /** The mipmap size: width, height and depth. */
+    SVGA3dSize              mipmapSize;
+    /** Width in blocks: (width + cxBlock - 1) / cxBlock. SSM: not saved, recalculated on load. */
+    uint32_t                cBlocksX;
+    /** Height in blocks: (height + cyBlock - 1) / cyBlock. SSM: not saved, recalculated on load. */
+    uint32_t                cBlocksY;
+    /** The scanline/pitch size in bytes: at least cBlocksX * cbBlock. */
     uint32_t                cbSurfacePitch;
+    /** The size (in bytes) of the mipmap plane: cbSurfacePitch * cBlocksY */
+    uint32_t                cbSurfacePlane;
+    /** The size (in bytes) of the mipmap data when using the format the surface was
+     *  defined with: cbSurfacePlane * mipmapSize.z */
+    uint32_t                cbSurface;
     /** Pointer to the mipmap bytes (cbSurface).  Often NULL.  If the surface has
      * been realized in hardware, this may be outdated. */
     void                   *pSurfaceData;
@@ -419,7 +425,7 @@ typedef VMSVGA3DMIPMAPLEVEL *PVMSVGA3DMIPMAPLEVEL;
  */
 static SSMFIELD const g_aVMSVGA3DMIPMAPLEVELFields[] =
 {
-    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, size),
+    SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, mipmapSize),
     SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, cbSurface),
     SSMFIELD_ENTRY(                 VMSVGA3DMIPMAPLEVEL, cbSurfacePitch),
     SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DMIPMAPLEVEL, pSurfaceData),
@@ -479,6 +485,19 @@ static SSMFIELD const g_aVMSVGASHADERCONSTFields[] =
 #endif
 
 #ifdef VMSVGA3D_DIRECT3D
+
+/* What kind of Direct3D resource has been created for the VMSVGA3D surface. */
+typedef enum VMSVGA3DD3DRESTYPE
+{
+    VMSVGA3D_D3DRESTYPE_NONE           = 0,
+    VMSVGA3D_D3DRESTYPE_SURFACE        = 1,
+    VMSVGA3D_D3DRESTYPE_TEXTURE        = 2,
+    VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE   = 3,
+    VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE = 4,
+    VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER  = 5,
+    VMSVGA3D_D3DRESTYPE_INDEX_BUFFER   = 6
+} VMSVGA3DD3DRESTYPE;
+
 /**
  *
  */
@@ -491,6 +510,7 @@ typedef struct
         IDirect3DSurface9          *pSurface;
         IDirect3DTexture9          *pTexture;
         IDirect3DCubeTexture9      *pCubeTexture;
+        IDirect3DVolumeTexture9    *pVolumeTexture;
     } u;
 } VMSVGA3DSHAREDSURFACE;
 typedef VMSVGA3DSHAREDSURFACE *PVMSVGA3DSHAREDSURFACE;
@@ -507,7 +527,7 @@ typedef struct VMSVGA3DSURFACE
 #else
     uint32_t                idAssociatedContext;
 #endif
-    uint32_t                flags;
+    uint32_t                surfaceFlags;
     SVGA3dSurfaceFormat     format;
 #ifdef VMSVGA3D_OPENGL
     GLint                   internalFormatGL;
@@ -533,6 +553,10 @@ typedef struct VMSVGA3DSURFACE
 #endif
 
     uint32_t                cbBlock;        /* block/pixel size in bytes */
+    /* Dimensions of the surface block, usually 1x1 except for compressed formats. */
+    uint32_t                cxBlock;        /* Block width in pixels. SSM: not saved, recalculated on load. */
+    uint32_t                cyBlock;        /* Block height in pixels. SSM: not saved, recalculated on load. */
+
     /* Dirty state; surface was manually updated. */
     bool                    fDirty;
 
@@ -541,22 +565,26 @@ typedef struct VMSVGA3DSURFACE
     HANDLE                  hSharedObject;
     /** Event query inserted after each GPU operation that updates or uses this surface. */
     IDirect3DQuery9        *pQuery;
+    /* The type of actually created D3D resource. */
+    VMSVGA3DD3DRESTYPE      enmD3DResType;
     union
     {
         IDirect3DSurface9          *pSurface;
-        IDirect3DCubeTexture9      *pCubeTexture;
-        IDirect3DIndexBuffer9      *pIndexBuffer;
         IDirect3DTexture9          *pTexture;
+        IDirect3DCubeTexture9      *pCubeTexture;
+        IDirect3DVolumeTexture9    *pVolumeTexture;
         IDirect3DVertexBuffer9     *pVertexBuffer;
+        IDirect3DIndexBuffer9      *pIndexBuffer;
     } u;
     union
     {
         IDirect3DTexture9          *pTexture;
+        IDirect3DCubeTexture9      *pCubeTexture;
+        IDirect3DVolumeTexture9    *pVolumeTexture;
     } bounce;
     /** AVL tree containing VMSVGA3DSHAREDSURFACE structures. */
     AVLU32TREE              pSharedObjectTree;
     bool                    fStencilAsTexture;
-    uint32_t                fu32ActualUsageFlags;
 #endif
 } VMSVGA3DSURFACE;
 /** Pointer to a 3d surface. */
@@ -574,7 +602,7 @@ static SSMFIELD const g_aVMSVGA3DSURFACEFields[] =
 # else
     SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idAssociatedContext),
 # endif
-    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, flags),
+    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, surfaceFlags),
     SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, format),
 # ifdef VMSVGA3D_OPENGL
     SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, internalFormatGL),
@@ -675,6 +703,51 @@ static SSMFIELD const g_aVMSVGA3DSHADERFields[] =
 #define VMSVGA3D_UPDATE_MATERIAL       RT_BIT_32(6)
 /** @} */
 
+/* Query states. Mostly used for saved state. */
+typedef enum VMSVGA3DQUERYSTATE
+{
+    VMSVGA3DQUERYSTATE_NULL     = 0,  /* Not created. */
+    VMSVGA3DQUERYSTATE_SIGNALED = 1,  /* Result obtained. The guest may or may not read the result yet. */
+    VMSVGA3DQUERYSTATE_BUILDING = 2,  /* In process of collecting data. */
+    VMSVGA3DQUERYSTATE_ISSUED   = 3,  /* Data collected, but result is not yet obtained. */
+    VMSVGA3DQUERYSTATE_32BIT    = 0x7fffffff
+} VMSVGA3DQUERYSTATE;
+AssertCompileSize(VMSVGA3DQUERYSTATE, sizeof(uint32_t));
+
+typedef struct VMSVGA3DQUERY
+{
+#ifdef VMSVGA3D_DIRECT3D
+    IDirect3DQuery9    *pQuery;
+#else /* VMSVGA3D_OPENGL */
+    GLuint              idQuery;
+#endif
+    VMSVGA3DQUERYSTATE  enmQueryState;  /* VMSVGA3DQUERYSTATE_*. State is implicitly _NULL if pQuery is NULL. */
+    uint32_t            u32QueryResult; /* Generic result. Enough for all VGPU9 queries. */
+} VMSVGA3DQUERY;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGA3DQUERY structure.
+ */
+static SSMFIELD const g_aVMSVGA3DQUERYFields[] =
+{
+#ifdef VMSVGA3D_DIRECT3D
+    SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DQUERY, pQuery),
+#else /* VMSVGA3D_OPENGL */
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DQUERY, idQuery),
+#endif
+    SSMFIELD_ENTRY(                 VMSVGA3DQUERY, enmQueryState),
+    SSMFIELD_ENTRY(                 VMSVGA3DQUERY, u32QueryResult),
+    SSMFIELD_ENTRY_TERM()
+};
+#endif
+
+#ifdef VMSVGA3D_DIRECT3D
+#define VMSVGA3DQUERY_EXISTS(p) ((p)->pQuery && (p)->enmQueryState != VMSVGA3DQUERYSTATE_NULL)
+#else
+#define VMSVGA3DQUERY_EXISTS(p) ((p)->idQuery && (p)->enmQueryState != VMSVGA3DQUERYSTATE_NULL)
+#endif
+
 /**
  * VMSVGA3d context.
  */
@@ -724,7 +797,7 @@ typedef struct VMSVGA3DCONTEXT
     /* Current active render target (if any) */
     uint32_t                sidRenderTarget;
     /* Current selected texture surfaces (if any) */
-    uint32_t                aSidActiveTexture[SVGA3D_MAX_TEXTURE_STAGE];
+    uint32_t                aSidActiveTextures[SVGA3D_MAX_SAMPLERS];
     /* Per context pixel and vertex shaders. */
     uint32_t                cPixelShaders;
     PVMSVGA3DSHADER         paPixelShader;
@@ -737,7 +810,8 @@ typedef struct VMSVGA3DCONTEXT
         uint32_t                u32UpdateFlags;
 
         SVGA3dRenderState       aRenderState[SVGA3D_RS_MAX];
-        SVGA3dTextureState      aTextureState[SVGA3D_MAX_TEXTURE_STAGE][SVGA3D_TS_MAX];
+        /* aTextureStates contains both TextureStageStates and SamplerStates, therefore [SVGA3D_MAX_SAMPLERS]. */
+        SVGA3dTextureState      aTextureStates[SVGA3D_MAX_SAMPLERS][SVGA3D_TS_MAX];
         VMSVGATRANSFORMSTATE    aTransformState[SVGA3D_TRANSFORM_MAX];
         VMSVGAMATERIALSTATE     aMaterial[SVGA3D_FACE_MAX];
         VMSVGACLIPPLANESTATE    aClipPlane[SVGA3D_CLIPPLANE_MAX];
@@ -755,6 +829,9 @@ typedef struct VMSVGA3DCONTEXT
         uint32_t                cVertexShaderConst;
         PVMSVGASHADERCONST      paVertexShaderConst;
     } state;
+
+    /* Occlusion query. */
+    VMSVGA3DQUERY occlusion;
 } VMSVGA3DCONTEXT;
 /** Pointer to a VMSVGA3d context. */
 typedef VMSVGA3DCONTEXT *PVMSVGA3DCONTEXT;
@@ -794,7 +871,7 @@ static SSMFIELD const g_aVMSVGA3DCONTEXTFields[] =
 #endif
 
     SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, sidRenderTarget),
-    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, aSidActiveTexture),
+    SSMFIELD_ENTRY_IGNORE(          VMSVGA3DCONTEXT, aSidActiveTextures),
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, cPixelShaders),
     SSMFIELD_ENTRY_IGN_HCPTR(       VMSVGA3DCONTEXT, paPixelShader),
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, cVertexShaders),
@@ -802,7 +879,8 @@ static SSMFIELD const g_aVMSVGA3DCONTEXTFields[] =
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.u32UpdateFlags),
 
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aRenderState),
-    SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aTextureState),
+    SSMFIELD_ENTRY_OLD(             state.aTextureStates,
+                                    sizeof(SVGA3dTextureState) * /*SVGA3D_MAX_TEXTURE_STAGE=*/ 8 * /*SVGA3D_TS_MAX=*/ 30),
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aTransformState),
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aMaterial),
     SSMFIELD_ENTRY(                 VMSVGA3DCONTEXT, state.aClipPlane),
@@ -919,6 +997,11 @@ typedef struct VMSVGA3DSTATE
         PFNGLGETPROGRAMIVARBPROC                        glGetProgramivARB;
         PFNGLPROVOKINGVERTEXPROC                        glProvokingVertex;
         bool                                            fEXT_stencil_two_side;
+        PFNGLGENQUERIESPROC                             glGenQueries;
+        PFNGLDELETEQUERIESPROC                          glDeleteQueries;
+        PFNGLBEGINQUERYPROC                             glBeginQuery;
+        PFNGLENDQUERYPROC                               glEndQuery;
+        PFNGLGETQUERYOBJECTUIVPROC                      glGetQueryObjectuiv;
     } ext;
 
     struct
@@ -1050,11 +1133,12 @@ int vmsvga3dSaveShaderConst(PVMSVGA3DCONTEXT pContext, uint32_t reg, SVGA3dShade
 /* Command implementation workers. */
 void vmsvga3dBackSurfaceDestroy(PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface);
 int  vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
-                                   PVMSVGA3DSURFACE pDstSurface, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
-                                   PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+                                   PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+                                   PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
                                    SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext);
-int  vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface, uint32_t uHostMimap,
-                                   SVGAGuestPtr GuestPtr, uint32_t cbSrcPitch, SVGA3dTransferType transfer,
+int  vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+                                   PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+                                   SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
                                    SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox);
 
 int  vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext,
@@ -1066,5 +1150,70 @@ void vmsvgaClipCopyBox(const SVGA3dSize *pSizeSrc,
 void vmsvgaClipBox(const SVGA3dSize *pSize,
                    SVGA3dBox *pBox);
 
+DECLINLINE(int) vmsvga3dContextFromCid(PVMSVGA3DSTATE pState, uint32_t cid, PVMSVGA3DCONTEXT *ppContext)
+{
+    /** @todo stricter checks for associated context */
+    if (   cid >= pState->cContexts
+        || pState->papContexts[cid]->id != cid)
+    {
+        Log(("vmsvga3dSurfaceCopy invalid context id!\n"));
+        return VERR_INVALID_PARAMETER;
+    }
+
+    *ppContext = pState->papContexts[cid];
+    return VINF_SUCCESS;
+}
+
+DECLINLINE(int) vmsvga3dSurfaceFromSid(PVMSVGA3DSTATE pState, uint32_t sid, PVMSVGA3DSURFACE *ppSurface)
+{
+    Assert(sid < SVGA3D_MAX_SURFACE_IDS);
+    AssertReturn(sid < pState->cSurfaces, VERR_INVALID_PARAMETER);
+    PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+    AssertReturn(pSurface && pSurface->id == sid, VERR_INVALID_PARAMETER);
+    *ppSurface = pSurface;
+    return VINF_SUCCESS;
+}
+
+DECLINLINE(int) vmsvga3dMipmapLevel(PVMSVGA3DSURFACE pSurface, uint32_t face, uint32_t mipmap,
+                                    PVMSVGA3DMIPMAPLEVEL *ppMipmapLevel)
+{
+    /* Can use faces[0].numMipLevels, because numMipLevels is the same for all faces. */
+    const uint32_t numMipLevels = pSurface->faces[0].numMipLevels;
+
+    AssertMsgReturn(face < pSurface->cFaces,
+                    ("cFaces %d, face %d\n", pSurface->cFaces, face),
+                    VERR_INVALID_PARAMETER);
+    AssertMsgReturn(mipmap < numMipLevels,
+                    ("numMipLevels %d, mipmap %d", numMipLevels, mipmap),
+                    VERR_INVALID_PARAMETER);
+
+    *ppMipmapLevel = &pSurface->pMipmapLevels[face * numMipLevels + mipmap];
+    return VINF_SUCCESS;
+}
+
+#ifdef VMSVGA3D_DIRECT3D
+DECLINLINE(D3DCUBEMAP_FACES) vmsvga3dCubemapFaceFromIndex(uint32_t iFace)
+{
+    D3DCUBEMAP_FACES Face;
+    switch (iFace)
+    {
+        case 0: Face = D3DCUBEMAP_FACE_POSITIVE_X; break;
+        case 1: Face = D3DCUBEMAP_FACE_NEGATIVE_X; break;
+        case 2: Face = D3DCUBEMAP_FACE_POSITIVE_Y; break;
+        case 3: Face = D3DCUBEMAP_FACE_NEGATIVE_Y; break;
+        case 4: Face = D3DCUBEMAP_FACE_POSITIVE_Z; break;
+        default:
+        case 5: Face = D3DCUBEMAP_FACE_NEGATIVE_Z; break;
+    }
+    return Face;
+}
+#endif /* VMSVGA3D_DIRECT3D */
+
+int vmsvga3dOcclusionQueryCreate(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext);
+int vmsvga3dOcclusionQueryDelete(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext);
+int vmsvga3dOcclusionQueryBegin(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext);
+int vmsvga3dOcclusionQueryEnd(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext);
+int vmsvga3dOcclusionQueryGetData(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels);
+
 #endif
 
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
index b7672eb..d4a00c4 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -84,7 +84,7 @@ static void *MyNSGLGetProcAddress(const char *pszSymbol)
 #endif
 
 /* Invert y-coordinate for OpenGL's bottom left origin. */
-#define D3D_TO_OGL_Y_COORD(ptrSurface, y_coordinate)                (ptrSurface->pMipmapLevels[0].size.height - (y_coordinate))
+#define D3D_TO_OGL_Y_COORD(ptrSurface, y_coordinate)                (ptrSurface->pMipmapLevels[0].mipmapSize.height - (y_coordinate))
 #define D3D_TO_OGL_Y_COORD_MIPLEVEL(ptrMipLevel, y_coordinate)      (ptrMipLevel->size.height - (y_coordinate))
 
 //#define MANUAL_FLIP_SURFACE_DATA
@@ -785,6 +785,23 @@ int vmsvga3dPowerOn(PVGASTATE pThis)
     pState->ext.fEXT_stencil_two_side = vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_stencil_two_side ");
 #endif
 
+#define GLGETPROC(ProcType, ProcName) do { \
+    pState->ext.ProcName = (ProcType)OGLGETPROCADDRESS(#ProcName); \
+    AssertMsgReturn(pState->ext.ProcName, (#ProcName " missing"), VERR_NOT_IMPLEMENTED); \
+} while(0)
+#define GLGETPROCOPT(ProcType, ProcName) do { \
+    pState->ext.ProcName = (ProcType)OGLGETPROCADDRESS(#ProcName); \
+    AssertMsg(pState->ext.ProcName, (#ProcName " missing (optional)")); \
+} while(0)
+
+        GLGETPROCOPT(PFNGLGENQUERIESPROC                       , glGenQueries);
+        GLGETPROCOPT(PFNGLDELETEQUERIESPROC                    , glDeleteQueries);
+        GLGETPROCOPT(PFNGLBEGINQUERYPROC                       , glBeginQuery);
+        GLGETPROCOPT(PFNGLENDQUERYPROC                         , glEndQuery);
+        GLGETPROCOPT(PFNGLGETQUERYOBJECTUIVPROC                , glGetQueryObjectuiv);
+
+#undef GLGETPROCOPT
+#undef GLGETPROC
     /*
      * Initialize the capabilities with sensible defaults.
      */
@@ -1854,7 +1871,7 @@ void vmsvga3dBackSurfaceDestroy(PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface
     PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
     VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
 
-    switch (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
+    switch (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
     {
     case SVGA3D_SURFACE_CUBEMAP:
         AssertFailed(); /** @todo destroy SVGA3D_SURFACE_CUBEMAP */
@@ -1890,7 +1907,7 @@ void vmsvga3dBackSurfaceDestroy(PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface
         break;
 
     default:
-        AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface), ("type=%x\n", (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
+        AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface), ("type=%x\n", (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
         break;
     }
 }
@@ -2101,8 +2118,8 @@ int vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
         glTexImage2D(GL_TEXTURE_2D,
                         i,
                         pSurface->internalFormatGL,
-                        pSurface->pMipmapLevels[i].size.width,
-                        pSurface->pMipmapLevels[i].size.height,
+                        pSurface->pMipmapLevels[i].mipmapSize.width,
+                        pSurface->pMipmapLevels[i].mipmapSize.height,
                         0,
                         pSurface->formatGL,
                         pSurface->typeGL,
@@ -2121,7 +2138,7 @@ int vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
     glBindTexture(GL_TEXTURE_2D, activeTexture);
     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
 
-    pSurface->flags              |= SVGA3D_SURFACE_HINT_TEXTURE;
+    pSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_TEXTURE;
 
     if (idPrevCtx < pState->cContexts && pState->papContexts[idPrevCtx]->id == idPrevCtx)
         VMSVGA3D_SET_CURRENT_CONTEXT(pState, pState->papContexts[idPrevCtx]);
@@ -2136,20 +2153,23 @@ int vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
  * @param   pThis               The VGA device instance.
  * @param   pState              The VMSVGA3d state.
  * @param   pDstSurface         The destination host surface.
+ * @param   uDstFace            The destination face (valid).
  * @param   uDstMipmap          The destination mipmap level (valid).
  * @param   pDstBox             The destination box.
  * @param   pSrcSurface         The source host surface.
+ * @param   uSrcFace            The destination face (valid).
  * @param   uSrcMipmap          The source mimap level (valid).
  * @param   pSrcBox             The source box.
  * @param   enmMode             The strecht blt mode .
  * @param   pContext            The VMSVGA3d context (already current for OGL).
  */
 int vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
-                                  PVMSVGA3DSURFACE pDstSurface, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
-                                  PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+                                  PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+                                  PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
                                   SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext)
 {
     RT_NOREF(pThis);
+    RT_NOREF2(uDstFace, uSrcFace); /// @todo
 
     /* Activate the read and draw framebuffer objects. */
     pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer);
@@ -2321,23 +2341,26 @@ void vmsvga3dOglRestorePackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pConte
  * @param   pThis               The VGA device instance data.
  * @param   pState              The VMSVGA3d state.
  * @param   pSurface            The host surface.
+ * @param   pMipLevel           Mipmap level. The caller knows it already.
+ * @param   uHostFace           The host face (valid).
  * @param   uHostMipmap         The host mipmap level (valid).
  * @param   GuestPtr            The guest pointer.
- * @param   cbSrcPitch          The guest (?) pitch.
+ * @param   cbGuestPitch        The guest pitch.
  * @param   transfer            The transfer direction.
  * @param   pBox                The box to copy.
  * @param   pContext            The context (for OpenGL).
  * @param   rc                  The current rc for all boxes.
  * @param   iBox                The current box number (for Direct 3D).
  */
-int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface, uint32_t uHostMipmap,
-                                  SVGAGuestPtr GuestPtr, uint32_t cbSrcPitch, SVGA3dTransferType transfer,
+int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+                                  PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+                                  SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
                                   SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox)
 {
     RT_NOREF(iBox);
-    PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->pMipmapLevels[uHostMipmap];
+    RT_NOREF(uHostFace); /// @todo
 
-    switch (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
+    switch (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
     {
     case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
     case SVGA3D_SURFACE_HINT_TEXTURE:
@@ -2414,8 +2437,8 @@ int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVG
                                (int32_t)cbSurfacePitch,
 #endif
                                GuestPtr,
-                               pBox->srcx * pSurface->cbBlock + pBox->srcy * cbSrcPitch,
-                               cbSrcPitch,
+                               pBox->srcx * pSurface->cbBlock + pBox->srcy * cbGuestPitch, /// @todo compressed fmts
+                               cbGuestPitch,
                                pBox->w * pSurface->cbBlock,
                                pBox->h);
         AssertRC(rc);
@@ -2496,8 +2519,8 @@ int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVG
                               <= pMipLevel->cbSurface))
                 {
                     Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n",
-                         (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_VERTEXBUFFER ? "vertex" :
-                           (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_INDEXBUFFER ? "index" : "buffer",
+                         (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_VERTEXBUFFER ? "vertex" :
+                           (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_INDEXBUFFER ? "index" : "buffer",
                          pBox->x, pBox->y, pBox->x + pBox->w, pBox->y + pBox->h));
 
                     rc = vmsvgaGMRTransfer(pThis,
@@ -2505,13 +2528,13 @@ int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVG
                                            pbData + offDst,
                                            pMipLevel->cbSurfacePitch,
                                            GuestPtr,
-                                           pBox->srcx * pSurface->cbBlock + pBox->srcy * cbSrcPitch,
-                                           cbSrcPitch,
+                                           pBox->srcx * pSurface->cbBlock + pBox->srcy * cbGuestPitch,
+                                           cbGuestPitch,
                                            pBox->w * pSurface->cbBlock,
                                            pBox->h);
                     AssertRC(rc);
 
-                    Log4(("first line:\n%.*Rhxd\n", cbSrcPitch, pbData));
+                    Log4(("first line:\n%.*Rhxd\n", cbGuestPitch, pbData + offDst));
                 }
                 else
                 {
@@ -2646,7 +2669,7 @@ int vmsvga3dGenerateMipmaps(PVGASTATE pThis, uint32_t sid, SVGA3dTextureFilter f
     if (pSurface->oglId.texture == OPENGL_INVALID_ID)
     {
         /* Unknown surface type; turn it into a texture. */
-        Log(("vmsvga3dGenerateMipmaps: unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->flags, pSurface->format));
+        Log(("vmsvga3dGenerateMipmaps: unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->surfaceFlags, pSurface->format));
         rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pSurface);
         AssertRCReturn(rc, rc);
     }
@@ -2917,8 +2940,8 @@ int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3
     /*
      * Blit the surface rectangle(s) to the back buffer.
      */
-    uint32_t const cxSurface = pSurface->pMipmapLevels[0].size.width;
-    uint32_t const cySurface = pSurface->pMipmapLevels[0].size.height;
+    uint32_t const cxSurface = pSurface->pMipmapLevels[0].mipmapSize.width;
+    uint32_t const cySurface = pSurface->pMipmapLevels[0].mipmapSize.height;
     for (uint32_t i = 0; i < cRects; i++)
     {
         SVGA3dCopyRect ClippedRect = pRect[i];
@@ -3285,8 +3308,8 @@ int vmsvga3dContextDefineOgl(PVGASTATE pThis, uint32_t cid, uint32_t fFlags)
      */
     memset(pContext, 0, sizeof(*pContext));
     pContext->id                = cid;
-    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
-        pContext->aSidActiveTexture[i] = SVGA3D_INVALID_ID;
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++)
+        pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID;
 
     pContext->sidRenderTarget   = SVGA3D_INVALID_ID;
     pContext->state.shidVertex  = SVGA3D_INVALID_ID;
@@ -3553,6 +3576,9 @@ static int vmsvga3dContextDestroyOgl(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext,
             VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
         }
     }
+
+    vmsvga3dOcclusionQueryDelete(pState, pContext);
+
 #ifdef RT_OS_WINDOWS
     wglMakeCurrent(pContext->hdc, NULL);
     wglDeleteContext(pContext->hglrc);
@@ -4795,7 +4821,7 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         AssertReturn(target.mipmap == 0, VERR_INVALID_PARAMETER);
         if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
         {
-            Log(("vmsvga3dSetRenderTarget: create renderbuffer to be used as render target; surface id=%x type=%d format=%d\n", target.sid, pRenderTarget->flags, pRenderTarget->internalFormatGL));
+            Log(("vmsvga3dSetRenderTarget: create renderbuffer to be used as render target; surface id=%x type=%d format=%d\n", target.sid, pRenderTarget->surfaceFlags, pRenderTarget->internalFormatGL));
             pContext = &pState->SharedCtx;
             VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
 
@@ -4807,8 +4833,8 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
 
             pState->ext.glRenderbufferStorage(GL_RENDERBUFFER,
                                               pRenderTarget->internalFormatGL,
-                                              pRenderTarget->pMipmapLevels[0].size.width,
-                                              pRenderTarget->pMipmapLevels[0].size.height);
+                                              pRenderTarget->pMipmapLevels[0].mipmapSize.width,
+                                              pRenderTarget->pMipmapLevels[0].mipmapSize.height);
             VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
 
             pState->ext.glBindRenderbuffer(GL_RENDERBUFFER, OPENGL_INVALID_ID);
@@ -4824,7 +4850,7 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         Assert(!pRenderTarget->fDirty);
         AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
 
-        pRenderTarget->flags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+        pRenderTarget->surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
 
         pState->ext.glFramebufferRenderbuffer(GL_FRAMEBUFFER,
                                               (type == SVGA3D_RT_DEPTH) ? GL_DEPTH_ATTACHMENT : GL_STENCIL_ATTACHMENT,
@@ -4844,7 +4870,7 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         /* A texture surface can be used as a render target to fill it and later on used as a texture. */
         if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
         {
-            Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->flags, pRenderTarget->format));
+            Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->surfaceFlags, pRenderTarget->format));
             int rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pRenderTarget);
             AssertRCReturn(rc, rc);
         }
@@ -4852,7 +4878,7 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
         Assert(!pRenderTarget->fDirty);
 
-        pRenderTarget->flags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
+        pRenderTarget->surfaceFlags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
 
         pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + type - SVGA3D_RT_COLOR0, GL_TEXTURE_2D, pRenderTarget->oglId.texture, target.mipmap);
         VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -5072,18 +5098,18 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
 
         Log(("vmsvga3dSetTextureState: cid=%x stage=%d type=%s (%x) val=%x\n", cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
         /* Record the texture state for vm state saving. */
-        if (    pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE
-            &&  pTextureState[i].name < SVGA3D_TS_MAX)
+        if (    pTextureState[i].stage < RT_ELEMENTS(pContext->state.aTextureStates)
+            &&  pTextureState[i].name < RT_ELEMENTS(pContext->state.aTextureStates[0]))
         {
-            pContext->state.aTextureState[pTextureState[i].stage][pTextureState[i].name] = pTextureState[i];
+            pContext->state.aTextureStates[pTextureState[i].stage][pTextureState[i].name] = pTextureState[i];
         }
 
         /* Active the right texture unit for subsequent texture state changes. */
         if (pTextureState[i].stage != currentStage || i == 0)
         {
             /** @todo Is this the appropriate limit for all kinds of textures?  It is the
-             * size of aSidActiveTexture and for binding/unbinding we cannot exceed it. */
-            if (pTextureState[i].stage < SVGA3D_MAX_TEXTURE_STAGE)
+             * size of aSidActiveTextures and for binding/unbinding we cannot exceed it. */
+            if (pTextureState[i].stage < RT_ELEMENTS(pContext->state.aTextureStates))
             {
                 pState->ext.glActiveTexture(GL_TEXTURE0 + pTextureState[i].stage);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -5135,9 +5161,9 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
             if (pTextureState[i].value == SVGA3D_INVALID_ID)
             {
                 Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x replacing=%x\n",
-                     currentStage, pTextureState[i].value, pContext->aSidActiveTexture[currentStage]));
+                     currentStage, pTextureState[i].value, pContext->aSidActiveTextures[currentStage]));
 
-                pContext->aSidActiveTexture[currentStage] = SVGA3D_INVALID_ID;
+                pContext->aSidActiveTextures[currentStage] = SVGA3D_INVALID_ID;
                 /* Unselect the currently associated texture. */
                 glBindTexture(GL_TEXTURE_2D, 0);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -5155,12 +5181,12 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
                 PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
 
                 Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture surface id=%x (%d,%d) replacing=%x\n",
-                     currentStage, pTextureState[i].value, pSurface->pMipmapLevels[0].size.width,
-                     pSurface->pMipmapLevels[0].size.height, pContext->aSidActiveTexture[currentStage]));
+                     currentStage, pTextureState[i].value, pSurface->pMipmapLevels[0].mipmapSize.width,
+                     pSurface->pMipmapLevels[0].mipmapSize.height, pContext->aSidActiveTextures[currentStage]));
 
                 if (pSurface->oglId.texture == OPENGL_INVALID_ID)
                 {
-                    Log(("CreateTexture (%d,%d) level=%d\n", pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height, pSurface->faces[0].numMipLevels));
+                    Log(("CreateTexture (%d,%d) level=%d\n", pSurface->pMipmapLevels[0].mipmapSize.width, pSurface->pMipmapLevels[0].mipmapSize.height, pSurface->faces[0].numMipLevels));
                     int rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pSurface);
                     AssertRCReturn(rc, rc);
                 }
@@ -5172,14 +5198,14 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
                 glEnable(GL_TEXTURE_2D);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
 
-                if (pContext->aSidActiveTexture[currentStage] != sid)
+                if (pContext->aSidActiveTextures[currentStage] != sid)
                 {
                     /* Recreate the texture state as glBindTexture resets them all (sigh). */
-                    for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)
+                    for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); iStage++)
                     {
-                        for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)
+                        for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); j++)
                         {
-                            SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureState[iStage][j];
+                            SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureStates[iStage][j];
 
                             if (    pTextureStateIter->name != SVGA3D_TS_INVALID
                                 &&  pTextureStateIter->name != SVGA3D_TS_BIND_TEXTURE)
@@ -5187,7 +5213,7 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
                         }
                     }
                 }
-                pContext->aSidActiveTexture[currentStage] = sid;
+                pContext->aSidActiveTextures[currentStage] = sid;
             }
             /* Finished; continue with the next one. */
             continue;
@@ -5210,8 +5236,8 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
         case SVGA3D_TS_MIPFILTER:                   /* SVGA3dTextureFilter */
         case SVGA3D_TS_MINFILTER:                   /* SVGA3dTextureFilter */
         {
-            uint32_t mipFilter = pContext->state.aTextureState[currentStage][SVGA3D_TS_MIPFILTER].value;
-            uint32_t minFilter = pContext->state.aTextureState[currentStage][SVGA3D_TS_MINFILTER].value;
+            uint32_t mipFilter = pContext->state.aTextureStates[currentStage][SVGA3D_TS_MIPFILTER].value;
+            uint32_t minFilter = pContext->state.aTextureStates[currentStage][SVGA3D_TS_MINFILTER].value;
 
             /* If SVGA3D_TS_MIPFILTER is set to NONE, then use SVGA3D_TS_MIPFILTER, otherwise SVGA3D_TS_MIPFILTER enables mipmap minification. */
             textureType = GL_TEXTURE_MIN_FILTER;
@@ -5971,7 +5997,7 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVGASTATE pThis, PVMSVGA3DCONTEXT p
         pVertexSurface->pMipmapLevels[0].fDirty = false;
         pVertexSurface->fDirty = false;
 
-        pVertexSurface->flags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+        pVertexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
 
         pState->ext.glBindBuffer(GL_ARRAY_BUFFER, OPENGL_INVALID_ID);
         VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -6224,7 +6250,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
         if (pContext->sidRenderTarget != SVGA_ID_INVALID)
         {
             PVMSVGA3DSURFACE pRenderTarget = pState->papSurfaces[pContext->sidRenderTarget];
-            rtHeight = pRenderTarget->pMipmapLevels[0].size.height;
+            rtHeight = pRenderTarget->pMipmapLevels[0].mipmapSize.height;
         }
 
         ShaderUpdateState(pContext->pShaderContext, rtHeight);
@@ -6305,7 +6331,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
                 pIndexSurface->pMipmapLevels[0].fDirty = false;
                 pIndexSurface->fDirty = false;
 
-                pIndexSurface->flags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+                pIndexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
 
                 pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, OPENGL_INVALID_ID);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -6392,9 +6418,9 @@ internal_error:
         iCurrentVertex = iVertex;
     }
 #ifdef DEBUG
-    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++)
     {
-        if (pContext->aSidActiveTexture[i] != SVGA3D_INVALID_ID)
+        if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
         {
             GLint activeTexture = 0;
             GLint activeTextureUnit = 0;
@@ -6410,19 +6436,19 @@ internal_error:
             VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
 
 # if 0 /* Aren't we checking whether 'activeTexture' on texture unit 'i' matches what we expected?  This works if only one unit is active, but if both are it _will_ fail for one of them. */
-            if (pContext->aSidActiveTexture[activeTextureUnit - GL_TEXTURE0] != SVGA3D_INVALID_ID)
+            if (pContext->aSidActiveTextures[activeTextureUnit - GL_TEXTURE0] != SVGA3D_INVALID_ID)
             {
                 PVMSVGA3DSURFACE pTexture;
-                pTexture = pState->papSurfaces[pContext->aSidActiveTexture[activeTextureUnit - GL_TEXTURE0]];
+                pTexture = pState->papSurfaces[pContext->aSidActiveTextures[activeTextureUnit - GL_TEXTURE0]];
 
                 AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture, ("%x vs %x unit %d - %d\n", pTexture->oglId.texture, activeTexture, i, activeTextureUnit - GL_TEXTURE0));
             }
 # else
-            PVMSVGA3DSURFACE pTexture = pState->papSurfaces[pContext->aSidActiveTexture[i]];
-            AssertMsg(pTexture->id == pContext->aSidActiveTexture[i], ("%x vs %x\n", pTexture->id, pContext->aSidActiveTexture[i]));
+            PVMSVGA3DSURFACE pTexture = pState->papSurfaces[pContext->aSidActiveTextures[i]];
+            AssertMsg(pTexture->id == pContext->aSidActiveTextures[i], ("%x vs %x\n", pTexture->id, pContext->aSidActiveTextures[i]));
             AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture,
                       ("%x vs %x unit %d (active unit %d) sid=%x\n", pTexture->oglId.texture, activeTexture, i,
-                       activeTextureUnit - GL_TEXTURE0, pContext->aSidActiveTexture[i]));
+                       activeTextureUnit - GL_TEXTURE0, pContext->aSidActiveTextures[i]));
 # endif
         }
     }
@@ -6767,25 +6793,51 @@ int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dSh
     return VINF_SUCCESS;
 }
 
+int vmsvga3dOcclusionQueryCreate(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
+{
+    AssertReturn(pState->ext.glGenQueries, VERR_NOT_SUPPORTED);
+    GLuint idQuery = 0;
+    pState->ext.glGenQueries(1, &idQuery);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    AssertReturn(idQuery, VERR_INTERNAL_ERROR);
+    pContext->occlusion.idQuery = idQuery;
+    return VINF_SUCCESS;
+}
 
-int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type)
+int vmsvga3dOcclusionQueryDelete(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
 {
-    RT_NOREF(pThis, cid, type);
-    AssertFailed();
-    return VERR_NOT_IMPLEMENTED;
+    AssertReturn(pState->ext.glDeleteQueries, VERR_NOT_SUPPORTED);
+    if (pContext->occlusion.idQuery)
+    {
+        pState->ext.glDeleteQueries(1, &pContext->occlusion.idQuery);
+    }
+    return VINF_SUCCESS;
 }
 
-int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+int vmsvga3dOcclusionQueryBegin(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
 {
-    RT_NOREF(pThis, cid, type, guestResult);
-    AssertFailed();
-    return VERR_NOT_IMPLEMENTED;
+    AssertReturn(pState->ext.glBeginQuery, VERR_NOT_SUPPORTED);
+    pState->ext.glBeginQuery(GL_ANY_SAMPLES_PASSED, pContext->occlusion.idQuery);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    return VINF_SUCCESS;
 }
 
-int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+int vmsvga3dOcclusionQueryEnd(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
 {
-    RT_NOREF(pThis, cid, type, guestResult);
-    AssertFailed();
-    return VERR_NOT_IMPLEMENTED;
+    RT_NOREF(pContext);
+    AssertReturn(pState->ext.glEndQuery, VERR_NOT_SUPPORTED);
+    pState->ext.glEndQuery(GL_ANY_SAMPLES_PASSED);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+    return VINF_SUCCESS;
 }
 
+int vmsvga3dOcclusionQueryGetData(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels)
+{
+    AssertReturn(pState->ext.glGetQueryObjectuiv, VERR_NOT_SUPPORTED);
+    GLuint pixels = 0;
+    pState->ext.glGetQueryObjectuiv(pContext->occlusion.idQuery, GL_QUERY_RESULT, &pixels);
+    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+    *pu32Pixels = (uint32_t)pixels;
+    return VINF_SUCCESS;
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp
index aea5548..55c0fb4 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -83,11 +83,11 @@ static int vmsvga3dLoadReinitContext(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext)
 
     /* Recreate the texture state */
     Log(("vmsvga3dLoadReinitContext: Recreate texture state BEGIN\n"));
-    for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)
+    for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); ++iStage)
     {
-        for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)
+        for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); ++j)
         {
-            SVGA3dTextureState *pTextureState = &pContext->state.aTextureState[iStage][j];
+            SVGA3dTextureState *pTextureState = &pContext->state.aTextureStates[iStage][j];
 
             if (pTextureState->name != SVGA3D_TS_INVALID)
                 vmsvga3dSetTextureState(pThis, pContext->id, 1, pTextureState);
@@ -148,7 +148,7 @@ static int vmsvga3dLoadReinitContext(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext)
 
 int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
-    RT_NOREF(uVersion, uPass);
+    RT_NOREF(uPass);
     PVMSVGA3DSTATE pState = pThis->svga.p3dState;
     AssertReturn(pState, VERR_NO_MEMORY);
     int            rc;
@@ -308,6 +308,82 @@ int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32
                     AssertRCReturn(rc, rc);
                 }
             }
+
+            if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES)
+            {
+                /* Load texture stage and samplers state. */
+
+                /* Number of stages/samplers. */
+                uint32_t cStages;
+                rc = SSMR3GetU32(pSSM, &cStages);
+                AssertRCReturn(rc, rc);
+
+                /* Number of states. */
+                uint32_t cTextureStates;
+                rc = SSMR3GetU32(pSSM, &cTextureStates);
+                AssertRCReturn(rc, rc);
+
+                for (uint32_t iStage = 0; iStage < cStages; ++iStage)
+                {
+                    for (uint32_t j = 0; j < cTextureStates; ++j)
+                    {
+                        SVGA3dTextureState textureState;
+                        SSMR3GetU32(pSSM, &textureState.stage);
+                        uint32_t u32Name;
+                        SSMR3GetU32(pSSM, &u32Name);
+                        textureState.name = (SVGA3dTextureStateName)u32Name;
+                        rc = SSMR3GetU32(pSSM, &textureState.value);
+                        AssertRCReturn(rc, rc);
+
+                        if (   iStage < RT_ELEMENTS(pContext->state.aTextureStates)
+                            && j < RT_ELEMENTS(pContext->state.aTextureStates[0]))
+                        {
+                            pContext->state.aTextureStates[iStage][j] = textureState;
+                        }
+                    }
+                }
+            }
+
+#if 0 /** @todo */
+            if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES) /** @todo VGA_SAVEDSTATE_VERSION_VMSVGA_3D */
+            {
+                VMSVGA3DQUERY query;
+                RT_ZERO(query);
+
+                rc = SSMR3GetStructEx(pSSM, &query, sizeof(query), 0, g_aVMSVGA3DQUERYFields, NULL);
+                AssertRCReturn(rc, rc);
+
+                switch (query.enmQueryState)
+                {
+                    case VMSVGA3DQUERYSTATE_BUILDING:
+                        /* Start collecting data. */
+                        vmsvga3dQueryBegin(pThis, cid, SVGA3D_QUERYTYPE_OCCLUSION);
+                        /* Partial result. */
+                        pContext->occlusion.u32QueryResult = query.u32QueryResult;
+                        break;
+
+                    case VMSVGA3DQUERYSTATE_ISSUED:
+                        /* Guest ended the query but did not read result. Result is restored. */
+                        query.enmQueryState = VMSVGA3DQUERYSTATE_SIGNALED;
+                        RT_FALL_THRU();
+                    case VMSVGA3DQUERYSTATE_SIGNALED:
+                        /* Create the query object. */
+                        vmsvga3dOcclusionQueryCreate(pState, pContext);
+
+                        /* Update result and state. */
+                        pContext->occlusion.enmQueryState = query.enmQueryState;
+                        pContext->occlusion.u32QueryResult = query.u32QueryResult;
+                        break;
+
+                    default:
+                        AssertFailed();
+                        RT_FALL_THRU();
+                    case VMSVGA3DQUERYSTATE_NULL:
+                        RT_ZERO(pContext->occlusion);
+                        break;
+                }
+            }
+#endif
         }
     }
 
@@ -352,11 +428,11 @@ int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32
                         rc = SSMR3GetStructEx(pSSM, &pMipmapLevel[idx], sizeof(pMipmapLevel[idx]), 0, g_aVMSVGA3DMIPMAPLEVELFields, NULL);
                         AssertRCReturn(rc, rc);
 
-                        pMipmapLevelSize[idx] = pMipmapLevel[idx].size;
+                        pMipmapLevelSize[idx] = pMipmapLevel[idx].mipmapSize;
                     }
                 }
 
-                rc = vmsvga3dSurfaceDefine(pThis, sid, surface.flags, surface.format, surface.faces, surface.multiSampleCount, surface.autogenFilter, cMipLevels, pMipmapLevelSize);
+                rc = vmsvga3dSurfaceDefine(pThis, sid, surface.surfaceFlags, surface.format, surface.faces, surface.multiSampleCount, surface.autogenFilter, cMipLevels, pMipmapLevelSize);
                 AssertRCReturn(rc, rc);
 
                 RTMemFree(pMipmapLevelSize);
@@ -374,9 +450,9 @@ int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32
                 PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->pMipmapLevels[j];
                 bool fDataPresent = false;
 
+                /* vmsvga3dSurfaceDefine already allocated the surface data buffer. */
                 Assert(pMipmapLevel->cbSurface);
-                pMipmapLevel->pSurfaceData = RTMemAllocZ(pMipmapLevel->cbSurface);
-                AssertReturn(pMipmapLevel->pSurfaceData, VERR_NO_MEMORY);
+                AssertReturn(pMipmapLevel->pSurfaceData, VERR_INTERNAL_ERROR);
 
                 /* Fetch the data present boolean first. */
                 rc = SSMR3GetBool(pSSM, &fDataPresent);
@@ -500,6 +576,65 @@ static int vmsvga3dSaveContext(PVGASTATE pThis, PSSMHANDLE pSSM, PVMSVGA3DCONTEX
             rc = SSMR3PutStructEx(pSSM, &pContext->state.paVertexShaderConst[j], sizeof(pContext->state.paVertexShaderConst[j]), 0, g_aVMSVGASHADERCONSTFields, NULL);
             AssertRCReturn(rc, rc);
         }
+
+        /* Save texture stage and samplers state. */
+
+        /* Number of stages/samplers. */
+        rc = SSMR3PutU32(pSSM, RT_ELEMENTS(pContext->state.aTextureStates));
+        AssertRCReturn(rc, rc);
+
+        /* Number of texture states. */
+        rc = SSMR3PutU32(pSSM, RT_ELEMENTS(pContext->state.aTextureStates[0]));
+        AssertRCReturn(rc, rc);
+
+        for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); ++iStage)
+        {
+            for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); ++j)
+            {
+                SVGA3dTextureState *pTextureState = &pContext->state.aTextureStates[iStage][j];
+
+                SSMR3PutU32(pSSM, pTextureState->stage);
+                SSMR3PutU32(pSSM, pTextureState->name);
+                rc = SSMR3PutU32(pSSM, pTextureState->value);
+                AssertRCReturn(rc, rc);
+            }
+        }
+
+#if 0 /** @todo Enable later. */
+        PVMSVGA3DSTATE pState = pThis->svga.p3dState;
+        /* Occlusion query. */
+        if (!VMSVGA3DQUERY_EXISTS(&pContext->occlusion))
+        {
+            pContext->occlusion.enmQueryState = VMSVGA3DQUERYSTATE_NULL;
+        }
+
+        switch (pContext->occlusion.enmQueryState)
+        {
+            case VMSVGA3DQUERYSTATE_BUILDING:
+                /* Stop collecting data. Fetch partial result. Save result. */
+                vmsvga3dOcclusionQueryEnd(pState, pContext);
+                RT_FALL_THRU();
+            case VMSVGA3DQUERYSTATE_ISSUED:
+                /* Fetch result. Save result. */
+                pContext->occlusion.u32QueryResult = 0;
+                vmsvga3dOcclusionQueryGetData(pState, pContext, &pContext->occlusion.u32QueryResult);
+                RT_FALL_THRU();
+            case VMSVGA3DQUERYSTATE_SIGNALED:
+                /* Save result. Nothing to do here. */
+                break;
+
+            default:
+                AssertFailed();
+                RT_FALL_THRU();
+            case VMSVGA3DQUERYSTATE_NULL:
+                pContext->occlusion.enmQueryState = VMSVGA3DQUERYSTATE_NULL;
+                pContext->occlusion.u32QueryResult = 0;
+                break;
+        }
+
+        rc = SSMR3PutStructEx(pSSM, &pContext->occlusion, sizeof(pContext->occlusion), 0, g_aVMSVGA3DQUERYFields, NULL);
+        AssertRCReturn(rc, rc);
+#endif
     }
 
     return VINF_SUCCESS;
@@ -599,7 +734,6 @@ int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
                         void            *pData;
                         bool             fRenderTargetTexture = false;
                         bool             fTexture = false;
-                        bool             fVertex = false;
                         bool             fSkipSave = false;
                         HRESULT          hr;
 
@@ -607,21 +741,26 @@ int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
                         pData = RTMemAllocZ(pMipmapLevel->cbSurface);
                         AssertReturn(pData, VERR_NO_MEMORY);
 
-                        switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                        switch (pSurface->enmD3DResType)
                         {
-                        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
-                        case SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE:
-                            /** @todo unable to easily fetch depth surface data in d3d 9 */
+                        case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+                        case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+                            AssertFailed(); /// @todo
                             fSkipSave = true;
                             break;
-                        case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
-                            fRenderTargetTexture = true;
-                            /* no break */
-                        case SVGA3D_SURFACE_HINT_TEXTURE:
-                            fTexture = true;
-                            /* no break */
-                        case SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        case VMSVGA3D_D3DRESTYPE_SURFACE:
+                        case VMSVGA3D_D3DRESTYPE_TEXTURE:
                         {
+                            if (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
+                            {
+                               /** @todo unable to easily fetch depth surface data in d3d 9 */
+                               fSkipSave = true;
+                               break;
+                            }
+
+                            fTexture = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE);
+                            fRenderTargetTexture = fTexture && (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET);
+
                             D3DLOCKED_RECT LockedRect;
 
                             if (fTexture)
@@ -675,9 +814,11 @@ int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
                             AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
                             /* Copy the data one line at a time in case the internal pitch is different. */
-                            for (uint32_t j = 0; j < pMipmapLevel->size.height; j++)
+                            for (uint32_t j = 0; j < pMipmapLevel->cBlocksY; ++j)
                             {
-                                memcpy((uint8_t *)pData + j * pMipmapLevel->cbSurfacePitch, (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch, pMipmapLevel->cbSurfacePitch);
+                                uint8_t *pu8Dst = (uint8_t *)pData + j * pMipmapLevel->cbSurfacePitch;
+                                const uint8_t *pu8Src = (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch;
+                                memcpy(pu8Dst, pu8Src, pMipmapLevel->cbSurfacePitch);
                             }
 
                             if (fTexture)
@@ -696,12 +837,12 @@ int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
                             break;
                         }
 
-                        case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
-                            fVertex = true;
-                            /* no break */
-
-                        case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+                        case VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER:
+                        case VMSVGA3D_D3DRESTYPE_INDEX_BUFFER:
                         {
+                            /* Current type of the buffer. */
+                            const bool fVertex = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER);
+
                             uint8_t *pD3DData;
 
                             if (fVertex)
@@ -751,7 +892,7 @@ int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
 
                         Assert(pMipmapLevel->cbSurface);
 
-                        switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                        switch (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
                         {
                         default:
                             AssertFailed();
@@ -806,6 +947,7 @@ int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM)
                             break;
                         }
 
+                        case SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_INDEXBUFFER:
                         case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
                         case SVGA3D_SURFACE_HINT_INDEXBUFFER:
                         {
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
index 24751e2..83e24f8 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -274,20 +274,30 @@ static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
 
 
 /**
- * Calculate the size of one pixel
+ * Calculate the size and dimensions of one block.
  */
-uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format)
+uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format,
+                                   uint32_t *pcxBlock,
+                                   uint32_t *pcyBlock)
 {
+    uint32_t u32 = 0;
+    if (!pcxBlock) pcxBlock = &u32;
+    if (!pcyBlock) pcyBlock = &u32;
+
     switch (format)
     {
     case SVGA3D_X8R8G8B8:
     case SVGA3D_A8R8G8B8:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_R5G6B5:
     case SVGA3D_X1R5G5B5:
     case SVGA3D_A1R5G5B5:
     case SVGA3D_A4R4G4B4:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
 
     case SVGA3D_Z_D32:
@@ -295,65 +305,99 @@ uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format)
     case SVGA3D_Z_D24X8:
     case SVGA3D_Z_DF24:
     case SVGA3D_Z_D24S8_INT:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_Z_D16:
     case SVGA3D_Z_DF16:
     case SVGA3D_Z_D15S1:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
 
     case SVGA3D_LUMINANCE8:
     case SVGA3D_LUMINANCE4_ALPHA4:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 1;
 
     case SVGA3D_LUMINANCE16:
     case SVGA3D_LUMINANCE8_ALPHA8:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
 
     case SVGA3D_DXT1:
     case SVGA3D_DXT2:
+        *pcxBlock = 4;
+        *pcyBlock = 4;
         return 8;
 
     case SVGA3D_DXT3:
     case SVGA3D_DXT4:
     case SVGA3D_DXT5:
+        *pcxBlock = 4;
+        *pcyBlock = 4;
         return 16;
 
     case SVGA3D_BUMPU8V8:
     case SVGA3D_BUMPL6V5U5:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
 
     case SVGA3D_BUMPX8L8V8U8:
     case SVGA3D_Q8W8V8U8:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_V8U8:
     case SVGA3D_CxV8U8:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
 
     case SVGA3D_X8L8V8U8:
     case SVGA3D_A2W10V10U10:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_ARGB_S10E5:   /* 16-bit floating-point ARGB */
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
     case SVGA3D_ARGB_S23E8:   /* 32-bit floating-point ARGB */
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_A2R10G10B10:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_ALPHA8:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 1;
 
     case SVGA3D_R_S10E5:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 2;
 
     case SVGA3D_R_S23E8:
     case SVGA3D_RG_S10E5:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_RG_S23E8:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 8;
 
     /*
@@ -362,20 +406,41 @@ uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format)
      * expressly for index or vertex data.
      */
     case SVGA3D_BUFFER:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 1;
 
     case SVGA3D_NV12:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 1;
 
     case SVGA3D_V16U16:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 4;
 
     case SVGA3D_G16R16:
-        return 32;
+        *pcxBlock = 1;
+        *pcyBlock = 1;
+        return 4;
     case SVGA3D_A16B16G16R16:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         return 8;
+    case SVGA3D_R8G8B8A8_UNORM:
+    case SVGA3D_R8G8B8A8_SNORM:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
+        return 4;
+    case SVGA3D_R16G16_UNORM:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
+        return 4;
 
     default:
+        *pcxBlock = 1;
+        *pcyBlock = 1;
         AssertFailedReturn(4);
     }
 }
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
index 92c3941..3a46204 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -161,6 +161,14 @@ static VMSVGA3DFORMATSUPPORT const  g_aFeatureReject[] =
 static void vmsvgaDumpD3DCaps(D3DCAPS9 *pCaps);
 
 
+#define D3D_RELEASE(ptr) do { \
+    if (ptr)                  \
+    {                         \
+        (ptr)->Release();     \
+        (ptr) = 0;            \
+    }                         \
+} while (0)
+
 
 int vmsvga3dInit(PVGASTATE pThis)
 {
@@ -317,8 +325,7 @@ int vmsvga3dTerminate(PVGASTATE pThis)
 
     RTSemEventDestroy(pState->WndRequestSem);
 
-    if (pState->pD3D9)
-        pState->pD3D9->Release();
+    D3D_RELEASE(pState->pD3D9);
 
     return VINF_SUCCESS;
 }
@@ -944,6 +951,9 @@ D3DFORMAT vmsvga3dSurfaceFormat2D3D(SVGA3dSurfaceFormat format)
     case SVGA3D_A4R4G4B4:
         return D3DFMT_A4R4G4B4;
 
+    case SVGA3D_R8G8B8A8_UNORM:
+        return D3DFMT_A8B8G8R8;
+
     case SVGA3D_Z_D32:
         return D3DFMT_D32;
     case SVGA3D_Z_D16:
@@ -1056,6 +1066,11 @@ D3DFORMAT vmsvga3dSurfaceFormat2D3D(SVGA3dSurfaceFormat format)
     case SVGA3D_AYUV:
         return (D3DFORMAT)MAKEFOURCC('A', 'Y', 'U', 'V');
 
+    case SVGA3D_R8G8B8A8_SNORM:
+        return D3DFMT_Q8W8V8U8;
+    case SVGA3D_R16G16_UNORM:
+        return D3DFMT_G16R16;
+
     case SVGA3D_BC4_UNORM:
     case SVGA3D_BC5_UNORM:
         /* Unknown; only in DX10 & 11 */
@@ -1093,57 +1108,46 @@ D3DMULTISAMPLE_TYPE vmsvga3dMultipeSampleCount2D3D(uint32_t multisampleCount)
 void vmsvga3dBackSurfaceDestroy(PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface)
 {
     RT_NOREF(pState);
+
     RTAvlU32Destroy(&pSurface->pSharedObjectTree, vmsvga3dSharedSurfaceDestroyTree, pSurface);
     Assert(pSurface->pSharedObjectTree == NULL);
 
-    switch (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
+    switch (pSurface->enmD3DResType)
     {
-    case SVGA3D_SURFACE_CUBEMAP:
-        AssertFailed(); /** @todo */
+    case VMSVGA3D_D3DRESTYPE_SURFACE:
+        D3D_RELEASE(pSurface->u.pSurface);
         break;
 
-    case SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER:
-    case SVGA3D_SURFACE_HINT_INDEXBUFFER:
-    case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
-        if (pSurface->fu32ActualUsageFlags == SVGA3D_SURFACE_HINT_VERTEXBUFFER)
-        {
-            if (pSurface->u.pVertexBuffer)
-                pSurface->u.pVertexBuffer->Release();
-        }
-        else if (pSurface->fu32ActualUsageFlags == SVGA3D_SURFACE_HINT_INDEXBUFFER)
-        {
-            if (pSurface->u.pIndexBuffer)
-                pSurface->u.pIndexBuffer->Release();
-        }
-        else
-            AssertMsg(pSurface->u.pVertexBuffer == NULL, ("fu32ActualUsageFlags %x\n", pSurface->fu32ActualUsageFlags));
+    case VMSVGA3D_D3DRESTYPE_TEXTURE:
+        D3D_RELEASE(pSurface->u.pTexture);
+        D3D_RELEASE(pSurface->bounce.pTexture);
         break;
 
-    case SVGA3D_SURFACE_HINT_TEXTURE:
-    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
-        if (pSurface->u.pTexture)
-            pSurface->u.pTexture->Release();
-        if (pSurface->bounce.pTexture)
-            pSurface->bounce.pTexture->Release();
+    case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+        D3D_RELEASE(pSurface->u.pCubeTexture);
+        D3D_RELEASE(pSurface->bounce.pCubeTexture);
         break;
 
-    case SVGA3D_SURFACE_HINT_RENDERTARGET:
-    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
-    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE:    /** @todo actual texture surface not supported */
-        if (pSurface->fStencilAsTexture)
-            pSurface->u.pTexture->Release();
-        else
-        if (pSurface->u.pSurface)
-            pSurface->u.pSurface->Release();
+    case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+        D3D_RELEASE(pSurface->u.pVolumeTexture);
+        D3D_RELEASE(pSurface->bounce.pVolumeTexture);
+        break;
+
+    case VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER:
+        D3D_RELEASE(pSurface->u.pVertexBuffer);
+        break;
+
+    case VMSVGA3D_D3DRESTYPE_INDEX_BUFFER:
+        D3D_RELEASE(pSurface->u.pIndexBuffer);
         break;
 
     default:
-        AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface), ("type=%x\n", (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
+        AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface),
+                  ("surfaceFlags=0x%x\n", (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
         break;
     }
 
-    if (pSurface->pQuery)
-        pSurface->pQuery->Release();
+    D3D_RELEASE(pSurface->pQuery);
 }
 
 
@@ -1155,14 +1159,24 @@ DECLCALLBACK(int) vmsvga3dSharedSurfaceDestroyTree(PAVLU32NODECORE pNode, void *
     PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)pNode;
     PVMSVGA3DSURFACE       pSurface = (PVMSVGA3DSURFACE)pvParam;
 
-    switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+    switch (pSurface->enmD3DResType)
     {
-    case SVGA3D_SURFACE_HINT_TEXTURE:
-    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
-        Log(("vmsvga3dSharedSurfaceDestroyTree: release shared object for context %d\n", pNode->Key));
+    case VMSVGA3D_D3DRESTYPE_TEXTURE:
+        LogFunc(("release shared texture object for context %d\n", pNode->Key));
         Assert(pSharedSurface->u.pTexture);
-        if (pSharedSurface->u.pTexture)
-            pSharedSurface->u.pTexture->Release();
+        D3D_RELEASE(pSharedSurface->u.pTexture);
+        break;
+
+    case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+        LogFunc(("release shared cube texture object for context %d\n", pNode->Key));
+        Assert(pSharedSurface->u.pCubeTexture);
+        D3D_RELEASE(pSharedSurface->u.pCubeTexture);
+        break;
+
+    case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+        LogFunc(("release shared volume texture object for context %d\n", pNode->Key));
+        Assert(pSharedSurface->u.pVolumeTexture);
+        D3D_RELEASE(pSharedSurface->u.pVolumeTexture);
         break;
 
     default:
@@ -1174,41 +1188,80 @@ DECLCALLBACK(int) vmsvga3dSharedSurfaceDestroyTree(PAVLU32NODECORE pNode, void *
 }
 
 /* Get the shared surface copy or create a new one. */
-static PVMSVGA3DSHAREDSURFACE vmsvga3dSurfaceGetSharedCopy(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface)
+static PVMSVGA3DSHAREDSURFACE vmsvga3dSurfaceGetSharedCopy(PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface)
 {
-    RT_NOREF(pThis);
     Assert(pSurface->hSharedObject);
 
     PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTAvlU32Get(&pSurface->pSharedObjectTree, pContext->id);
     if (!pSharedSurface)
     {
-        HRESULT hr;
-        bool    ret;
-
-        Log(("vmsvga3dSurfaceGetSharedCopy: Create shared texture copy d3d (%d,%d) cMip=%d usage %x format %x.\n",
-              pSurface->pMipmapLevels[0].size.width,
-              pSurface->pMipmapLevels[0].size.height,
-              pSurface->faces[0],
-              pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
-              pSurface->formatD3D));
+        const uint32_t cWidth = pSurface->pMipmapLevels[0].mipmapSize.width;
+        const uint32_t cHeight = pSurface->pMipmapLevels[0].mipmapSize.height;
+        const uint32_t cDepth = pSurface->pMipmapLevels[0].mipmapSize.depth;
+        const uint32_t numMipLevels = pSurface->faces[0].numMipLevels;
+
+        LogFunc(("Create shared %stexture copy d3d (%d,%d,%d) cMip=%d usage %x format %x.\n",
+                  pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE ? "volume " :
+                  pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE ? "cube " :
+                  pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE ? "" : "UNKNOWN!!!",
+                  cWidth,
+                  cHeight,
+                  cDepth,
+                  numMipLevels,
+                  pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+                  pSurface->formatD3D));
 
         pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTMemAllocZ(sizeof(*pSharedSurface));
         AssertReturn(pSharedSurface, NULL);
 
         pSharedSurface->Core.Key = pContext->id;
-        ret = RTAvlU32Insert(&pSurface->pSharedObjectTree, &pSharedSurface->Core);
+        bool ret = RTAvlU32Insert(&pSurface->pSharedObjectTree, &pSharedSurface->Core);
         AssertReturn(ret, NULL);
 
-        /* Create shadow copy of the original shared texture. Shared d3d resources require Vista+ and have some restrictions. */
-        hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width,
-                                              pSurface->pMipmapLevels[0].size.height,
-                                              pSurface->faces[0].numMipLevels,
-                                              pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET /* required for use as a StretchRect destination */,
-                                              pSurface->formatD3D,
-                                              D3DPOOL_DEFAULT,
-                                              &pSharedSurface->u.pTexture,
-                                              &pSurface->hSharedObject);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceGetSharedCopy: CreateTexture failed with %x\n", hr), NULL);
+        /* Create shadow copy of the original shared texture.
+         * Shared d3d resources require Vista+ and have some restrictions.
+         * D3DUSAGE_RENDERTARGET is required for use as a StretchRect destination.
+         */
+        HRESULT hr;
+        if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+            hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+                                                        cHeight,
+                                                        cDepth,
+                                                        numMipLevels,
+                                                        pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+                                                        pSurface->formatD3D,
+                                                        D3DPOOL_DEFAULT,
+                                                        &pSharedSurface->u.pVolumeTexture,
+                                                        &pSurface->hSharedObject);
+        else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+            hr = pContext->pDevice->CreateCubeTexture(cWidth,
+                                                      numMipLevels,
+                                                      pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+                                                      pSurface->formatD3D,
+                                                      D3DPOOL_DEFAULT,
+                                                      &pSharedSurface->u.pCubeTexture,
+                                                      &pSurface->hSharedObject);
+        else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+            hr = pContext->pDevice->CreateTexture(cWidth,
+                                                  cHeight,
+                                                  numMipLevels,
+                                                  pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+                                                  pSurface->formatD3D,
+                                                  D3DPOOL_DEFAULT,
+                                                  &pSharedSurface->u.pTexture,
+                                                  &pSurface->hSharedObject);
+        else
+            hr = E_FAIL;
+
+        if (RT_LIKELY(hr == D3D_OK))
+            /* likely */;
+        else
+        {
+            AssertMsgFailed(("CreateTexture type %d failed with %x\n", pSurface->enmD3DResType, hr));
+            RTAvlU32Remove(&pSurface->pSharedObjectTree, pContext->id);
+            RTMemFree(pSharedSurface);
+            return NULL;
+        }
     }
     return pSharedSurface;
 }
@@ -1226,15 +1279,11 @@ static int vmsvga3dSurfaceTrackUsage(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pCo
     if (pSurface->pSharedObjectTree == NULL)
         return VINF_SUCCESS;
 
-    Log(("vmsvga3dSurfaceTrackUsage: track usage of sid=%x (cid=%d) for cid=%d\n", pSurface->id, pSurface->idAssociatedContext, pContext->id));
+    LogFunc(("track usage of sid=%x (cid=%d) for cid=%d, pQuery %p\n", pSurface->id, pSurface->idAssociatedContext, pContext->id, pSurface->pQuery));
 
     /* Release the previous query object. */
-    if (pSurface->pQuery)
-    {
-        Log(("vmsvga3dSurfaceTrackUsage: release old query object\n"));
-        pSurface->pQuery->Release();
-        pSurface->pQuery = NULL;
-    }
+    D3D_RELEASE(pSurface->pQuery);
+
     HRESULT hr = pContext->pDevice->CreateQuery(D3DQUERYTYPE_EVENT, &pSurface->pQuery);
     AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: CreateQuery failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
@@ -1289,110 +1338,161 @@ int vmsvga3dSurfaceFlush(PVGASTATE pThis, PVMSVGA3DSURFACE pSurface)
     }
     AssertMsgReturn(hr == S_OK, ("vmsvga3dSurfaceFinishDrawing: GetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-    pSurface->pQuery->Release();
-    pSurface->pQuery = NULL;
+    D3D_RELEASE(pSurface->pQuery);
 #endif /* !VBOX_VMSVGA3D_WITH_WINE_OPENGL */
 
     return VINF_SUCCESS;
 }
 
+/** Get IDirect3DSurface9 for the given face and mipmap.
+ */
+int vmsvga3dGetD3DSurface(PVMSVGA3DCONTEXT pContext,
+                          PVMSVGA3DSURFACE pSurface,
+                          uint32_t face,
+                          uint32_t mipmap,
+                          bool fLockable,
+                          IDirect3DSurface9 **ppD3DSurf)
+{
+    AssertPtrReturn(pSurface->u.pSurface, VERR_INVALID_PARAMETER);
+
+    IDirect3DBaseTexture9 *pTexture;
+    if (fLockable && pSurface->bounce.pTexture)
+       pTexture = pSurface->bounce.pTexture;
+    else
+       pTexture = pSurface->u.pTexture;
+
+#ifndef VBOX_VMSVGA3D_WITH_WINE_OPENGL
+    if (pSurface->idAssociatedContext != pContext->id)
+    {
+        AssertMsgReturn(!fLockable,
+                        ("Lockable surface must be from the same context (surface cid = %d, req cid = %d)",
+                         pSurface->idAssociatedContext, pContext->id),
+                        VERR_INVALID_PARAMETER);
+
+        if (   pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+            || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+        {
+            LogFunc(("using texture sid=%x created for another context (%d vs %d)\n",
+                     pSurface->id, pSurface->idAssociatedContext, pContext->id));
+
+            PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pContext, pSurface);
+            AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+            pTexture = pSharedSurface->u.pTexture;
+        }
+        else
+        {
+            AssertMsgFailed(("surface sid=%x created for another context (%d vs %d)\n",
+                            pSurface->id, pSurface->idAssociatedContext, pContext->id));
+        }
+    }
+#else
+    RT_NOREF(pContext);
+#endif
+
+    if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+    {
+        Assert(pSurface->cFaces == 6);
+
+        IDirect3DCubeTexture9 *p = (IDirect3DCubeTexture9 *)pTexture;
+        D3DCUBEMAP_FACES FaceType = vmsvga3dCubemapFaceFromIndex(face);
+        HRESULT hr = p->GetCubeMapSurface(FaceType, mipmap, ppD3DSurf);
+        AssertMsgReturn(hr == D3D_OK, ("GetCubeMapSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+    else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+    {
+        Assert(pSurface->cFaces == 1);
+        Assert(face == 0);
+
+        IDirect3DTexture9 *p = (IDirect3DTexture9 *)pTexture;
+        HRESULT hr = p->GetSurfaceLevel(mipmap, ppD3DSurf);
+        AssertMsgReturn(hr == D3D_OK, ("GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+    else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE)
+    {
+        pSurface->u.pSurface->AddRef();
+        *ppD3DSurf = pSurface->u.pSurface;
+    }
+    else
+    {
+        AssertMsgFailedReturn(("No surface for type %d\n", pSurface->enmD3DResType), VERR_INTERNAL_ERROR);
+    }
+
+    return VINF_SUCCESS;
+}
+
 int vmsvga3dSurfaceCopy(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src,
                         uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
 {
-    PVMSVGA3DSTATE      pState = pThis->svga.p3dState;
-    PVMSVGA3DSURFACE    pSurfaceSrc;
-    uint32_t            sidSrc = src.sid;
-    PVMSVGA3DSURFACE    pSurfaceDest;
-    uint32_t            sidDest = dest.sid;
-    int                 rc = VINF_SUCCESS;
-
+    PVMSVGA3DSTATE pState = pThis->svga.p3dState;
     AssertReturn(pState, VERR_NO_MEMORY);
-    AssertReturn(sidSrc < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
-    AssertReturn(sidSrc < pState->cSurfaces && pState->papSurfaces[sidSrc]->id == sidSrc, VERR_INVALID_PARAMETER);
-    AssertReturn(sidDest < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
-    AssertReturn(sidDest < pState->cSurfaces && pState->papSurfaces[sidDest]->id == sidDest, VERR_INVALID_PARAMETER);
 
-    pSurfaceSrc  = pState->papSurfaces[sidSrc];
-    pSurfaceDest = pState->papSurfaces[sidDest];
+    const uint32_t sidSrc = src.sid;
+    const uint32_t sidDest = dest.sid;
+    int rc;
 
-    AssertReturn(pSurfaceSrc->faces[0].numMipLevels > src.mipmap, VERR_INVALID_PARAMETER);
-    AssertReturn(pSurfaceDest->faces[0].numMipLevels > dest.mipmap, VERR_INVALID_PARAMETER);
+    PVMSVGA3DSURFACE pSurfaceSrc;
+    rc = vmsvga3dSurfaceFromSid(pState, sidSrc, &pSurfaceSrc);
+    AssertRCReturn(rc, rc);
 
-    const VMSVGA3DMIPMAPLEVEL *pMipmapLevelSrc = &pSurfaceSrc->pMipmapLevels[src.mipmap];
-    const VMSVGA3DMIPMAPLEVEL *pMipmapLevelDest = &pSurfaceDest->pMipmapLevels[dest.mipmap];
+    PVMSVGA3DSURFACE pSurfaceDest;
+    rc = vmsvga3dSurfaceFromSid(pState, sidDest, &pSurfaceDest);
+    AssertRCReturn(rc, rc);
 
-   // AssertMsgReturn(pSurfaceSrc->format == pSurfaceDest->format, ("Format mismatch (%d vs %d)!!\n", pSurfaceSrc->format, pSurfaceDest->format), VERR_INVALID_PARAMETER);
+    PVMSVGA3DMIPMAPLEVEL pMipmapLevelSrc;
+    rc = vmsvga3dMipmapLevel(pSurfaceSrc, src.face, src.mipmap, &pMipmapLevelSrc);
+    AssertRCReturn(rc, rc);
 
-    /** @todo Support cubemaps. */
-    bool fSrcTexture  = !!(pSurfaceSrc->flags & SVGA3D_SURFACE_HINT_TEXTURE);
-    bool fDestTexture = !!(pSurfaceDest->flags & SVGA3D_SURFACE_HINT_TEXTURE);
+    PVMSVGA3DMIPMAPLEVEL pMipmapLevelDest;
+    rc = vmsvga3dMipmapLevel(pSurfaceDest, dest.face, dest.mipmap, &pMipmapLevelDest);
+    AssertRCReturn(rc, rc);
 
-    if (    fDestTexture
-        &&  !pSurfaceDest->u.pSurface
-        &&  pSurfaceSrc->u.pSurface)
+    /* If src is HW and dst is not, then create the dst texture. */
+    if (   pSurfaceSrc->u.pSurface
+        && !pSurfaceDest->u.pSurface
+        && RT_BOOL(pSurfaceDest->surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE))
     {
-        uint32_t            cid;
-        PVMSVGA3DCONTEXT    pContext;
+        const uint32_t cid = pSurfaceSrc->idAssociatedContext;
 
-        /** @todo stricter checks for associated context */
-        cid = pSurfaceSrc->idAssociatedContext;
-        if (    cid >= pState->cContexts
-            ||  pState->papContexts[cid]->id != cid)
-        {
-            Log(("vmsvga3dSurfaceCopy invalid context id!\n"));
-            return VERR_INVALID_PARAMETER;
-        }
-        pContext = pState->papContexts[cid];
+        PVMSVGA3DCONTEXT pContext;
+        rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+        AssertRCReturn(rc, rc);
 
-        Log(("vmsvga3dSurfaceCopy: create texture sid=%x type=%d format=%d -> create texture\n", sidDest, pSurfaceDest->flags, pSurfaceDest->format));
+        LogFunc(("sid=%x type=%x format=%d -> create texture\n", sidDest, pSurfaceDest->surfaceFlags, pSurfaceDest->format));
         rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pSurfaceDest);
         AssertRCReturn(rc, rc);
     }
 
-    if (    pSurfaceSrc->u.pSurface
-        &&  pSurfaceDest->u.pSurface)
+    Assert(pSurfaceSrc->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE); /// @todo
+    Assert(pSurfaceDest->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE); /// @todo
+
+    if (   pSurfaceSrc->u.pSurface
+        && pSurfaceDest->u.pSurface)
     {
-        uint32_t                cid;
-        PVMSVGA3DCONTEXT        pContext;
-        IDirect3DTexture9      *pSrcTexture = pSurfaceSrc->u.pTexture;
+        const uint32_t cidDst = pSurfaceDest->idAssociatedContext;
 
-        /** @todo stricter checks for associated context */
-        cid = pSurfaceDest->idAssociatedContext;
-        if (    cid >= pState->cContexts
-            ||  pState->papContexts[cid]->id != cid)
-        {
-            Log(("vmsvga3dSurfaceCopy invalid context id!\n"));
-            return VERR_INVALID_PARAMETER;
-        }
-        pContext = pState->papContexts[cid];
+        PVMSVGA3DCONTEXT pContextDst;
+        rc = vmsvga3dContextFromCid(pState, cidDst, &pContextDst);
+        AssertRCReturn(rc, rc);
 
         /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
         vmsvga3dSurfaceFlush(pThis, pSurfaceSrc);
         vmsvga3dSurfaceFlush(pThis, pSurfaceDest);
 
-#ifndef VBOX_VMSVGA3D_WITH_WINE_OPENGL
-        if (    fSrcTexture
-            &&  pSurfaceSrc->idAssociatedContext != cid)
-        {
-            Log(("vmsvga3dSurfaceCopy; using texture sid=%x created for another context (%d vs %d)\n", sidSrc, pSurfaceSrc->idAssociatedContext, cid));
-
-            PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pThis, pContext, pSurfaceSrc);
-            AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+        IDirect3DSurface9 *pSrc;
+        rc = vmsvga3dGetD3DSurface(pContextDst, pSurfaceSrc, src.face, src.mipmap, false, &pSrc);
+        AssertRCReturn(rc, rc);
 
-            pSrcTexture = pSharedSurface->u.pTexture;
-        }
-#endif
+        IDirect3DSurface9 *pDest;
+        rc = vmsvga3dGetD3DSurface(pContextDst, pSurfaceDest, dest.face, dest.mipmap, false, &pDest);
+        AssertRCReturnStmt(rc, D3D_RELEASE(pSrc), rc);
 
-        for (uint32_t i = 0; i < cCopyBoxes; i++)
+        for (uint32_t i = 0; i < cCopyBoxes; ++i)
         {
-            HRESULT     hr;
-            RECT        RectSrc;
-            RECT        RectDest;
-            IDirect3DSurface9 *pSrc;
-            IDirect3DSurface9 *pDest;
+            HRESULT hr;
 
             SVGA3dCopyBox clipBox = pBox[i];
-            vmsvgaClipCopyBox(&pMipmapLevelSrc->size, &pMipmapLevelDest->size, &clipBox);
+            vmsvgaClipCopyBox(&pMipmapLevelSrc->mipmapSize, &pMipmapLevelDest->mipmapSize, &clipBox);
             if (   !clipBox.w
                 || !clipBox.h
                 || !clipBox.d)
@@ -1401,214 +1501,197 @@ int vmsvga3dSurfaceCopy(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dSurfac
                 continue;
             }
 
+            RECT RectSrc;
             RectSrc.left    = clipBox.srcx;
             RectSrc.top     = clipBox.srcy;
             RectSrc.right   = clipBox.srcx + clipBox.w;   /* exclusive */
             RectSrc.bottom  = clipBox.srcy + clipBox.h;   /* exclusive */
+
+            RECT RectDest;
             RectDest.left   = clipBox.x;
             RectDest.top    = clipBox.y;
             RectDest.right  = clipBox.x + clipBox.w;   /* exclusive */
             RectDest.bottom = clipBox.y + clipBox.h;   /* exclusive */
 
-            Log(("vmsvga3dSurfaceCopy: (StretchRect) copy src sid=%x face=%d mipmap=%d (%d,%d)(%d,%d) to dest sid=%x face=%d mipmap=%d (%d,%d)\n", sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom, sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+            LogFunc(("StretchRect copy src sid=%x face=%d mipmap=%d (%d,%d)(%d,%d) to dest sid=%x face=%d mipmap=%d (%d,%d)\n", sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom, sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
 
             if (    sidSrc == sidDest
                 &&  clipBox.srcx == clipBox.x
                 &&  clipBox.srcy == clipBox.y)
             {
-                Log(("vmsvga3dSurfaceCopy: redundant copy to the same surface at the same coordinates. Ignore. \n"));
+                LogFunc(("redundant copy to the same surface at the same coordinates. Ignore.\n"));
                 continue;
             }
             Assert(sidSrc != sidDest);
             Assert(!clipBox.srcz && !clipBox.z);
 
-            if (fSrcTexture)
-            {
-                hr = pSrcTexture->GetSurfaceLevel(src.mipmap /* Texture level */,
-                                                  &pSrc);
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
-            }
-            else
-                pSrc = pSurfaceSrc->u.pSurface;
-
-            if (fDestTexture)
-            {
-                hr = pSurfaceDest->u.pTexture->GetSurfaceLevel(dest.mipmap /* Texture level */,
-                                                              &pDest);
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
-            }
-            else
-                pDest = pSurfaceDest->u.pSurface;
-
-            /* UpdateSurface is too picky; use StretchRect instead */
-            hr = pContext->pDevice->StretchRect(pSrc, &RectSrc, pDest, &RectDest, D3DTEXF_NONE);
-
-            /* GetSurfaceLevel increases the reference count; release the objects again. */
-            if (fDestTexture)
-                pDest->Release();
-            if (fSrcTexture)
-                pSrc->Release();
+            hr = pContextDst->pDevice->StretchRect(pSrc, &RectSrc, pDest, &RectDest, D3DTEXF_NONE);
+            AssertMsgReturnStmt(hr == D3D_OK,
+                                ("StretchRect failed with %x\n", hr),
+                                D3D_RELEASE(pDest); D3D_RELEASE(pSrc),
+                                VERR_INTERNAL_ERROR);
+        }
 
-            /* Track the StretchRect operation. */
-            vmsvga3dSurfaceTrackUsage(pState, pContext, pSurfaceSrc);
-            vmsvga3dSurfaceTrackUsage(pState, pContext, pSurfaceDest);
+        D3D_RELEASE(pDest);
+        D3D_RELEASE(pSrc);
 
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceCopy: UpdateSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
-        }
+        /* Track the StretchRect operation. */
+        vmsvga3dSurfaceTrackUsage(pState, pContextDst, pSurfaceSrc);
+        vmsvga3dSurfaceTrackUsage(pState, pContextDst, pSurfaceDest);
     }
     else
-    for (uint32_t i = 0; i < cCopyBoxes; i++)
     {
-        HRESULT        hr;
-        D3DLOCKED_RECT LockedSrcRect;
-        D3DLOCKED_RECT LockedDestRect;
-        RECT           RectSrc;
-        RECT           RectDest;
-
-        SVGA3dCopyBox clipBox = pBox[i];
-        vmsvgaClipCopyBox(&pMipmapLevelSrc->size, &pMipmapLevelDest->size, &clipBox);
-        if (   !clipBox.w
-            || !clipBox.h
-            || !clipBox.d)
+        /*
+         * Copy from/to memory to/from a surface. Or mem->mem.
+         * Use the context of existing HW surface, if any.
+         */
+        PVMSVGA3DCONTEXT pContext = NULL;
+        IDirect3DSurface9 *pD3DSurf = NULL;
+
+        if (pSurfaceSrc->u.pSurface)
         {
-            LogFunc(("Skipped empty box.\n"));
-            continue;
-        }
+            AssertReturn(!pSurfaceDest->u.pSurface, VERR_INTERNAL_ERROR);
 
-        RectSrc.left    = clipBox.srcx;
-        RectSrc.top     = clipBox.srcy;
-        RectSrc.right   = clipBox.srcx + clipBox.w;   /* exclusive */
-        RectSrc.bottom  = clipBox.srcy + clipBox.h;   /* exclusive */
-        RectDest.left   = clipBox.x;
-        RectDest.top    = clipBox.y;
-        RectDest.right  = clipBox.x + clipBox.w;   /* exclusive */
-        RectDest.bottom = clipBox.y + clipBox.h;   /* exclusive */
+            rc = vmsvga3dContextFromCid(pState, pSurfaceSrc->idAssociatedContext, &pContext);
+            AssertRCReturn(rc, rc);
 
-        LogFunc(("(manual) copy sid=%x face=%d mipmap=%d (%d,%d)(%d,%d) to sid=%x face=%d mipmap=%d (%d,%d)\n",
-                 sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom,
-                 sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+            rc = vmsvga3dGetD3DSurface(pContext, pSurfaceSrc, src.face, src.mipmap, true, &pD3DSurf);
+            AssertRCReturn(rc, rc);
+        }
+        else if (pSurfaceDest->u.pSurface)
+        {
+            AssertReturn(!pSurfaceSrc->u.pSurface, VERR_INTERNAL_ERROR);
 
-        Assert(!clipBox.srcz && !clipBox.z);
-        Assert(pSurfaceSrc->cbBlock == pSurfaceDest->cbBlock);
+            rc = vmsvga3dContextFromCid(pState, pSurfaceDest->idAssociatedContext, &pContext);
+            AssertRCReturn(rc, rc);
 
-        if (!pSurfaceSrc->u.pSurface)
-        {
-            LockedSrcRect.pBits = (uint8_t *)pMipmapLevelSrc->pSurfaceData +
-                                  pMipmapLevelSrc->cbSurfacePitch * clipBox.srcy + pSurfaceSrc->cbBlock * clipBox.srcx;
-            LockedSrcRect.Pitch = pMipmapLevelSrc->cbSurfacePitch;
+            rc = vmsvga3dGetD3DSurface(pContext, pSurfaceDest, dest.face, dest.mipmap, true, &pD3DSurf);
+            AssertRCReturn(rc, rc);
         }
-        else
+
+        for (uint32_t i = 0; i < cCopyBoxes; ++i)
         {
-            /** @todo This branch is dead code. Because if the source is a hardware surface, then
-             *  the code above creates hardware surface for the destination and does the copy in hardware.
-             *  I.e. we can not get here with pSurfaceSrc->u.pSurface != NULL.
-             */
+            HRESULT        hr;
+
+            SVGA3dCopyBox clipBox = pBox[i];
+            vmsvgaClipCopyBox(&pMipmapLevelSrc->mipmapSize, &pMipmapLevelDest->mipmapSize, &clipBox);
+            if (   !clipBox.w
+                || !clipBox.h
+                || !clipBox.d)
+            {
+                LogFunc(("Skipped empty box.\n"));
+                continue;
+            }
 
-            /* Must flush the context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
-            vmsvga3dSurfaceFlush(pThis, pSurfaceSrc);
+            RECT RectSrc;
+            RectSrc.left    = clipBox.srcx;
+            RectSrc.top     = clipBox.srcy;
+            RectSrc.right   = clipBox.srcx + clipBox.w;   /* exclusive */
+            RectSrc.bottom  = clipBox.srcy + clipBox.h;   /* exclusive */
+
+            RECT RectDest;
+            RectDest.left   = clipBox.x;
+            RectDest.top    = clipBox.y;
+            RectDest.right  = clipBox.x + clipBox.w;   /* exclusive */
+            RectDest.bottom = clipBox.y + clipBox.h;   /* exclusive */
+
+            LogFunc(("(manual) copy sid=%x face=%d mipmap=%d (%d,%d)(%d,%d) to sid=%x face=%d mipmap=%d (%d,%d)\n",
+                     sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom,
+                     sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+
+            Assert(!clipBox.srcz && !clipBox.z);
+            Assert(pSurfaceSrc->cbBlock == pSurfaceDest->cbBlock);
+            Assert(pSurfaceSrc->cxBlock == pSurfaceDest->cxBlock);
+            Assert(pSurfaceSrc->cyBlock == pSurfaceDest->cyBlock);
 
-            if (fSrcTexture)
+            uint32_t cBlocksX = (clipBox.w + pSurfaceSrc->cxBlock - 1) / pSurfaceSrc->cxBlock;
+            uint32_t cBlocksY = (clipBox.h + pSurfaceSrc->cyBlock - 1) / pSurfaceSrc->cyBlock;
+
+            D3DLOCKED_RECT LockedSrcRect;
+            if (!pSurfaceSrc->u.pSurface)
             {
-                Assert(!pSurfaceSrc->bounce.pTexture);
-                hr = pSurfaceSrc->u.pTexture->LockRect(src.mipmap, /* Texture level */
-                                                       &LockedSrcRect,
-                                                       &RectSrc,
-                                                       D3DLOCK_READONLY);
+                uint32_t u32BlockX = clipBox.srcx / pSurfaceSrc->cxBlock;
+                uint32_t u32BlockY = clipBox.srcy / pSurfaceSrc->cyBlock;
+                Assert(u32BlockX * pSurfaceSrc->cxBlock == clipBox.srcx);
+                Assert(u32BlockY * pSurfaceSrc->cyBlock == clipBox.srcy);
+
+                LockedSrcRect.pBits = (uint8_t *)pMipmapLevelSrc->pSurfaceData +
+                                      pMipmapLevelSrc->cbSurfacePitch * u32BlockY + pSurfaceSrc->cbBlock * u32BlockX;
+                LockedSrcRect.Pitch = pMipmapLevelSrc->cbSurfacePitch;
             }
             else
-                hr = pSurfaceSrc->u.pSurface->LockRect(&LockedSrcRect,
-                                                       &RectSrc,
-                                                       D3DLOCK_READONLY);
-            AssertMsgReturn(hr == D3D_OK, ("LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
-        }
+            {
+                /* Must flush the context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+                vmsvga3dSurfaceFlush(pThis, pSurfaceSrc);
 
-        if (!pSurfaceDest->u.pSurface)
-        {
-            LockedDestRect.pBits = (uint8_t *)pMipmapLevelDest->pSurfaceData +
-                                   pMipmapLevelDest->cbSurfacePitch * clipBox.y + pSurfaceDest->cbBlock * clipBox.x;
-            LockedDestRect.Pitch = pMipmapLevelDest->cbSurfacePitch;
-        }
-        else
-        {
-            /* Must flush the context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
-            vmsvga3dSurfaceFlush(pThis, pSurfaceDest);
+                hr = pD3DSurf->LockRect(&LockedSrcRect, &RectSrc, D3DLOCK_READONLY);
+                AssertMsgReturnStmt(hr == D3D_OK, ("LockRect failed with %x\n", hr), D3D_RELEASE(pD3DSurf), VERR_INTERNAL_ERROR);
+            }
 
-            if (fDestTexture)
+            D3DLOCKED_RECT LockedDestRect;
+            if (!pSurfaceDest->u.pSurface)
             {
-                if (pSurfaceDest->bounce.pTexture)
-                {
-                    /* pSurfaceDest->u.pTexture can't be locked, see vmsvga3dBackCreateTexture */
-                    hr = pSurfaceDest->bounce.pTexture->LockRect(dest.mipmap, /* texture level */
-                                                                 &LockedDestRect,
-                                                                 &RectDest,
-                                                                 0);
-                }
-                else
-                {
-                    hr = pSurfaceDest->u.pTexture->LockRect(dest.mipmap, /* texture level */
-                                                            &LockedDestRect,
-                                                            &RectDest,
-                                                            0);
-                }
+                uint32_t u32BlockX = clipBox.x / pSurfaceDest->cxBlock;
+                uint32_t u32BlockY = clipBox.y / pSurfaceDest->cyBlock;
+                Assert(u32BlockX * pSurfaceDest->cxBlock == clipBox.x);
+                Assert(u32BlockY * pSurfaceDest->cyBlock == clipBox.y);
+
+                LockedDestRect.pBits = (uint8_t *)pMipmapLevelDest->pSurfaceData +
+                                       pMipmapLevelDest->cbSurfacePitch * u32BlockY + pSurfaceDest->cbBlock * u32BlockX;
+                LockedDestRect.Pitch = pMipmapLevelDest->cbSurfacePitch;
+                pSurfaceDest->fDirty = true;
             }
             else
-                hr = pSurfaceDest->u.pSurface->LockRect(&LockedDestRect,
-                                                        &RectDest,
-                                                        0);
-            AssertMsgReturn(hr == D3D_OK, ("LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
-        }
+            {
+                /* Must flush the context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+                vmsvga3dSurfaceFlush(pThis, pSurfaceDest);
 
-        uint8_t *pDest = (uint8_t *)LockedDestRect.pBits;
-        const uint8_t *pSrc = (uint8_t *)LockedSrcRect.pBits;
+                hr = pD3DSurf->LockRect(&LockedDestRect, &RectDest, 0);
+                AssertMsgReturnStmt(hr == D3D_OK, ("LockRect failed with %x\n", hr), D3D_RELEASE(pD3DSurf), VERR_INTERNAL_ERROR);
+            }
 
-        for (uint32_t j = 0; j < clipBox.h; ++j)
-        {
-            memcpy(pDest, pSrc, clipBox.w * pSurfaceSrc->cbBlock);
+            uint8_t *pDest = (uint8_t *)LockedDestRect.pBits;
+            const uint8_t *pSrc = (uint8_t *)LockedSrcRect.pBits;
+            for (uint32_t j = 0; j < cBlocksY; ++j)
+            {
+                memcpy(pDest, pSrc, cBlocksX * pSurfaceSrc->cbBlock);
+                pDest += LockedDestRect.Pitch;
+                pSrc  += LockedSrcRect.Pitch;
+            }
 
-            pDest += LockedDestRect.Pitch;
-            pSrc  += LockedSrcRect.Pitch;
+            if (pD3DSurf)
+            {
+                hr = pD3DSurf->UnlockRect();
+                AssertMsgReturn(hr == D3D_OK, ("Unlock failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
         }
 
-        if (pSurfaceDest->u.pSurface)
+        /* If the destination bounce texture has been used, then update the actual texture. */
+        if (   pSurfaceDest->u.pTexture
+            && pSurfaceDest->bounce.pTexture
+            && (   pSurfaceDest->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+                || pSurfaceDest->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE))
         {
-            if (fDestTexture)
-            {
-                if (pSurfaceDest->bounce.pTexture)
-                {
-                    hr = pSurfaceDest->bounce.pTexture->UnlockRect(dest.mipmap /* Texture level */);
-
-                    /** @todo stricter checks for associated context */
-                    PVMSVGA3DCONTEXT pContext = NULL;
-                    const uint32_t cid = pSurfaceDest->idAssociatedContext;
-                    if (   cid < pState->cContexts
-                        && pState->papContexts[cid]->id == cid)
-                        pContext = pState->papContexts[cid];
-                    else
-                        AssertFailed();
+            AssertMsgReturn(pContext, ("Context is NULL\n"), VERR_INTERNAL_ERROR);
 
-                    if (pContext)
-                    {
-                        /* Copy the new content to the actual texture object. */
-                        HRESULT hr2 = pContext->pDevice->UpdateTexture(pSurfaceDest->bounce.pTexture, pSurfaceDest->u.pTexture);
-                        AssertMsg(hr2 == D3D_OK, ("UpdateTexture failed with %x\n", hr2)); RT_NOREF(hr2);
-                    }
-                }
-                else
-                    hr = pSurfaceDest->u.pTexture->UnlockRect(dest.mipmap /* Texture level */);
+            /* Copy the new content to the actual texture object. */
+            IDirect3DBaseTexture9 *pSourceTexture;
+            IDirect3DBaseTexture9 *pDestinationTexture;
+            if (pSurfaceDest->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+            {
+                pSourceTexture = pSurfaceDest->bounce.pCubeTexture;
+                pDestinationTexture = pSurfaceDest->u.pCubeTexture;
             }
             else
-                hr = pSurfaceDest->u.pSurface->UnlockRect();
-            AssertMsgReturn(hr == D3D_OK, ("Unlock failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            {
+                pSourceTexture = pSurfaceDest->bounce.pTexture;
+                pDestinationTexture = pSurfaceDest->u.pTexture;
+            }
+            HRESULT hr2 = pContext->pDevice->UpdateTexture(pSourceTexture, pDestinationTexture);
+            AssertMsg(hr2 == D3D_OK, ("UpdateTexture failed with %x\n", hr2)); RT_NOREF(hr2);
         }
 
-        if (pSurfaceSrc->u.pSurface)
-        {
-            if (fSrcTexture)
-                hr = pSurfaceSrc->u.pTexture->UnlockRect(src.mipmap /* Texture level */);
-            else
-                hr = pSurfaceSrc->u.pSurface->UnlockRect();
-            AssertMsgReturn(hr == D3D_OK, ("Unlock failed with %x\n", hr), VERR_INTERNAL_ERROR);
-        }
+        D3D_RELEASE(pD3DSurf);
     }
 
     return VINF_SUCCESS;
@@ -1631,73 +1714,190 @@ int vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
 {
     RT_NOREF(pState);
     HRESULT hr;
-    IDirect3DTexture9 *pTexture;
 
     Assert(pSurface->hSharedObject == NULL);
+    Assert(pSurface->u.pTexture == NULL);
+    Assert(pSurface->bounce.pTexture == NULL);
+    Assert(pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_NONE);
 
-    if (    pSurface->formatD3D == D3DFMT_D24S8
-        ||  pSurface->formatD3D == D3DFMT_D24X8)
+    const uint32_t cWidth = pSurface->pMipmapLevels[0].mipmapSize.width;
+    const uint32_t cHeight = pSurface->pMipmapLevels[0].mipmapSize.height;
+    const uint32_t cDepth = pSurface->pMipmapLevels[0].mipmapSize.depth;
+    const uint32_t numMipLevels = pSurface->faces[0].numMipLevels;
+
+    /*
+     * Create D3D texture object.
+     */
+    if (pSurface->surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
+    {
+        Assert(pSurface->cFaces == 6);
+        Assert(cWidth == cHeight);
+        Assert(cDepth == 1);
+
+        hr = pContext->pDevice->CreateCubeTexture(cWidth,
+                                                  numMipLevels,
+                                                  pSurface->fUsageD3D,
+                                                  pSurface->formatD3D,
+                                                  D3DPOOL_DEFAULT,
+                                                  &pSurface->u.pCubeTexture,
+                                                  &pSurface->hSharedObject);
+        if (hr == D3D_OK)
+        {
+            /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
+            hr = pContext->pDevice->CreateCubeTexture(cWidth,
+                                                      numMipLevels,
+                                                      (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+                                                      pSurface->formatD3D,
+                                                      D3DPOOL_SYSTEMMEM,
+                                                      &pSurface->bounce.pCubeTexture,
+                                                      NULL);
+            AssertMsgReturnStmt(hr == D3D_OK,
+                                ("CreateCubeTexture (systemmem) failed with %x\n", hr),
+                                D3D_RELEASE(pSurface->u.pCubeTexture),
+                                VERR_INTERNAL_ERROR);
+        }
+        else
+        {
+            Log(("Format not accepted -> try old method\n"));
+            /* The format was probably not accepted; fall back to our old mode. */
+            hr = pContext->pDevice->CreateCubeTexture(cWidth,
+                                                      numMipLevels,
+                                                      (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) |  D3DUSAGE_DYNAMIC /* Lockable */,
+                                                      pSurface->formatD3D,
+                                                      D3DPOOL_DEFAULT,
+                                                      &pSurface->u.pCubeTexture,
+                                                      &pSurface->hSharedObject);
+            AssertMsgReturn(hr == D3D_OK, ("CreateCubeTexture (fallback) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        }
+
+        pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE;
+    }
+    else if (   pSurface->formatD3D == D3DFMT_D24S8
+             || pSurface->formatD3D == D3DFMT_D24X8)
     {
+        Assert(pSurface->cFaces == 1);
         Assert(pSurface->faces[0].numMipLevels == 1);
+        Assert(cDepth == 1);
+
         /* Use the INTZ format for a depth/stencil surface that will be used as a texture */
-        hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width,
-                                              pSurface->pMipmapLevels[0].size.height,
-                                              1,
+        hr = pContext->pDevice->CreateTexture(cWidth,
+                                              cHeight,
+                                              1, /* mip levels */
                                               D3DUSAGE_DEPTHSTENCIL,
                                               FOURCC_INTZ,
                                               D3DPOOL_DEFAULT,
                                               &pSurface->u.pTexture,
                                               &pSurface->hSharedObject /* might result in poor performance */);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: CreateTexture INTZ failed with %x\n", hr), VERR_INTERNAL_ERROR);
-        pTexture = pSurface->u.pTexture;
+        AssertMsgReturn(hr == D3D_OK, ("CreateTexture INTZ failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
         pSurface->fStencilAsTexture = true;
+        pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_TEXTURE;
     }
     else
     {
-        hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width,
-                                              pSurface->pMipmapLevels[0].size.height,
-                                              pSurface->faces[0].numMipLevels,
-                                              pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET /* required for use as a StretchRect destination */,
-                                              pSurface->formatD3D,
-                                              D3DPOOL_DEFAULT,
-                                              &pSurface->u.pTexture,
-                                              &pSurface->hSharedObject);
-        if (hr == D3D_OK)
+        if (cDepth > 1)
         {
-            /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
-            hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width,
-                                                  pSurface->pMipmapLevels[0].size.height,
-                                                  pSurface->faces[0].numMipLevels,
-                                                  (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
-                                                  pSurface->formatD3D,
-                                                  D3DPOOL_SYSTEMMEM,
-                                                  &pSurface->bounce.pTexture,
-                                                  NULL);
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: CreateTexture (systemmem) failed with %x\n", hr), VERR_INTERNAL_ERROR);
-            pTexture = pSurface->bounce.pTexture;
+            hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+                                                        cHeight,
+                                                        cDepth,
+                                                        numMipLevels,
+                                                        pSurface->fUsageD3D,
+                                                        pSurface->formatD3D,
+                                                        D3DPOOL_DEFAULT,
+                                                        &pSurface->u.pVolumeTexture,
+                                                        &pSurface->hSharedObject);
+            if (hr == D3D_OK)
+            {
+                /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
+                hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+                                                            cHeight,
+                                                            cDepth,
+                                                            numMipLevels,
+                                                            (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+                                                            pSurface->formatD3D,
+                                                            D3DPOOL_SYSTEMMEM,
+                                                            &pSurface->bounce.pVolumeTexture,
+                                                            NULL);
+                AssertMsgReturnStmt(hr == D3D_OK,
+                                    ("CreateVolumeTexture (systemmem) failed with %x\n", hr),
+                                    D3D_RELEASE(pSurface->u.pVolumeTexture),
+                                    VERR_INTERNAL_ERROR);
+            }
+            else
+            {
+                Log(("Format not accepted -> try old method\n"));
+                /* The format was probably not accepted; fall back to our old mode. */
+                hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+                                                            cHeight,
+                                                            cDepth,
+                                                            numMipLevels,
+                                                            (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) |  D3DUSAGE_DYNAMIC /* Lockable */,
+                                                            pSurface->formatD3D,
+                                                            D3DPOOL_DEFAULT,
+                                                            &pSurface->u.pVolumeTexture,
+                                                            &pSurface->hSharedObject);
+                AssertMsgReturn(hr == D3D_OK, ("CreateVolumeTexture (fallback) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+
+            pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE;
         }
         else
         {
-            Log(("Format not accepted -> try old method\n"));
-            /* The format was probably not accepted; fall back to our old mode. */
-            hr = pContext->pDevice->CreateTexture(pSurface->pMipmapLevels[0].size.width,
-                                                  pSurface->pMipmapLevels[0].size.height,
-                                                  pSurface->faces[0].numMipLevels,
-                                                  (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) |  D3DUSAGE_DYNAMIC /* Lockable */,
+            Assert(pSurface->cFaces == 1);
+
+            hr = pContext->pDevice->CreateTexture(cWidth,
+                                                  cHeight,
+                                                  numMipLevels,
+                                                  pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET /* required for use as a StretchRect destination */,
                                                   pSurface->formatD3D,
                                                   D3DPOOL_DEFAULT,
                                                   &pSurface->u.pTexture,
-                                                  &pSurface->hSharedObject /* might result in poor performance */);
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: CreateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
-            pTexture = pSurface->u.pTexture;
+                                                  &pSurface->hSharedObject);
+            if (hr == D3D_OK)
+            {
+                /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
+                hr = pContext->pDevice->CreateTexture(cWidth,
+                                                      cHeight,
+                                                      numMipLevels,
+                                                      (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+                                                      pSurface->formatD3D,
+                                                      D3DPOOL_SYSTEMMEM,
+                                                      &pSurface->bounce.pTexture,
+                                                      NULL);
+                AssertMsgReturn(hr == D3D_OK, ("CreateTexture (systemmem) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+            else
+            {
+                Log(("Format not accepted -> try old method\n"));
+                /* The format was probably not accepted; fall back to our old mode. */
+                hr = pContext->pDevice->CreateTexture(cWidth,
+                                                      cHeight,
+                                                      numMipLevels,
+                                                      (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) |  D3DUSAGE_DYNAMIC /* Lockable */,
+                                                      pSurface->formatD3D,
+                                                      D3DPOOL_DEFAULT,
+                                                      &pSurface->u.pTexture,
+                                                      &pSurface->hSharedObject /* might result in poor performance */);
+                AssertMsgReturn(hr == D3D_OK, ("CreateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+
+            pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_TEXTURE;
         }
     }
 
+    Assert(hr == D3D_OK);
+
     if (pSurface->autogenFilter != SVGA3D_TEX_FILTER_NONE)
     {
         /* Set the mip map generation filter settings. */
-        hr = pSurface->u.pTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)pSurface->autogenFilter);
+        IDirect3DBaseTexture9 *pBaseTexture;
+        if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+            pBaseTexture = pSurface->u.pVolumeTexture;
+        else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+            pBaseTexture = pSurface->u.pCubeTexture;
+        else
+            pBaseTexture = pSurface->u.pTexture;
+        hr = pBaseTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)pSurface->autogenFilter);
         AssertMsg(hr == D3D_OK, ("vmsvga3dBackCreateTexture: SetAutoGenFilterType failed with %x\n", hr));
     }
 
@@ -1707,53 +1907,158 @@ int vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
      * The OpenGL backend does this too.
      */
     Log(("vmsvga3dBackCreateTexture: sync texture\n"));
-    for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+
+    if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
     {
-        D3DLOCKED_RECT LockedRect;
+        IDirect3DVolumeTexture9 *pVolumeTexture = pSurface->bounce.pVolumeTexture ?
+                                                      pSurface->bounce.pVolumeTexture :
+                                                      pSurface->u.pVolumeTexture;
 
-        hr = pTexture->LockRect(i, /* texture level */
-                                &LockedRect,
-                                NULL,   /* entire texture */
-                                0);
+        for (uint32_t i = 0; i < numMipLevels; ++i)
+        {
+            D3DLOCKED_BOX LockedVolume;
+            hr = pVolumeTexture->LockBox(i, &LockedVolume, NULL, D3DLOCK_DISCARD);
+            AssertMsgBreak(hr == D3D_OK, ("LockBox failed with %x\n", hr));
 
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->pMipmapLevels[i];
 
-        Log(("vmsvga3dBackCreateTexture: sync texture mipmap level %d (pitch %x vs %x)\n", i, LockedRect.Pitch, pSurface->pMipmapLevels[i].cbSurfacePitch));
+            LogFunc(("sync volume texture mipmap level %d (pitch row %x vs %x, slice %x vs %x)\n",
+                      i, LockedVolume.RowPitch, pMipLevel->cbSurfacePitch, LockedVolume.SlicePitch, pMipLevel->cbSurfacePlane));
 
-        uint8_t *pDest = (uint8_t *)LockedRect.pBits;
-        uint8_t *pSrc  = (uint8_t *)pSurface->pMipmapLevels[i].pSurfaceData;
-        for (uint32_t j = 0; j < pSurface->pMipmapLevels[i].size.height; j++)
-        {
-            memcpy(pDest, pSrc, pSurface->pMipmapLevels[i].cbSurfacePitch);
 
-            pDest += LockedRect.Pitch;
-            pSrc  += pSurface->pMipmapLevels[i].cbSurfacePitch;
-        }
+            uint8_t *pDst = (uint8_t *)LockedVolume.pBits;
+            const uint8_t *pSrc = (uint8_t *)pMipLevel->pSurfaceData;
+            for (uint32_t d = 0; d < cDepth; ++d)
+            {
+                uint8_t *pRowDst = pDst;
+                const uint8_t *pRowSrc = pSrc;
+                for (uint32_t h = 0; h < pMipLevel->cBlocksY; ++h)
+                {
+                    memcpy(pRowDst, pRowSrc, pMipLevel->cbSurfacePitch);
+                    pRowDst += LockedVolume.RowPitch;
+                    pRowSrc += pMipLevel->cbSurfacePitch;
+                }
+                pDst += LockedVolume.SlicePitch;
+                pSrc += pMipLevel->cbSurfacePlane;
+            }
 
-        hr = pTexture->UnlockRect(i /* texture level */);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            hr = pVolumeTexture->UnlockBox(i);
+            AssertMsgBreak(hr == D3D_OK, ("UnlockBox failed with %x\n", hr));
 
-        pSurface->pMipmapLevels[i].fDirty = false;
+            pMipLevel->fDirty = false;
+        }
     }
-
-    if (pSurface->bounce.pTexture)
+    else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
     {
-        Log(("vmsvga3dBackCreateTexture: sync dirty texture from bounce buffer\n"));
-
-        hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: UpdateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+        IDirect3DCubeTexture9 *pCubeTexture = pSurface->bounce.pCubeTexture ?
+                                                  pSurface->bounce.pCubeTexture :
+                                                  pSurface->u.pCubeTexture;
 
-        /* We will now use the bounce texture for all memory accesses, so free our surface memory buffer. */
-        for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+        for (uint32_t iFace = 0; iFace < 6; ++iFace)
         {
-            RTMemFree(pSurface->pMipmapLevels[i].pSurfaceData);
-            pSurface->pMipmapLevels[i].pSurfaceData = NULL;
-        }
-    }
-    pSurface->fDirty = false;
+            const D3DCUBEMAP_FACES Face = vmsvga3dCubemapFaceFromIndex(iFace);
 
-    pSurface->flags              |= SVGA3D_SURFACE_HINT_TEXTURE;
-    pSurface->idAssociatedContext = idAssociatedContext;
+            for (uint32_t i = 0; i < numMipLevels; ++i)
+            {
+                D3DLOCKED_RECT LockedRect;
+                hr = pCubeTexture->LockRect(Face,
+                                            i, /* texture level */
+                                            &LockedRect,
+                                            NULL,   /* entire texture */
+                                            0);
+                AssertMsgBreak(hr == D3D_OK, ("LockRect failed with %x\n", hr));
+
+                PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->pMipmapLevels[iFace * numMipLevels + i];
+
+                LogFunc(("sync texture face %d mipmap level %d (pitch %x vs %x)\n",
+                          iFace, i, LockedRect.Pitch, pMipLevel->cbSurfacePitch));
+
+                uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+                const uint8_t *pSrc = (uint8_t *)pMipLevel->pSurfaceData;
+                for (uint32_t j = 0; j < pMipLevel->cBlocksY; ++j)
+                {
+                    memcpy(pDest, pSrc, pMipLevel->cbSurfacePitch);
+
+                    pDest += LockedRect.Pitch;
+                    pSrc  += pMipLevel->cbSurfacePitch;
+                }
+
+                hr = pCubeTexture->UnlockRect(Face, i /* texture level */);
+                AssertMsgBreak(hr == D3D_OK, ("UnlockRect failed with %x\n", hr));
+
+                pMipLevel->fDirty = false;
+            }
+
+            if (hr != D3D_OK)
+                break;
+        }
+
+        if (hr != D3D_OK)
+        {
+            D3D_RELEASE(pSurface->bounce.pCubeTexture);
+            D3D_RELEASE(pSurface->u.pCubeTexture);
+            return VERR_INTERNAL_ERROR;
+        }
+    }
+    else
+    {
+        IDirect3DTexture9 *pTexture = pSurface->bounce.pTexture ? pSurface->bounce.pTexture : pSurface->u.pTexture;
+
+        for (uint32_t i = 0; i < numMipLevels; ++i)
+        {
+            D3DLOCKED_RECT LockedRect;
+
+            hr = pTexture->LockRect(i, /* texture level */
+                                    &LockedRect,
+                                    NULL,   /* entire texture */
+                                    0);
+
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+            LogFunc(("sync texture mipmap level %d (pitch %x vs %x)\n", i, LockedRect.Pitch, pSurface->pMipmapLevels[i].cbSurfacePitch));
+
+            uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+            const uint8_t *pSrc = (uint8_t *)pSurface->pMipmapLevels[i].pSurfaceData;
+            for (uint32_t j = 0; j < pSurface->pMipmapLevels[i].cBlocksY; ++j)
+            {
+                memcpy(pDest, pSrc, pSurface->pMipmapLevels[i].cbSurfacePitch);
+
+                pDest += LockedRect.Pitch;
+                pSrc  += pSurface->pMipmapLevels[i].cbSurfacePitch;
+            }
+
+            hr = pTexture->UnlockRect(i /* texture level */);
+            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+            pSurface->pMipmapLevels[i].fDirty = false;
+        }
+    }
+
+    if (pSurface->bounce.pTexture)
+    {
+        Log(("vmsvga3dBackCreateTexture: sync dirty texture from bounce buffer\n"));
+
+        if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+            hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pVolumeTexture, pSurface->u.pVolumeTexture);
+        else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+            hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pCubeTexture, pSurface->u.pCubeTexture);
+        else
+            hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
+        AssertMsgReturn(hr == D3D_OK, ("UpdateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        /* We will now use the bounce texture for all memory accesses, so free our surface memory buffer. */
+        for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
+        {
+            RTMemFree(pSurface->pMipmapLevels[i].pSurfaceData);
+            pSurface->pMipmapLevels[i].pSurfaceData = NULL;
+        }
+    }
+    pSurface->fDirty = false;
+
+    Assert(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_NONE);
+
+    pSurface->surfaceFlags       |= SVGA3D_SURFACE_HINT_TEXTURE;
+    pSurface->idAssociatedContext = idAssociatedContext;
     return VINF_SUCCESS;
 }
 
@@ -1765,20 +2070,26 @@ int vmsvga3dBackCreateTexture(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
  * @param   pThis               The VGA device instance.
  * @param   pState              The VMSVGA3d state.
  * @param   pDstSurface         The destination host surface.
+ * @param   uDstFace            The destination face (valid).
  * @param   uDstMipmap          The destination mipmap level (valid).
  * @param   pDstBox             The destination box.
  * @param   pSrcSurface         The source host surface.
+ * @param   uSrcFace            The destination face (valid).
  * @param   uSrcMipmap          The source mimap level (valid).
  * @param   pSrcBox             The source box.
  * @param   enmMode             The strecht blt mode .
  * @param   pContext            The VMSVGA3d context (already current for OGL).
  */
 int vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
-                                  PVMSVGA3DSURFACE pDstSurface, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
-                                  PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+                                  PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+                                  PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
                                   SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext)
 {
     HRESULT hr;
+    int rc;
+
+    AssertReturn(pSrcSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED);
+    AssertReturn(pDstSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED);
 
     /* Flush the drawing pipeline for this surface as it could be used in a shared context. */
     vmsvga3dSurfaceFlush(pThis, pSrcSurface);
@@ -1799,24 +2110,12 @@ int vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
     Assert(!pDstBox->z);
 
     IDirect3DSurface9 *pSrc;
-    bool const fSrcTexture  = !!(pSrcSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE);
-    if (fSrcTexture)
-    {
-        hr = pSrcSurface->u.pTexture->GetSurfaceLevel(uSrcMipmap /* Texture level */, &pSrc);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
-    }
-    else
-        pSrc = pSrcSurface->u.pSurface;
+    rc = vmsvga3dGetD3DSurface(pContext, pSrcSurface, uSrcFace, uSrcMipmap, false, &pSrc);
+    AssertRCReturn(rc, rc);
 
     IDirect3DSurface9 *pDst;
-    bool const fDstTexture = !!(pDstSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE);
-    if (fDstTexture)
-    {
-        hr = pDstSurface->u.pTexture->GetSurfaceLevel(uDstMipmap /* Texture level */, &pDst);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
-    }
-    else
-        pDst = pDstSurface->u.pSurface;
+    rc = vmsvga3dGetD3DSurface(pContext, pDstSurface, uDstFace, uDstMipmap, false, &pDst);
+    AssertRCReturn(rc, rc);
 
     D3DTEXTUREFILTERTYPE moded3d;
     switch (enmMode)
@@ -1837,13 +2136,10 @@ int vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
 
     hr = pContext->pDevice->StretchRect(pSrc, &RectSrc, pDst, &RectDst, moded3d);
 
-    /* GetSurfaceLevel increases the reference count; release the objects again. */
-    if (fDstTexture)
-        pDst->Release();
-    if (fSrcTexture)
-        pSrc->Release();
+    D3D_RELEASE(pDst);
+    D3D_RELEASE(pSrc);
 
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     /* Track the StretchRect operation. */
     vmsvga3dSurfaceTrackUsage(pState, pContext, pSrcSurface);
@@ -1860,137 +2156,115 @@ int vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
  * @param   pThis               The VGA device instance data.
  * @param   pState              The VMSVGA3d state.
  * @param   pSurface            The host surface.
+ * @param   pMipLevel           Mipmap level. The caller knows it already.
+ * @param   uHostFace           The host face (valid).
  * @param   uHostMipmap         The host mipmap level (valid).
  * @param   GuestPtr            The guest pointer.
- * @param   cbSrcPitch          The guest (?) pitch.
+ * @param   cbGuestPitch        The guest pitch.
  * @param   transfer            The transfer direction.
- * @param   pBox                The box to copy.
+ * @param   pBox                The box to copy (clipped, valid).
  * @param   pContext            The context (for OpenGL).
  * @param   rc                  The current rc for all boxes.
  * @param   iBox                The current box number (for Direct 3D).
  */
-int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface, uint32_t uHostMipmap,
-                                  SVGAGuestPtr GuestPtr, uint32_t cbSrcPitch, SVGA3dTransferType transfer,
+int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+                                  PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+                                  SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
                                   SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox)
 {
     HRESULT hr = D3D_OK;
-    DWORD dwFlags = transfer == SVGA3D_READ_HOST_VRAM ? D3DLOCK_READONLY : 0;
-    bool fTexture = false;
-    bool fVertex = false;
-    bool fRenderTargetTexture = false;
-    switch (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
-    {
-    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
-        fRenderTargetTexture = true;
-        /* no break */
-    case SVGA3D_SURFACE_HINT_TEXTURE:
-        fTexture = true;
-        /* no break */
-    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
-        if (pSurface->fStencilAsTexture)
-            fTexture = true;
-        /* no break */
-    case SVGA3D_SURFACE_HINT_RENDERTARGET:
+    const uint32_t u32SurfHints = pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
+    const DWORD dwFlags = transfer == SVGA3D_READ_HOST_VRAM ? D3DLOCK_READONLY : 0;
+    // if (u32SurfHints != 0x18 && u32SurfHints != 0x60) ASMBreakpoint();
+
+    AssertReturn(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED);
+
+    const bool fTexture =    pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+                          || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE;
+    if (   pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE
+        || fTexture)
     {
-        D3DLOCKED_RECT LockedRect;
-        RECT Rect;
+        rc = vmsvga3dContextFromCid(pState, pSurface->idAssociatedContext, &pContext);
+        AssertRCReturn(rc, rc);
 
-        Rect.left   = pBox->x;
-        Rect.top    = pBox->y;
-        Rect.right  = pBox->x + pBox->w;   /* exclusive */
-        Rect.bottom = pBox->y + pBox->h;   /* exclusive */
+        /* Get the surface involved in the transfer. */
+        IDirect3DSurface9 *pSurf;
+        rc = vmsvga3dGetD3DSurface(pContext, pSurface, uHostFace, uHostMipmap, true, &pSurf);
+        AssertRCReturn(rc, rc);
 
         /** @todo inefficient for VRAM buffers!! */
         if (fTexture)
         {
             if (pSurface->bounce.pTexture)
             {
-                if (    transfer == SVGA3D_READ_HOST_VRAM
-                    &&  fRenderTargetTexture
-                    &&  iBox == 0 /* only the first time */)
+                if (   transfer == SVGA3D_READ_HOST_VRAM
+                    && RT_BOOL(u32SurfHints & SVGA3D_SURFACE_HINT_RENDERTARGET)
+                    && iBox == 0 /* only the first time */)
                 {
-                    IDirect3DSurface9 *pSrc, *pDest;
-
-                    /** @todo stricter checks for associated context */
-                    uint32_t cid = pSurface->idAssociatedContext;
-                    if (    cid >= pState->cContexts
-                        ||  pState->papContexts[cid]->id != cid)
-                    {
-                        Log(("vmsvga3dSurfaceDMA invalid context id (%x - %x)!\n", cid, (cid >= pState->cContexts) ? -1 : pState->papContexts[cid]->id));
-                        AssertFailedReturn(VERR_INVALID_PARAMETER);
-                    }
-                    pContext = pState->papContexts[cid];
+                    /* Copy the texture mipmap level to the bounce texture. */
 
-                    /** @todo only sync when something was actually rendered (since the last sync) */
-                    Log(("vmsvga3dSurfaceDMA: sync bounce buffer\n"));
-                    hr = pSurface->bounce.pTexture->GetSurfaceLevel(uHostMipmap, &pDest);
-                    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                    /* Source is the texture, destination is the bounce texture. */
+                    IDirect3DSurface9 *pSrc;
+                    rc = vmsvga3dGetD3DSurface(pContext, pSurface, uHostFace, uHostMipmap, false, &pSrc);
+                    AssertRCReturn(rc, rc);
 
-                    hr = pSurface->u.pTexture->GetSurfaceLevel(uHostMipmap, &pSrc);
-                    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                    Assert(pSurf != pSrc);
 
-                    hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
-                    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                    hr = pContext->pDevice->GetRenderTargetData(pSrc, pSurf);
+                    AssertMsgReturn(hr == D3D_OK, ("GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-                    pSrc->Release();
-                    pDest->Release();
+                    D3D_RELEASE(pSrc);
                 }
-
-                hr = pSurface->bounce.pTexture->LockRect(uHostMipmap, /* texture level */
-                                                         &LockedRect,
-                                                         &Rect,
-                                                         dwFlags);
             }
-            else
-                hr = pSurface->u.pTexture->LockRect(uHostMipmap, /* texture level */
-                                                    &LockedRect,
-                                                    &Rect,
-                                                    dwFlags);
         }
-        else
-            hr = pSurface->u.pSurface->LockRect(&LockedRect,
-                                                &Rect,
-                                                dwFlags);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-        if (fTexture)
-            Log(("Lock sid=%x TEXTURE (bounce=%d) memory for rectangle (%d,%d)(%d,%d)\n", pSurface->id, !!(pSurface->bounce.pTexture), Rect.left, Rect.top, Rect.right, Rect.bottom));
-        else
-            Log(("Lock sid=%x %s memory for rectangle (%d,%d)(%d,%d)\n", pSurface->id, (pSurface->flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL) ? "DEPTH-STENCIL" : "RENDERTARGET", Rect.left, Rect.top, Rect.right, Rect.bottom));
+        RECT Rect;
+        Rect.left   = pBox->x;
+        Rect.top    = pBox->y;
+        Rect.right  = pBox->x + pBox->w;   /* exclusive */
+        Rect.bottom = pBox->y + pBox->h;   /* exclusive */
+
+        D3DLOCKED_RECT LockedRect;
+        hr = pSurf->LockRect(&LockedRect, &Rect, dwFlags);
+        AssertMsgReturn(hr == D3D_OK, ("LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        LogFunc(("Lock sid=%x %s(bounce=%d) memory for rectangle (%d,%d)(%d,%d)\n",
+                 pSurface->id, fTexture ? "TEXTURE " : "", RT_BOOL(pSurface->bounce.pTexture),
+                 Rect.left, Rect.top, Rect.right, Rect.bottom));
+
+        uint32_t u32BlockX = pBox->srcx / pSurface->cxBlock;
+        uint32_t u32BlockY = pBox->srcy / pSurface->cyBlock;
+        Assert(u32BlockX * pSurface->cxBlock == pBox->srcx);
+        Assert(u32BlockY * pSurface->cyBlock == pBox->srcy);
+        uint32_t cBlocksX = (pBox->w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+        uint32_t cBlocksY = (pBox->h + pSurface->cyBlock - 1) / pSurface->cyBlock;
 
         rc = vmsvgaGMRTransfer(pThis,
                                transfer,
                                (uint8_t *)LockedRect.pBits,
                                LockedRect.Pitch,
                                GuestPtr,
-                               pBox->srcx * pSurface->cbBlock + pBox->srcy * cbSrcPitch,
-                               cbSrcPitch,
-                               pBox->w * pSurface->cbBlock,
-                               pBox->h);
+                               u32BlockX * pSurface->cbBlock + u32BlockY * cbGuestPitch,
+                               cbGuestPitch,
+                               cBlocksX * pSurface->cbBlock,
+                               cBlocksY);
         AssertRC(rc);
 
-        Log4(("first line:\n%.*Rhxd\n", pBox->w * pSurface->cbBlock, LockedRect.pBits));
+        Log4(("first line:\n%.*Rhxd\n", cBlocksX * pSurface->cbBlock, LockedRect.pBits));
+
+        hr = pSurf->UnlockRect();
+
+        D3D_RELEASE(pSurf);
+
+        AssertMsgReturn(hr == D3D_OK, ("UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
         if (fTexture)
         {
             if (pSurface->bounce.pTexture)
             {
-                hr = pSurface->bounce.pTexture->UnlockRect(uHostMipmap);
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
-
                 if (transfer == SVGA3D_WRITE_HOST_VRAM)
                 {
-                    /** @todo stricter checks for associated context */
-                    uint32_t cid = pSurface->idAssociatedContext;
-                    if (    cid >= pState->cContexts
-                        ||  pState->papContexts[cid]->id != cid)
-                    {
-                        Log(("vmsvga3dSurfaceDMA invalid context id!\n"));
-                        AssertFailedReturn(VERR_INVALID_PARAMETER);
-                    }
-                    pContext = pState->papContexts[cid];
-
-                    Log(("vmsvga3dSurfaceDMA: sync texture from bounce buffer\n"));
+                    LogFunc(("Sync texture from bounce buffer\n"));
 
                     /* Copy the new contents to the actual texture object. */
                     hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
@@ -2000,61 +2274,90 @@ int vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVMSVGA3DSTATE pState, PVMSVG
                     vmsvga3dSurfaceTrackUsage(pState, pContext, pSurface);
                 }
             }
-            else
-                hr = pSurface->u.pTexture->UnlockRect(uHostMipmap);
         }
-        else
-            hr = pSurface->u.pSurface->UnlockRect();
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceDMA: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
-        break;
     }
+    else if (   pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER
+             || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_INDEX_BUFFER)
+    {
+        /*
+         * Mesa SVGA driver can use the same buffer either for vertex or index data.
+         * But D3D distinguishes between index and vertex buffer objects.
+         * Therefore it should be possible to switch the buffer type on the fly.
+         *
+         * Always save the data to the memory buffer in pSurface->pMipmapLevels and,
+         * if necessary, recreate the corresponding D3D object with the data.
+         */
 
-    case SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_INDEXBUFFER:
-    case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
-        fVertex = RT_BOOL(pSurface->fu32ActualUsageFlags & SVGA3D_SURFACE_HINT_VERTEXBUFFER);
-        /* no break */
+        /* Buffers are uncompressed. */
+        AssertReturn(pSurface->cxBlock == 1 && pSurface->cyBlock == 1, VERR_INTERNAL_ERROR);
 
-    case SVGA3D_SURFACE_HINT_INDEXBUFFER:
-    {
-        uint8_t *pData;
-        unsigned uDestOffset;
+#ifdef OLD_DRAW_PRIMITIVES
+        /* Current type of the buffer. */
+        const bool fVertex = pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER;
+#endif
 
-        uDestOffset = pBox->x * pSurface->cbBlock + pBox->y * pSurface->pMipmapLevels[uHostMipmap].cbSurfacePitch;
-        AssertReturn(uDestOffset + pBox->w * pSurface->cbBlock + (pBox->h - 1) * pSurface->pMipmapLevels[uHostMipmap].cbSurfacePitch <= pSurface->pMipmapLevels[uHostMipmap].cbSurface, VERR_INTERNAL_ERROR);
+        /* Caller already clipped pBox and buffers are 1-dimensional. */
+        Assert(pBox->y == 0 && pBox->h == 1 && pBox->z == 0 && pBox->d == 1);
 
-        /** @todo lock only as much as we really need */
-        if (fVertex)
-            hr = pSurface->u.pVertexBuffer->Lock(0, 0, (void **)&pData, dwFlags);
-        else
-            hr = pSurface->u.pIndexBuffer->Lock(0, 0, (void **)&pData, dwFlags);
-        AssertMsg(hr == D3D_OK, ("vmsvga3dSurfaceDMA: Lock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+        const uint32_t uHostOffset = pBox->x * pSurface->cbBlock;
+        const uint32_t cbWidth = pBox->w * pSurface->cbBlock;
+
+        AssertReturn(uHostOffset < pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+        AssertReturn(cbWidth <= pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+        AssertReturn(uHostOffset <= pMipLevel->cbSurface - cbWidth, VERR_INTERNAL_ERROR);
 
-        Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n", (fVertex) ? "vertex" : "index", pBox->x, pBox->y, pBox->x + pBox->w, pBox->y + pBox->h));
+        uint8_t *pu8HostData = (uint8_t *)pMipLevel->pSurfaceData + uHostOffset;
 
+        const uint32_t uGuestOffset = pBox->srcx * pSurface->cbBlock;
+
+        /* Copy data between the guest and the host buffer. */
         rc = vmsvgaGMRTransfer(pThis,
                                transfer,
-                               pData + uDestOffset,
-                               pSurface->pMipmapLevels[uHostMipmap].cbSurfacePitch,
+                               pu8HostData,
+                               pMipLevel->cbSurfacePitch,
                                GuestPtr,
-                               pBox->srcx * pSurface->cbBlock + pBox->srcy * cbSrcPitch,
-                               cbSrcPitch,
-                               pBox->w * pSurface->cbBlock,
-                               pBox->h);
+                               uGuestOffset,
+                               cbGuestPitch,
+                               cbWidth,
+                               1); /* Buffers are 1-dimensional */
         AssertRC(rc);
 
-        Log4(("first line:\n%.*Rhxd\n", cbSrcPitch, pData));
+        Log4(("Buffer first line:\n%.*Rhxd\n", cbWidth, pu8HostData));
+
+        /* Do not bother to copy the data to the D3D resource now. vmsvga3dDrawPrimitives will do that.
+         * The SVGA driver may use the same surface for both index and vertex data.
+         */
+
+        /* Make sure that vmsvga3dDrawPrimitives fetches the new data. */
+        pMipLevel->fDirty = true;
+        pSurface->fDirty = true;
+
+#ifdef OLD_DRAW_PRIMITIVES
+        /* Also copy the data to the current D3D buffer object. */
+        uint8_t *pu8Buffer = NULL;
+        /** @todo lock only as much as we really need */
+        if (fVertex)
+            hr = pSurface->u.pVertexBuffer->Lock(0, 0, (void **)&pu8Buffer, dwFlags);
+        else
+            hr = pSurface->u.pIndexBuffer->Lock(0, 0, (void **)&pu8Buffer, dwFlags);
+        AssertMsgReturn(hr == D3D_OK, ("Lock %s failed with %x\n", fVertex ? "vertex" : "index", hr), VERR_INTERNAL_ERROR);
+
+        LogFunc(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n", fVertex ? "vertex" : "index", pBox->x, pBox->y, pBox->x + pBox->w, pBox->y + pBox->h));
+
+        const uint8_t *pu8Src = pu8HostData;
+        uint8_t *pu8Dst = pu8Buffer + uHostOffset;
+        memcpy(pu8Dst, pu8Src, cbWidth);
 
         if (fVertex)
             hr = pSurface->u.pVertexBuffer->Unlock();
         else
             hr = pSurface->u.pIndexBuffer->Unlock();
-        AssertMsg(hr == D3D_OK, ("vmsvga3dSurfaceDMA: Unlock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
-        break;
+        AssertMsg(hr == D3D_OK, ("Unlock %s failed with %x\n", fVertex ? "vertex" : "index", hr));
+#endif
     }
-
-    default:
-        AssertMsgFailed(("Unsupported surface hint 0x%08X\n", pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK));
-        break;
+    else
+    {
+        AssertMsgFailed(("Unsupported surface hint 0x%08X, type %d\n", u32SurfHints, pSurface->enmD3DResType));
     }
 
     return rc;
@@ -2167,7 +2470,7 @@ int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, uint32_t dest, SVGASignedRect d
                 AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceStretchBlt: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
                 pContext->pDevice->ColorFill(pSrc, NULL, (D3DCOLOR)0x11122255);
-                pSrc->Release();
+                D3D_RELEASE(pSrc);
             }
         }
 #endif
@@ -2213,14 +2516,14 @@ int vmsvga3dGenerateMipmaps(PVGASTATE pThis, uint32_t sid, SVGA3dTextureFilter f
         pContext = pState->papContexts[cid];
 
         /* Unknown surface type; turn it into a texture. */
-        Log(("vmsvga3dGenerateMipmaps: unknown src surface sid=%x type=%d format=%d -> create texture\n", sid, pSurface->flags, pSurface->format));
+        LogFunc(("unknown src surface sid=%x type=%d format=%d -> create texture\n", sid, pSurface->surfaceFlags, pSurface->format));
         rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pSurface);
         AssertRCReturn(rc, rc);
     }
     else
     {
         hr = pSurface->u.pTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)filter);
-        AssertMsg(hr == D3D_OK, ("vmsvga3dGenerateMipmaps: SetAutoGenFilterType failed with %x\n", hr));
+        AssertMsg(hr == D3D_OK, ("SetAutoGenFilterType failed with %x\n", hr));
     }
 
     /* Generate the mip maps. */
@@ -2234,44 +2537,32 @@ int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3
     PVMSVGA3DSTATE      pState = pThis->svga.p3dState;
     PVMSVGA3DSURFACE    pSurface;
     PVMSVGA3DCONTEXT    pContext;
-    uint32_t            cid;
     HRESULT             hr;
+    int                 rc;
     IDirect3DSurface9  *pBackBuffer;
     IDirect3DSurface9  *pSurfaceD3D;
 
     AssertReturn(pState, VERR_NO_MEMORY);
-    AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
-    AssertReturn(sid < pState->cSurfaces && pState->papSurfaces[sid]->id == sid, VERR_INVALID_PARAMETER);
 
-    pSurface = pState->papSurfaces[sid];
+    rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+    AssertRCReturn(rc, rc);
+
     AssertReturn(pSurface->idAssociatedContext != SVGA3D_INVALID_ID, VERR_INTERNAL_ERROR);
 
-    /** @todo stricter checks for associated context */
-    cid = pSurface->idAssociatedContext;
-    Log(("vmsvga3dCommandPresent: sid=%x cRects=%d cid=%x\n", sid, cRects, cid));
-    for (uint32_t i=0; i < cRects; i++)
+    LogFunc(("sid=%x cRects=%d cid=%x\n", sid, cRects, pSurface->idAssociatedContext));
+    for (uint32_t i = 0; i < cRects; ++i)
     {
-        Log(("vmsvga3dCommandPresent: rectangle %d src=(%d,%d) (%d,%d)(%d,%d)\n", i, pRect[i].srcx, pRect[i].srcy, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
+        LogFunc(("rectangle %d src=(%d,%d) (%d,%d)(%d,%d)\n", i, pRect[i].srcx, pRect[i].srcy, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
     }
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dCommandPresent invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    rc = vmsvga3dContextFromCid(pState, pSurface->idAssociatedContext, &pContext);
+    AssertRCReturn(rc, rc);
 
     hr = pContext->pDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: GetBackBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("GetBackBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
-    {
-        hr = pSurface->u.pTexture->GetSurfaceLevel(0, &pSurfaceD3D);
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
-    }
-    else
-        pSurfaceD3D = pSurface->u.pSurface;
+    rc = vmsvga3dGetD3DSurface(pContext, pSurface, 0, 0, false, &pSurfaceD3D);
+    AssertRCReturn(rc, rc);
 
     /* Read the destination viewport specs in one go to try avoid some unnecessary update races. */
     VMSVGAVIEWPORT const DstViewport = pThis->svga.viewport;
@@ -2301,8 +2592,9 @@ int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3
     /*
      * Blit the surface rectangle(s) to the back buffer.
      */
-    uint32_t const cxSurface = pSurface->pMipmapLevels[0].size.width;
-    uint32_t const cySurface = pSurface->pMipmapLevels[0].size.height;
+    Assert(pSurface->cxBlock == 1 && pSurface->cyBlock == 1);
+    uint32_t const cxSurface = pSurface->pMipmapLevels[0].mipmapSize.width;
+    uint32_t const cySurface = pSurface->pMipmapLevels[0].mipmapSize.height;
     for (uint32_t i = 0; i < cRects; i++)
     {
         SVGA3dCopyRect ClippedRect = pRect[i];
@@ -2447,15 +2739,14 @@ int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3
         AssertBreak(hr == D3D_OK);
     }
 
-    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
-        pSurfaceD3D->Release();
+    D3D_RELEASE(pSurfaceD3D);
+    D3D_RELEASE(pBackBuffer);
 
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     hr = pContext->pDevice->Present(NULL, NULL, NULL, NULL);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandPresent: Present failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("Present failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-    pBackBuffer->Release();
     return VINF_SUCCESS;
 }
 
@@ -2475,11 +2766,11 @@ int vmsvga3dContextDefine(PVGASTATE pThis, uint32_t cid)
     D3DPRESENT_PARAMETERS   PresParam;
     PVMSVGA3DSTATE          pState = pThis->svga.p3dState;
 
+    Log(("vmsvga3dContextDefine id %x\n", cid));
+
     AssertReturn(pState, VERR_NO_MEMORY);
     AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
 
-    Log(("vmsvga3dContextDefine id %x\n", cid));
-
     if (cid >= pState->cContexts)
     {
         /* Grow the array. */
@@ -2502,8 +2793,8 @@ int vmsvga3dContextDefine(PVGASTATE pThis, uint32_t cid)
     pContext = pState->papContexts[cid];
     memset(pContext, 0, sizeof(*pContext));
     pContext->id               = cid;
-    for (uint32_t i = 0; i< RT_ELEMENTS(pContext->aSidActiveTexture); i++)
-        pContext->aSidActiveTexture[i] = SVGA3D_INVALID_ID;
+    for (uint32_t i = 0; i< RT_ELEMENTS(pContext->aSidActiveTextures); i++)
+        pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID;
     pContext->sidRenderTarget  = SVGA3D_INVALID_ID;
     pContext->state.shidVertex = SVGA3D_INVALID_ID;
     pContext->state.shidPixel  = SVGA3D_INVALID_ID;
@@ -2611,9 +2902,9 @@ int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid)
             {
                 int rc;
 
-                Log(("vmsvga3dContextDestroy: remove all dependencies for surface sid=%x\n", sid));
+                LogFunc(("Remove all dependencies for surface sid=%x\n", sid));
 
-                uint32_t            surfaceFlags = pSurface->flags;
+                uint32_t            surfaceFlags = pSurface->surfaceFlags;
                 SVGA3dSurfaceFormat format = pSurface->format;
                 SVGA3dSurfaceFace   face[SVGA3D_MAX_SURFACE_FACES];
                 uint32_t            multisampleCount = pSurface->multiSampleCount;
@@ -2629,7 +2920,7 @@ int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid)
                     for (uint32_t i = 0; i < pSurface->faces[0].numMipLevels; i++)
                     {
                         uint32_t idx = i + face * pSurface->faces[0].numMipLevels;
-                        memcpy(&pMipLevelSize[idx], &pSurface->pMipmapLevels[idx].size, sizeof(SVGA3dSize));
+                        memcpy(&pMipLevelSize[idx], &pSurface->pMipmapLevels[idx].mipmapSize, sizeof(SVGA3dSize));
                     }
                 }
                 memcpy(face, pSurface->faces, sizeof(pSurface->faces));
@@ -2652,15 +2943,23 @@ int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid)
                 PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTAvlU32Get(&pSurface->pSharedObjectTree, cid);
                 if (pSharedSurface)
                 {
-                    Log(("vmsvga3dContextDestroy: remove shared dependency for surface sid=%x\n", sid));
+                    LogFunc(("Remove shared dependency for surface sid=%x\n", sid));
 
-                    switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                    switch (pSurface->enmD3DResType)
                     {
-                    case SVGA3D_SURFACE_HINT_TEXTURE:
-                    case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                    case VMSVGA3D_D3DRESTYPE_TEXTURE:
                         Assert(pSharedSurface->u.pTexture);
-                        if (pSharedSurface->u.pTexture)
-                            pSharedSurface->u.pTexture->Release();
+                        D3D_RELEASE(pSharedSurface->u.pTexture);
+                        break;
+
+                    case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+                        Assert(pSharedSurface->u.pCubeTexture);
+                        D3D_RELEASE(pSharedSurface->u.pCubeTexture);
+                        break;
+
+                    case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+                        Assert(pSharedSurface->u.pVolumeTexture);
+                        D3D_RELEASE(pSharedSurface->u.pVolumeTexture);
                         break;
 
                     default:
@@ -2696,8 +2995,10 @@ int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid)
         if (pContext->state.paPixelShaderConst)
             RTMemFree(pContext->state.paPixelShaderConst);
 
+        vmsvga3dOcclusionQueryDelete(pState, pContext);
+
         /* Release the D3D device object */
-        pContext->pDevice->Release();
+        D3D_RELEASE(pContext->pDevice);
 
         /* Destroy the window we've created. */
         int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_DESTROYWINDOW, (WPARAM)pContext->hwnd, 0);
@@ -2719,10 +3020,10 @@ static int vmsvga3dContextTrackUsage(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext)
     AssertReturn(pState, VERR_NO_MEMORY);
 
     /* Inject fences to make sure we can track surface usage in case the client wants to reuse it in another context. */
-    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
+    for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); ++i)
     {
-        if (pContext->aSidActiveTexture[i] != SVGA3D_INVALID_ID)
-            vmsvga3dSurfaceTrackUsageById(pState, pContext, pContext->aSidActiveTexture[i]);
+        if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
+            vmsvga3dSurfaceTrackUsageById(pState, pContext, pContext->aSidActiveTextures[i]);
     }
     if (pContext->sidRenderTarget != SVGA3D_INVALID_ID)
         vmsvga3dSurfaceTrackUsageById(pState, pContext, pContext->sidRenderTarget);
@@ -2787,8 +3088,8 @@ int vmsvga3dChangeMode(PVGASTATE pThis)
                                 hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
                                 AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-                                pSrc->Release();
-                                pDest->Release();
+                                D3D_RELEASE(pSrc);
+                                D3D_RELEASE(pDest);
 
                                 hr = pSurface->bounce.pTexture->LockRect(i,
                                                                          &LockedRect,
@@ -2817,42 +3118,42 @@ int vmsvga3dChangeMode(PVGASTATE pThis)
                     }
 
 
-                    switch (pSurface->flags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
+                    switch (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
                     {
                     case SVGA3D_SURFACE_CUBEMAP:
-                        AssertFailed(); /** @todo */
+                    case SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_HINT_TEXTURE:
+                    case SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+                        D3D_RELEASE(pSurface->u.pCubeTexture);
+                        D3D_RELEASE(pSurface->bounce.pCubeTexture);
                         break;
 
+                    case SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER:
                     case SVGA3D_SURFACE_HINT_INDEXBUFFER:
-                        pSurface->u.pIndexBuffer->Release();
-                        break;
-
                     case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
-                        pSurface->u.pVertexBuffer->Release();
-                        pSurface->u.pVertexBuffer = NULL;
+                        if (pSurface->fu32ActualUsageFlags == SVGA3D_SURFACE_HINT_VERTEXBUFFER)
+                            D3D_RELEASE(pSurface->u.pVertexBuffer);
+                        else if (pSurface->fu32ActualUsageFlags == SVGA3D_SURFACE_HINT_INDEXBUFFER)
+                            D3D_RELEASE(pSurface->u.pIndexBuffer);
+                        else
+                            AssertMsg(pSurface->u.pVertexBuffer == NULL, ("fu32ActualUsageFlags %x\n", pSurface->fu32ActualUsageFlags));
                         break;
 
                     case SVGA3D_SURFACE_HINT_TEXTURE:
                     case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
-                        pSurface->u.pTexture->Release();
-                        pSurface->u.pTexture = NULL;
-                        if (pSurface->bounce.pTexture)
-                        {
-                            pSurface->bounce.pTexture->Release();
-                            pSurface->bounce.pTexture = NULL;
-                        }
+                        D3D_RELEASE(pSurface->u.pTexture);
+                        D3D_RELEASE(pSurface->bounce.pTexture);
                         break;
 
                     case SVGA3D_SURFACE_HINT_RENDERTARGET:
                     case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
                         if (pSurface->fStencilAsTexture)
-                            pSurface->u.pTexture->Release();
+                            D3D_RELEASE(pSurface->u.pTexture);
                         else
-                            pSurface->u.pSurface->Release();
-                        pSurface->u.pSurface = NULL;
+                            D3D_RELEASE(pSurface->u.pSurface);
                         break;
 
                     default:
+                        AssertFailed();
                         break;
                     }
                     RTAvlU32Destroy(&pSurface->pSharedObjectTree, vmsvga3dSharedSurfaceDestroyTree, pSurface);
@@ -2951,11 +3252,11 @@ int vmsvga3dChangeMode(PVGASTATE pThis)
 
             /* Recreate the texture state */
             Log(("vmsvga3dChangeMode: Recreate texture state BEGIN\n"));
-            for (uint32_t iStage = 0; iStage < SVGA3D_MAX_TEXTURE_STAGE; iStage++)
+            for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); iStage++)
             {
-                for (uint32_t j = 0; j < SVGA3D_TS_MAX; j++)
+                for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); j++)
                 {
-                    SVGA3dTextureState *pTextureState = &pContext->state.aTextureState[iStage][j];
+                    SVGA3dTextureState *pTextureState = &pContext->state.aTextureStates[iStage][j];
 
                     if (pTextureState->name != SVGA3D_RS_INVALID)
                         vmsvga3dSetTextureState(pThis, pContext->id, 1, pTextureState);
@@ -3824,17 +4125,11 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
 
     AssertReturn(pState, VERR_NO_MEMORY);
     AssertReturn(type < SVGA3D_RT_MAX, VERR_INVALID_PARAMETER);
-    AssertReturn(target.face == 0, VERR_INVALID_PARAMETER);
 
-    Log(("vmsvga3dSetRenderTarget cid=%x type=%x sid=%x\n", cid, type, target.sid));
+    LogFunc(("cid=%x type=%x sid=%x\n", cid, type, target.sid));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetRenderTarget invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     /* Save for vm state save/restore. */
     pContext->state.aRenderTargets[type] = target.sid;
@@ -3846,7 +4141,7 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         {
         case SVGA3D_RT_DEPTH:
             hr = pContext->pDevice->SetDepthStencilSurface(NULL);
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
             break;
 
         case SVGA3D_RT_STENCIL:
@@ -3865,10 +4160,10 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
 
             if (pState->fSupportedSurfaceNULL)
             {
-                /* Create a dummy render target to satisfy D3D. This path is usually taken only to render into a depth buffer without
-                 * wishing to update an actual color render target
+                /* Create a dummy render target to satisfy D3D. This path is usually taken only to render
+                 * into a depth buffer without wishing to update an actual color render target.
                  */
-                IDirect3DSurface9* pDummyRenderTarget;
+                IDirect3DSurface9 *pDummyRenderTarget;
                 hr = pContext->pDevice->CreateRenderTarget(pThis->svga.uWidth,
                                                            pThis->svga.uHeight,
                                                            FOURCC_NULL,
@@ -3878,15 +4173,15 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
                                                            &pDummyRenderTarget,
                                                            NULL);
 
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: CreateRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                AssertMsgReturn(hr == D3D_OK, ("CreateRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
                 hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pDummyRenderTarget);
-                pDummyRenderTarget->Release();
+                D3D_RELEASE(pDummyRenderTarget);
             }
             else
                 hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, NULL);
 
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            AssertMsgReturn(hr == D3D_OK, ("SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
             break;
 
         default:
@@ -3895,15 +4190,14 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         return VINF_SUCCESS;
     }
 
-    AssertReturn(target.sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
-    AssertReturn(target.sid < pState->cSurfaces && pState->papSurfaces[target.sid]->id == target.sid, VERR_INVALID_PARAMETER);
-    pRenderTarget = pState->papSurfaces[target.sid];
+    rc = vmsvga3dSurfaceFromSid(pState, target.sid, &pRenderTarget);
+    AssertRCReturn(rc, rc);
 
     switch (type)
     {
     case SVGA3D_RT_DEPTH:
     case SVGA3D_RT_STENCIL:
-        AssertReturn(target.mipmap == 0, VERR_INVALID_PARAMETER);
+        AssertReturn(target.face == 0 && target.mipmap == 0, VERR_INVALID_PARAMETER);
         if (!pRenderTarget->u.pSurface)
         {
             DWORD cQualityLevels = 0;
@@ -3925,23 +4219,26 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
                 &&  (   pRenderTarget->formatD3D == D3DFMT_D24S8
                      || pRenderTarget->formatD3D == D3DFMT_D24X8))
             {
-                Log(("vmsvga3dSetRenderTarget: Creating stencil surface as texture!\n"));
+                LogFunc(("Creating stencil surface as texture!\n"));
                 int rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pRenderTarget);
-                AssertRC(rc);   /* non-fatal */
+                AssertRC(rc);   /* non-fatal, will use CreateDepthStencilSurface */
             }
 
             if (!pRenderTarget->fStencilAsTexture)
             {
-                Log(("vmsvga3dSetRenderTarget DEPTH/STENCIL; cQualityLevels=%d\n", cQualityLevels));
-                hr = pContext->pDevice->CreateDepthStencilSurface(pRenderTarget->pMipmapLevels[0].size.width,
-                                                                  pRenderTarget->pMipmapLevels[0].size.height,
+                Assert(!pRenderTarget->u.pSurface);
+
+                LogFunc(("DEPTH/STENCIL; cQualityLevels=%d\n", cQualityLevels));
+                hr = pContext->pDevice->CreateDepthStencilSurface(pRenderTarget->pMipmapLevels[0].mipmapSize.width,
+                                                                  pRenderTarget->pMipmapLevels[0].mipmapSize.height,
                                                                   pRenderTarget->formatD3D,
                                                                   pRenderTarget->multiSampleTypeD3D,
                                                                   ((cQualityLevels >= 1) ? cQualityLevels - 1 : 0),   /* 0 - (levels-1) */
                                                                   FALSE,    /* not discardable */
                                                                   &pRenderTarget->u.pSurface,
                                                                   NULL);
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: CreateDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                AssertMsgReturn(hr == D3D_OK, ("CreateDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                pRenderTarget->enmD3DResType = VMSVGA3D_D3DRESTYPE_SURFACE;
             }
 
             pRenderTarget->idAssociatedContext = cid;
@@ -3993,23 +4290,23 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         AssertReturn(pRenderTarget->u.pSurface, VERR_INVALID_PARAMETER);
 
         pRenderTarget->fUsageD3D            |= D3DUSAGE_DEPTHSTENCIL;
-        pRenderTarget->flags                |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+        pRenderTarget->surfaceFlags         |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
 
         if (pRenderTarget->fStencilAsTexture)
         {
             IDirect3DSurface9 *pStencilSurface;
 
             hr = pRenderTarget->u.pTexture->GetSurfaceLevel(0, &pStencilSurface);
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            AssertMsgReturn(hr == D3D_OK, ("GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
             hr = pContext->pDevice->SetDepthStencilSurface(pStencilSurface);
-            pStencilSurface->Release();
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            D3D_RELEASE(pStencilSurface);
+            AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
         }
         else
         {
             hr = pContext->pDevice->SetDepthStencilSurface(pRenderTarget->u.pSurface);
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
         }
         break;
 
@@ -4024,46 +4321,28 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
     {
         IDirect3DSurface9 *pSurface;
         bool fTexture = false;
-        bool fShared = false;
 
         /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
         vmsvga3dSurfaceFlush(pThis, pRenderTarget);
 
-        if (pRenderTarget->flags & SVGA3D_SURFACE_HINT_TEXTURE)
+        if (pRenderTarget->surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE)
         {
             fTexture = true;
 
             /* A texture surface can be used as a render target to fill it and later on used as a texture. */
             if (!pRenderTarget->u.pTexture)
             {
-                Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; sid=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->flags, pRenderTarget->format));
+                LogFunc(("Create texture to be used as render target; sid=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->surfaceFlags, pRenderTarget->format));
                 int rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pRenderTarget);
                 AssertRCReturn(rc, rc);
             }
 
-#ifndef VBOX_VMSVGA3D_WITH_WINE_OPENGL
-            if (pRenderTarget->idAssociatedContext != cid)
-            {
-                Log(("vmsvga3dSetRenderTarget; using texture sid=%x created for another context (%d vs %d)\n", target.sid, pRenderTarget->idAssociatedContext, cid));
-
-                PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pThis, pContext, pRenderTarget);
-                AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
-
-                hr = pSharedSurface->u.pTexture->GetSurfaceLevel(target.mipmap,
-                                                                 &pSurface);
-
-                fShared = true;
-            }
-            else
-#endif
-                hr = pRenderTarget->u.pTexture->GetSurfaceLevel(target.mipmap,
-                                                                &pSurface);
-
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            rc = vmsvga3dGetD3DSurface(pContext,  pRenderTarget, target.face, target.mipmap, false, &pSurface);
+            AssertRCReturn(rc, rc);
         }
         else
         {
-            AssertReturn(target.mipmap == 0, VERR_INVALID_PARAMETER);
+            AssertReturn(target.face == 0 && target.mipmap == 0, VERR_INVALID_PARAMETER);
             if (!pRenderTarget->u.pSurface)
             {
                 DWORD cQualityLevels = 0;
@@ -4080,11 +4359,12 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
                     Assert(hr == D3D_OK || hr == D3DERR_NOTAVAILABLE);
                 }
 
-                Log(("vmsvga3dSetRenderTarget COLOR; cQualityLevels=%d\n", cQualityLevels));
-                Log(("Create rendertarget (%d,%d) format=%x multisample=%x\n", pRenderTarget->pMipmapLevels[0].size.width, pRenderTarget->pMipmapLevels[0].size.height, pRenderTarget->formatD3D, pRenderTarget->multiSampleTypeD3D));
+                LogFunc(("COLOR; cQualityLevels=%d\n", cQualityLevels));
+                LogFunc(("Create rendertarget (%d,%d) formatD3D=%x multisample=%x\n",
+                         pRenderTarget->pMipmapLevels[0].mipmapSize.width, pRenderTarget->pMipmapLevels[0].mipmapSize.height, pRenderTarget->formatD3D, pRenderTarget->multiSampleTypeD3D));
 
-                hr = pContext->pDevice->CreateRenderTarget(pRenderTarget->pMipmapLevels[0].size.width,
-                                                           pRenderTarget->pMipmapLevels[0].size.height,
+                hr = pContext->pDevice->CreateRenderTarget(pRenderTarget->pMipmapLevels[0].mipmapSize.width,
+                                                           pRenderTarget->pMipmapLevels[0].mipmapSize.height,
                                                            pRenderTarget->formatD3D,
                                                            pRenderTarget->multiSampleTypeD3D,
                                                            ((cQualityLevels >= 1) ? cQualityLevels - 1 : 0),   /* 0 - (levels-1) */
@@ -4093,12 +4373,14 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
                                                            NULL);
                 AssertReturn(hr == D3D_OK, VERR_INTERNAL_ERROR);
 
-                pRenderTarget->idAssociatedContext   = cid;
+                pRenderTarget->idAssociatedContext = cid;
+                pRenderTarget->enmD3DResType       = VMSVGA3D_D3DRESTYPE_SURFACE;
             }
             else
                 AssertReturn(pRenderTarget->fUsageD3D & D3DUSAGE_RENDERTARGET, VERR_INVALID_PARAMETER);
 
             Assert(pRenderTarget->idAssociatedContext == cid);
+            Assert(pRenderTarget->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE);
             pSurface = pRenderTarget->u.pSurface;
         }
 
@@ -4106,12 +4388,12 @@ int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetTyp
         Assert(!pRenderTarget->fDirty);
 
         pRenderTarget->fUsageD3D            |= D3DUSAGE_RENDERTARGET;
-        pRenderTarget->flags                |= SVGA3D_SURFACE_HINT_RENDERTARGET;
+        pRenderTarget->surfaceFlags         |= SVGA3D_SURFACE_HINT_RENDERTARGET;
 
         hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pSurface);
         if (fTexture)
-            pSurface->Release();    /* Release reference to texture level 0 */
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            D3D_RELEASE(pSurface);    /* Release reference to texture level 0 */
+        AssertMsgReturn(hr == D3D_OK, ("SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
         pContext->sidRenderTarget = target.sid;
 
@@ -4246,6 +4528,13 @@ static DWORD vmsvga3dTextTransformFlags2D3D(uint32_t value)
     }
 }
 
+static DWORD vmsvga3dSamplerIndex2D3D(uint32_t idxSampler)
+{
+    if (idxSampler < SVGA3D_MAX_SAMPLERS_PS)
+        return idxSampler;
+    return (idxSampler - SVGA3D_MAX_SAMPLERS_PS) + D3DDMAPSAMPLER;
+}
+
 int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
 {
     DWORD                       val = 0; /* Shut up MSC */
@@ -4254,39 +4543,86 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
     PVMSVGA3DSTATE              pState = pThis->svga.p3dState;
     AssertReturn(pState, VERR_NO_MEMORY);
 
-    Log(("vmsvga3dSetTextureState %x cTextureState=%d\n", cid, cTextureStates));
+    LogFunc(("%x cTextureState=%d\n", cid, cTextureStates));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetTextureState invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     for (unsigned i = 0; i < cTextureStates; i++)
     {
-        D3DTEXTURESTAGESTATETYPE textureType = D3DTSS_FORCE_DWORD;
-        D3DSAMPLERSTATETYPE      samplerType = D3DSAMP_FORCE_DWORD;
-        uint32_t                 currentStage = pTextureState[i].stage;
-
-        Log(("vmsvga3dSetTextureState: cid=%x stage=%d type=%s (%x) val=%x\n", cid, currentStage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
+        LogFunc(("cid=%x stage=%d type=%s (%x) val=%x\n", cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
 
-        /** @todo Is this the appropriate limit for all kinds of textures?  It is the
-         * size of aSidActiveTexture and for binding/unbinding we cannot exceed it. */
-        if (RT_UNLIKELY(currentStage >= SVGA3D_MAX_TEXTURE_STAGE))
+        if (pTextureState[i].name == SVGA3D_TS_BIND_TEXTURE)
         {
-            AssertMsgFailed(("pTextureState[%d].stage=%#x name=%#x\n", i, pTextureState[i].stage, pTextureState[i].name));
-            continue;
-        }
+            /* Special case: binding a texture to a sampler. Stage is the sampler index. */
+            const uint32_t sid = pTextureState[i].value;
+            const uint32_t idxSampler = pTextureState[i].stage;
 
-        /* Record the texture state for vm state saving. */
-        if (    currentStage < SVGA3D_MAX_TEXTURE_STAGE
-            &&  pTextureState[i].name < SVGA3D_TS_MAX)
-        {
-            pContext->state.aTextureState[currentStage][pTextureState[i].name] = pTextureState[i];
+            if (RT_UNLIKELY(idxSampler >= SVGA3D_MAX_SAMPLERS))
+            {
+                AssertMsgFailed(("pTextureState[%d]: SVGA3D_TS_BIND_TEXTURE idxSampler=%d, sid=%x\n", i, idxSampler, sid));
+                continue;
+            }
+
+            const DWORD d3dSampler = vmsvga3dSamplerIndex2D3D(idxSampler);
+            if (sid == SVGA3D_INVALID_ID)
+            {
+                LogFunc(("SVGA3D_TS_BIND_TEXTURE: unbind sampler=%d\n", idxSampler));
+
+                pContext->aSidActiveTextures[idxSampler] = SVGA3D_INVALID_ID;
+
+                /* Unselect the currently associated texture. */
+                hr = pContext->pDevice->SetTexture(d3dSampler, NULL);
+                AssertMsgReturn(hr == D3D_OK, ("SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            }
+            else
+            {
+                PVMSVGA3DSURFACE pSurface;
+                rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+                AssertRCReturn(rc, rc);
+
+                LogFunc(("SVGA3D_TS_BIND_TEXTURE: bind idxSampler=%d, texture sid=%x (%d,%d)\n", idxSampler, sid, pSurface->pMipmapLevels[0].mipmapSize.width, pSurface->pMipmapLevels[0].mipmapSize.height));
+
+                if (!pSurface->u.pTexture)
+                {
+                    Assert(pSurface->idAssociatedContext == SVGA3D_INVALID_ID);
+                    LogFunc(("CreateTexture (%d,%d) level=%d fUsage=%x format=%x\n", pSurface->pMipmapLevels[0].mipmapSize.width, pSurface->pMipmapLevels[0].mipmapSize.height, pSurface->faces[0].numMipLevels, pSurface->fUsageD3D, pSurface->formatD3D));
+                    rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pSurface);
+                    AssertRCReturn(rc, rc);
+                }
+                else
+                {
+                    Assert(   pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+                           || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE
+                           || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE);
+                    /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+                    vmsvga3dSurfaceFlush(pThis, pSurface);
+                }
+
+#ifndef VBOX_VMSVGA3D_WITH_WINE_OPENGL
+                if (pSurface->idAssociatedContext != cid)
+                {
+                    LogFunc(("Using texture sid=%x created for another context (%d vs %d)\n", sid, pSurface->idAssociatedContext, cid));
+
+                    PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pContext, pSurface);
+                    AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+                    hr = pContext->pDevice->SetTexture(d3dSampler, pSharedSurface->u.pTexture);
+                }
+                else
+#endif
+                    hr = pContext->pDevice->SetTexture(d3dSampler, pSurface->u.pTexture);
+
+                AssertMsgReturn(hr == D3D_OK, ("SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+                pContext->aSidActiveTextures[idxSampler] = sid;
+            }
+            /* Finished; continue with the next one. */
+            continue;
         }
 
+        D3DTEXTURESTAGESTATETYPE textureType = D3DTSS_FORCE_DWORD;
+        D3DSAMPLERSTATETYPE      samplerType = D3DSAMP_FORCE_DWORD;
         switch (pTextureState[i].name)
         {
         case SVGA3D_TS_COLOROP:                     /* SVGA3dTextureCombiner */
@@ -4369,79 +4705,23 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
             val = vmsvga3dTextTransformFlags2D3D(pTextureState[i].value);
             break;
 
-        case SVGA3D_TS_BIND_TEXTURE:                /* SVGA3dSurfaceId */
-            if (pTextureState[i].value == SVGA3D_INVALID_ID)
-            {
-                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture sid=%x\n", currentStage, pTextureState[i].value));
+        case SVGA3D_TS_ADDRESSW:                    /* SVGA3dTextureAddress */
+            samplerType = D3DSAMP_ADDRESSW;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+            break;
 
-                pContext->aSidActiveTexture[currentStage] = SVGA3D_INVALID_ID;
-                /* Unselect the currently associated texture. */
-                hr = pContext->pDevice->SetTexture(currentStage, NULL);
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTextureState: SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
-            }
-            else
-            {
-                HRESULT hr;
-                uint32_t sid = pTextureState[i].value;
+        case SVGA3D_TS_ADDRESSU:                    /* SVGA3dTextureAddress */
+            samplerType = D3DSAMP_ADDRESSU;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+            break;
 
-                AssertReturn(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
-                AssertReturn(sid < pState->cSurfaces && pState->papSurfaces[sid]->id == sid, VERR_INVALID_PARAMETER);
-
-                PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
-
-                Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture sid=%x (%d,%d)\n", currentStage, pTextureState[i].value, pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height));
-
-                if (!pSurface->u.pTexture)
-                {
-                    Assert(pSurface->idAssociatedContext == SVGA3D_INVALID_ID);
-                    Log(("CreateTexture (%d,%d) level=%d fUsage=%x format=%x\n", pSurface->pMipmapLevels[0].size.width, pSurface->pMipmapLevels[0].size.height, pSurface->faces[0].numMipLevels, pSurface->fUsageD3D, pSurface->formatD3D));
-                    int rc = vmsvga3dBackCreateTexture(pState, pContext, cid, pSurface);
-                    AssertRCReturn(rc, rc);
-                }
-                else
-                {
-                    /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
-                    vmsvga3dSurfaceFlush(pThis, pSurface);
-                }
-
-#ifndef VBOX_VMSVGA3D_WITH_WINE_OPENGL
-                if (pSurface->idAssociatedContext != cid)
-                {
-                    Log(("vmsvga3dSetTextureState; using texture sid=%x created for another context (%d vs %d)\n", sid, pSurface->idAssociatedContext, cid));
-
-                    PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pThis, pContext, pSurface);
-                    AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
-
-                    hr = pContext->pDevice->SetTexture(currentStage, pSharedSurface->u.pTexture);
-                }
-                else
-#endif
-                    hr = pContext->pDevice->SetTexture(currentStage, pSurface->u.pTexture);
-
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTextureState: SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
-
-                pContext->aSidActiveTexture[currentStage] = sid;
-            }
-            /* Finished; continue with the next one. */
-            continue;
-
-        case SVGA3D_TS_ADDRESSW:                    /* SVGA3dTextureAddress */
-            samplerType = D3DSAMP_ADDRESSW;
-            val = pTextureState[i].value;   /* Identical otherwise */
-            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
-            break;
-
-        case SVGA3D_TS_ADDRESSU:                    /* SVGA3dTextureAddress */
-            samplerType = D3DSAMP_ADDRESSU;
-            val = pTextureState[i].value;   /* Identical otherwise */
-            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
-            break;
-
-        case SVGA3D_TS_ADDRESSV:                    /* SVGA3dTextureAddress */
-            samplerType = D3DSAMP_ADDRESSV;
-            val = pTextureState[i].value;   /* Identical otherwise */
-            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
-            break;
+        case SVGA3D_TS_ADDRESSV:                    /* SVGA3dTextureAddress */
+            samplerType = D3DSAMP_ADDRESSV;
+            val = pTextureState[i].value;   /* Identical otherwise */
+            Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+            break;
 
         case SVGA3D_TS_MIPFILTER:                   /* SVGA3dTextureFilter */
             samplerType = D3DSAMP_MIPFILTER;
@@ -4500,20 +4780,44 @@ int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStat
 
         case SVGA3D_TS_MAX:                   /* shut up MSC */
         case SVGA3D_TS_INVALID:
+        case SVGA3D_TS_BIND_TEXTURE:
             AssertFailedBreak();
         }
 
+        const uint32_t currentStage = pTextureState[i].stage;
+        /* Record the texture state for vm state saving. */
+        if (   currentStage < RT_ELEMENTS(pContext->state.aTextureStates)
+            && pTextureState[i].name < RT_ELEMENTS(pContext->state.aTextureStates[0]))
+        {
+            pContext->state.aTextureStates[currentStage][pTextureState[i].name] = pTextureState[i];
+        }
+
         if (textureType != D3DTSS_FORCE_DWORD)
         {
+            if (RT_UNLIKELY(currentStage >= SVGA3D_MAX_TEXTURE_STAGES))
+            {
+                AssertMsgFailed(("pTextureState[%d].stage=%#x name=%#x value=%#x\n", i, pTextureState[i].stage, pTextureState[i].name, pTextureState[i].value));
+                continue;
+            }
+
             hr = pContext->pDevice->SetTextureStageState(currentStage, textureType, val);
+            AssertMsg(hr == D3D_OK, ("SetTextureStageState failed with %x\n", hr));
         }
-        else
+        else if (samplerType != D3DSAMP_FORCE_DWORD)
         {
-            Assert(samplerType != D3DSAMP_FORCE_DWORD);
+            if (RT_UNLIKELY(currentStage >= SVGA3D_MAX_SAMPLERS))
+            {
+                AssertMsgFailed(("pTextureState[%d].stage=%#x name=%#x value=%#x\n", i, pTextureState[i].stage, pTextureState[i].name, pTextureState[i].value));
+                continue;
+            }
+
             hr = pContext->pDevice->SetSamplerState(currentStage, samplerType, val);
+            AssertMsg(hr == D3D_OK, ("SetSamplerState failed with %x\n", hr));
+        }
+        else
+        {
+            AssertFailed();
         }
-
-        AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTextureState: SetTextureStageState failed with %x\n", hr), VERR_INTERNAL_ERROR);
     }
 
     return VINF_SUCCESS;
@@ -4527,15 +4831,10 @@ int vmsvga3dSetMaterial(PVGASTATE pThis, uint32_t cid, SVGA3dFace face, SVGA3dMa
     PVMSVGA3DSTATE        pState = pThis->svga.p3dState;
     AssertReturn(pState, VERR_NO_MEMORY);
 
-    Log(("vmsvga3dSetMaterial %x face %d\n", cid, face));
+    LogFunc(("cid=%x face %d\n", cid, face));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetMaterial invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     AssertReturn(face < SVGA3D_FACE_MAX, VERR_INVALID_PARAMETER);
 
@@ -4569,7 +4868,7 @@ int vmsvga3dSetMaterial(PVGASTATE pThis, uint32_t cid, SVGA3dFace face, SVGA3dMa
     material.Power         = pMaterial->shininess;
 
     hr = pContext->pDevice->SetMaterial(&material);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetMaterial: SetMaterial failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("SetMaterial failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     return VINF_SUCCESS;
 }
@@ -4584,13 +4883,8 @@ int vmsvga3dSetLightData(PVGASTATE pThis, uint32_t cid, uint32_t index, SVGA3dLi
 
     Log(("vmsvga3dSetLightData %x index=%d\n", cid, index));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetLightData invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     switch (pData->type)
     {
@@ -4648,7 +4942,7 @@ int vmsvga3dSetLightData(PVGASTATE pThis, uint32_t cid, uint32_t index, SVGA3dLi
     light.Phi           = pData->phi;
 
     hr = pContext->pDevice->SetLight(index, &light);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetLightData: SetLight failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("SetLight failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     return VINF_SUCCESS;
 }
@@ -4662,13 +4956,8 @@ int vmsvga3dSetLightEnabled(PVGASTATE pThis, uint32_t cid, uint32_t index, uint3
 
     Log(("vmsvga3dSetLightEnabled %x %d -> %d\n", cid, index, enabled));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetLightEnabled invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     /* Store for vm state save/restore */
     if (index < SVGA3D_MAX_LIGHTS)
@@ -4677,7 +4966,7 @@ int vmsvga3dSetLightEnabled(PVGASTATE pThis, uint32_t cid, uint32_t index, uint3
         AssertFailed();
 
     hr = pContext->pDevice->LightEnable(index, (BOOL)enabled);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetLightEnabled: LightEnable failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("LightEnable failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     return VINF_SUCCESS;
 }
@@ -4692,19 +4981,15 @@ int vmsvga3dSetViewPort(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
 
     Log(("vmsvga3dSetViewPort %x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetViewPort invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
+
     /* Save for vm state save/restore. */
-    pContext = pState->papContexts[cid];
     pContext->state.RectViewPort = *pRect;
     pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VIEWPORT;
 
     hr = pContext->pDevice->GetViewport(&viewPort);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetViewPort: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     viewPort.X      = pRect->x;
     viewPort.Y      = pRect->y;
@@ -4713,12 +4998,12 @@ int vmsvga3dSetViewPort(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
     /* viewPort.MinZ & MaxZ are not changed from the current setting. */
 
     hr = pContext->pDevice->SetViewport(&viewPort);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetViewPort: SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     return VINF_SUCCESS;
 }
 
-int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid,  uint32_t index, float plane[4])
+int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid, uint32_t index, float plane[4])
 {
     HRESULT               hr;
     PVMSVGA3DCONTEXT      pContext;
@@ -4728,20 +5013,15 @@ int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid,  uint32_t index, float p
     Log(("vmsvga3dSetClipPlane %x %d (%d,%d)(%d,%d)\n", cid, index, (unsigned)(plane[0] * 100.0), (unsigned)(plane[1] * 100.0), (unsigned)(plane[2] * 100.0), (unsigned)(plane[3] * 100.0)));
     AssertReturn(index < SVGA3D_CLIPPLANE_MAX, VERR_INVALID_PARAMETER);
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSetClipPlane invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     /* Store for vm state save/restore. */
     pContext->state.aClipPlane[index].fValid = true;
     memcpy(pContext->state.aClipPlane[index].plane, plane, sizeof(pContext->state.aClipPlane[index].plane));
 
     hr = pContext->pDevice->SetClipPlane(index, plane);
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetClipPlane: SetClipPlane failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("SetClipPlane failed with %x\n", hr), VERR_INTERNAL_ERROR);
     return VINF_SUCCESS;
 }
 
@@ -4756,13 +5036,8 @@ int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFla
 
     Log(("vmsvga3dCommandClear %x clearFlag=%x color=%x depth=%d stencil=%x cRects=%d\n", cid, clearFlag, color, (uint32_t)(depth * 100.0), stencil, cRects));
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dCommandClear invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
-    pContext = pState->papContexts[cid];
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     if (clearFlag & SVGA3D_CLEAR_COLOR)
         clearFlagD3D |= D3DCLEAR_TARGET;
@@ -4790,7 +5065,7 @@ int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFla
     if (pRectD3D)
         RTMemFree(pRectD3D);
 
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dCommandClear: Clear failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("Clear failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
     /* Make sure we can track drawing usage of active render targets. */
     if (pContext->sidRenderTarget != SVGA3D_INVALID_ID)
@@ -4800,7 +5075,7 @@ int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFla
 }
 
 /* Convert VMWare vertex declaration to its D3D equivalent. */
-int vmsvga3dVertexDecl2D3D(SVGA3dVertexArrayIdentity &identity, D3DVERTEXELEMENT9 *pVertexElement)
+static int vmsvga3dVertexDecl2D3D(const SVGA3dVertexArrayIdentity &identity, D3DVERTEXELEMENT9 *pVertexElement)
 {
     /* usage, method and type are identical; make sure. */
     AssertCompile(SVGA3D_DECLTYPE_FLOAT1 == D3DDECLTYPE_FLOAT1);
@@ -4820,7 +5095,7 @@ int vmsvga3dVertexDecl2D3D(SVGA3dVertexArrayIdentity &identity, D3DVERTEXELEMENT
 }
 
 /* Convert VMWare primitive type to its D3D equivalent. */
-int vmsvga3dPrimitiveType2D3D(SVGA3dPrimitiveType PrimitiveType, D3DPRIMITIVETYPE *pPrimitiveTypeD3D)
+static int vmsvga3dPrimitiveType2D3D(SVGA3dPrimitiveType PrimitiveType, D3DPRIMITIVETYPE *pPrimitiveTypeD3D)
 {
     switch (PrimitiveType)
     {
@@ -4848,7 +5123,9 @@ int vmsvga3dPrimitiveType2D3D(SVGA3dPrimitiveType PrimitiveType, D3DPRIMITIVETYP
     return VINF_SUCCESS;
 }
 
-int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t idStream, D3DVERTEXELEMENT9 *pVertexElement)
+#ifdef OLD_DRAW_PRIMITIVES /* Old vmsvga3dDrawPrimitives */
+
+static int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t idStream, D3DVERTEXELEMENT9 *pVertexElement)
 {
     HRESULT               hr;
     int                   rc;
@@ -4883,19 +5160,31 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
         if (pVertexDecl[iVertex].array.offset < uVertexMinOffset)
             uVertexMinOffset = pVertexDecl[iVertex].array.offset;
 
+        if (   pVertexSurface->u.pSurface
+            && pVertexSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER)
+        {
+            /* The buffer object is not an vertex one. Switch type. */
+            Assert(pVertexSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_INDEX_BUFFER);
+            D3D_RELEASE(pVertexSurface->u.pIndexBuffer);
+            pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+
+            LogFunc(("index -> vertex buffer sid=%x\n", sidVertex));
+        }
+
         if (!pVertexSurface->u.pVertexBuffer)
         {
             Assert(iVertex == 0);
 
-            Log(("vmsvga3dDrawPrimitives: create vertex buffer fDirty=%d\n", pVertexSurface->fDirty));
+            LogFunc(("create vertex buffer fDirty=%d\n", pVertexSurface->fDirty));
             hr = pContext->pDevice->CreateVertexBuffer(pVertexSurface->pMipmapLevels[0].cbSurface,
                                                        D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY /* possible severe performance penalty otherwise (according to d3d debug output) */,
                                                        0, /* non-FVF */
                                                        D3DPOOL_DEFAULT,
                                                        &pVertexSurface->u.pVertexBuffer,
                                                        NULL);
-            AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: CreateVertexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+            AssertMsgReturn(hr == D3D_OK, ("CreateVertexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
+            pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER;
             pVertexSurface->idAssociatedContext = pContext->id;
 
             if (pVertexSurface->fDirty)
@@ -4903,20 +5192,17 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
                 void *pData;
 
                 hr = pVertexSurface->u.pVertexBuffer->Lock(0, 0, &pData, 0);
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: Lock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                AssertMsgReturn(hr == D3D_OK, ("Lock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
                 memcpy(pData, pVertexSurface->pMipmapLevels[0].pSurfaceData, pVertexSurface->pMipmapLevels[0].cbSurface);
 
                 hr = pVertexSurface->u.pVertexBuffer->Unlock();
-                AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: Unlock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+                AssertMsgReturn(hr == D3D_OK, ("Unlock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
                 pVertexSurface->pMipmapLevels[0].fDirty = false;
                 pVertexSurface->fDirty = false;
             }
-            pVertexSurface->flags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
-            pVertexSurface->fu32ActualUsageFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+            pVertexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
         }
-        else
-            Assert(pVertexSurface->fDirty == false);
     }
 
     /* Set the right vertex offset values for each declaration. */
@@ -4925,10 +5211,10 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
         pVertexElement[iVertex].Offset = pVertexDecl[iVertex].array.offset - uVertexMinOffset;
 #ifdef LOG_ENABLED
         if (pVertexElement[iVertex].Offset >= pVertexDecl[0].array.stride)
-            Log(("vmsvga3dDrawPrimitives: WARNING: offset > stride!!\n"));
+            LogFunc(("WARNING: offset > stride!!\n"));
 #endif
 
-        Log(("vmsvga3dDrawPrimitives: vertex %d offset = %d (stride %d) (min=%d max=%d)\n", iVertex, pVertexDecl[iVertex].array.offset, pVertexDecl[iVertex].array.stride, uVertexMinOffset, uVertexMaxOffset));
+        LogFunc(("vertex %d offset = %d (stride %d) (min=%d max=%d)\n", iVertex, pVertexDecl[iVertex].array.offset, pVertexDecl[iVertex].array.stride, uVertexMinOffset, uVertexMaxOffset));
     }
 
     PVMSVGA3DSURFACE pVertexSurface;
@@ -4937,13 +5223,13 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
 
     pVertexSurface = pState->papSurfaces[sidVertex];
 
-    Log(("vmsvga3dDrawPrimitives: SetStreamSource %d min offset=%d stride=%d\n", idStream, uVertexMinOffset, strideVertex));
+    LogFunc(("SetStreamSource %d min offset=%d stride=%d\n", idStream, uVertexMinOffset, strideVertex));
     hr = pContext->pDevice->SetStreamSource(idStream,
                                             pVertexSurface->u.pVertexBuffer,
                                             uVertexMinOffset,
                                             strideVertex);
 
-    AssertMsgReturn(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetStreamSource failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    AssertMsgReturn(hr == D3D_OK, ("SetStreamSource failed with %x\n", hr), VERR_INTERNAL_ERROR);
     return VINF_SUCCESS;
 }
 
@@ -4962,22 +5248,14 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
     D3DVERTEXELEMENT9           *pVertexElement = NULL;
     D3DVERTEXELEMENT9            VertexEnd = D3DDECL_END();
 
-    Log(("vmsvga3dDrawPrimitives %x numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
+    LogFunc(("%x numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
 
     AssertReturn(numVertexDecls && numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, VERR_INVALID_PARAMETER);
     AssertReturn(numRanges && numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, VERR_INVALID_PARAMETER);
     AssertReturn(!cVertexDivisor || cVertexDivisor == numVertexDecls, VERR_INVALID_PARAMETER);
-    /** @todo */
-    Assert(!cVertexDivisor);
-
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dDrawPrimitives invalid context id!\n"));
-        return VERR_INVALID_PARAMETER;
-    }
 
-    pContext = pState->papContexts[cid];
+    rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 
     /* Begin a scene before rendering anything. */
     hr = pContext->pDevice->BeginScene();
@@ -5021,6 +5299,13 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
         if (RT_FAILURE(rc))
             goto internal_error;
 
+        if (cVertexDivisor)
+        {
+            LogFunc(("SetStreamSourceFreq[%d]=%x\n", iCurrentStreamId, pVertexDivisor[iCurrentStreamId].value));
+            HRESULT hr2 = pContext->pDevice->SetStreamSourceFreq(iCurrentStreamId, pVertexDivisor[iCurrentStreamId].value);
+            Assert(SUCCEEDED(hr2)); RT_NOREF(hr2);
+        }
+
         iCurrentVertex = iVertex;
         iCurrentStreamId++;
     }
@@ -5072,18 +5357,23 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
         {
             AssertMsg(pRange[iPrimitive].indexWidth == sizeof(uint32_t) || pRange[iPrimitive].indexWidth == sizeof(uint16_t), ("Unsupported primitive width %d\n", pRange[iPrimitive].indexWidth));
 
-            if (    sidIndex >= SVGA3D_MAX_SURFACE_IDS
-                ||  sidIndex >= pState->cSurfaces
-                ||  pState->papSurfaces[sidIndex]->id != sidIndex)
-            {
-                Assert(sidIndex < SVGA3D_MAX_SURFACE_IDS);
-                Assert(sidIndex < pState->cSurfaces && pState->papSurfaces[sidIndex]->id == sidIndex);
-                rc = VERR_INVALID_PARAMETER;
+            rc = vmsvga3dSurfaceFromSid(pState, sidIndex, &pIndexSurface);
+            if (RT_FAILURE(rc))
                 goto internal_error;
-            }
-            pIndexSurface = pState->papSurfaces[sidIndex];
+
             Log(("vmsvga3dDrawPrimitives: index sid=%x\n", sidIndex));
 
+            if (   pIndexSurface->u.pSurface
+                && pIndexSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_INDEX_BUFFER)
+            {
+                /* The buffer object is not an index one. Switch type. */
+                Assert(pIndexSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER);
+                D3D_RELEASE(pIndexSurface->u.pVertexBuffer);
+                pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+
+                LogFunc(("vertex -> index buffer sid=%x\n", sidIndex));
+            }
+
             if (!pIndexSurface->u.pIndexBuffer)
             {
                 Log(("vmsvga3dDrawPrimitives: create index buffer fDirty=%d\n", pIndexSurface->fDirty));
@@ -5100,6 +5390,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
                     rc = VERR_INTERNAL_ERROR;
                     goto internal_error;
                 }
+                pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_INDEX_BUFFER;
 
                 if (pIndexSurface->fDirty)
                 {
@@ -5118,19 +5409,16 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
                     pIndexSurface->pMipmapLevels[0].fDirty = false;
                     pIndexSurface->fDirty = false;
                 }
-                pIndexSurface->flags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
-                pIndexSurface->fu32ActualUsageFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+                pIndexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
             }
-            else
-                Assert(pIndexSurface->fDirty == false);
 
             hr = pContext->pDevice->SetIndices(pIndexSurface->u.pIndexBuffer);
-            AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetIndices vertex failed with %x\n", hr));
+            AssertMsg(hr == D3D_OK, ("SetIndices vertex failed with %x\n", hr));
         }
         else
         {
             hr = pContext->pDevice->SetIndices(NULL);
-            AssertMsg(hr == D3D_OK, ("vmsvga3dDrawPrimitives: SetIndices vertex (NULL) failed with %x\n", hr));
+            AssertMsg(hr == D3D_OK, ("SetIndices vertex (NULL) failed with %x\n", hr));
         }
 
         PVMSVGA3DSURFACE pVertexSurface;
@@ -5182,7 +5470,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
             }
         }
     }
-    pVertexDeclD3D->Release();
+    D3D_RELEASE(pVertexDeclD3D);
     RTMemFree(pVertexElement);
 
     hr = pContext->pDevice->EndScene();
@@ -5199,6 +5487,16 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
         }
     }
 
+    if (cVertexDivisor)
+    {
+        /* "When you are finished rendering the instance data, be sure to reset the vertex stream frequency back..." */
+        for (uint32_t i = 0; i < cVertexDivisor; ++i)
+        {
+            HRESULT hr2 = pContext->pDevice->SetStreamSourceFreq(i, 1);
+            Assert(SUCCEEDED(hr2)); RT_NOREF(hr2);
+        }
+    }
+
 #if 0 /* Flush queue */
     {
         IDirect3DQuery9        *pQuery;
@@ -5216,7 +5514,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
         }
         AssertMsgReturn(hr == S_OK, ("vmsvga3dSurfaceFinishDrawing: GetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
 
-        pQuery->Release();
+        D3D_RELEASE(pQuery);
     }
 #endif
 
@@ -5238,8 +5536,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
     return rc;
 
 internal_error:
-    if (pVertexDeclD3D)
-        pVertexDeclD3D->Release();
+    D3D_RELEASE(pVertexDeclD3D);
     if (pVertexElement)
         RTMemFree(pVertexElement);
 
@@ -5249,6 +5546,435 @@ internal_error:
     return rc;
 }
 
+#else /* New vmsvga3dDrawPrimitives */
+
+static int vmsvga3dDrawPrimitivesSyncVertexBuffer(PVMSVGA3DCONTEXT pContext,
+                                                  PVMSVGA3DSURFACE pVertexSurface)
+{
+    HRESULT hr;
+    if (   pVertexSurface->u.pSurface
+        && pVertexSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER)
+    {
+        /* The buffer object is not an vertex one. Recreate the D3D resource. */
+        Assert(pVertexSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_INDEX_BUFFER);
+        D3D_RELEASE(pVertexSurface->u.pIndexBuffer);
+        pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+
+        LogFunc(("index -> vertex buffer sid=%x\n", pVertexSurface->id));
+    }
+
+    bool fSync = pVertexSurface->fDirty;
+    if (!pVertexSurface->u.pVertexBuffer)
+    {
+        LogFunc(("Create vertex buffer fDirty=%d\n", pVertexSurface->fDirty));
+
+        const DWORD Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY; /* possible severe performance penalty otherwise (according to d3d debug output */
+        hr = pContext->pDevice->CreateVertexBuffer(pVertexSurface->pMipmapLevels[0].cbSurface,
+                                                   Usage,
+                                                   0, /* non-FVF */
+                                                   D3DPOOL_DEFAULT,
+                                                   &pVertexSurface->u.pVertexBuffer,
+                                                   NULL);
+        AssertMsgReturn(hr == D3D_OK, ("CreateVertexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER;
+        pVertexSurface->idAssociatedContext = pContext->id;
+        pVertexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+        fSync = true;
+    }
+
+    if (fSync)
+    {
+        LogFunc(("sync vertex buffer\n"));
+        Assert(pVertexSurface->u.pVertexBuffer);
+
+        void *pvData;
+        hr = pVertexSurface->u.pVertexBuffer->Lock(0, 0, &pvData, D3DLOCK_DISCARD);
+        AssertMsgReturn(hr == D3D_OK, ("Lock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        memcpy(pvData, pVertexSurface->pMipmapLevels[0].pSurfaceData, pVertexSurface->pMipmapLevels[0].cbSurface);
+
+        hr = pVertexSurface->u.pVertexBuffer->Unlock();
+        AssertMsgReturn(hr == D3D_OK, ("Unlock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+
+    return VINF_SUCCESS;
+}
+
+
+static int vmsvga3dDrawPrimitivesSyncIndexBuffer(PVMSVGA3DCONTEXT pContext,
+                                                 PVMSVGA3DSURFACE pIndexSurface,
+                                                 uint32_t indexWidth)
+{
+    HRESULT hr;
+    if (   pIndexSurface->u.pSurface
+        && pIndexSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_INDEX_BUFFER)
+    {
+        /* The buffer object is not an index one. Must recreate the D3D resource. */
+        Assert(pIndexSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER);
+        D3D_RELEASE(pIndexSurface->u.pVertexBuffer);
+        pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+
+        LogFunc(("vertex -> index buffer sid=%x\n", pIndexSurface->id));
+    }
+
+    bool fSync = pIndexSurface->fDirty;
+    if (!pIndexSurface->u.pIndexBuffer)
+    {
+        LogFunc(("Create index buffer fDirty=%d\n", pIndexSurface->fDirty));
+
+        const DWORD Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY; /* possible severe performance penalty otherwise (according to d3d debug output */
+        const D3DFORMAT Format = (indexWidth == sizeof(uint16_t)) ? D3DFMT_INDEX16 : D3DFMT_INDEX32;
+        hr = pContext->pDevice->CreateIndexBuffer(pIndexSurface->pMipmapLevels[0].cbSurface,
+                                                  Usage,
+                                                  Format,
+                                                  D3DPOOL_DEFAULT,
+                                                  &pIndexSurface->u.pIndexBuffer,
+                                                  NULL);
+        AssertMsgReturn(hr == D3D_OK, ("CreateIndexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_INDEX_BUFFER;
+        pIndexSurface->idAssociatedContext = pContext->id;
+        pIndexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+        fSync = true;
+    }
+
+    if (fSync)
+    {
+        LogFunc(("sync index buffer\n"));
+        Assert(pIndexSurface->u.pIndexBuffer);
+
+        void *pvData;
+        hr = pIndexSurface->u.pIndexBuffer->Lock(0, 0, &pvData, D3DLOCK_DISCARD);
+        AssertMsgReturn(hr == D3D_OK, ("Lock index failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+        memcpy(pvData, pIndexSurface->pMipmapLevels[0].pSurfaceData, pIndexSurface->pMipmapLevels[0].cbSurface);
+
+        hr = pIndexSurface->u.pIndexBuffer->Unlock();
+        AssertMsgReturn(hr == D3D_OK, ("Unlock index failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    }
+
+    return VINF_SUCCESS;
+}
+
+static int vmsvga3dDrawPrimitivesProcessVertexDecls(const uint32_t numVertexDecls,
+                                                    const SVGA3dVertexDecl *pVertexDecl,
+                                                    const uint32_t idStream,
+                                                    const uint32_t uVertexMinOffset,
+                                                    const uint32_t uVertexMaxOffset,
+                                                    D3DVERTEXELEMENT9 *pVertexElement)
+{
+    RT_NOREF(uVertexMaxOffset); /* Logging only. */
+    Assert(numVertexDecls);
+
+    /* Create a vertex declaration array */
+    for (uint32_t iVertex = 0; iVertex < numVertexDecls; ++iVertex)
+    {
+        LogFunc(("vertex %d type=%s (%d) method=%s (%d) usage=%s (%d) usageIndex=%d stride=%d offset=%d (%d min=%d max=%d)\n",
+                 iVertex,
+                 vmsvgaDeclType2String(pVertexDecl[iVertex].identity.type), pVertexDecl[iVertex].identity.type,
+                 vmsvgaDeclMethod2String(pVertexDecl[iVertex].identity.method), pVertexDecl[iVertex].identity.method,
+                 vmsvgaDeclUsage2String(pVertexDecl[iVertex].identity.usage), pVertexDecl[iVertex].identity.usage,
+                 pVertexDecl[iVertex].identity.usageIndex,
+                 pVertexDecl[iVertex].array.stride,
+                 pVertexDecl[iVertex].array.offset - uVertexMinOffset,
+                 pVertexDecl[iVertex].array.offset,
+                 uVertexMinOffset, uVertexMaxOffset));
+
+        int rc = vmsvga3dVertexDecl2D3D(pVertexDecl[iVertex].identity, &pVertexElement[iVertex]);
+        AssertRCReturn(rc, rc);
+
+        pVertexElement[iVertex].Stream = idStream;
+        pVertexElement[iVertex].Offset = pVertexDecl[iVertex].array.offset - uVertexMinOffset;
+
+#ifdef LOG_ENABLED
+        if (pVertexDecl[iVertex].array.stride == 0)
+            LogFunc(("stride == 0! Can be valid\n"));
+
+        if (pVertexElement[iVertex].Offset >= pVertexDecl[0].array.stride)
+            LogFunc(("WARNING: offset > stride!!\n"));
+#endif
+    }
+
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl,
+                           uint32_t numRanges, SVGA3dPrimitiveRange *pRange,
+                           uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
+{
+    static const D3DVERTEXELEMENT9 sVertexEnd = D3DDECL_END();
+
+    PVMSVGA3DSTATE pState = pThis->svga.p3dState;
+    AssertReturn(pState, VERR_INTERNAL_ERROR);
+
+    PVMSVGA3DCONTEXT pContext;
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
+
+    HRESULT hr;
+
+    /* SVGA driver may use the same surface for both index and vertex data. So we can not clear fDirty flag,
+     * after updating a vertex buffer for example, because the same surface might be used for index buffer later.
+     * So keep pointers to all used surfaces in the following two arrays and clear fDirty flag at the end.
+     */
+    PVMSVGA3DSURFACE aVertexSurfaces[SVGA3D_MAX_VERTEX_ARRAYS];
+    PVMSVGA3DSURFACE aIndexSurfaces[SVGA3D_MAX_DRAW_PRIMITIVE_RANGES];
+    RT_ZERO(aVertexSurfaces);
+    RT_ZERO(aIndexSurfaces);
+
+    LogFunc(("cid=%x numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
+
+    AssertReturn(numVertexDecls && numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, VERR_INVALID_PARAMETER);
+    AssertReturn(numRanges && numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, VERR_INVALID_PARAMETER);
+    AssertReturn(!cVertexDivisor || cVertexDivisor == numVertexDecls, VERR_INVALID_PARAMETER);
+
+    /*
+     * Process all vertex declarations. Each vertex buffer surface is represented by one stream source id.
+     */
+    D3DVERTEXELEMENT9 aVertexElements[SVGA3D_MAX_VERTEX_ARRAYS + 1];
+
+    uint32_t iCurrentVertex   = 0;
+    uint32_t iCurrentStreamId = 0;
+    while (iCurrentVertex < numVertexDecls)
+    {
+        const uint32_t sidVertex = pVertexDecl[iCurrentVertex].array.surfaceId;
+        const uint32_t strideVertex = pVertexDecl[iCurrentVertex].array.stride;
+
+        PVMSVGA3DSURFACE pVertexSurface;
+        rc = vmsvga3dSurfaceFromSid(pState, sidVertex, &pVertexSurface);
+        AssertRCBreak(rc);
+
+        rc = vmsvga3dDrawPrimitivesSyncVertexBuffer(pContext, pVertexSurface);
+        AssertRCBreak(rc);
+
+        uint32_t uVertexMinOffset = UINT32_MAX;
+        uint32_t uVertexMaxOffset = 0;
+
+        uint32_t iVertex;
+        for (iVertex = iCurrentVertex; iVertex < numVertexDecls; ++iVertex)
+        {
+            /* Remember, so we can mark it as not dirty later. */
+            aVertexSurfaces[iVertex] = pVertexSurface;
+
+            /* New surface id -> new stream id. */
+            if (pVertexDecl[iVertex].array.surfaceId != sidVertex)
+                break;
+
+            const uint32_t uVertexOffset = pVertexDecl[iVertex].array.offset;
+            const uint32_t uNewVertexMinOffset = RT_MIN(uVertexMinOffset, uVertexOffset);
+            const uint32_t uNewVertexMaxOffset = RT_MAX(uVertexMaxOffset, uVertexOffset);
+
+            /* We must put vertex declarations that start at a different element in another stream as d3d only handles offsets < stride. */
+            if (   uNewVertexMaxOffset - uNewVertexMinOffset >= strideVertex
+                && strideVertex != 0)
+                break;
+
+            uVertexMinOffset = uNewVertexMinOffset;
+            uVertexMaxOffset = uNewVertexMaxOffset;
+        }
+
+        rc = vmsvga3dDrawPrimitivesProcessVertexDecls(iVertex - iCurrentVertex,
+                                                      &pVertexDecl[iCurrentVertex],
+                                                      iCurrentStreamId,
+                                                      uVertexMinOffset,
+                                                      uVertexMaxOffset,
+                                                      &aVertexElements[iCurrentVertex]);
+        AssertRCBreak(rc);
+
+        LogFunc(("SetStreamSource vertex sid=%x stream %d min offset=%d stride=%d\n",
+                 pVertexSurface->id, iCurrentStreamId, uVertexMinOffset, strideVertex));
+
+        hr = pContext->pDevice->SetStreamSource(iCurrentStreamId,
+                                                pVertexSurface->u.pVertexBuffer,
+                                                uVertexMinOffset,
+                                                strideVertex);
+        AssertMsgBreakStmt(hr == D3D_OK, ("SetStreamSource failed with %x\n", hr), rc = VERR_INTERNAL_ERROR);
+
+        if (cVertexDivisor)
+        {
+            LogFunc(("SetStreamSourceFreq[%d]=%x\n", iCurrentStreamId, pVertexDivisor[iCurrentStreamId].value));
+            HRESULT hr2 = pContext->pDevice->SetStreamSourceFreq(iCurrentStreamId,
+                                                                 pVertexDivisor[iCurrentStreamId].value);
+            Assert(SUCCEEDED(hr2)); RT_NOREF(hr2);
+        }
+
+        iCurrentVertex = iVertex;
+        ++iCurrentStreamId;
+    }
+
+    /* iCurrentStreamId is equal to the total number of streams and the value is used for cleanup at the function end. */
+
+    AssertRCReturn(rc, rc);
+
+    /* Mark the end. */
+    memcpy(&aVertexElements[numVertexDecls], &sVertexEnd, sizeof(sVertexEnd));
+
+    /* Create and set the vertex declaration. */
+    IDirect3DVertexDeclaration9 *pVertexDeclD3D = NULL;
+    hr = pContext->pDevice->CreateVertexDeclaration(&aVertexElements[0], &pVertexDeclD3D);
+    AssertMsgReturn(hr == D3D_OK, ("CreateVertexDeclaration failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    hr = pContext->pDevice->SetVertexDeclaration(pVertexDeclD3D);
+    AssertMsgReturnStmt(hr == D3D_OK, ("SetVertexDeclaration failed with %x\n", hr),
+                        D3D_RELEASE(pVertexDeclD3D), VERR_INTERNAL_ERROR);
+
+    /* Begin a scene before rendering anything. */
+    hr = pContext->pDevice->BeginScene();
+    AssertMsgReturnStmt(hr == D3D_OK, ("BeginScene failed with %x\n", hr),
+                        D3D_RELEASE(pVertexDeclD3D), VERR_INTERNAL_ERROR);
+
+    /* Now draw the primitives. */
+    for (uint32_t iPrimitive = 0; iPrimitive < numRanges; ++iPrimitive)
+    {
+        Log(("Primitive %d: type %s\n", iPrimitive, vmsvga3dPrimitiveType2String(pRange[iPrimitive].primType)));
+
+        const uint32_t sidIndex = pRange[iPrimitive].indexArray.surfaceId;
+        PVMSVGA3DSURFACE pIndexSurface = NULL;
+
+        D3DPRIMITIVETYPE PrimitiveTypeD3D;
+        rc = vmsvga3dPrimitiveType2D3D(pRange[iPrimitive].primType, &PrimitiveTypeD3D);
+        AssertRCBreak(rc);
+
+        /* Triangle strips or fans with just one primitive don't make much sense and are identical to triangle lists.
+         * Workaround for NVidia driver crash when encountering some of these.
+         */
+        if (    pRange[iPrimitive].primitiveCount == 1
+            &&  (   PrimitiveTypeD3D == D3DPT_TRIANGLESTRIP
+                 || PrimitiveTypeD3D == D3DPT_TRIANGLEFAN))
+            PrimitiveTypeD3D = D3DPT_TRIANGLELIST;
+
+        if (sidIndex != SVGA3D_INVALID_ID)
+        {
+            AssertMsg(pRange[iPrimitive].indexWidth == sizeof(uint32_t) || pRange[iPrimitive].indexWidth == sizeof(uint16_t),
+                      ("Unsupported primitive width %d\n", pRange[iPrimitive].indexWidth));
+
+            rc = vmsvga3dSurfaceFromSid(pState, sidIndex, &pIndexSurface);
+            AssertRCBreak(rc);
+
+            aIndexSurfaces[iPrimitive] = pIndexSurface;
+
+            Log(("vmsvga3dDrawPrimitives: index sid=%x\n", sidIndex));
+
+            rc = vmsvga3dDrawPrimitivesSyncIndexBuffer(pContext, pIndexSurface, pRange[iPrimitive].indexWidth);
+            AssertRCBreak(rc);
+
+            hr = pContext->pDevice->SetIndices(pIndexSurface->u.pIndexBuffer);
+            AssertMsg(hr == D3D_OK, ("SetIndices vertex failed with %x\n", hr));
+        }
+        else
+        {
+            hr = pContext->pDevice->SetIndices(NULL);
+            AssertMsg(hr == D3D_OK, ("SetIndices vertex (NULL) failed with %x\n", hr));
+        }
+
+        const uint32_t strideVertex = pVertexDecl[0].array.stride;
+
+        if (!pIndexSurface)
+        {
+            /* Render without an index buffer */
+            Log(("DrawPrimitive %x primitivecount=%d index index bias=%d stride=%d\n",
+                 PrimitiveTypeD3D, pRange[iPrimitive].primitiveCount,  pRange[iPrimitive].indexBias, strideVertex));
+
+            hr = pContext->pDevice->DrawPrimitive(PrimitiveTypeD3D,
+                                                  pRange[iPrimitive].indexBias,
+                                                  pRange[iPrimitive].primitiveCount);
+            AssertMsgBreakStmt(hr == D3D_OK, ("DrawPrimitive failed with %x\n", hr), rc = VERR_INTERNAL_ERROR);
+        }
+        else
+        {
+            Assert(pRange[iPrimitive].indexBias >= 0);  /** @todo */
+
+            UINT numVertices;
+            if (pVertexDecl[0].rangeHint.last)
+            {
+                /* Both SVGA3dArrayRangeHint definition and the SVGA driver code imply that 'last' is exclusive,
+                 * hence compute the difference.
+                 */
+                numVertices = pVertexDecl[0].rangeHint.last - pVertexDecl[0].rangeHint.first;
+            }
+            else
+            {
+                /* Range hint is not provided. */
+                PVMSVGA3DSURFACE pVertexSurface = aVertexSurfaces[0];
+                numVertices =   pVertexSurface->pMipmapLevels[0].cbSurface / strideVertex
+                              - pVertexDecl[0].array.offset / strideVertex
+                              - pVertexDecl[0].rangeHint.first
+                              - pRange[iPrimitive].indexBias;
+            }
+
+            /* Render with an index buffer */
+            Log(("DrawIndexedPrimitive %x startindex=%d numVertices=%d, primitivecount=%d index format=%s index bias=%d stride=%d\n",
+                 PrimitiveTypeD3D, pVertexDecl[0].rangeHint.first,  numVertices, pRange[iPrimitive].primitiveCount,
+                 (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? "D3DFMT_INDEX16" : "D3DFMT_INDEX32",
+                 pRange[iPrimitive].indexBias, strideVertex));
+
+            hr = pContext->pDevice->DrawIndexedPrimitive(PrimitiveTypeD3D,
+                                                         pRange[iPrimitive].indexBias,      /* BaseVertexIndex */
+                                                         0,                                 /* MinVertexIndex */
+                                                         numVertices,
+                                                         pRange[iPrimitive].indexArray.offset / pRange[iPrimitive].indexWidth,    /* StartIndex */
+                                                         pRange[iPrimitive].primitiveCount);
+            AssertMsgBreakStmt(hr == D3D_OK, ("DrawIndexedPrimitive failed with %x\n", hr), rc = VERR_INTERNAL_ERROR);
+        }
+    }
+
+    /* Release vertex declaration, end the scene and do some cleanup regardless of the rc. */
+    D3D_RELEASE(pVertexDeclD3D);
+
+    hr = pContext->pDevice->EndScene();
+    AssertMsgReturn(hr == D3D_OK, ("EndScene failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+    /* Cleanup. */
+    uint32_t i;
+    /* Clear streams above 1 as they might accidentally be reused in the future. */
+    for (i = 1; i < iCurrentStreamId; ++i)
+    {
+        LogFunc(("clear stream %d\n", i));
+        HRESULT hr2 = pContext->pDevice->SetStreamSource(i, NULL, 0, 0);
+        AssertMsg(hr2 == D3D_OK, ("SetStreamSource(%d, NULL) failed with %x\n", i, hr2)); RT_NOREF(hr2);
+    }
+
+    if (cVertexDivisor)
+    {
+        /* "When you are finished rendering the instance data, be sure to reset the vertex stream frequency back..." */
+        for (i = 0; i < iCurrentStreamId; ++i)
+        {
+            LogFunc(("reset stream freq %d\n", i));
+            HRESULT hr2 = pContext->pDevice->SetStreamSourceFreq(i, 1);
+            AssertMsg(hr2 == D3D_OK, ("SetStreamSourceFreq(%d, 1) failed with %x\n", i, hr2)); RT_NOREF(hr2);
+        }
+    }
+
+    if (RT_SUCCESS(rc))
+    {
+        for (i = 0; i < numVertexDecls; ++i)
+        {
+            if (aVertexSurfaces[i])
+            {
+                aVertexSurfaces[i]->pMipmapLevels[0].fDirty = false;
+                aVertexSurfaces[i]->fDirty = false;
+            }
+        }
+
+        for (i = 0; i < numRanges; ++i)
+        {
+            if (aIndexSurfaces[i])
+            {
+                aIndexSurfaces[i]->pMipmapLevels[0].fDirty = false;
+                aIndexSurfaces[i]->fDirty = false;
+            }
+        }
+
+        /* Make sure we can track drawing usage of active render targets and textures. */
+        vmsvga3dContextTrackUsage(pThis, pContext);
+    }
+
+    return rc;
+}
+
+#endif /* New vmsvga3dDrawPrimitives */
+
 int vmsvga3dSetScissorRect(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect)
 {
     HRESULT               hr;
@@ -5292,7 +6018,25 @@ int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dSha
     AssertReturn(pState, VERR_NO_MEMORY);
 
     Log(("vmsvga3dShaderDefine %x shid=%x type=%s cbData=%x\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cbData));
-    Log3(("shader code:\n%.*Rhxd\n", cbData, pShaderData));
+#ifdef LOG_ENABLED
+    Log3(("Shader code:\n"));
+    const uint32_t cTokensPerLine = 8;
+    const uint32_t *paTokens = (uint32_t *)pShaderData;
+    const uint32_t cTokens = cbData / sizeof(uint32_t);
+    for (uint32_t iToken = 0; iToken < cTokens; ++iToken)
+    {
+        if ((iToken % cTokensPerLine) == 0)
+        {
+            if (iToken == 0)
+                Log3(("0x%08X,", paTokens[iToken]));
+            else
+                Log3(("\n0x%08X,", paTokens[iToken]));
+        }
+        else
+            Log3((" 0x%08X,", paTokens[iToken]));
+    }
+    Log3(("\n"));
+#endif
 
     if (    cid >= pState->cContexts
         ||  pState->papContexts[cid]->id != cid)
@@ -5356,7 +6100,7 @@ int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dSha
     if (hr == D3D_OK)
     {
         Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
-        pDisassembly->Release();
+        D3D_RELEASE(pDisassembly);
     }
 #endif
 
@@ -5407,7 +6151,7 @@ int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dSh
             &&  pContext->paVertexShader[shid].id == shid)
         {
             pShader = &pContext->paVertexShader[shid];
-            pShader->u.pVertexShader->Release();
+            D3D_RELEASE(pShader->u.pVertexShader);
         }
     }
     else
@@ -5417,7 +6161,7 @@ int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dSh
             &&  pContext->paPixelShader[shid].id == shid)
         {
             pShader = &pContext->paPixelShader[shid];
-            pShader->u.pPixelShader->Release();
+            D3D_RELEASE(pShader->u.pPixelShader);
         }
     }
 
@@ -5582,26 +6326,56 @@ int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dSh
     return VINF_SUCCESS;
 }
 
+int vmsvga3dOcclusionQueryCreate(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
+{
+    RT_NOREF(pState);
+    HRESULT hr = pContext->pDevice->CreateQuery(D3DQUERYTYPE_OCCLUSION, &pContext->occlusion.pQuery);
+    AssertMsgReturn(hr == D3D_OK, ("CreateQuery(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
 
-int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type)
+int vmsvga3dOcclusionQueryDelete(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
 {
-    RT_NOREF(pThis, cid, type);
-    AssertFailed();
-    return VERR_NOT_IMPLEMENTED;
+    RT_NOREF(pState);
+    D3D_RELEASE(pContext->occlusion.pQuery);
+    return VINF_SUCCESS;
 }
 
-int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+int vmsvga3dOcclusionQueryBegin(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
 {
-    RT_NOREF(pThis, cid, type, guestResult);
-    AssertFailed();
-    return VERR_NOT_IMPLEMENTED;
+    RT_NOREF(pState);
+    HRESULT hr = pContext->occlusion.pQuery->Issue(D3DISSUE_BEGIN);
+    AssertMsgReturnStmt(hr == D3D_OK, ("D3DISSUE_BEGIN(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr),
+                        D3D_RELEASE(pContext->occlusion.pQuery), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
 }
 
-int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+int vmsvga3dOcclusionQueryEnd(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
 {
-    RT_NOREF(pThis, cid, type, guestResult);
-    AssertFailed();
-    return VERR_NOT_IMPLEMENTED;
+    RT_NOREF(pState);
+    HRESULT hr = pContext->occlusion.pQuery->Issue(D3DISSUE_END);
+    AssertMsgReturnStmt(hr == D3D_OK, ("D3DISSUE_END(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr),
+                        D3D_RELEASE(pContext->occlusion.pQuery), VERR_INTERNAL_ERROR);
+    return VINF_SUCCESS;
+}
+
+int vmsvga3dOcclusionQueryGetData(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels)
+{
+    RT_NOREF(pState);
+    HRESULT hr = D3D_OK;
+    /* Wait until the data becomes available. */
+    DWORD dwPixels = 0;
+    do
+    {
+        hr = pContext->occlusion.pQuery->GetData((void *)&dwPixels, sizeof(DWORD), D3DGETDATA_FLUSH);
+    } while (hr == S_FALSE);
+
+    AssertMsgReturnStmt(hr == D3D_OK, ("GetData(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr),
+                        D3D_RELEASE(pContext->occlusion.pQuery), VERR_INTERNAL_ERROR);
+
+    LogFunc(("Query result: dwPixels %d\n", dwPixels));
+    *pu32Pixels = dwPixels;
+    return VINF_SUCCESS;
 }
 
 static void vmsvgaDumpD3DCaps(D3DCAPS9 *pCaps)
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
index 735b343..a856fb5 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -124,14 +124,11 @@ int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags,
     pSurface->id                    = sid;
 #ifdef VMSVGA3D_OPENGL
     pSurface->idWeakContextAssociation = SVGA3D_INVALID_ID;
-#else
+    pSurface->oglId.buffer          = OPENGL_INVALID_ID;
+#else /* VMSVGA3D_DIRECT3D */
     pSurface->idAssociatedContext   = SVGA3D_INVALID_ID;
-#endif
-#ifdef VMSVGA3D_DIRECT3D
     pSurface->hSharedObject         = NULL;
     pSurface->pSharedObjectTree     = NULL;
-#else
-    pSurface->oglId.buffer = OPENGL_INVALID_ID;
 #endif
 
     /* The surface type is sort of undefined now, even though the hints and format can help to clear that up.
@@ -211,7 +208,7 @@ int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags,
         break;
     }
 
-    pSurface->flags             = surfaceFlags;
+    pSurface->surfaceFlags      = surfaceFlags;
     pSurface->format            = format;
     memcpy(pSurface->faces, face, sizeof(pSurface->faces));
     pSurface->cFaces            = cFaces;
@@ -224,9 +221,9 @@ int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags,
     AssertReturn(pSurface->pMipmapLevels, VERR_NO_MEMORY);
 
     for (uint32_t i=0; i < cMipLevels; i++)
-        pSurface->pMipmapLevels[i].size = paMipLevelSizes[i];
+        pSurface->pMipmapLevels[i].mipmapSize = paMipLevelSizes[i];
 
-    pSurface->cbBlock = vmsvga3dSurfaceFormatSize(format);
+    pSurface->cbBlock = vmsvga3dSurfaceFormatSize(format, &pSurface->cxBlock, &pSurface->cyBlock);
     AssertReturn(pSurface->cbBlock, VERR_INVALID_PARAMETER);
 
 #ifdef VMSVGA3D_DIRECT3D
@@ -244,43 +241,21 @@ int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags,
         pSurface->fUsageD3D |= D3DUSAGE_WRITEONLY;
     if (surfaceFlags & SVGA3D_SURFACE_AUTOGENMIPMAPS)
         pSurface->fUsageD3D |= D3DUSAGE_AUTOGENMIPMAP;
-    pSurface->fu32ActualUsageFlags = 0;
+    pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+    /* pSurface->u.pSurface = NULL; */
+    /* pSurface->bounce.pTexture = NULL; */
 #else
     vmsvga3dSurfaceFormat2OGL(pSurface, format);
 #endif
 
-    switch (surfaceFlags & (SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP))
-    {
-    case SVGA3D_SURFACE_CUBEMAP:
-        Log(("SVGA3D_SURFACE_CUBEMAP\n"));
-        break;
-
-    case SVGA3D_SURFACE_HINT_INDEXBUFFER:
-        Log(("SVGA3D_SURFACE_HINT_INDEXBUFFER\n"));
-        /* else type unknown at this time; postpone buffer creation */
-        break;
-
-    case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
-        Log(("SVGA3D_SURFACE_HINT_VERTEXBUFFER\n"));
-        /* Type unknown at this time; postpone buffer creation */
-        break;
-
-    case SVGA3D_SURFACE_HINT_TEXTURE:
-        Log(("SVGA3D_SURFACE_HINT_TEXTURE\n"));
-        break;
-
-    case SVGA3D_SURFACE_HINT_RENDERTARGET:
-        Log(("SVGA3D_SURFACE_HINT_RENDERTARGET\n"));
-        break;
-
-    case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
-        Log(("SVGA3D_SURFACE_HINT_DEPTHSTENCIL\n"));
-        break;
-
-    default:
-        /* Unknown; decide later. */
-        break;
-    }
+    LogFunc(("surface hint(s):%s%s%s%s%s%s\n",
+            (surfaceFlags & SVGA3D_SURFACE_HINT_INDEXBUFFER)  ? " SVGA3D_SURFACE_HINT_INDEXBUFFER"  : "",
+            (surfaceFlags & SVGA3D_SURFACE_HINT_VERTEXBUFFER) ? " SVGA3D_SURFACE_HINT_VERTEXBUFFER"  : "",
+            (surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE)      ? " SVGA3D_SURFACE_HINT_TEXTURE"  : "",
+            (surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL) ? " SVGA3D_SURFACE_HINT_DEPTHSTENCIL"  : "",
+            (surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET) ? " SVGA3D_SURFACE_HINT_RENDERTARGET"  : "",
+            (surfaceFlags & SVGA3D_SURFACE_CUBEMAP)           ? " SVGA3D_SURFACE_CUBEMAP"  : ""
+           ));
 
     Assert(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface));
 
@@ -289,32 +264,53 @@ int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags,
     for (uint32_t i = 0; i < cMipLevels; ++i)
     {
         PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->pMipmapLevels[i];
-        LogFunc(("[%d] face %d mip level %d (%d,%d,%d) cbBlock=0x%x\n",
+        LogFunc(("[%d] face %d mip level %d (%d,%d,%d) cbBlock=0x%x block %dx%d\n",
                  i, i / pSurface->faces[0].numMipLevels, i % pSurface->faces[0].numMipLevels,
-                 pMipmapLevel->size.width, pMipmapLevel->size.height, pMipmapLevel->size.depth, pSurface->cbBlock));
+                 pMipmapLevel->mipmapSize.width, pMipmapLevel->mipmapSize.height, pMipmapLevel->mipmapSize.depth,
+                 pSurface->cbBlock, pSurface->cxBlock, pSurface->cyBlock));
 
-        if (   pMipmapLevel->size.width == 0
-            || pMipmapLevel->size.height == 0
-            || pMipmapLevel->size.depth == 0)
+        uint32_t cBlocksX;
+        uint32_t cBlocksY;
+        if (RT_LIKELY(pSurface->cxBlock == 1 && pSurface->cyBlock == 1))
+        {
+            cBlocksX = pMipmapLevel->mipmapSize.width;
+            cBlocksY = pMipmapLevel->mipmapSize.height;
+        }
+        else
+        {
+            cBlocksX = pMipmapLevel->mipmapSize.width / pSurface->cxBlock;
+            if (pMipmapLevel->mipmapSize.width % pSurface->cxBlock)
+                ++cBlocksX;
+            cBlocksY = pMipmapLevel->mipmapSize.height / pSurface->cyBlock;
+            if (pMipmapLevel->mipmapSize.height % pSurface->cyBlock)
+                ++cBlocksY;
+        }
+
+        if (   cBlocksX == 0
+            || cBlocksY == 0
+            || pMipmapLevel->mipmapSize.depth == 0)
             return VERR_INVALID_PARAMETER;
 
-        const uint32_t cMaxWidth = cbMemRemaining / pSurface->cbBlock;
-        if (pMipmapLevel->size.width > cMaxWidth)
+        const uint32_t cMaxBlocksX = cbMemRemaining / pSurface->cbBlock;
+        if (cBlocksX > cMaxBlocksX)
             return VERR_INVALID_PARAMETER;
-        const uint32_t cbSurfacePitch = pSurface->cbBlock * pMipmapLevel->size.width;
-        LogFunc(("cbPitch=0x%x\n", cbSurfacePitch));
+        const uint32_t cbSurfacePitch = pSurface->cbBlock * cBlocksX;
+        LogFunc(("cbSurfacePitch=0x%x\n", cbSurfacePitch));
 
-        const uint32_t cMaxHeight = cbMemRemaining / cbSurfacePitch;
-        if (pMipmapLevel->size.height > cMaxHeight)
+        const uint32_t cMaxBlocksY = cbMemRemaining / cbSurfacePitch;
+        if (cBlocksY > cMaxBlocksY)
             return VERR_INVALID_PARAMETER;
-        const uint32_t cbSurfacePlane = cbSurfacePitch * pMipmapLevel->size.height;
+        const uint32_t cbSurfacePlane = cbSurfacePitch * cBlocksY;
 
         const uint32_t cMaxDepth = cbMemRemaining / cbSurfacePlane;
-        if (pMipmapLevel->size.depth > cMaxDepth)
+        if (pMipmapLevel->mipmapSize.depth > cMaxDepth)
             return VERR_INVALID_PARAMETER;
-        const uint32_t cbSurface = cbSurfacePlane * pMipmapLevel->size.depth;
+        const uint32_t cbSurface = cbSurfacePlane * pMipmapLevel->mipmapSize.depth;
 
+        pMipmapLevel->cBlocksX       = cBlocksX;
+        pMipmapLevel->cBlocksY       = cBlocksY;
         pMipmapLevel->cbSurfacePitch = cbSurfacePitch;
+        pMipmapLevel->cbSurfacePlane = cbSurfacePlane;
         pMipmapLevel->cbSurface      = cbSurface;
         pMipmapLevel->pSurfaceData   = RTMemAllocZ(cbSurface);
         AssertReturn(pMipmapLevel->pSurfaceData, VERR_NO_MEMORY);
@@ -337,41 +333,37 @@ int vmsvga3dSurfaceDestroy(PVGASTATE pThis, uint32_t sid)
     PVMSVGA3DSTATE pState = pThis->svga.p3dState;
     AssertReturn(pState, VERR_NO_MEMORY);
 
-    if (    sid < pState->cSurfaces
-        &&  pState->papSurfaces[sid]->id == sid)
-    {
-        PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+    PVMSVGA3DSURFACE pSurface;
+    int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+    AssertRCReturn(rc, rc);
 
-        Log(("vmsvga3dSurfaceDestroy id %x\n", sid));
+    LogFunc(("sid=%x\n", sid));
 
-        /* Check all contexts if this surface is used as a render target or active texture. */
-        for (uint32_t cid = 0; cid < pState->cContexts; cid++)
+    /* Check all contexts if this surface is used as a render target or active texture. */
+    for (uint32_t cid = 0; cid < pState->cContexts; cid++)
+    {
+        PVMSVGA3DCONTEXT pContext = pState->papContexts[cid];
+        if (pContext->id == cid)
         {
-            PVMSVGA3DCONTEXT pContext = pState->papContexts[cid];
-            if (pContext->id == cid)
-            {
-                for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTexture); i++)
-                    if (pContext->aSidActiveTexture[i] == sid)
-                        pContext->aSidActiveTexture[i] = SVGA3D_INVALID_ID;
-                if (pContext->sidRenderTarget == sid)
-                    pContext->sidRenderTarget = SVGA3D_INVALID_ID;
-            }
+            for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); ++i)
+                if (pContext->aSidActiveTextures[i] == sid)
+                    pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID;
+            if (pContext->sidRenderTarget == sid)
+                pContext->sidRenderTarget = SVGA3D_INVALID_ID;
         }
+    }
 
-        vmsvga3dBackSurfaceDestroy(pState, pSurface);
+    vmsvga3dBackSurfaceDestroy(pState, pSurface);
 
-        if (pSurface->pMipmapLevels)
-        {
-            for (uint32_t i = 0; i < pSurface->cMipmapLevels; ++i)
-                RTMemFree(pSurface->pMipmapLevels[i].pSurfaceData);
-            RTMemFree(pSurface->pMipmapLevels);
-        }
-
-        memset(pSurface, 0, sizeof(*pSurface));
-        pSurface->id = SVGA3D_INVALID_ID;
+    if (pSurface->pMipmapLevels)
+    {
+        for (uint32_t i = 0; i < pSurface->cMipmapLevels; ++i)
+            RTMemFree(pSurface->pMipmapLevels[i].pSurfaceData);
+        RTMemFree(pSurface->pMipmapLevels);
     }
-    else
-        AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+    memset(pSurface, 0, sizeof(*pSurface));
+    pSurface->id = SVGA3D_INVALID_ID;
 
     return VINF_SUCCESS;
 }
@@ -392,57 +384,53 @@ int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId const *pDstS
                               SVGA3dSurfaceImageId const *pSrcSfcImg, SVGA3dBox const *pSrcBox, SVGA3dStretchBltMode enmMode)
 {
     PVMSVGA3DSTATE pState = pThis->svga.p3dState;
-
     AssertReturn(pState, VERR_NO_MEMORY);
 
+    int rc;
+
     uint32_t const sidSrc = pSrcSfcImg->sid;
-    Assert(sidSrc < SVGA3D_MAX_SURFACE_IDS);
-    AssertReturn(sidSrc < pState->cSurfaces, VERR_INVALID_PARAMETER);
-    PVMSVGA3DSURFACE pSrcSurface  = pState->papSurfaces[sidSrc];
-    AssertReturn(pSrcSurface && pSrcSurface->id == sidSrc, VERR_INVALID_PARAMETER);
+    PVMSVGA3DSURFACE pSrcSurface;
+    rc = vmsvga3dSurfaceFromSid(pState, sidSrc, &pSrcSurface);
+    AssertRCReturn(rc, rc);
 
     uint32_t const sidDst = pDstSfcImg->sid;
-    Assert(sidDst < SVGA3D_MAX_SURFACE_IDS);
-    AssertReturn(sidDst < pState->cSurfaces, VERR_INVALID_PARAMETER);
-    PVMSVGA3DSURFACE pDstSurface = pState->papSurfaces[sidDst];
-    AssertReturn(pDstSurface && pDstSurface->id == sidDst, VERR_INVALID_PARAMETER);
+    PVMSVGA3DSURFACE pDstSurface;
+    rc = vmsvga3dSurfaceFromSid(pState, sidDst, &pDstSurface);
+    AssertRCReturn(rc, rc);
 
-    Assert(pSrcSfcImg->face == 0);
+    /* Can use faces[0].numMipLevels, because numMipLevels is the same for all faces. */
+    AssertReturn(pSrcSfcImg->face < pSrcSurface->cFaces, VERR_INVALID_PARAMETER);
     AssertReturn(pSrcSfcImg->mipmap < pSrcSurface->faces[0].numMipLevels, VERR_INVALID_PARAMETER);
-    Assert(pDstSfcImg->face == 0);
+    AssertReturn(pDstSfcImg->face < pDstSurface->cFaces, VERR_INVALID_PARAMETER);
     AssertReturn(pDstSfcImg->mipmap < pDstSurface->faces[0].numMipLevels, VERR_INVALID_PARAMETER);
 
     PVMSVGA3DCONTEXT pContext;
 #ifdef VMSVGA3D_OPENGL
-    Log(("vmsvga3dSurfaceStretchBlt: src sid=%x (%d,%d)(%d,%d) dest sid=%x (%d,%d)(%d,%d) mode=%x\n",
+    LogFunc(("src sid=%x (%d,%d)(%d,%d) dest sid=%x (%d,%d)(%d,%d) mode=%x\n",
          sidSrc, pSrcBox->x, pSrcBox->y, pSrcBox->x + pSrcBox->w, pSrcBox->y + pSrcBox->h,
          sidDst, pDstBox->x, pDstBox->y, pDstBox->x + pDstBox->w, pDstBox->y + pDstBox->h, enmMode));
     pContext = &pState->SharedCtx;
     VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
 #else
-    Log(("vmsvga3dSurfaceStretchBlt: src sid=%x cid=%x (%d,%d)(%d,%d) dest sid=%x cid=%x (%d,%d)(%d,%d) mode=%x\n",
+    LogFunc(("src sid=%x cid=%x (%d,%d)(%d,%d) dest sid=%x cid=%x (%d,%d)(%d,%d) mode=%x\n",
          sidSrc, pSrcSurface->idAssociatedContext, pSrcBox->x, pSrcBox->y, pSrcBox->x + pSrcBox->w, pSrcBox->y + pSrcBox->h,
          sidDst, pDstSurface->idAssociatedContext, pDstBox->x, pDstBox->y, pDstBox->x + pDstBox->w, pDstBox->y + pDstBox->h, enmMode));
 
-    /** @todo stricter checks for associated context */
     uint32_t cid = pDstSurface->idAssociatedContext;
     if (cid == SVGA3D_INVALID_ID)
         cid = pSrcSurface->idAssociatedContext;
 
-    if (    cid >= pState->cContexts
-        ||  pState->papContexts[cid]->id != cid)
-    {
-        Log(("vmsvga3dSurfaceStretchBlt invalid context id!\n"));
-        AssertFailedReturn(VERR_INVALID_PARAMETER);
-    }
-    pContext = pState->papContexts[cid];
+    /* At least one of surfaces must be in hardware. */
+    AssertReturn(cid != SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
+
+    rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
 #endif
 
-    int rc;
     if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSrcSurface))
     {
         /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
-        Log(("vmsvga3dSurfaceStretchBlt: unknown src surface id=%x type=%d format=%d -> create texture\n", sidSrc, pSrcSurface->flags, pSrcSurface->format));
+        LogFunc(("unknown src sid=%x type=%d format=%d -> create texture\n", sidSrc, pSrcSurface->surfaceFlags, pSrcSurface->format));
         rc = vmsvga3dBackCreateTexture(pState, pContext, pContext->id, pSrcSurface);
         AssertRCReturn(rc, rc);
     }
@@ -450,24 +438,30 @@ int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId const *pDstS
     if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pDstSurface))
     {
         /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
-        Log(("vmsvga3dSurfaceStretchBlt: unknown dest surface id=%x type=%d format=%d -> create texture\n", sidDst, pDstSurface->flags, pDstSurface->format));
+        LogFunc(("unknown dest sid=%x type=%d format=%d -> create texture\n", sidDst, pDstSurface->surfaceFlags, pDstSurface->format));
         rc = vmsvga3dBackCreateTexture(pState, pContext, pContext->id, pDstSurface);
         AssertRCReturn(rc, rc);
     }
 
+    PVMSVGA3DMIPMAPLEVEL pSrcMipmapLevel;
+    rc = vmsvga3dMipmapLevel(pSrcSurface, pSrcSfcImg->face, pSrcSfcImg->mipmap, &pSrcMipmapLevel);
+    AssertRCReturn(rc, rc);
+
+    PVMSVGA3DMIPMAPLEVEL pDstMipmapLevel;
+    rc = vmsvga3dMipmapLevel(pDstSurface, pDstSfcImg->face, pDstSfcImg->mipmap, &pDstMipmapLevel);
+    AssertRCReturn(rc, rc);
+
     SVGA3dBox clipSrcBox = *pSrcBox;
     SVGA3dBox clipDstBox = *pDstBox;
-    vmsvgaClipBox(&pSrcSurface->pMipmapLevels[pSrcSfcImg->mipmap].size, &clipSrcBox);
-    vmsvgaClipBox(&pDstSurface->pMipmapLevels[pDstSfcImg->mipmap].size, &clipDstBox);
+    vmsvgaClipBox(&pSrcMipmapLevel->mipmapSize, &clipSrcBox);
+    vmsvgaClipBox(&pDstMipmapLevel->mipmapSize, &clipDstBox);
 
     return vmsvga3dBackSurfaceStretchBlt(pThis, pState,
-                                         pDstSurface, pDstSfcImg->mipmap, &clipDstBox,
-                                         pSrcSurface, pSrcSfcImg->mipmap, &clipSrcBox,
+                                         pDstSurface, pDstSfcImg->face, pDstSfcImg->mipmap, &clipDstBox,
+                                         pSrcSurface, pSrcSfcImg->face, pSrcSfcImg->mipmap, &clipSrcBox,
                                          enmMode, pContext);
 }
 
-
-
 /**
  * Implements the SVGA_3D_CMD_SURFACE_DMA command (fifo).
  *
@@ -482,84 +476,123 @@ int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId const *pDstS
 int vmsvga3dSurfaceDMA(PVGASTATE pThis, SVGA3dGuestImage guest, SVGA3dSurfaceImageId host, SVGA3dTransferType transfer,
                        uint32_t cCopyBoxes, SVGA3dCopyBox *paBoxes)
 {
-    int rc = VINF_SUCCESS;
-
     PVMSVGA3DSTATE pState = pThis->svga.p3dState;
     AssertReturn(pState, VERR_NO_MEMORY);
 
-    uint32_t sid = host.sid;
-    Assert(sid < SVGA3D_MAX_SURFACE_IDS);
-    AssertReturn(sid < pState->cSurfaces, VERR_INVALID_PARAMETER);
-    PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
-    AssertReturn(pSurface && pSurface->id == sid, VERR_INVALID_PARAMETER);
+    PVMSVGA3DSURFACE pSurface;
+    int rc = vmsvga3dSurfaceFromSid(pState, host.sid, &pSurface);
+    AssertRCReturn(rc, rc);
 
-    if (pSurface->flags & SVGA3D_SURFACE_HINT_TEXTURE)
-        Log(("vmsvga3dSurfaceDMA TEXTURE guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
-    else
-        Log(("vmsvga3dSurfaceDMA guestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n", guest.ptr.gmrId, guest.ptr.offset, guest.pitch, host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
+    LogFunc(("%sguestptr gmr=%x offset=%x pitch=%x host sid=%x face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n",
+             (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE) ? "TEXTURE " : "",
+             guest.ptr.gmrId, guest.ptr.offset, guest.pitch,
+             host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
 
-    AssertMsg(host.face == 0, ("host.face=%#x\n", host.face));
-    AssertMsgReturn(pSurface->faces[0].numMipLevels > host.mipmap, ("numMipLevels %d, host.mipmap %d", pSurface->faces[0].numMipLevels, host.mipmap), VERR_INVALID_PARAMETER);
-    PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->pMipmapLevels[host.mipmap];
+    PVMSVGA3DMIPMAPLEVEL pMipLevel;
+    rc = vmsvga3dMipmapLevel(pSurface, host.face, host.mipmap, &pMipLevel);
+    AssertRCReturn(rc, rc);
 
     if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
     {
         /*
          * Not realized in host hardware/library yet, we have to work with
-         * the copy of the data we've got in VMSVGA3DMIMAPLEVEL::pvSurfaceData.
+         * the copy of the data we've got in VMSVGA3DMIMAPLEVEL::pSurfaceData.
          */
-        AssertReturn(pSurface->pMipmapLevels[host.mipmap].pSurfaceData, VERR_INTERNAL_ERROR);
+        AssertReturn(pMipLevel->pSurfaceData, VERR_INTERNAL_ERROR);
 
-        for (unsigned i = 0; i < cCopyBoxes; i++)
+        for (uint32_t i = 0; i < cCopyBoxes; ++i)
         {
-            unsigned uDestOffset;
-            unsigned cbSrcPitch;
-            uint8_t *pBufferStart;
-
-            Log(("Copy box %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n", i, paBoxes[i].srcx, paBoxes[i].srcy, paBoxes[i].srcz, paBoxes[i].w, paBoxes[i].h, paBoxes[i].d, paBoxes[i].x, paBoxes[i].y));
+            Log(("Copy box (mem) %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n",
+                  i, paBoxes[i].srcx, paBoxes[i].srcy, paBoxes[i].srcz, paBoxes[i].w, paBoxes[i].h, paBoxes[i].d, paBoxes[i].x, paBoxes[i].y));
 
             /* Apparently we're supposed to clip it (gmr test sample) */
             SVGA3dCopyBox clipBox = paBoxes[i];
-            vmsvgaClipCopyBox(&pMipLevel->size, &pMipLevel->size, &clipBox);
+            vmsvgaClipCopyBox(&pMipLevel->mipmapSize, &pMipLevel->mipmapSize, &clipBox);
             if (   !clipBox.w
                 || !clipBox.h
                 || !clipBox.d)
             {
-                Log(("Empty box; skip\n"));
+                Log(("Skip empty box\n"));
                 continue;
             }
 
-            uDestOffset = clipBox.x * pSurface->cbBlock + clipBox.y * pMipLevel->cbSurfacePitch + clipBox.z * pMipLevel->size.height * pMipLevel->cbSurfacePitch;
-            AssertReturn(uDestOffset + clipBox.w * pSurface->cbBlock * clipBox.h * clipBox.d <= pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+            /* Calculate memory addresses of the image blocks for the transfer. */
+            uint32_t u32HostBlockX;
+            uint32_t u32HostBlockY;
+            uint32_t u32GuestBlockX;
+            uint32_t u32GuestBlockY;
+            uint32_t cBlocksX;
+            uint32_t cBlocksY;
+            if (RT_LIKELY(pSurface->cxBlock == 1 && pSurface->cyBlock == 1))
+            {
+                u32HostBlockX = clipBox.x;
+                u32HostBlockY = clipBox.y;
 
-            cbSrcPitch = (guest.pitch == 0) ? clipBox.w * pSurface->cbBlock : guest.pitch;
-#ifdef MANUAL_FLIP_SURFACE_DATA
-            pBufferStart =    (uint8_t *)pMipLevel->pSurfaceData
-                            + clipBox.x * pSurface->cbBlock
-                            + pMipLevel->cbSurface - clipBox.y * pMipLevel->cbSurfacePitch
-                            - pMipLevel->cbSurfacePitch;      /* flip image during copy */
-#else
-            pBufferStart = (uint8_t *)pMipLevel->pSurfaceData + uDestOffset;
-#endif
-            rc = vmsvgaGMRTransfer(pThis,
-                                   transfer,
-                                   pBufferStart,
-#ifdef MANUAL_FLIP_SURFACE_DATA
-                                   -(int32_t)pMipLevel->cbSurfacePitch,
-#else
-                                   (int32_t)pMipLevel->cbSurfacePitch,
-#endif
-                                   guest.ptr,
-                                   clipBox.srcx * pSurface->cbBlock + (clipBox.srcy + clipBox.srcz * clipBox.h) * cbSrcPitch,
-                                   cbSrcPitch,
-                                   clipBox.w * pSurface->cbBlock,
-                                   clipBox.d * clipBox.h);
+                u32GuestBlockX = clipBox.srcx;
+                u32GuestBlockY = clipBox.srcy;
 
-            Log4(("first line:\n%.*Rhxd\n", pMipLevel->cbSurfacePitch, pMipLevel->pSurfaceData));
+                cBlocksX = clipBox.w;
+                cBlocksY = clipBox.h;
+            }
+            else
+            {
+                /* Pixels to blocks. */
+                u32HostBlockX = clipBox.x / pSurface->cxBlock;
+                u32HostBlockY = clipBox.y / pSurface->cyBlock;
+                Assert(u32HostBlockX * pSurface->cxBlock == clipBox.x);
+                Assert(u32HostBlockY * pSurface->cyBlock == clipBox.y);
+
+                u32GuestBlockX = clipBox.srcx / pSurface->cxBlock;
+                u32GuestBlockY = clipBox.srcy / pSurface->cyBlock;
+                Assert(u32GuestBlockX * pSurface->cxBlock == clipBox.srcx);
+                Assert(u32GuestBlockY * pSurface->cyBlock == clipBox.srcy);
+
+                cBlocksX = (clipBox.w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+                cBlocksY = (clipBox.h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+            }
 
-            AssertRC(rc);
+            uint32_t cbGuestPitch;
+            if (guest.pitch == 0)
+                cbGuestPitch = cBlocksX * pSurface->cbBlock;
+            else
+            {
+                cbGuestPitch = guest.pitch; /* vmsvgaGMRTransfer will verify the value. */
+                AssertReturn(cbGuestPitch <= SVGA3D_MAX_SURFACE_MEM_SIZE, VERR_INVALID_PARAMETER);
+            }
+
+            uint64_t uGuestOffset = u32GuestBlockX * pSurface->cbBlock +
+                                    u32GuestBlockY * cbGuestPitch +
+                                    clipBox.srcz * pMipLevel->mipmapSize.height * cbGuestPitch;
+            AssertReturn(uGuestOffset < UINT32_MAX, VERR_INVALID_PARAMETER);
+
+            /* vmsvga3dSurfaceDefine verifies the surface dimensions and clipBox is within them. */
+            uint32_t uHostOffset = u32HostBlockX * pSurface->cbBlock +
+                                   u32HostBlockY * pMipLevel->cbSurfacePitch +
+                                   clipBox.z * pMipLevel->cbSurfacePlane;
+            AssertReturn(uHostOffset < pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+
+            for (uint32_t z = 0; z < clipBox.d; ++z)
+            {
+                rc = vmsvgaGMRTransfer(pThis,
+                                       transfer,
+                                       (uint8_t *)pMipLevel->pSurfaceData + uHostOffset,
+                                       (int32_t)pMipLevel->cbSurfacePitch,
+                                       guest.ptr,
+                                       (uint32_t)uGuestOffset,
+                                       cbGuestPitch,
+                                       cBlocksX * pSurface->cbBlock,
+                                       cBlocksY);
+                AssertRC(rc);
+
+                Log4(("first line [z=%d]:\n%.*Rhxd\n",
+                      z, pMipLevel->cbSurfacePitch, (uint8_t *)pMipLevel->pSurfaceData + uHostOffset));
+
+                uHostOffset += pMipLevel->cbSurfacePlane;
+                uGuestOffset += pMipLevel->mipmapSize.height * cbGuestPitch;
+            }
         }
-        pSurface->pMipmapLevels[host.mipmap].fDirty = true;
+
+        pMipLevel->fDirty = true;
         pSurface->fDirty = true;
     }
     else
@@ -578,30 +611,204 @@ int vmsvga3dSurfaceDMA(PVGASTATE pThis, SVGA3dGuestImage guest, SVGA3dSurfaceIma
         VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
 #endif
 
-        for (unsigned i = 0; i < cCopyBoxes; i++)
+        for (uint32_t i = 0; i < cCopyBoxes; ++i)
         {
-            Log(("Copy box %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n", i, paBoxes[i].srcx, paBoxes[i].srcy, paBoxes[i].srcz, paBoxes[i].w, paBoxes[i].h, paBoxes[i].d, paBoxes[i].x, paBoxes[i].y));
-
-            /** @todo Is d == 0 valid? */
-            Assert((paBoxes[i].d == 1 || paBoxes[i].d == 0) && paBoxes[i].z == 0);
+            /** @todo Identical code to the above no-hw branch. Think about merging. */
+            Log(("Copy box (hw) %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n",
+                  i, paBoxes[i].srcx, paBoxes[i].srcy, paBoxes[i].srcz, paBoxes[i].w, paBoxes[i].h, paBoxes[i].d, paBoxes[i].x, paBoxes[i].y));
 
             /* Apparently we're supposed to clip it (gmr test sample) */
             SVGA3dCopyBox clipBox = paBoxes[i];
-            vmsvgaClipCopyBox(&pMipLevel->size, &pMipLevel->size, &clipBox);
+            vmsvgaClipCopyBox(&pMipLevel->mipmapSize, &pMipLevel->mipmapSize, &clipBox);
             if (   !clipBox.w
                 || !clipBox.h
                 || !clipBox.d)
             {
-                Log(("Empty box; skip\n"));
+                Log(("Skip empty box\n"));
                 continue;
             }
 
-            uint32_t cbSrcPitch = (guest.pitch == 0) ? clipBox.w * pSurface->cbBlock : guest.pitch;
-            rc = vmsvga3dBackSurfaceDMACopyBox(pThis, pState, pSurface, host.mipmap, guest.ptr, cbSrcPitch, transfer,
+            /* Calculate memory addresses of the image blocks for the transfer. */
+            uint32_t u32HostBlockX;
+            uint32_t u32HostBlockY;
+            uint32_t u32GuestBlockX;
+            uint32_t u32GuestBlockY;
+            uint32_t cBlocksX;
+            uint32_t cBlocksY;
+            if (RT_LIKELY(pSurface->cxBlock == 1 && pSurface->cyBlock == 1))
+            {
+                u32HostBlockX = clipBox.x;
+                u32HostBlockY = clipBox.y;
+
+                u32GuestBlockX = clipBox.srcx;
+                u32GuestBlockY = clipBox.srcy;
+
+                cBlocksX = clipBox.w;
+                cBlocksY = clipBox.h;
+            }
+            else
+            {
+                /* Pixels to blocks. */
+                u32HostBlockX = clipBox.x / pSurface->cxBlock;
+                u32HostBlockY = clipBox.y / pSurface->cyBlock;
+                Assert(u32HostBlockX * pSurface->cxBlock == clipBox.x);
+                Assert(u32HostBlockY * pSurface->cyBlock == clipBox.y);
+
+                u32GuestBlockX = clipBox.srcx / pSurface->cxBlock;
+                u32GuestBlockY = clipBox.srcy / pSurface->cyBlock;
+                Assert(u32GuestBlockX * pSurface->cxBlock == clipBox.srcx);
+                Assert(u32GuestBlockY * pSurface->cyBlock == clipBox.srcy);
+
+                cBlocksX = (clipBox.w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+                cBlocksY = (clipBox.h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+            }
+
+            uint32_t cbGuestPitch;
+            if (guest.pitch == 0)
+                cbGuestPitch = cBlocksX * pSurface->cbBlock;
+            else
+            {
+                cbGuestPitch = guest.pitch; /* vmsvgaGMRTransfer will verify the value. */
+                AssertReturn(cbGuestPitch <= SVGA3D_MAX_SURFACE_MEM_SIZE, VERR_INVALID_PARAMETER);
+            }
+
+            rc = vmsvga3dBackSurfaceDMACopyBox(pThis, pState, pSurface, pMipLevel, host.face, host.mipmap,
+                                               guest.ptr, cbGuestPitch, transfer,
                                                &clipBox, pContext, rc, i);
+            AssertRC(rc);
         }
     }
 
     return rc;
 }
 
+static int vmsvga3dQueryWriteResult(PVGASTATE pThis, SVGAGuestPtr guestResult, SVGA3dQueryState enmState, uint32_t u32Result)
+{
+    SVGA3dQueryResult queryResult;
+    queryResult.totalSize = sizeof(queryResult);    /* Set by guest before query is ended. */
+    queryResult.state = enmState;                   /* Set by host or guest. See SVGA3dQueryState. */
+    queryResult.result32 = u32Result;
+
+    int rc = vmsvgaGMRTransfer(pThis, SVGA3D_READ_HOST_VRAM, (uint8_t *)&queryResult, sizeof(queryResult),
+                               guestResult, 0, sizeof(queryResult), sizeof(queryResult), 1);
+    AssertRC(rc);
+    return rc;
+}
+
+int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type)
+{
+    PVMSVGA3DSTATE pState = pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    LogFunc(("cid=%x type=%d\n", cid, type));
+
+    PVMSVGA3DCONTEXT pContext;
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
+
+    if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+    {
+        VMSVGA3DQUERY *p = &pContext->occlusion;
+        if (!VMSVGA3DQUERY_EXISTS(p))
+        {
+            /* Lazy creation of the query object. */
+            rc = vmsvga3dOcclusionQueryCreate(pState, pContext);
+            AssertRCReturn(rc, rc);
+        }
+
+        rc = vmsvga3dOcclusionQueryBegin(pState, pContext);
+        AssertRCReturn(rc, rc);
+
+        p->enmQueryState = VMSVGA3DQUERYSTATE_BUILDING;
+        p->u32QueryResult = 0;
+
+        return VINF_SUCCESS;
+    }
+
+    /* Nothing else for VGPU9. */
+    AssertFailedReturn(VERR_NOT_IMPLEMENTED);
+}
+
+int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+{
+    RT_NOREF(guestResult);
+    PVMSVGA3DSTATE pState = pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    LogFunc(("cid=%x type=%d guestResult %d:0x%x\n", cid, type, guestResult.gmrId, guestResult.offset));
+
+    PVMSVGA3DCONTEXT pContext;
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
+
+    if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+    {
+        VMSVGA3DQUERY *p = &pContext->occlusion;
+        Assert(p->enmQueryState == VMSVGA3DQUERYSTATE_BUILDING);
+        AssertMsgReturn(VMSVGA3DQUERY_EXISTS(p), ("Query is NULL\n"), VERR_INTERNAL_ERROR);
+
+        rc = vmsvga3dOcclusionQueryEnd(pState, pContext);
+        AssertRCReturn(rc, rc);
+
+        p->enmQueryState = VMSVGA3DQUERYSTATE_ISSUED;
+
+        /* Do not touch guestResult, because the guest will call WaitForQuery. */
+        return VINF_SUCCESS;
+    }
+
+    /* Nothing else for VGPU9. */
+    AssertFailedReturn(VERR_NOT_IMPLEMENTED);
+}
+
+int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult)
+{
+    PVMSVGA3DSTATE pState = pThis->svga.p3dState;
+    AssertReturn(pState, VERR_NO_MEMORY);
+
+    LogFunc(("cid=%x type=%d guestResult GMR%d:0x%x\n", cid, type, guestResult.gmrId, guestResult.offset));
+
+    PVMSVGA3DCONTEXT pContext;
+    int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+    AssertRCReturn(rc, rc);
+
+    if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+    {
+        VMSVGA3DQUERY *p = &pContext->occlusion;
+        if (VMSVGA3DQUERY_EXISTS(p))
+        {
+            if (p->enmQueryState == VMSVGA3DQUERYSTATE_ISSUED)
+            {
+                /* Only if not already in SIGNALED state,
+                 * i.e. not a second read from the guest or after restoring saved state.
+                 */
+                uint32_t u32Pixels = 0;
+                rc = vmsvga3dOcclusionQueryGetData(pState, pContext, &u32Pixels);
+                if (RT_SUCCESS(rc))
+                {
+                    p->enmQueryState = VMSVGA3DQUERYSTATE_SIGNALED;
+                    p->u32QueryResult += u32Pixels; /* += because it might contain partial result from saved state. */
+                }
+            }
+
+            if (RT_SUCCESS(rc))
+            {
+                /* Return data to the guest. */
+                vmsvga3dQueryWriteResult(pThis, guestResult, SVGA3D_QUERYSTATE_SUCCEEDED, p->u32QueryResult);
+                return VINF_SUCCESS;
+            }
+        }
+        else
+        {
+            AssertMsgFailed(("GetData Query is NULL\n"));
+        }
+
+        rc = VERR_INTERNAL_ERROR;
+    }
+    else
+    {
+        rc = VERR_NOT_IMPLEMENTED;
+    }
+
+    vmsvga3dQueryWriteResult(pThis, guestResult, SVGA3D_QUERYSTATE_FAILED, 0);
+    AssertFailedReturn(rc);
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
index 079a978..defd296 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -27,7 +27,12 @@
 /** Arbitrary limit */
 #define SVGA3D_MAX_SHADER_IDS                   0x800
 /** D3D allows up to 8 texture stages. */
-#define SVGA3D_MAX_TEXTURE_STAGE                8
+#define SVGA3D_MAX_TEXTURE_STAGES               8
+/** Samplers: 16 Pixel Shader + 1 Displacement Map + 4 Vertex Shader */
+#define SVGA3D_MAX_SAMPLERS_PS         16
+#define SVGA3D_MAX_SAMPLERS_DMAP       1
+#define SVGA3D_MAX_SAMPLERS_VS         4
+#define SVGA3D_MAX_SAMPLERS            (SVGA3D_MAX_SAMPLERS_PS + SVGA3D_MAX_SAMPLERS_DMAP + SVGA3D_MAX_SAMPLERS_VS)
 /** Arbitrary upper limit; seen 8 so far. */
 #define SVGA3D_MAX_LIGHTS                       32
 /** Arbitrary upper limit; 2GB enough for 32768x16384*4. */
@@ -207,7 +212,9 @@ char *vmsvga3dFormatRenderState(char *pszBuffer, size_t cbBuffer, SVGA3dRenderSt
 char *vmsvga3dFormatTextureState(char *pszBuffer, size_t cbBuffer, SVGA3dTextureState const *pTextureState);
 void vmsvga3dInfoHostWindow(PCDBGFINFOHLP pHlp, uint64_t idHostWindow);
 
-uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format);
+uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format,
+                                   uint32_t *pu32BlockWidth,
+                                   uint32_t *pu32BlockHeight);
 
 #ifdef LOG_ENABLED
 const char *vmsvga3dGetCapString(uint32_t idxCap);
diff --git a/src/VBox/Devices/Graphics/DevVGA.cpp b/src/VBox/Devices/Graphics/DevVGA.cpp
index f398602..9c68110 100644
--- a/src/VBox/Devices/Graphics/DevVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA.cpp
@@ -104,6 +104,7 @@
 #define VGA_BLINK_PERIOD_FULL   (RT_NS_100MS * 4)   /* Blink cycle length. */
 #define VGA_BLINK_PERIOD_ON     (RT_NS_100MS * 2)   /* How long cursor/text is visible. */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Devices/Graphics/DevVGA.h b/src/VBox/Devices/Graphics/DevVGA.h
index 6ad7051..7bac5fd 100644
--- a/src/VBox/Devices/Graphics/DevVGA.h
+++ b/src/VBox/Devices/Graphics/DevVGA.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/DevVGAModes.h b/src/VBox/Devices/Graphics/DevVGAModes.h
index c174329..8c6ebe8 100644
--- a/src/VBox/Devices/Graphics/DevVGAModes.h
+++ b/src/VBox/Devices/Graphics/DevVGAModes.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/DevVGASavedState.h b/src/VBox/Devices/Graphics/DevVGASavedState.h
index 3748179..82e81e9 100644
--- a/src/VBox/Devices/Graphics/DevVGASavedState.h
+++ b/src/VBox/Devices/Graphics/DevVGASavedState.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -44,7 +44,9 @@
         } \
     } while (0)
 
-#define VGA_SAVEDSTATE_VERSION              17
+#define VGA_SAVEDSTATE_VERSION              19
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES 19
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_GMR_COUNT  18
 #define VGA_SAVEDSTATE_VERSION_VMSVGA_VGA_FB_FIX 17
 #define VGA_SAVEDSTATE_VERSION_MARKERS      16
 #define VGA_SAVEDSTATE_VERSION_MODE_HINTS   15
diff --git a/src/VBox/Devices/Graphics/DevVGATmpl.h b/src/VBox/Devices/Graphics/DevVGATmpl.h
index 00d5a9d..9ef2c8c 100644
--- a/src/VBox/Devices/Graphics/DevVGATmpl.h
+++ b/src/VBox/Devices/Graphics/DevVGATmpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
index e79bda8..7212fd8 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
index 4281139..85485be 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
index 502beda..cd14079 100644
--- a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
+++ b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
@@ -9,7 +9,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h
index 23161cb..5848af0 100644
--- a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h
+++ b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp
index a6368a0..ed60c49 100644
--- a/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp
+++ b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h
index 3cb2381..b8fef39 100644
--- a/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h
+++ b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/VBoxSVGA3D.def b/src/VBox/Devices/Graphics/VBoxSVGA3D.def
index c6814c8..76ee1c0 100644
--- a/src/VBox/Devices/Graphics/VBoxSVGA3D.def
+++ b/src/VBox/Devices/Graphics/VBoxSVGA3D.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2014-2016 Oracle Corporation
+; Copyright (C) 2014-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def b/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def
index d748d6c..84c8827 100644
--- a/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def
+++ b/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2014-2016 Oracle Corporation
+; Copyright (C) 2014-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderapi.c b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
index 609214b..3aece1a 100644
--- a/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -45,7 +45,7 @@ extern void (*glXGetProcAddress(const GLubyte *procname))( void );
 
 #endif
 
-#undef GL_EXT_FUNCS_GEN 
+#undef GL_EXT_FUNCS_GEN
 #define GL_EXT_FUNCS_GEN \
     /* GL_ARB_shader_objects */ \
     USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, \
@@ -383,7 +383,7 @@ SHADERDECL(int) ShaderDestroyVertexShader(void *pShaderContext, void *pShaderObj
     SHADER_SET_CURRENT_CONTEXT(pShaderContext);
 
     object->lpVtbl->Release((IWineD3DVertexShader *)object);
-	return VINF_SUCCESS;
+        return VINF_SUCCESS;
 }
 
 SHADERDECL(int) ShaderDestroyPixelShader(void *pShaderContext, void *pShaderObj)
@@ -394,7 +394,7 @@ SHADERDECL(int) ShaderDestroyPixelShader(void *pShaderContext, void *pShaderObj)
     SHADER_SET_CURRENT_CONTEXT(pShaderContext);
 
     object->lpVtbl->Release((IWineD3DPixelShader *)object);
-	return VINF_SUCCESS;
+        return VINF_SUCCESS;
 }
 
 SHADERDECL(int) ShaderSetVertexShader(void *pShaderContext, void *pShaderObj)
@@ -633,7 +633,7 @@ SHADERDECL(int) ShaderSetPositionTransformed(void *pShaderContext, unsigned cxVi
         return VINF_SUCCESS;    /* no changes; nothing to do. */
 
     Log(("ShaderSetPositionTransformed viewport (%d,%d) fPreTransformed=%d\n", cxViewPort, cyViewPort, fPreTransformed));
-    
+
     if (fPreTransformed)
     {   /* In the pre-transformed vertex coordinate case we need to disable all transformations as we're already using screen coordinates. */
         /* Load the identity matrix for the model view */
@@ -672,7 +672,7 @@ SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight)
 
     pThis->rtHeight = rtHeight;
 
-    /* @todo missing state:
+    /** @todo missing state:
      * - fog enable (stateblock->renderState[WINED3DRS_FOGENABLE])
      * - fog mode (stateblock->renderState[WINED3DRS_FOGTABLEMODE])
      * - stateblock->vertexDecl->position_transformed
@@ -748,7 +748,7 @@ SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPo
 
     glTranslatef(xoffset, -yoffset, -1.0f);
 
-    if (fPretransformed) 
+    if (fPretransformed)
     {
         /* One world coordinate equals one screen pixel; y-inversion no longer an issue */
         glOrtho(0, cxViewPort, 0, cyViewPort, -1, 1);
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderlib.h b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
index 39f684d..37f3707 100644
--- a/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/shaderlib/utils.c b/src/VBox/Devices/Graphics/shaderlib/utils.c
index 05fd6a0..2f53c8f 100644
--- a/src/VBox/Devices/Graphics/shaderlib/utils.c
+++ b/src/VBox/Devices/Graphics/shaderlib/utils.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/shaderlib/vboxext.h b/src/VBox/Devices/Graphics/shaderlib/vboxext.h
index 52ebfd6..c9d9be9 100644
--- a/src/VBox/Devices/Graphics/shaderlib/vboxext.h
+++ b/src/VBox/Devices/Graphics/shaderlib/vboxext.h
@@ -4,8 +4,7 @@
  */
 
 /*
- *
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
index 863e141..093ed80 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
@@ -16,6 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
 #ifndef __MSABI_LONG
 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
index 96f669b..8e49ee6 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
@@ -16,6 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #ifndef __WINE_D3DVEC_INL
 #define __WINE_D3DVEC_INL
 
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
index ee2f82b..f1535a5 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
@@ -17,6 +17,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #ifndef __D3DX9MATH_INL__
 #define __D3DX9MATH_INL__
 
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
index 23076a8..be278fc 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
@@ -19,6 +19,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 #define WM_DDE_INITIATE   0x3E0
 #define WM_DDE_TERMINATE  0x3E1
 #define WM_DDE_ADVISE	  0x3E2
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
index e7144b0..99054b5 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
@@ -15,6 +15,15 @@ xof 0302txt 0064
 // License along with this library; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 template Header
 {
     <3D82AB43-62DA-11CF-AB39-0020AF71E433>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
index 1013a24..4e3f8d3 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
@@ -18,6 +18,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 /* These are only defined for Winelib, i.e. _not_ defined for
  * the emulator. The reason is they depend on the UNICODE
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
index 1d2a0bb..6377743 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
@@ -16,6 +16,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 /* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
 #ifndef __MSABI_LONG
 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c
index a5c2c5f..73f87f7 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.c
@@ -1,11 +1,10 @@
 /* $Id: VBoxDbgGl.c $ */
-
 /** @file
  * VBox wine & ogl debugging stuff
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h
index acc6978..11a5d2f 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxDbgGl.h
@@ -1,11 +1,10 @@
 /* $Id: VBoxDbgGl.h $ */
-
 /** @file
  * VBox wine & ogl debugging stuff
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h
index 105e38b..5fb3d5c 100644
--- a/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/vbox/VBoxWineEx.h
@@ -1,8 +1,10 @@
+/* $Id: VBoxWineEx.h $ */
 /** @file
- *
  * VBox extension to Wine D3D
- *
- * Copyright (C) 2010-2016 Oracle Corporation
+ */
+
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +14,7 @@
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
+
 #ifndef ___VBoxWineEx_h__
 #define ___VBoxWineEx_h__
 
@@ -42,7 +45,7 @@ typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_CREATETEXTURE(IDirect3DDevi
 typedef FNVBOXWINEEXD3DDEV9_CREATETEXTURE *PFNVBOXWINEEXD3DDEV9_CREATETEXTURE;
 
 typedef VBOXWINEEX_DECL(HRESULT) FNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE(IDirect3DDevice9Ex *iface,
-            UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, 
+            UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format,
             D3DPOOL pool, IDirect3DCubeTexture9 **texture, HANDLE *shared_handle,
             void **pavClientMem);
 typedef FNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE *PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE;
diff --git a/src/VBox/Devices/Graphics/shaderlib/winoverride.h b/src/VBox/Devices/Graphics/shaderlib/winoverride.h
index cb68476..7b0f718 100644
--- a/src/VBox/Devices/Graphics/shaderlib/winoverride.h
+++ b/src/VBox/Devices/Graphics/shaderlib/winoverride.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c b/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c
index 840c0d8..ff6ff3b 100644
--- a/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c
+++ b/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h b/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h
index 0aef830..d461f2c 100644
--- a/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h
+++ b/src/VBox/Devices/Graphics/vmsvga/svga3d_reg.h
@@ -159,6 +159,8 @@ typedef enum SVGA3dSurfaceFormat {
    /* Video format with alpha */
    SVGA3D_AYUV                         = 45,
 
+   SVGA3D_R8G8B8A8_UNORM               = 68, /// @todo use headers from newer Mesa
+
    SVGA3D_BC4_UNORM                    = 108,
    SVGA3D_BC5_UNORM                    = 111,
 
@@ -167,6 +169,9 @@ typedef enum SVGA3dSurfaceFormat {
    SVGA3D_Z_DF24                       = 119,
    SVGA3D_Z_D24S8_INT                  = 120,
 
+   SVGA3D_R8G8B8A8_SNORM               = 127, /// @todo use headers from newer Mesa
+   SVGA3D_R16G16_UNORM                 = 129, /// @todo use headers from newer Mesa
+
    SVGA3D_FORMAT_MAX
 } SVGA3dSurfaceFormat;
 
diff --git a/src/VBox/Devices/Input/DevPS2.cpp b/src/VBox/Devices/Input/DevPS2.cpp
index b34142e..caa21b2 100644
--- a/src/VBox/Devices/Input/DevPS2.cpp
+++ b/src/VBox/Devices/Input/DevPS2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -660,16 +660,25 @@ static int kbd_load(PSSMHANDLE pSSM, KBDState *s, uint32_t version_id)
  */
 PDMBOTHCBDECL(int) kbdIOPortDataRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
 {
+    uint32_t    fluff = 0;
+    KBDState    *pThis = PDMINS_2_DATA(pDevIns, KBDState *);
+
     NOREF(pvUser);
-    if (cb == 1)
-    {
-        KBDState *pThis = PDMINS_2_DATA(pDevIns, KBDState *);
-        *pu32 = kbd_read_data(pThis, Port);
+    switch (cb) {
+    case 4:
+        fluff |= 0xffff0000;    /* Crazy Apple (Darwin 6.0.2 and earlier). */
+        RT_FALL_THRU();
+    case 2:
+        fluff |= 0x0000ff00;
+        RT_FALL_THRU();
+    case 1:
+        *pu32 = fluff | kbd_read_data(pThis, Port);
         Log2(("kbdIOPortDataRead: Port=%#x cb=%d *pu32=%#x\n", Port, cb, *pu32));
         return VINF_SUCCESS;
+    default:
+        AssertMsgFailed(("Port=%#x cb=%d\n", Port, cb));
+        return VERR_IOM_IOPORT_UNUSED;
     }
-    AssertMsgFailed(("Port=%#x cb=%d\n", Port, cb));
-    return VERR_IOM_IOPORT_UNUSED;
 }
 
 /**
@@ -711,13 +720,16 @@ PDMBOTHCBDECL(int) kbdIOPortDataWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT
  */
 PDMBOTHCBDECL(int) kbdIOPortStatusRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
 {
-    uint16_t    fluff = 0;
+    uint32_t    fluff = 0;
     KBDState    *pThis = PDMINS_2_DATA(pDevIns, KBDState *);
 
     NOREF(pvUser);
     switch (cb) {
+    case 4:
+        fluff |= 0xffff0000;    /* Crazy Apple (Darwin 6.0.2 and earlier). */
+        RT_FALL_THRU();
     case 2:
-        fluff = 0xff00;
+        fluff |= 0x0000ff00;
         RT_FALL_THRU();
     case 1:
         *pu32 = fluff | kbd_read_status(pThis, Port);
diff --git a/src/VBox/Devices/Input/DrvKeyboardQueue.cpp b/src/VBox/Devices/Input/DrvKeyboardQueue.cpp
index 2c72b6c..eeedcd2 100644
--- a/src/VBox/Devices/Input/DrvKeyboardQueue.cpp
+++ b/src/VBox/Devices/Input/DrvKeyboardQueue.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Input/DrvMouseQueue.cpp b/src/VBox/Devices/Input/DrvMouseQueue.cpp
index b5fc9da..4a41962 100644
--- a/src/VBox/Devices/Input/DrvMouseQueue.cpp
+++ b/src/VBox/Devices/Input/DrvMouseQueue.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Input/PS2Dev.h b/src/VBox/Devices/Input/PS2Dev.h
index 85044a1..72ed9cd 100644
--- a/src/VBox/Devices/Input/PS2Dev.h
+++ b/src/VBox/Devices/Input/PS2Dev.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Input/PS2K.cpp b/src/VBox/Devices/Input/PS2K.cpp
index 1ad285a..a0d4f82 100644
--- a/src/VBox/Devices/Input/PS2K.cpp
+++ b/src/VBox/Devices/Input/PS2K.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Input/PS2M.cpp b/src/VBox/Devices/Input/PS2M.cpp
index 26e7f89..c32dfd5 100644
--- a/src/VBox/Devices/Input/PS2M.cpp
+++ b/src/VBox/Devices/Input/PS2M.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -105,6 +105,7 @@
 #define IN_PS2M
 #include "PS2Dev.h"
 
+
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
@@ -302,6 +303,7 @@ AssertCompile(PS2M_STRUCT_FILLER >= sizeof(PS2M));
 static void ps2mTestAccumulation(void);
 #endif
 
+
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Devices/Input/UsbKbd.cpp b/src/VBox/Devices/Input/UsbKbd.cpp
index 8d310cd..1c0120f 100644
--- a/src/VBox/Devices/Input/UsbKbd.cpp
+++ b/src/VBox/Devices/Input/UsbKbd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Input/UsbMouse.cpp b/src/VBox/Devices/Input/UsbMouse.cpp
index a7d9315..5650a7c 100644
--- a/src/VBox/Devices/Input/UsbMouse.cpp
+++ b/src/VBox/Devices/Input/UsbMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -2287,6 +2287,9 @@ static DECLCALLBACK(int) usbHidUsbReset(PPDMUSBINS pUsbIns, bool fResetOnLinux)
     LogRelFlow(("usbHidUsbReset/#%u:\n", pUsbIns->iInstance));
     RTCritSectEnter(&pThis->CritSect);
 
+    /* We can not handle any input until device is configured again. */
+    pThis->Lun0.pDrv->pfnReportModes(pThis->Lun0.pDrv, false, false, false);
+
     int rc = usbHidResetWorker(pThis, NULL, false /*fSetConfig*/);
 
     RTCritSectLeave(&pThis->CritSect);
diff --git a/src/VBox/Devices/Input/testcase/tstUsbMouse.cpp b/src/VBox/Devices/Input/testcase/tstUsbMouse.cpp
index 3c19dcd..b874b17 100644
--- a/src/VBox/Devices/Input/testcase/tstUsbMouse.cpp
+++ b/src/VBox/Devices/Input/testcase/tstUsbMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Makefile.kmk b/src/VBox/Devices/Makefile.kmk
index e9a7fb4..0262a4f 100644
--- a/src/VBox/Devices/Makefile.kmk
+++ b/src/VBox/Devices/Makefile.kmk
@@ -1335,6 +1335,34 @@ if !defined(VBOX_ONLY_EXTPACKS)         # Goes on almost to the end of the file.
   VBoxSmcUtil-darwin_LDFLAGS = -framework IOKit
  endif
 
+ #
+ # PDM device testcase framework.
+ #
+ ifdef VBOX_WITH_TESTCASES_TSTDEV
+  DLLS += tstDeviceVBoxVMMStubs
+  tstDeviceVBoxVMMStubs_TEMPLATE      = VBoxR3DllNoPic
+  tstDeviceVBoxVMMStubs_SONAME.linux  = tstDeviceVBoxVMMStubs.so
+  tstDeviceVBoxVMMStubs_SONAME.darwin = tstDeviceVBoxVMMStubs.dylib
+  tstDeviceVBoxVMMStubs_DEFS          = IN_VMM_R3 IN_DIS IN_GMM_R3 IN_DBG $(VMM_COMMON_DEFS)
+  tstDeviceVBoxVMMStubs_LIBS          = $(LIB_RUNTIME)
+
+  tstDeviceVBoxVMMStubs_SOURCES  = \
+ 	testcase/tstDeviceVMMStubs.cpp
+
+  PROGRAMS += tstDevice
+  tstDevice_TEMPLATE    = VBOXR3TSTEXE
+  tstDevice_DEFS        += IN_SUP_R3
+  tstDevice_LIBS.linux  = $(PATH_STAGE_BIN)/tstDeviceVBoxVMMStubs.so
+  tstDevice_LIBS.darwin = $(PATH_STAGE_BIN)/tstDeviceVBoxVMMStubs.dylib
+  # Required on OS X to prevent resolving symbols in the real VBoxVMM.dylib when VBoxDD.dylib is loaded
+  tstDevice_LDFLAGS.darwin += -force_flat_namespace
+  tstDevice_SOURCES     = \
+ 	testcase/tstDevice.cpp \
+ 	testcase/tstDevicePdmDevHlp.cpp \
+ 	testcase/tstDeviceVMM.cpp \
+ 	testcase/tstDeviceSUP.cpp
+ endif
+
 endif # !VBOX_ONLY_EXTPACKS
 
 
diff --git a/src/VBox/Devices/Misc/VirtualKD.cpp b/src/VBox/Devices/Misc/VirtualKD.cpp
index 68be83a..4906367 100644
--- a/src/VBox/Devices/Misc/VirtualKD.cpp
+++ b/src/VBox/Devices/Misc/VirtualKD.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/.scm-settings b/src/VBox/Devices/Network/.scm-settings
new file mode 100644
index 0000000..99b88f9
--- /dev/null
+++ b/src/VBox/Devices/Network/.scm-settings
@@ -0,0 +1,42 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for network devices/drivers.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+--filter-out-dirs /lwip-new/src/*
+--filter-out-dirs /lwip-new/test/*
+--filter-out-dirs /lwip-new/doc/*
+--filter-out-dirs /lwip-new/vbox/include/*
+
+--filter-out-files /lwip-new/CHANGELOG
+--filter-out-files /lwip-new/FILES
+--filter-out-files /lwip-new/README
+--filter-out-files /lwip-new/README.vbox
+--filter-out-files /lwip-new/UPGRADING
+--filter-out-files /slirp/libalias/HISTORY
+--filter-out-files /slirp/libalias/*.3
+--filter-out-files /slirp/COPYRIGHT
+
+
+# fun
+/slirp/dnsproxy/dnsproxy.h: --external-copyright --no-convert-tabs
+/slirp/dnsproxy/hash.c:     --external-copyright --no-convert-tabs
+/slirp/libalias/*:          --external-copyright --no-convert-tabs
+/slirp/bsd/*:               --external-copyright --no-convert-tabs --dont-set-svn-keywords
+
+# well...
+/lwipopts.h: --external-copyright
+
diff --git a/src/VBox/Devices/Network/DevE1000.cpp b/src/VBox/Devices/Network/DevE1000.cpp
index 2f4533d..3b77d35 100644
--- a/src/VBox/Devices/Network/DevE1000.cpp
+++ b/src/VBox/Devices/Network/DevE1000.cpp
@@ -14,7 +14,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -4429,7 +4429,7 @@ static int e1kFallbackAddToFrame(PE1KSTATE pThis, E1KTXDESC *pDesc, bool fOnWork
         e1kXmitFreeBuf(pThis);
     }
 
-    return VINF_SUCCESS; // @todo consider rc;
+    return VINF_SUCCESS; /// @todo consider rc;
 }
 #endif /* E1K_WITH_TXD_CACHE */
 
diff --git a/src/VBox/Devices/Network/DevE1000Phy.cpp b/src/VBox/Devices/Network/DevE1000Phy.cpp
index c61a5d0..dcf695d 100644
--- a/src/VBox/Devices/Network/DevE1000Phy.cpp
+++ b/src/VBox/Devices/Network/DevE1000Phy.cpp
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DevE1000Phy.h b/src/VBox/Devices/Network/DevE1000Phy.h
index f078d20..f2cfc51 100644
--- a/src/VBox/Devices/Network/DevE1000Phy.h
+++ b/src/VBox/Devices/Network/DevE1000Phy.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DevEEPROM.cpp b/src/VBox/Devices/Network/DevEEPROM.cpp
index 33e31d0..48eabd9 100644
--- a/src/VBox/Devices/Network/DevEEPROM.cpp
+++ b/src/VBox/Devices/Network/DevEEPROM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DevEEPROM.h b/src/VBox/Devices/Network/DevEEPROM.h
index 5f6c3cf..436a07f 100644
--- a/src/VBox/Devices/Network/DevEEPROM.h
+++ b/src/VBox/Devices/Network/DevEEPROM.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DevINIP.cpp b/src/VBox/Devices/Network/DevINIP.cpp
index c71741f..f279019 100644
--- a/src/VBox/Devices/Network/DevINIP.cpp
+++ b/src/VBox/Devices/Network/DevINIP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DevPCNet.cpp b/src/VBox/Devices/Network/DevPCNet.cpp
index f40fe18..62802cc 100644
--- a/src/VBox/Devices/Network/DevPCNet.cpp
+++ b/src/VBox/Devices/Network/DevPCNet.cpp
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DevVirtioNet.cpp b/src/VBox/Devices/Network/DevVirtioNet.cpp
index 24a411b..65f7f3c 100644
--- a/src/VBox/Devices/Network/DevVirtioNet.cpp
+++ b/src/VBox/Devices/Network/DevVirtioNet.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvDedicatedNic.cpp b/src/VBox/Devices/Network/DrvDedicatedNic.cpp
index 84aec71..bc14e68 100644
--- a/src/VBox/Devices/Network/DrvDedicatedNic.cpp
+++ b/src/VBox/Devices/Network/DrvDedicatedNic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvIntNet.cpp b/src/VBox/Devices/Network/DrvIntNet.cpp
index 965e91d..fab381a 100644
--- a/src/VBox/Devices/Network/DrvIntNet.cpp
+++ b/src/VBox/Devices/Network/DrvIntNet.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvNAT.cpp b/src/VBox/Devices/Network/DrvNAT.cpp
index feaf962..215d8be 100644
--- a/src/VBox/Devices/Network/DrvNAT.cpp
+++ b/src/VBox/Devices/Network/DrvNAT.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvNetShaper.cpp b/src/VBox/Devices/Network/DrvNetShaper.cpp
index a996f97..997f7ac 100644
--- a/src/VBox/Devices/Network/DrvNetShaper.cpp
+++ b/src/VBox/Devices/Network/DrvNetShaper.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvNetSniffer.cpp b/src/VBox/Devices/Network/DrvNetSniffer.cpp
index 6b4bf9a..03b3fb5 100644
--- a/src/VBox/Devices/Network/DrvNetSniffer.cpp
+++ b/src/VBox/Devices/Network/DrvNetSniffer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvTAP.cpp b/src/VBox/Devices/Network/DrvTAP.cpp
index 22c0eaf..dc8095b 100644
--- a/src/VBox/Devices/Network/DrvTAP.cpp
+++ b/src/VBox/Devices/Network/DrvTAP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvUDPTunnel.cpp b/src/VBox/Devices/Network/DrvUDPTunnel.cpp
index 32f968a..db49da5 100644
--- a/src/VBox/Devices/Network/DrvUDPTunnel.cpp
+++ b/src/VBox/Devices/Network/DrvUDPTunnel.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/DrvVDE.cpp b/src/VBox/Devices/Network/DrvVDE.cpp
index 4bf8f74..9b3762d 100644
--- a/src/VBox/Devices/Network/DrvVDE.cpp
+++ b/src/VBox/Devices/Network/DrvVDE.cpp
@@ -5,7 +5,8 @@
 
 /*
  * Contributed by Renzo Davoli. VirtualSquare. University of Bologna, 2010
- * Copyright (C) 2006-2016 Oracle Corporation
+ *
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/Pcap.cpp b/src/VBox/Devices/Network/Pcap.cpp
index 37b1850..0838f47 100644
--- a/src/VBox/Devices/Network/Pcap.cpp
+++ b/src/VBox/Devices/Network/Pcap.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/Pcap.h b/src/VBox/Devices/Network/Pcap.h
index 4289b5c..0af224d 100644
--- a/src/VBox/Devices/Network/Pcap.h
+++ b/src/VBox/Devices/Network/Pcap.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/SrvIntNetR0.cpp b/src/VBox/Devices/Network/SrvIntNetR0.cpp
index 12d56dc..29d8227 100644
--- a/src/VBox/Devices/Network/SrvIntNetR0.cpp
+++ b/src/VBox/Devices/Network/SrvIntNetR0.cpp
@@ -9,7 +9,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/VDEPlug.cpp b/src/VBox/Devices/Network/VDEPlug.cpp
index 19537e3..91698f0 100644
--- a/src/VBox/Devices/Network/VDEPlug.cpp
+++ b/src/VBox/Devices/Network/VDEPlug.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.cpp b/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.cpp
index 0529649..86f710f 100644
--- a/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.cpp
+++ b/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.h b/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.h
index 6387a2d..2b32b0c 100644
--- a/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.h
+++ b/src/VBox/Devices/Network/lwip-new/vbox/VBoxLwipCore.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/lwip-new/vbox/sys_arch.c b/src/VBox/Devices/Network/lwip-new/vbox/sys_arch.c
index 6fe02df..e908373 100644
--- a/src/VBox/Devices/Network/lwip-new/vbox/sys_arch.c
+++ b/src/VBox/Devices/Network/lwip-new/vbox/sys_arch.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/scripts/VBoxConvertNATStats.sh b/src/VBox/Devices/Network/scripts/VBoxConvertNATStats.sh
index a9e35c3..aff42a0 100755
--- a/src/VBox/Devices/Network/scripts/VBoxConvertNATStats.sh
+++ b/src/VBox/Devices/Network/scripts/VBoxConvertNATStats.sh
@@ -1,6 +1,10 @@
 #!/bin/sh
+## @file
+# ???
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+
+#
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/scripts/VBoxPortForwarding.py b/src/VBox/Devices/Network/scripts/VBoxPortForwarding.py
index 749bc52..882b10b 100755
--- a/src/VBox/Devices/Network/scripts/VBoxPortForwarding.py
+++ b/src/VBox/Devices/Network/scripts/VBoxPortForwarding.py
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/bootp.c b/src/VBox/Devices/Network/slirp/bootp.c
index ab055c5..2133822 100644
--- a/src/VBox/Devices/Network/slirp/bootp.c
+++ b/src/VBox/Devices/Network/slirp/bootp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/bootp.h b/src/VBox/Devices/Network/slirp/bootp.h
index d31d2ce..f1a44d5 100644
--- a/src/VBox/Devices/Network/slirp/bootp.h
+++ b/src/VBox/Devices/Network/slirp/bootp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/cksum.c b/src/VBox/Devices/Network/slirp/cksum.c
index 6ff9a1c..8814318 100644
--- a/src/VBox/Devices/Network/slirp/cksum.c
+++ b/src/VBox/Devices/Network/slirp/cksum.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/counters.h b/src/VBox/Devices/Network/slirp/counters.h
index 72450c1..67de48e 100644
--- a/src/VBox/Devices/Network/slirp/counters.h
+++ b/src/VBox/Devices/Network/slirp/counters.h
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ctl.h b/src/VBox/Devices/Network/slirp/ctl.h
index a863d09..1341f5a 100644
--- a/src/VBox/Devices/Network/slirp/ctl.h
+++ b/src/VBox/Devices/Network/slirp/ctl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/debug.c b/src/VBox/Devices/Network/slirp/debug.c
index 0734b05..3d7ddc0 100644
--- a/src/VBox/Devices/Network/slirp/debug.c
+++ b/src/VBox/Devices/Network/slirp/debug.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/debug.h b/src/VBox/Devices/Network/slirp/debug.h
index b8708fc..4ec2902 100644
--- a/src/VBox/Devices/Network/slirp/debug.h
+++ b/src/VBox/Devices/Network/slirp/debug.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c b/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
index c0319cd..98f2fa3 100644
--- a/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
+++ b/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
@@ -1,7 +1,7 @@
 /* $Id: dnsproxy.c $ */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ext.h b/src/VBox/Devices/Network/slirp/ext.h
index f0cb59d..a28a913 100644
--- a/src/VBox/Devices/Network/slirp/ext.h
+++ b/src/VBox/Devices/Network/slirp/ext.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/hostres.c b/src/VBox/Devices/Network/slirp/hostres.c
index 96db3a4..57b96d5 100644
--- a/src/VBox/Devices/Network/slirp/hostres.c
+++ b/src/VBox/Devices/Network/slirp/hostres.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/icmp_var.h b/src/VBox/Devices/Network/slirp/icmp_var.h
index f81e75f..d1e392a 100644
--- a/src/VBox/Devices/Network/slirp/icmp_var.h
+++ b/src/VBox/Devices/Network/slirp/icmp_var.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/if.h b/src/VBox/Devices/Network/slirp/if.h
index ffd4476..d95d6a2 100644
--- a/src/VBox/Devices/Network/slirp/if.h
+++ b/src/VBox/Devices/Network/slirp/if.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ip.h b/src/VBox/Devices/Network/slirp/ip.h
index 3788348..32d076f 100644
--- a/src/VBox/Devices/Network/slirp/ip.h
+++ b/src/VBox/Devices/Network/slirp/ip.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ip_icmp.c b/src/VBox/Devices/Network/slirp/ip_icmp.c
index 6152dcd..4f68ab1 100644
--- a/src/VBox/Devices/Network/slirp/ip_icmp.c
+++ b/src/VBox/Devices/Network/slirp/ip_icmp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ip_icmp.h b/src/VBox/Devices/Network/slirp/ip_icmp.h
index aaf7afc..908fc57 100644
--- a/src/VBox/Devices/Network/slirp/ip_icmp.h
+++ b/src/VBox/Devices/Network/slirp/ip_icmp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ip_icmpwin.c b/src/VBox/Devices/Network/slirp/ip_icmpwin.c
index 020c505..9b396b5 100644
--- a/src/VBox/Devices/Network/slirp/ip_icmpwin.c
+++ b/src/VBox/Devices/Network/slirp/ip_icmpwin.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ip_input.c b/src/VBox/Devices/Network/slirp/ip_input.c
index e39d3a7..765cf94 100644
--- a/src/VBox/Devices/Network/slirp/ip_input.c
+++ b/src/VBox/Devices/Network/slirp/ip_input.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/ip_output.c b/src/VBox/Devices/Network/slirp/ip_output.c
index 5f11a6b..d01c823 100644
--- a/src/VBox/Devices/Network/slirp/ip_output.c
+++ b/src/VBox/Devices/Network/slirp/ip_output.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/libslirp.h b/src/VBox/Devices/Network/slirp/libslirp.h
index 0c6c90f..88dde09 100644
--- a/src/VBox/Devices/Network/slirp/libslirp.h
+++ b/src/VBox/Devices/Network/slirp/libslirp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/main.h b/src/VBox/Devices/Network/slirp/main.h
index 1f704bd..bf082e2 100644
--- a/src/VBox/Devices/Network/slirp/main.h
+++ b/src/VBox/Devices/Network/slirp/main.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/misc.c b/src/VBox/Devices/Network/slirp/misc.c
index 3437e33..1cb4424 100644
--- a/src/VBox/Devices/Network/slirp/misc.c
+++ b/src/VBox/Devices/Network/slirp/misc.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/misc.h b/src/VBox/Devices/Network/slirp/misc.h
index 76b6037..3a12d68 100644
--- a/src/VBox/Devices/Network/slirp/misc.h
+++ b/src/VBox/Devices/Network/slirp/misc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/queue.h b/src/VBox/Devices/Network/slirp/queue.h
index 90169eb..2ea76b8 100644
--- a/src/VBox/Devices/Network/slirp/queue.h
+++ b/src/VBox/Devices/Network/slirp/queue.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/resolv_conf_parser.c b/src/VBox/Devices/Network/slirp/resolv_conf_parser.c
index 0cdfe87..744beb6 100644
--- a/src/VBox/Devices/Network/slirp/resolv_conf_parser.c
+++ b/src/VBox/Devices/Network/slirp/resolv_conf_parser.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/resolv_conf_parser.h b/src/VBox/Devices/Network/slirp/resolv_conf_parser.h
index fad8fcf..43ecdb2 100644
--- a/src/VBox/Devices/Network/slirp/resolv_conf_parser.h
+++ b/src/VBox/Devices/Network/slirp/resolv_conf_parser.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/sbuf.c b/src/VBox/Devices/Network/slirp/sbuf.c
index 7bcc810..00d93c6 100644
--- a/src/VBox/Devices/Network/slirp/sbuf.c
+++ b/src/VBox/Devices/Network/slirp/sbuf.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/sbuf.h b/src/VBox/Devices/Network/slirp/sbuf.h
index 9af5abb..7470742 100644
--- a/src/VBox/Devices/Network/slirp/sbuf.h
+++ b/src/VBox/Devices/Network/slirp/sbuf.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/slirp.c b/src/VBox/Devices/Network/slirp/slirp.c
index 958f4c7..8e24586 100644
--- a/src/VBox/Devices/Network/slirp/slirp.c
+++ b/src/VBox/Devices/Network/slirp/slirp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/slirp.h b/src/VBox/Devices/Network/slirp/slirp.h
index 11e8b0f..0b6c64c 100644
--- a/src/VBox/Devices/Network/slirp/slirp.h
+++ b/src/VBox/Devices/Network/slirp/slirp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/slirp_config.h b/src/VBox/Devices/Network/slirp/slirp_config.h
index ba8361d..823bf27 100644
--- a/src/VBox/Devices/Network/slirp/slirp_config.h
+++ b/src/VBox/Devices/Network/slirp/slirp_config.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/slirp_dns.c b/src/VBox/Devices/Network/slirp/slirp_dns.c
index d4c4805..ce068c7 100644
--- a/src/VBox/Devices/Network/slirp/slirp_dns.c
+++ b/src/VBox/Devices/Network/slirp/slirp_dns.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/slirp_dns.h b/src/VBox/Devices/Network/slirp/slirp_dns.h
index dfd8e0a..9e7d454 100644
--- a/src/VBox/Devices/Network/slirp/slirp_dns.h
+++ b/src/VBox/Devices/Network/slirp/slirp_dns.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/slirp_state.h b/src/VBox/Devices/Network/slirp/slirp_state.h
index ddb77f7..ccfef81 100644
--- a/src/VBox/Devices/Network/slirp/slirp_state.h
+++ b/src/VBox/Devices/Network/slirp/slirp_state.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/socket.c b/src/VBox/Devices/Network/slirp/socket.c
index d2e2535..f401a84 100644
--- a/src/VBox/Devices/Network/slirp/socket.c
+++ b/src/VBox/Devices/Network/slirp/socket.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/socket.h b/src/VBox/Devices/Network/slirp/socket.h
index 5324532..14d02e0 100644
--- a/src/VBox/Devices/Network/slirp/socket.h
+++ b/src/VBox/Devices/Network/slirp/socket.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp.h b/src/VBox/Devices/Network/slirp/tcp.h
index 40ca24e..ae85134 100644
--- a/src/VBox/Devices/Network/slirp/tcp.h
+++ b/src/VBox/Devices/Network/slirp/tcp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp_input.c b/src/VBox/Devices/Network/slirp/tcp_input.c
index e130232..7041841 100644
--- a/src/VBox/Devices/Network/slirp/tcp_input.c
+++ b/src/VBox/Devices/Network/slirp/tcp_input.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp_output.c b/src/VBox/Devices/Network/slirp/tcp_output.c
index 86dd9d9..eb45456 100644
--- a/src/VBox/Devices/Network/slirp/tcp_output.c
+++ b/src/VBox/Devices/Network/slirp/tcp_output.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp_subr.c b/src/VBox/Devices/Network/slirp/tcp_subr.c
index bc6e12a..6017772 100644
--- a/src/VBox/Devices/Network/slirp/tcp_subr.c
+++ b/src/VBox/Devices/Network/slirp/tcp_subr.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp_timer.c b/src/VBox/Devices/Network/slirp/tcp_timer.c
index 1878c41..b77960a 100644
--- a/src/VBox/Devices/Network/slirp/tcp_timer.c
+++ b/src/VBox/Devices/Network/slirp/tcp_timer.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp_timer.h b/src/VBox/Devices/Network/slirp/tcp_timer.h
index d385f1e..8530319 100644
--- a/src/VBox/Devices/Network/slirp/tcp_timer.h
+++ b/src/VBox/Devices/Network/slirp/tcp_timer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcp_var.h b/src/VBox/Devices/Network/slirp/tcp_var.h
index 4ce037a..f116bc3 100644
--- a/src/VBox/Devices/Network/slirp/tcp_var.h
+++ b/src/VBox/Devices/Network/slirp/tcp_var.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tcpip.h b/src/VBox/Devices/Network/slirp/tcpip.h
index 11b7ad3..1d04ee7 100644
--- a/src/VBox/Devices/Network/slirp/tcpip.h
+++ b/src/VBox/Devices/Network/slirp/tcpip.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tftp.c b/src/VBox/Devices/Network/slirp/tftp.c
index 741a797..5a926d8 100644
--- a/src/VBox/Devices/Network/slirp/tftp.c
+++ b/src/VBox/Devices/Network/slirp/tftp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/tftp.h b/src/VBox/Devices/Network/slirp/tftp.h
index 70538ed..13636da 100644
--- a/src/VBox/Devices/Network/slirp/tftp.h
+++ b/src/VBox/Devices/Network/slirp/tftp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/udp.c b/src/VBox/Devices/Network/slirp/udp.c
index 2c66373..ae7fb29 100644
--- a/src/VBox/Devices/Network/slirp/udp.c
+++ b/src/VBox/Devices/Network/slirp/udp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -367,7 +367,7 @@ udp_input(PNATState pData, register struct mbuf *m, int iphlen)
         *ip = save_ip;
         Log2(("NAT: UDP tx errno = %d (%s) on sent to %RTnaipv4\n",
               errno, strerror(errno), ip->ip_dst));
-	icmp_error(pData, m, ICMP_UNREACH, ICMP_UNREACH_NET, 0, strerror(errno));
+        icmp_error(pData, m, ICMP_UNREACH, ICMP_UNREACH_NET, 0, strerror(errno));
         so->so_m = NULL;
         LogFlowFuncLeave();
         return;
diff --git a/src/VBox/Devices/Network/slirp/udp.h b/src/VBox/Devices/Network/slirp/udp.h
index 2fd3e07..2359a5c 100644
--- a/src/VBox/Devices/Network/slirp/udp.h
+++ b/src/VBox/Devices/Network/slirp/udp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/slirp/zone.h b/src/VBox/Devices/Network/slirp/zone.h
index 3a87a52..baf2413 100644
--- a/src/VBox/Devices/Network/slirp/zone.h
+++ b/src/VBox/Devices/Network/slirp/zone.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/testcase/tstDevEEPROM.cpp b/src/VBox/Devices/Network/testcase/tstDevEEPROM.cpp
index 44b39db..19c3172 100644
--- a/src/VBox/Devices/Network/testcase/tstDevEEPROM.cpp
+++ b/src/VBox/Devices/Network/testcase/tstDevEEPROM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/testcase/tstDevPhy.cpp b/src/VBox/Devices/Network/testcase/tstDevPhy.cpp
index 10dd377..9b7d3bc 100644
--- a/src/VBox/Devices/Network/testcase/tstDevPhy.cpp
+++ b/src/VBox/Devices/Network/testcase/tstDevPhy.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp b/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp
index 48bae24..271345a 100644
--- a/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp
+++ b/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -808,7 +808,7 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp)
                 return 1;
 
             case 'V':
-                RTPrintf("$Revision: 109605 $\n");
+                RTPrintf("$Revision: 118839 $\n");
                 return 0;
 
             default:
diff --git a/src/VBox/Devices/Network/testcase/tstIntNetR0.cpp b/src/VBox/Devices/Network/testcase/tstIntNetR0.cpp
index f7db2d9..871d4b9 100644
--- a/src/VBox/Devices/Network/testcase/tstIntNetR0.cpp
+++ b/src/VBox/Devices/Network/testcase/tstIntNetR0.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/.scm-settings b/src/VBox/Devices/PC/.scm-settings
new file mode 100644
index 0000000..0b62248
--- /dev/null
+++ b/src/VBox/Devices/PC/.scm-settings
@@ -0,0 +1,101 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for PC devices/drivers.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+
+--filter-out-files /BIOS/notes.txt
+--filter-out-files /BIOS/makefile
+--filter-out-files /BIOS/VBoxBiosAlternative*.asm
+--filter-out-files /BIOS/VBoxBiosAlternative*.md5sum
+
+# PD
+/BIOS/font8x8.inc: --external-copyright
+# ???
+/BIOS/pcicfg.inc:  --external-copyright
+
+# LGPL turned GPL.
+/BIOS/ata.c:       --lgpl-disclaimer
+/BIOS/ata.h:       --lgpl-disclaimer
+/BIOS/bios.c:      --lgpl-disclaimer
+/BIOS/biosint.h:   --lgpl-disclaimer
+/BIOS/boot.c:      --lgpl-disclaimer
+/BIOS/disk.c:      --lgpl-disclaimer
+/BIOS/ebda.h:      --lgpl-disclaimer
+/BIOS/eltorito.c:  --lgpl-disclaimer
+/BIOS/floppy.c:    --lgpl-disclaimer
+/BIOS/keyboard.c:  --lgpl-disclaimer
+/BIOS/orgs.asm:    --lgpl-disclaimer
+/BIOS/parallel.c:  --lgpl-disclaimer
+/BIOS/pcibios.inc: --lgpl-disclaimer
+/BIOS/pirq.inc:    --lgpl-disclaimer
+/BIOS/print.c:     --lgpl-disclaimer
+/BIOS/ps2mouse.c:  --lgpl-disclaimer
+/BIOS/serial.c:    --lgpl-disclaimer
+/BIOS/smidmi.inc:  --lgpl-disclaimer
+/BIOS/system.c:    --lgpl-disclaimer
+/BIOS/timepci.c:   --lgpl-disclaimer
+
+# For now don't mess up the tabs in the BIOS assembly sources.
+/BIOS/*.asm|/BIOS/*.inc: --no-convert-tabs
+
+# PXE
+/PXE/*.asm:     --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/PXE/*.c:       --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/PXE/*.h:       --external-copyright --no-convert-tabs --no-strip-trailing-blanks --dont-set-svn-keywords
+/PXE/*.inc:     --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/PXE/*.i:       --external-copyright --no-convert-tabs --no-strip-trailing-blanks --strip-no-trailing-lines --treat-as .inc
+/PXE/*.r:       --external-copyright --no-convert-tabs --no-strip-trailing-blanks --strip-no-trailing-lines --treat-as .inc
+/PXE/*makefile: --external-copyright --no-convert-tabs --no-strip-trailing-blanks --treat-as Makefile
+/PXE/romcfg:    --external-copyright --no-convert-tabs --no-strip-trailing-blanks --treat-as Makefile
+/PXE/defrules:  --external-copyright --no-convert-tabs --no-strip-trailing-blanks --treat-as Makefile
+/PXE/defrules:  --external-copyright --no-convert-tabs --no-strip-trailing-blanks --treat-as Makefile
+/PXE/deftargs:  --external-copyright --no-convert-tabs --no-strip-trailing-blanks --treat-as Makefile
+/PXE/hostcfg:   --external-copyright --no-convert-tabs --no-strip-trailing-blanks --treat-as Makefile
+--filter-out-files /PXE/PXE-Intel.rom
+--filter-out-files /PXE/readme.txt
+
+# iPXE
+/ipxe/src/*:     --external-copyright --lgpl-disclaimer --no-convert-tabs --no-strip-trailing-blanks --dont-set-svn-keywords --no-fix-todos --strip-no-trailing-lines --no-convert-eol
+/ipxe/contrib/*: --external-copyright --lgpl-disclaimer --no-convert-tabs --no-strip-trailing-blanks --dont-set-svn-keywords --no-fix-todos --strip-no-trailing-lines --no-convert-eol
+/ipxe/*.S:                       --treat-as .c
+/ipxe/*.lds:                     --treat-as .h
+/ipxe/*.gdb:                     --treat-as .sh --dont-set-svn-executable
+/ipxe/*Makefile*:                --treat-as Makefile
+/ipxe/src/util/geniso:           --treat-as .sh
+/ipxe/src/util/genliso:          --treat-as .sh
+/ipxe/src/util/gensdsk:          --treat-as .sh
+/ipxe/src/util/get-pci-ids:      --treat-as .sh
+/ipxe/contrib/vm/cow:            --treat-as .sh
+/ipxe/contrib/vm/serial-console: --treat-as .pl
+
+--filter-out-files /ipxe/*.txt
+--filter-out-files /ipxe/COPYING
+--filter-out-files /ipxe/COPYRIGHTS
+--filter-out-files /ipxe/ipxeBiosBin.rom
+--filter-out-files /ipxe/README
+--filter-out-files /ipxe/README.vbox
+--filter-out-files /ipxe/iPxeBiosBin.rom
+--filter-out-files /ipxe/src/arch/i386/README.i386
+--filter-out-files /ipxe/src/doxygen.cfg
+--filter-out-files /ipxe/src/doc/build_sys.dox
+--filter-out-files /ipxe/src/doc/pxe_extensions
+--filter-out-files /ipxe/src/include/ipxe/efi/LICENCE
+--filter-out-files /ipxe/contrib/README
+--filter-out-files /ipxe/contrib/vm/bochs-writable-ROM-patch
+--filter-out-files /ipxe/contrib/vm/serial-console.1
+--filter-out-dirs  /ipxe/contrib/rom-o-matic/.
+
diff --git a/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp b/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp
index ced08bd..9e5cd4a 100644
--- a/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp
+++ b/src/VBox/Devices/PC/ACPI/VBoxAcpi.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm
index 1f1729c..98d5b37 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.asm
@@ -6,6 +6,7 @@
 ;
 ; Source file: post.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
 ;  BIOS POST routines. Used only during initialization.
 ;  
 ;  
@@ -23,8 +24,12 @@
 ;
 ; Source file: bios.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -65,8 +70,12 @@
 ;
 ; Source file: print.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -107,8 +116,12 @@
 ;
 ; Source file: ata.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -149,8 +162,12 @@
 ;
 ; Source file: floppy.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -196,7 +213,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -209,8 +226,12 @@
 ;
 ; Source file: eltorito.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -251,8 +272,12 @@
 ;
 ; Source file: boot.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -293,8 +318,12 @@
 ;
 ; Source file: keyboard.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -335,8 +364,12 @@
 ;
 ; Source file: disk.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -377,8 +410,12 @@
 ;
 ; Source file: serial.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -419,8 +456,12 @@
 ;
 ; Source file: system.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -466,7 +507,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2013-2016 Oracle Corporation
+;  Copyright (C) 2013-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -480,7 +521,7 @@
 ; Source file: timepci.c
 ;
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -521,8 +562,12 @@
 ;
 ; Source file: ps2mouse.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -563,8 +608,12 @@
 ;
 ; Source file: parallel.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -610,7 +659,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -628,7 +677,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -646,7 +695,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -664,7 +713,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -682,7 +731,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -695,11 +744,12 @@
 ;
 ; Source file: pciutil.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
 ;  Utility routines for calling the PCI BIOS.
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -712,11 +762,12 @@
 ;
 ; Source file: vds.c
 ;
+;  $Id: VBoxBiosAlternative286.asm $
 ;  Utility routines for calling the Virtual DMA Services.
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -734,7 +785,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -753,7 +804,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -772,7 +823,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -791,7 +842,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -810,7 +861,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -829,7 +880,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -843,8 +894,12 @@
 ;
 ; Source file: pcibio32.asm
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  BIOS32 service directory and 32-bit PCI BIOS entry point
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -853,14 +908,17 @@
 ;  Foundation, in version 2 as it comes in the "COPYING" file of the
 ;  VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ;  hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;  
 ;  --------------------------------------------------------------------
 
 ;
 ; Source file: apm_pm.asm
 ;
+;  $Id:
+;  Protected-mode APM implementation.
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -870,14 +928,14 @@
 ;  VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ;  hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;  
-;  --------------------------------------------------------------------
-;  
-;  Protected-mode APM implementation.
-;  
 
 ;
 ; Source file: orgs.asm
 ;
+;  $Id: VBoxBiosAlternative286.asm $
+;  ???
+;  
+;  
 ;  
 ;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
@@ -916,7 +974,6 @@
 ;   License along with this library; if not, write to the Free Software
 ;   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
 ;  
-;  
 
 ;
 ; Source file: DoUInt32Div.c
@@ -926,7 +983,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -944,7 +1001,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -963,7 +1020,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -1115,7 +1172,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcde class=DATA group=DGROUP
 
 section CONST2 progbits vstart=0xd8e align=1 ; size=0x3fa class=DATA group=DGROUP
 _bios_cvs_version_string:                    ; 0xf0d8e LB 0x12
-    db  'VirtualBox 5.2.0', 000h, 000h
+    db  'VirtualBox 5.2.1', 000h, 000h
 _bios_prefix_string:                         ; 0xf0da0 LB 0x8
     db  'BIOS: ', 000h, 000h
 _isotag:                                     ; 0xf0da8 LB 0x6
@@ -7007,7 +7064,7 @@ _int19_function:                             ; 0xf4c98 LB 0x271
     mov ax, di                                ; 89 f8
     call 0166ch                               ; e8 c2 c7
     mov si, ax                                ; 89 c6
-    mov dx, strict word 00002h                ; ba 02 00
+    mov dx, strict word 00004h                ; ba 04 00
     mov ax, di                                ; 89 f8
     call 0166ch                               ; e8 b8 c7
     cmp si, ax                                ; 39 c6
@@ -17816,4 +17873,4 @@ biosorg_check_before_or_at_0FFEEh:           ; 0xfff80 LB 0x70
     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, 0e5h
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0e2h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum
index 63e9f70..227f052 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative286.md5sum
@@ -1 +1 @@
-fce56fd1ede722bb71537af5a0525b14 *VBoxPcBios286.rom
+c261b97dc1abd60dfc55069d7e88f4d4 *VBoxPcBios286.rom
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm
index daadc84..bff4fa2 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.asm
@@ -6,6 +6,7 @@
 ;
 ; Source file: post.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
 ;  BIOS POST routines. Used only during initialization.
 ;  
 ;  
@@ -23,8 +24,12 @@
 ;
 ; Source file: bios.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -65,8 +70,12 @@
 ;
 ; Source file: print.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -107,8 +116,12 @@
 ;
 ; Source file: ata.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -149,8 +162,12 @@
 ;
 ; Source file: floppy.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -196,7 +213,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -209,8 +226,12 @@
 ;
 ; Source file: eltorito.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -251,8 +272,12 @@
 ;
 ; Source file: boot.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -293,8 +318,12 @@
 ;
 ; Source file: keyboard.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -335,8 +364,12 @@
 ;
 ; Source file: disk.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -377,8 +410,12 @@
 ;
 ; Source file: serial.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -419,8 +456,12 @@
 ;
 ; Source file: system.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -466,7 +507,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2013-2016 Oracle Corporation
+;  Copyright (C) 2013-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -480,7 +521,7 @@
 ; Source file: timepci.c
 ;
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -521,8 +562,12 @@
 ;
 ; Source file: ps2mouse.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -563,8 +608,12 @@
 ;
 ; Source file: parallel.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -610,7 +659,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -628,7 +677,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -646,7 +695,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -664,7 +713,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -682,7 +731,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -695,11 +744,12 @@
 ;
 ; Source file: pciutil.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
 ;  Utility routines for calling the PCI BIOS.
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -712,11 +762,12 @@
 ;
 ; Source file: vds.c
 ;
+;  $Id: VBoxBiosAlternative386.asm $
 ;  Utility routines for calling the Virtual DMA Services.
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -734,7 +785,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -753,7 +804,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -772,7 +823,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -791,7 +842,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -810,7 +861,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -829,7 +880,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -843,8 +894,12 @@
 ;
 ; Source file: pcibio32.asm
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  BIOS32 service directory and 32-bit PCI BIOS entry point
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -853,14 +908,17 @@
 ;  Foundation, in version 2 as it comes in the "COPYING" file of the
 ;  VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ;  hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;  
 ;  --------------------------------------------------------------------
 
 ;
 ; Source file: apm_pm.asm
 ;
+;  $Id:
+;  Protected-mode APM implementation.
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -870,14 +928,14 @@
 ;  VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ;  hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;  
-;  --------------------------------------------------------------------
-;  
-;  Protected-mode APM implementation.
-;  
 
 ;
 ; Source file: orgs.asm
 ;
+;  $Id: VBoxBiosAlternative386.asm $
+;  ???
+;  
+;  
 ;  
 ;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
@@ -916,7 +974,6 @@
 ;   License along with this library; if not, write to the Free Software
 ;   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
 ;  
-;  
 
 ;
 ; Source file: pci32.c
@@ -926,7 +983,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -1079,7 +1136,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcf0 class=DATA group=DGROUP
 
 section CONST2 progbits vstart=0xda0 align=1 ; size=0x3fa class=DATA group=DGROUP
 _bios_cvs_version_string:                    ; 0xf0da0 LB 0x12
-    db  'VirtualBox 5.2.0', 000h, 000h
+    db  'VirtualBox 5.2.1', 000h, 000h
 _bios_prefix_string:                         ; 0xf0db2 LB 0x8
     db  'BIOS: ', 000h, 000h
 _isotag:                                     ; 0xf0dba LB 0x6
@@ -6990,7 +7047,7 @@ _int19_function:                             ; 0xf4d8f LB 0x256
     mov ax, di                                ; 89 f8
     call 01765h                               ; e8 d7 c7
     mov bx, ax                                ; 89 c3
-    mov dx, strict word 00002h                ; ba 02 00
+    mov dx, strict word 00004h                ; ba 04 00
     mov ax, di                                ; 89 f8
     call 01765h                               ; e8 cd c7
     cmp bx, ax                                ; 39 c3
@@ -17310,4 +17367,4 @@ biosorg_check_before_or_at_0FFEEh:           ; 0xfff80 LB 0x70
     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, 010h
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 00dh
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum
index fa16469..abee6ca 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative386.md5sum
@@ -1 +1 @@
-5c1e6f4b33cd5a3287fb46724322322f *VBoxPcBios386.rom
+57e78d26806ffff3c47bd4a6c904409d *VBoxPcBios386.rom
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm
index fe68f23..a2dc9dc 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.asm
@@ -6,6 +6,7 @@
 ;
 ; Source file: post.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
 ;  BIOS POST routines. Used only during initialization.
 ;  
 ;  
@@ -23,8 +24,12 @@
 ;
 ; Source file: bios.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -65,8 +70,12 @@
 ;
 ; Source file: print.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -107,8 +116,12 @@
 ;
 ; Source file: ata.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -149,8 +162,12 @@
 ;
 ; Source file: floppy.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -196,7 +213,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -209,8 +226,12 @@
 ;
 ; Source file: eltorito.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -251,8 +272,12 @@
 ;
 ; Source file: boot.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -293,8 +318,12 @@
 ;
 ; Source file: keyboard.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -335,8 +364,12 @@
 ;
 ; Source file: disk.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -377,8 +410,12 @@
 ;
 ; Source file: serial.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -419,8 +456,12 @@
 ;
 ; Source file: system.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -466,7 +507,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2013-2016 Oracle Corporation
+;  Copyright (C) 2013-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -480,7 +521,7 @@
 ; Source file: timepci.c
 ;
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -521,8 +562,12 @@
 ;
 ; Source file: ps2mouse.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -563,8 +608,12 @@
 ;
 ; Source file: parallel.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  PC BIOS - ???
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -610,7 +659,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -628,7 +677,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -646,7 +695,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -664,7 +713,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -682,7 +731,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -695,11 +744,12 @@
 ;
 ; Source file: pciutil.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
 ;  Utility routines for calling the PCI BIOS.
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -712,11 +762,12 @@
 ;
 ; Source file: vds.c
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
 ;  Utility routines for calling the Virtual DMA Services.
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -734,7 +785,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -753,7 +804,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -772,7 +823,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -791,7 +842,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -810,7 +861,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -829,7 +880,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2012-2016 Oracle Corporation
+;  Copyright (C) 2012-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -843,8 +894,12 @@
 ;
 ; Source file: pcibio32.asm
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  BIOS32 service directory and 32-bit PCI BIOS entry point
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -853,14 +908,17 @@
 ;  Foundation, in version 2 as it comes in the "COPYING" file of the
 ;  VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ;  hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;  
 ;  --------------------------------------------------------------------
 
 ;
 ; Source file: apm_pm.asm
 ;
+;  $Id:
+;  Protected-mode APM implementation.
+;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -870,14 +928,14 @@
 ;  VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ;  hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;  
-;  --------------------------------------------------------------------
-;  
-;  Protected-mode APM implementation.
-;  
 
 ;
 ; Source file: orgs.asm
 ;
+;  $Id: VBoxBiosAlternative8086.asm $
+;  ???
+;  
+;  
 ;  
 ;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
@@ -916,7 +974,6 @@
 ;   License along with this library; if not, write to the Free Software
 ;   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
 ;  
-;  
 
 ;
 ; Source file: DoUInt32Div.c
@@ -926,7 +983,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2011-2016 Oracle Corporation
+;  Copyright (C) 2011-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -944,7 +1001,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2006-2016 Oracle Corporation
+;  Copyright (C) 2006-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -963,7 +1020,7 @@
 ;  
 ;  
 ;  
-;  Copyright (C) 2004-2016 Oracle Corporation
+;  Copyright (C) 2004-2017 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -1115,7 +1172,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcde class=DATA group=DGROUP
 
 section CONST2 progbits vstart=0xd8e align=1 ; size=0x3fa class=DATA group=DGROUP
 _bios_cvs_version_string:                    ; 0xf0d8e LB 0x12
-    db  'VirtualBox 5.2.0', 000h, 000h
+    db  'VirtualBox 5.2.1', 000h, 000h
 _bios_prefix_string:                         ; 0xf0da0 LB 0x8
     db  'BIOS: ', 000h, 000h
 _isotag:                                     ; 0xf0da8 LB 0x6
@@ -7206,7 +7263,7 @@ _int19_function:                             ; 0xf4d99 LB 0x28d
     mov ax, si                                ; 89 f0
     call 0166eh                               ; e8 a7 c6
     mov di, ax                                ; 89 c7
-    mov dx, strict word 00002h                ; ba 02 00
+    mov dx, strict word 00004h                ; ba 04 00
     mov ax, si                                ; 89 f0
     call 0166eh                               ; e8 9d c6
     cmp di, ax                                ; 39 c7
@@ -18237,4 +18294,4 @@ biosorg_check_before_or_at_0FFEEh:           ; 0xfff80 LB 0x70
     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, 0fbh, 03eh
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 03bh
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum
index 377fe93..ef79f1c 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative8086.md5sum
@@ -1 +1 @@
-8c9d346ad1de9d89b0099b21159482dd *VBoxPcBios8086.rom
+207716e29c72bfe4132e99cbcdb86960 *VBoxPcBios8086.rom
diff --git a/src/VBox/Devices/PC/BIOS/ahci.c b/src/VBox/Devices/PC/BIOS/ahci.c
index fc1cfb6..6e017ca 100644
--- a/src/VBox/Devices/PC/BIOS/ahci.c
+++ b/src/VBox/Devices/PC/BIOS/ahci.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/apm.c b/src/VBox/Devices/PC/BIOS/apm.c
index c34a073..6f34be5 100644
--- a/src/VBox/Devices/PC/BIOS/apm.c
+++ b/src/VBox/Devices/PC/BIOS/apm.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/apm_pm.asm b/src/VBox/Devices/PC/BIOS/apm_pm.asm
index c3baa71..0463f7b 100644
--- a/src/VBox/Devices/PC/BIOS/apm_pm.asm
+++ b/src/VBox/Devices/PC/BIOS/apm_pm.asm
@@ -1,18 +1,19 @@
-;;
-;; Copyright (C) 2006-2016 Oracle Corporation
-;;
-;; This file is part of VirtualBox Open Source Edition (OSE), as
-;; available from http://www.virtualbox.org. This file is free software;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;;
-;; --------------------------------------------------------------------
-;;
-;; Protected-mode APM implementation.
-;;
+; $Id:
+;; @file
+; Protected-mode APM implementation.
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
 
 
 include commondefs.inc
@@ -133,7 +134,7 @@ apm_worker	endp
 apm_pm16_entry:
 
 		mov	ah, 2		; mark as originating in 16-bit PM
-		
+
 					; fall through
 
 apm_pm16_entry_from_32:
diff --git a/src/VBox/Devices/PC/BIOS/ata.c b/src/VBox/Devices/PC/BIOS/ata.c
index 6d233b5..d04ab4d 100644
--- a/src/VBox/Devices/PC/BIOS/ata.c
+++ b/src/VBox/Devices/PC/BIOS/ata.c
@@ -1,5 +1,10 @@
+/* $Id: ata.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include <stdarg.h>
diff --git a/src/VBox/Devices/PC/BIOS/ata.h b/src/VBox/Devices/PC/BIOS/ata.h
index b463eee..aed95a1 100644
--- a/src/VBox/Devices/PC/BIOS/ata.h
+++ b/src/VBox/Devices/PC/BIOS/ata.h
@@ -1,5 +1,10 @@
+/* $Id: ata.h $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #define ATA_DATA_NO      0x00
 #define ATA_DATA_IN      0x01
diff --git a/src/VBox/Devices/PC/BIOS/bios.c b/src/VBox/Devices/PC/BIOS/bios.c
index 7ac6168..5935bcb 100644
--- a/src/VBox/Devices/PC/BIOS/bios.c
+++ b/src/VBox/Devices/PC/BIOS/bios.c
@@ -1,5 +1,10 @@
+/* $Id: bios.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "inlines.h"
diff --git a/src/VBox/Devices/PC/BIOS/biosint.h b/src/VBox/Devices/PC/BIOS/biosint.h
index e78a009..63eb3c7 100644
--- a/src/VBox/Devices/PC/BIOS/biosint.h
+++ b/src/VBox/Devices/PC/BIOS/biosint.h
@@ -1,5 +1,10 @@
+/* $Id: biosint.h $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 /* Compile-time assertion macro. */
 #define ct_assert(a)    extern int ct_ass_arr[!!(a) == 1];
diff --git a/src/VBox/Devices/PC/BIOS/boot.c b/src/VBox/Devices/PC/BIOS/boot.c
index 49090f4..21a4a12 100644
--- a/src/VBox/Devices/PC/BIOS/boot.c
+++ b/src/VBox/Devices/PC/BIOS/boot.c
@@ -1,5 +1,10 @@
+/* $Id: boot.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include <string.h>
@@ -309,7 +323,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
     // NB: It is somewhat common for failed OS installs to have the
     // 0x55AA signature and a valid partition table but zeros in the
     // rest of the boot sector. We do a quick check by comparing the first
-    // two words of boot sector; if identical, the boot sector is
+    // and third word of boot sector; if identical, the boot sector is
     // extremely unlikely to be valid.
     if (bootdrv != 0) bootchk = 0;
     else bootchk = 1; /* disable 0x55AA signature check on drive A: */
@@ -320,7 +334,7 @@ uint32_t BIOSCALL int19_function(uint8_t bseqnr)
         bootchk = 1;
 #endif // BX_ELTORITO_BOOT
 
-    if (read_word(bootseg,0) == read_word(bootseg,2)
+    if (read_word(bootseg,0) == read_word(bootseg,4)
       || (bootchk == 0 && read_word(bootseg,0x1fe) != 0xaa55))
     {
         print_boot_failure(bootcd, bootlan, bootdrv, 0, lastdrive);
diff --git a/src/VBox/Devices/PC/BIOS/disk.c b/src/VBox/Devices/PC/BIOS/disk.c
index 6761716..c9ff123 100644
--- a/src/VBox/Devices/PC/BIOS/disk.c
+++ b/src/VBox/Devices/PC/BIOS/disk.c
@@ -1,5 +1,10 @@
+/* $Id: disk.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "biosint.h"
diff --git a/src/VBox/Devices/PC/BIOS/ebda.h b/src/VBox/Devices/PC/BIOS/ebda.h
index 7b0f94e..e28ccef 100644
--- a/src/VBox/Devices/PC/BIOS/ebda.h
+++ b/src/VBox/Devices/PC/BIOS/ebda.h
@@ -1,5 +1,10 @@
+/* $Id: ebda.h $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 
diff --git a/src/VBox/Devices/PC/BIOS/eltorito.c b/src/VBox/Devices/PC/BIOS/eltorito.c
index 10f48ab..9c5d3fc 100644
--- a/src/VBox/Devices/PC/BIOS/eltorito.c
+++ b/src/VBox/Devices/PC/BIOS/eltorito.c
@@ -1,5 +1,10 @@
+/* $Id: eltorito.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include <string.h>
diff --git a/src/VBox/Devices/PC/BIOS/floppy.c b/src/VBox/Devices/PC/BIOS/floppy.c
index d3630bd..e5aad48 100644
--- a/src/VBox/Devices/PC/BIOS/floppy.c
+++ b/src/VBox/Devices/PC/BIOS/floppy.c
@@ -1,5 +1,10 @@
+/* $Id: floppy.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "inlines.h"
diff --git a/src/VBox/Devices/PC/BIOS/floppyt.c b/src/VBox/Devices/PC/BIOS/floppyt.c
index 6b74cb6..be8fe17 100644
--- a/src/VBox/Devices/PC/BIOS/floppyt.c
+++ b/src/VBox/Devices/PC/BIOS/floppyt.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/inlines.h b/src/VBox/Devices/PC/BIOS/inlines.h
index 34755f1..7348aa9 100644
--- a/src/VBox/Devices/PC/BIOS/inlines.h
+++ b/src/VBox/Devices/PC/BIOS/inlines.h
@@ -1,3 +1,4 @@
+/* $Id: inlines.h $ */
 /** @file
  * Inline routines for Watcom C.
  */
diff --git a/src/VBox/Devices/PC/BIOS/invop.c b/src/VBox/Devices/PC/BIOS/invop.c
index 6083610..947463f 100644
--- a/src/VBox/Devices/PC/BIOS/invop.c
+++ b/src/VBox/Devices/PC/BIOS/invop.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/keyboard.c b/src/VBox/Devices/PC/BIOS/keyboard.c
index f8093de..09cf7db 100644
--- a/src/VBox/Devices/PC/BIOS/keyboard.c
+++ b/src/VBox/Devices/PC/BIOS/keyboard.c
@@ -1,5 +1,10 @@
+/* $Id: keyboard.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "inlines.h"
diff --git a/src/VBox/Devices/PC/BIOS/logo.c b/src/VBox/Devices/PC/BIOS/logo.c
index bcecaee..fc94b88 100644
--- a/src/VBox/Devices/PC/BIOS/logo.c
+++ b/src/VBox/Devices/PC/BIOS/logo.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/notes.txt b/src/VBox/Devices/PC/BIOS/notes.txt
index ae308f2..6bcd153 100644
--- a/src/VBox/Devices/PC/BIOS/notes.txt
+++ b/src/VBox/Devices/PC/BIOS/notes.txt
@@ -100,7 +100,9 @@
   Otherwise the NT kernel will crash early during init due to confusion about
   the top of memory.
 
-
+- Darwin x86 6.0.2 ISO (darwinx86-602.iso) has a bizarre boot sector (using
+  El Torito hard disk emulation) with the first five bytes being zero. It
+  appears to be valid despite the oddity.
 
  286 BIOS
  --------
diff --git a/src/VBox/Devices/PC/BIOS/orgs.asm b/src/VBox/Devices/PC/BIOS/orgs.asm
index 385848d..dc9fc26 100644
--- a/src/VBox/Devices/PC/BIOS/orgs.asm
+++ b/src/VBox/Devices/PC/BIOS/orgs.asm
@@ -1,42 +1,46 @@
-;;
-;; Copyright (C) 2006-2017 Oracle Corporation
-;;
-;; This file is part of VirtualBox Open Source Edition (OSE), as
-;; available from http://www.virtualbox.org. This file is free software;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;; --------------------------------------------------------------------
-;;
-;; This code is based on:
-;;
-;;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
-;;
-;;  Copyright (C) 2002  MandrakeSoft S.A.
-;;
-;;    MandrakeSoft S.A.
-;;    43, rue d'Aboukir
-;;    75002 Paris - France
-;;    http://www.linux-mandrake.com/
-;;    http://www.mandrakesoft.com/
-;;
-;;  This library is free software; you can redistribute it and/or
-;;  modify it under the terms of the GNU Lesser General Public
-;;  License as published by the Free Software Foundation; either
-;;  version 2 of the License, or (at your option) any later version.
-;;
-;;  This library is distributed in the hope that it will be useful,
-;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;;  Lesser General Public License for more details.
-;;
-;;  You should have received a copy of the GNU Lesser General Public
-;;  License along with this library; if not, write to the Free Software
-;;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-;;
-;;
+; $Id: orgs.asm $
+;; @file
+; ???
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+; --------------------------------------------------------------------
+;
+; This code is based on:
+;
+;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
+;
+;  Copyright (C) 2002  MandrakeSoft S.A.
+;
+;    MandrakeSoft S.A.
+;    43, rue d'Aboukir
+;    75002 Paris - France
+;    http://www.linux-mandrake.com/
+;    http://www.mandrakesoft.com/
+;
+;  This library is free software; you can redistribute it and/or
+;  modify it under the terms of the GNU Lesser General Public
+;  License as published by the Free Software Foundation; either
+;  version 2 of the License, or (at your option) any later version.
+;
+;  This library is distributed in the hope that it will be useful,
+;  but WITHOUT ANY WARRANTY; without even the implied warranty of
+;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;  Lesser General Public License for more details.
+;
+;  You should have received a copy of the GNU Lesser General Public
+;  License along with this library; if not, write to the Free Software
+;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+;
 
 ; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 ; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
@@ -278,8 +282,8 @@ reset_sys:
                 mov     al, 1
                 out     92h, al
                 jmp     $               ; not strictly necessary in a VM
-                
-                
+
+
 in_real_mode:
                 ;; read the CMOS shutdown status
                 mov     al, 0Fh
@@ -322,7 +326,7 @@ cont_post:
                 jz      check_shutdown
                 cmp     al, 0Ah
                 jz      check_shutdown
-                
+
                 xor     al, al
 
                 ;; reset the DMA controllers
@@ -346,7 +350,7 @@ check_shutdown:
                 cmp     al, 9
                 jne     check_next_std
                 jmp     return_blkmove
-check_next_std:         
+check_next_std:
 
                 ;; 05h = EOI + jump through 40:67
                 cmp     al, 5
@@ -425,7 +429,7 @@ endif
                 mov     bx, 68h * 4
                 mov     cx, 10h
                 call    set_int_vects
-                
+
                 ;; base memory in K to 40:13
                 mov     ax, BASE_MEM_IN_K
                 mov     ds:[413h], ax
@@ -637,7 +641,7 @@ endif
                 mov     ax, 0C800h
                 mov     dx, 0F000h
                 call    rom_scan_
-                
+
 if VBOX_BIOS_CPU ge 80386
                 ;; The POST code does not bother preserving high bits of the
                 ;; 32-bit registers. Now is a good time to clear them so that
@@ -651,7 +655,7 @@ if VBOX_BIOS_CPU ge 80386
 endif
 
                 call    _print_bios_banner
-                
+
                 ;; El Torito floppy/hard disk emulation
                 call    _cdemu_init
 
@@ -665,7 +669,7 @@ wait_forever:
                 jmp     wait_forever
                 cli
                 hlt
-                
+
 
 ;;
 ;; Return from block move (shutdown code 09h). Care must be taken to disturb
@@ -1697,7 +1701,7 @@ int15_handler:
 if VBOX_BIOS_CPU ge 80286
                 cmp     ah, 87h
                 jne     not_blkmove
-                
+
                 ;; INT 15h/87h has semi-public interface because software
                 ;; may use CMOS shutdown status code 9 for its own purposes.
                 ;; The stack layout has to match.
diff --git a/src/VBox/Devices/PC/BIOS/parallel.c b/src/VBox/Devices/PC/BIOS/parallel.c
index c7dd53b..f2a966a 100644
--- a/src/VBox/Devices/PC/BIOS/parallel.c
+++ b/src/VBox/Devices/PC/BIOS/parallel.c
@@ -1,5 +1,10 @@
+/* $Id: parallel.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "biosint.h"
diff --git a/src/VBox/Devices/PC/BIOS/pci32.c b/src/VBox/Devices/PC/BIOS/pci32.c
index c0ffa01..4f6ea19 100644
--- a/src/VBox/Devices/PC/BIOS/pci32.c
+++ b/src/VBox/Devices/PC/BIOS/pci32.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/pcibio32.asm b/src/VBox/Devices/PC/BIOS/pcibio32.asm
index f4497c7..74f845a 100644
--- a/src/VBox/Devices/PC/BIOS/pcibio32.asm
+++ b/src/VBox/Devices/PC/BIOS/pcibio32.asm
@@ -1,18 +1,20 @@
-;;
-;; Copyright (C) 2006-2016 Oracle Corporation
-;;
-;; This file is part of VirtualBox Open Source Edition (OSE), as
-;; available from http://www.virtualbox.org. This file is free software;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;;
-;; --------------------------------------------------------------------
+; $Id: pcibio32.asm $
+;; @file
+; BIOS32 service directory and 32-bit PCI BIOS entry point
+;
 
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+; --------------------------------------------------------------------
 
-; BIOS32 service directory and 32-bit PCI BIOS entry point
 
 ; Public symbols for debugging only
 public		pcibios32_entry
@@ -93,3 +95,4 @@ pcibios32_entry	endp
 BIOS32		ends
 
 		end
+
diff --git a/src/VBox/Devices/PC/BIOS/pcibios.c b/src/VBox/Devices/PC/BIOS/pcibios.c
index 7b8864e..74b01d4 100644
--- a/src/VBox/Devices/PC/BIOS/pcibios.c
+++ b/src/VBox/Devices/PC/BIOS/pcibios.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/pcibios.inc b/src/VBox/Devices/PC/BIOS/pcibios.inc
index 535ff85..9f7ba87 100644
--- a/src/VBox/Devices/PC/BIOS/pcibios.inc
+++ b/src/VBox/Devices/PC/BIOS/pcibios.inc
@@ -1,43 +1,46 @@
-;;
-;; Copyright (C) 2006-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;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;; --------------------------------------------------------------------
-;;
-;; This code is based on:
-;;
-;;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
-;;
-;;  Copyright (C) 2002  MandrakeSoft S.A.
-;;
-;;    MandrakeSoft S.A.
-;;    43, rue d'Aboukir
-;;    75002 Paris - France
-;;    http://www.linux-mandrake.com/
-;;    http://www.mandrakesoft.com/
-;;
-;;  This library is free software; you can redistribute it and/or
-;;  modify it under the terms of the GNU Lesser General Public
-;;  License as published by the Free Software Foundation; either
-;;  version 2 of the License, or (at your option) any later version.
-;;
-;;  This library is distributed in the hope that it will be useful,
-;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;;  Lesser General Public License for more details.
-;;
-;;  You should have received a copy of the GNU Lesser General Public
-;;  License along with this library; if not, write to the Free Software
-;;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-;;
-;;
-
+; $Id: pcibios.inc $
+;; @file
+; ???
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+; --------------------------------------------------------------------
+;
+; This code is based on:
+;
+;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
+;
+;  Copyright (C) 2002  MandrakeSoft S.A.
+;
+;    MandrakeSoft S.A.
+;    43, rue d'Aboukir
+;    75002 Paris - France
+;    http://www.linux-mandrake.com/
+;    http://www.mandrakesoft.com/
+;
+;  This library is free software; you can redistribute it and/or
+;  modify it under the terms of the GNU Lesser General Public
+;  License as published by the Free Software Foundation; either
+;  version 2 of the License, or (at your option) any later version.
+;
+;  This library is distributed in the hope that it will be useful,
+;  but WITHOUT ANY WARRANTY; without even the implied warranty of
+;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;  Lesser General Public License for more details.
+;
+;  You should have received a copy of the GNU Lesser General Public
+;  License along with this library; if not, write to the Free Software
+;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+;
 
 ; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 ; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
@@ -46,6 +49,7 @@
 ; that LGPLv2 or any later version may be used, or where a choice of which version
 ; of the LGPL is applied is otherwise unspecified.
 
+
 include	pcicfg.inc
 
 if BX_PCIBIOS
@@ -78,7 +82,7 @@ endif
 
 if not BX_ROMBIOS32
 pci_irq_list:
-		db 11, 10, 9, 11 
+		db 11, 10, 9, 11
 
 pcibios_init_sel_reg:
 		push	eax
@@ -96,7 +100,7 @@ pcibios_init_iomem_bases:
 		push	bp
 		mov	bp, sp
 ifdef VBOX
-		mov	eax,19200509 
+		mov	eax,19200509
 		mov	dx,410h
 		out	dx,  eax
 else
@@ -204,7 +208,7 @@ ifdef VBOX
 		mov	dx, cx
 		add	dx, 18h	; reset register if PCNet is in word I/O mode
 		in	eax, dx	; reset is performed by reading the reset register
-endif ; VBOX 
+endif ; VBOX
 next_pci_dev:
 		mov	byte ptr[bp-8], 10h
 		inc	bx
diff --git a/src/VBox/Devices/PC/BIOS/pciutil.c b/src/VBox/Devices/PC/BIOS/pciutil.c
index b3eda6c..b290e23 100644
--- a/src/VBox/Devices/PC/BIOS/pciutil.c
+++ b/src/VBox/Devices/PC/BIOS/pciutil.c
@@ -1,9 +1,10 @@
+/* $Id: pciutil.c $ */
 /** @file
  * Utility routines for calling the PCI BIOS.
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/pciutil.h b/src/VBox/Devices/PC/BIOS/pciutil.h
index 9001a82..7ae7c3d 100644
--- a/src/VBox/Devices/PC/BIOS/pciutil.h
+++ b/src/VBox/Devices/PC/BIOS/pciutil.h
@@ -1,9 +1,10 @@
+/* $Id: pciutil.h $ */
 /** @file
  * Utility routines for calling the PCI BIOS.
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/pirq.inc b/src/VBox/Devices/PC/BIOS/pirq.inc
index 682458e..a824a93 100644
--- a/src/VBox/Devices/PC/BIOS/pirq.inc
+++ b/src/VBox/Devices/PC/BIOS/pirq.inc
@@ -1,43 +1,47 @@
-;;
-;; Copyright (C) 2006-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;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;; --------------------------------------------------------------------
-;;
-;; This code is based on:
-;;
-;;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
-;;
-;;  Copyright (C) 2002  MandrakeSoft S.A.
-;;
-;;    MandrakeSoft S.A.
-;;    43, rue d'Aboukir
-;;    75002 Paris - France
-;;    http://www.linux-mandrake.com/
-;;    http://www.mandrakesoft.com/
-;;
-;;  This library is free software; you can redistribute it and/or
-;;  modify it under the terms of the GNU Lesser General Public
-;;  License as published by the Free Software Foundation; either
-;;  version 2 of the License, or (at your option) any later version.
-;;
-;;  This library is distributed in the hope that it will be useful,
-;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;;  Lesser General Public License for more details.
-;;
-;;  You should have received a copy of the GNU Lesser General Public
-;;  License along with this library; if not, write to the Free Software
-;;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-;;
-;;
+; $Id: pirq.inc $
+;; @file
+; ???
+;
 
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+; --------------------------------------------------------------------
+;
+; This code is based on:
+;
+;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
+;
+;  Copyright (C) 2002  MandrakeSoft S.A.
+;
+;    MandrakeSoft S.A.
+;    43, rue d'Aboukir
+;    75002 Paris - France
+;    http://www.linux-mandrake.com/
+;    http://www.mandrakesoft.com/
+;
+;  This library is free software; you can redistribute it and/or
+;  modify it under the terms of the GNU Lesser General Public
+;  License as published by the Free Software Foundation; either
+;  version 2 of the License, or (at your option) any later version.
+;
+;  This library is distributed in the hope that it will be useful,
+;  but WITHOUT ANY WARRANTY; without even the implied warranty of
+;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;  Lesser General Public License for more details.
+;
+;  You should have received a copy of the GNU Lesser General Public
+;  License along with this library; if not, write to the Free Software
+;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+;
+;
 
 ; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 ; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
@@ -46,6 +50,7 @@
 ; that LGPLv2 or any later version may be used, or where a choice of which version
 ; of the LGPL is applied is otherwise unspecified.
 
+
 if BX_PCIBIOS
 public _pci_routing_table
 public _pci_routing_table_size
diff --git a/src/VBox/Devices/PC/BIOS/pmode.inc b/src/VBox/Devices/PC/BIOS/pmode.inc
index 7b34473..61191f2 100644
--- a/src/VBox/Devices/PC/BIOS/pmode.inc
+++ b/src/VBox/Devices/PC/BIOS/pmode.inc
@@ -1,18 +1,19 @@
+; $Id: pmode.inc $
 ;; @file
-;; Enter and exit a minimal protected-mode environment.
-;;
-
-;;
-;; Copyright (C) 2004-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;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;;
+; Enter and exit a minimal protected-mode environment.
+;
+
+;
+; Copyright (C) 2004-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
 
 ;; Caveats: May only be called from the F000 segment (16-bit). Does not
 ;; switch stacks. Must be run with disabled interrupts(!), any exceptions
@@ -77,3 +78,4 @@ pmbios_gdt:
 		dw 0, 0, 0, 0
 		dw 0, 0, 0, 0
 		dw 0ffffh, 400h, 9300h, 0000h   ; 16-bit data, base=0x40
+
diff --git a/src/VBox/Devices/PC/BIOS/pmsetup.inc b/src/VBox/Devices/PC/BIOS/pmsetup.inc
index 69a8f29..0fd5d2a 100644
--- a/src/VBox/Devices/PC/BIOS/pmsetup.inc
+++ b/src/VBox/Devices/PC/BIOS/pmsetup.inc
@@ -1,18 +1,19 @@
+; $Id: pmsetup.inc $
 ;; @file
-;; Initial system setup which needs to run in protected mode.
-;;
-
-;;
-;; Copyright (C) 2004-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;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;;
+; Initial system setup which needs to run in protected mode.
+;
+
+;
+; Copyright (C) 2004-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
 
 SVR		equ	0FEE000F0h
 LVT_LINT0	equ	0FEE00350h
@@ -61,3 +62,4 @@ pmode_setup	proc	near
 		ret
 
 pmode_setup	endp
+
diff --git a/src/VBox/Devices/PC/BIOS/post.c b/src/VBox/Devices/PC/BIOS/post.c
index 83c284e..52ac6e6 100644
--- a/src/VBox/Devices/PC/BIOS/post.c
+++ b/src/VBox/Devices/PC/BIOS/post.c
@@ -1,3 +1,4 @@
+/* $Id: post.c $ */
 /** @file
  * BIOS POST routines. Used only during initialization.
  */
diff --git a/src/VBox/Devices/PC/BIOS/print.c b/src/VBox/Devices/PC/BIOS/print.c
index 7d41d19..26cb3c8 100644
--- a/src/VBox/Devices/PC/BIOS/print.c
+++ b/src/VBox/Devices/PC/BIOS/print.c
@@ -1,5 +1,10 @@
+/* $Id: print.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include <stdarg.h>
diff --git a/src/VBox/Devices/PC/BIOS/ps2mouse.c b/src/VBox/Devices/PC/BIOS/ps2mouse.c
index c480ad6..6131fa7 100644
--- a/src/VBox/Devices/PC/BIOS/ps2mouse.c
+++ b/src/VBox/Devices/PC/BIOS/ps2mouse.c
@@ -1,5 +1,10 @@
+/* $Id: ps2mouse.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "biosint.h"
diff --git a/src/VBox/Devices/PC/BIOS/scsi.c b/src/VBox/Devices/PC/BIOS/scsi.c
index 6f796c2..9ef4187 100644
--- a/src/VBox/Devices/PC/BIOS/scsi.c
+++ b/src/VBox/Devices/PC/BIOS/scsi.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/serial.c b/src/VBox/Devices/PC/BIOS/serial.c
index 2b2ad71..1acc0b0 100644
--- a/src/VBox/Devices/PC/BIOS/serial.c
+++ b/src/VBox/Devices/PC/BIOS/serial.c
@@ -1,5 +1,10 @@
+/* $Id: serial.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "inlines.h"
diff --git a/src/VBox/Devices/PC/BIOS/smidmi.inc b/src/VBox/Devices/PC/BIOS/smidmi.inc
index 0fb4c7b..00820ff 100644
--- a/src/VBox/Devices/PC/BIOS/smidmi.inc
+++ b/src/VBox/Devices/PC/BIOS/smidmi.inc
@@ -1,43 +1,42 @@
-;;
-;; Copyright (C) 2006-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;
-;; you can redistribute it and/or modify it under the terms of the GNU
-;; General Public License (GPL) as published by the Free Software
-;; Foundation, in version 2 as it comes in the "COPYING" file of the
-;; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-;; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;; --------------------------------------------------------------------
-;;
-;; This code is based on:
-;;
-;;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
-;;
-;;  Copyright (C) 2002  MandrakeSoft S.A.
-;;
-;;    MandrakeSoft S.A.
-;;    43, rue d'Aboukir
-;;    75002 Paris - France
-;;    http://www.linux-mandrake.com/
-;;    http://www.mandrakesoft.com/
-;;
-;;  This library is free software; you can redistribute it and/or
-;;  modify it under the terms of the GNU Lesser General Public
-;;  License as published by the Free Software Foundation; either
-;;  version 2 of the License, or (at your option) any later version.
-;;
-;;  This library is distributed in the hope that it will be useful,
-;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;;  Lesser General Public License for more details.
-;;
-;;  You should have received a copy of the GNU Lesser General Public
-;;  License along with this library; if not, write to the Free Software
-;;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-;;
-;;
-
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+; --------------------------------------------------------------------
+;
+; This code is based on:
+;
+;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
+;
+;  Copyright (C) 2002  MandrakeSoft S.A.
+;
+;    MandrakeSoft S.A.
+;    43, rue d'Aboukir
+;    75002 Paris - France
+;    http://www.linux-mandrake.com/
+;    http://www.mandrakesoft.com/
+;
+;  This library is free software; you can redistribute it and/or
+;  modify it under the terms of the GNU Lesser General Public
+;  License as published by the Free Software Foundation; either
+;  version 2 of the License, or (at your option) any later version.
+;
+;  This library is distributed in the hope that it will be useful,
+;  but WITHOUT ANY WARRANTY; without even the implied warranty of
+;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;  Lesser General Public License for more details.
+;
+;  You should have received a copy of the GNU Lesser General Public
+;  License along with this library; if not, write to the Free Software
+;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+;
+;
 
 ; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 ; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
@@ -59,7 +58,7 @@ align 16
 		dw	VBOX_SMBIOS_MAXSS	; Maximum structure size
 		db	0		; Entry point revision
 		db	0, 0, 0, 0, 0	; 16 bytes total
-	
+
 		;; The DMI header
 		db	'_DMI_'		; signature
 		db	0		; checksum (set by biossums)
@@ -68,3 +67,4 @@ align 16
 		dw	0 ; DMI tables entries (set by DevPcBios)
 		db	VBOX_DMI_TABLE_VER ; DMI version
 		db	0		; Just for alignment (16 bytes total)
+
diff --git a/src/VBox/Devices/PC/BIOS/system.c b/src/VBox/Devices/PC/BIOS/system.c
index df6c2e5..e94fc7b 100644
--- a/src/VBox/Devices/PC/BIOS/system.c
+++ b/src/VBox/Devices/PC/BIOS/system.c
@@ -1,5 +1,10 @@
+/* $Id: system.c $ */
+/** @file
+ * PC BIOS - ???
+ */
+
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +43,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "biosint.h"
diff --git a/src/VBox/Devices/PC/BIOS/timepci.c b/src/VBox/Devices/PC/BIOS/timepci.c
index 23a4b92..a6242f6 100644
--- a/src/VBox/Devices/PC/BIOS/timepci.c
+++ b/src/VBox/Devices/PC/BIOS/timepci.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +38,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 #include <stdint.h>
 #include "biosint.h"
diff --git a/src/VBox/Devices/PC/BIOS/vbdmismi.inc b/src/VBox/Devices/PC/BIOS/vbdmismi.inc
index 69a2cba..0941e2f 100644
--- a/src/VBox/Devices/PC/BIOS/vbdmismi.inc
+++ b/src/VBox/Devices/PC/BIOS/vbdmismi.inc
@@ -1,3 +1,20 @@
+; $Id: vbdmismi.inc $
+;; @file
+; DMI and SMBIOS definitions for VBox.
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+
 ;; TODO: make dynamic
 
 VBOX_DMI_TABLE_BASE	equ	0E1000h
@@ -7,3 +24,4 @@ VBOX_DMI_TABLE_SIZE	equ	352
 VBOX_SMBIOS_MAJOR_VER	equ	2
 VBOX_SMBIOS_MINOR_VER	equ	5
 VBOX_SMBIOS_MAXSS	equ	0FFh
+
diff --git a/src/VBox/Devices/PC/BIOS/vds.c b/src/VBox/Devices/PC/BIOS/vds.c
index 4f9041c..7ff33c8 100644
--- a/src/VBox/Devices/PC/BIOS/vds.c
+++ b/src/VBox/Devices/PC/BIOS/vds.c
@@ -1,9 +1,10 @@
+/* $Id: vds.c $ */
 /** @file
  * Utility routines for calling the Virtual DMA Services.
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/BIOS/vds.h b/src/VBox/Devices/PC/BIOS/vds.h
index 0a251fd..d3b9104 100644
--- a/src/VBox/Devices/PC/BIOS/vds.h
+++ b/src/VBox/Devices/PC/BIOS/vds.h
@@ -1,11 +1,29 @@
+/* $Id: vds.h $ */
+/** @file
+ * Utility routines for calling the Virtual DMA Services.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
 /* Virtual DMA Services (VDS) */
 
 #define VDS_FLAGS_OFS   0x7B    /* Offset of VDS flag byte in BDA. */
 #define VDS_PRESENT     0x20    /* The VDS present bit. */
 
-/* The DMA descriptor data structure. */
-
-typedef struct {
+/** The DMA descriptor data structure. */
+typedef struct
+{
     uint32_t    region_size;    /* Region size in bytes. */
     uint32_t    offset;         /* Offset. */
     uint16_t    seg_sel;        /* Segment selector. */
@@ -14,25 +32,26 @@ typedef struct {
 } vds_dds;
 
 
-/* Scatter/gather descriptor entry. */
-
-typedef struct {
+/** Scatter/gather descriptor entry. */
+typedef struct
+{
     uint32_t    phys_addr;      /* Physical address. */
     uint32_t    size;           /* Entry size. */
 } vds_sg;
 
-/* The extended DDS for scatter/gather. Note that the EDDS contains either
- * S/G descriptors or x86-style PTEs.
+/** The extended DDS for scatter/gather.
+ * Note that the EDDS contains either S/G descriptors or x86-style PTEs.
  */
-
-typedef struct {
+typedef struct
+{
     uint32_t    region_size;    /* Region size in bytes. */
     uint32_t    offset;         /* Offset. */
     uint16_t    seg_sel;        /* Segment or selector. */
     uint16_t    resvd;          /* Reserved. */
     uint16_t    num_avail;      /* Number of entries available. */
     uint16_t    num_used;       /* Number of entries used. */
-    union {
+    union
+    {
         vds_sg      sg[1];      /* S/G entry array. */
         uint32_t    pte[1];     /* Page table entry array. */
     } u;
@@ -93,3 +112,4 @@ int vds_free_sg_list( vds_edds __far *edds );
 /* Helper for translating 16:16 real mode addresses to 32-bit linear. */
 
 uint32_t vds_real_to_lin( void __far *ptr );
+
diff --git a/src/VBox/Devices/PC/DevACPI.cpp b/src/VBox/Devices/PC/DevACPI.cpp
index 732a40d..73fa54d 100644
--- a/src/VBox/Devices/PC/DevACPI.cpp
+++ b/src/VBox/Devices/PC/DevACPI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevDMA.cpp b/src/VBox/Devices/PC/DevDMA.cpp
index c70127b..21e8a9e 100644
--- a/src/VBox/Devices/PC/DevDMA.cpp
+++ b/src/VBox/Devices/PC/DevDMA.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevFwCommon.cpp b/src/VBox/Devices/PC/DevFwCommon.cpp
index a0369f1..0e85f43 100644
--- a/src/VBox/Devices/PC/DevFwCommon.cpp
+++ b/src/VBox/Devices/PC/DevFwCommon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevFwCommon.h b/src/VBox/Devices/PC/DevFwCommon.h
index e1240f8..09b1bc8 100644
--- a/src/VBox/Devices/PC/DevFwCommon.h
+++ b/src/VBox/Devices/PC/DevFwCommon.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevHPET.cpp b/src/VBox/Devices/PC/DevHPET.cpp
index 56452d9..84cc84f 100644
--- a/src/VBox/Devices/PC/DevHPET.cpp
+++ b/src/VBox/Devices/PC/DevHPET.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevIoApic.cpp b/src/VBox/Devices/PC/DevIoApic.cpp
index 9fc296e..a0897eb 100644
--- a/src/VBox/Devices/PC/DevIoApic.cpp
+++ b/src/VBox/Devices/PC/DevIoApic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevLPC.cpp b/src/VBox/Devices/PC/DevLPC.cpp
index 21c0a52..e1687c9 100644
--- a/src/VBox/Devices/PC/DevLPC.cpp
+++ b/src/VBox/Devices/PC/DevLPC.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -46,6 +46,15 @@
  *
  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
diff --git a/src/VBox/Devices/PC/DevPIC.cpp b/src/VBox/Devices/PC/DevPIC.cpp
index 2274404..be805b7 100644
--- a/src/VBox/Devices/PC/DevPIC.cpp
+++ b/src/VBox/Devices/PC/DevPIC.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevPcArch.cpp b/src/VBox/Devices/PC/DevPcArch.cpp
index 763f7e6..a024da7 100644
--- a/src/VBox/Devices/PC/DevPcArch.cpp
+++ b/src/VBox/Devices/PC/DevPcArch.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevPcBios.h b/src/VBox/Devices/PC/DevPcBios.h
index 37d181d..4da8e07 100644
--- a/src/VBox/Devices/PC/DevPcBios.h
+++ b/src/VBox/Devices/PC/DevPcBios.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevPit-i8254.cpp b/src/VBox/Devices/PC/DevPit-i8254.cpp
index 100ef30..1b3c5b5 100644
--- a/src/VBox/Devices/PC/DevPit-i8254.cpp
+++ b/src/VBox/Devices/PC/DevPit-i8254.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DevRTC.cpp b/src/VBox/Devices/PC/DevRTC.cpp
index 931c0c0..c44c070 100644
--- a/src/VBox/Devices/PC/DevRTC.cpp
+++ b/src/VBox/Devices/PC/DevRTC.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/DrvACPI.cpp b/src/VBox/Devices/PC/DrvACPI.cpp
index 1215978..51189d4 100644
--- a/src/VBox/Devices/PC/DrvACPI.cpp
+++ b/src/VBox/Devices/PC/DrvACPI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -533,7 +533,7 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
         PDMACPIPOWERSOURCE enmPowerSource = PDM_ACPI_POWER_SOURCE_UNKNOWN;
         PRTSTREAM  pStrmStatus;
         PRTSTREAM  pStrmType;
-        PRTDIR     pDir = NULL;
+        RTDIR      hDir = NIL_RTDIR;
         RTDIRENTRY DirEntry;
         char       szLine[1024];
         bool       fBatteryPresent = false;     /* one or more batteries present */
@@ -547,7 +547,7 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
         PDMACPIBATCAPACITY enmBatteryRemainingCapacity; /* total remaining capacity of vbox batt */
         uint32_t u32BatteryPresentRate;         /* total present (dis)charging rate of vbox batt */
 
-        int rc = RTDirOpen(&pDir, "/sys/class/power_supply/");
+        int rc = RTDirOpen(&hDir, "/sys/class/power_supply/");
         if (RT_SUCCESS(rc))
         {
             /*
@@ -555,7 +555,7 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
              */
             while (pThread->enmState == PDMTHREADSTATE_RUNNING)
             {
-                rc = RTDirRead(pDir, &DirEntry, NULL);
+                rc = RTDirRead(hDir, &DirEntry, NULL);
                 if (RT_FAILURE(rc))
                     break;
                 if (   strcmp(DirEntry.szName, ".") == 0
@@ -678,7 +678,7 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
                 RTStrmClose(pStrmType);
 #undef POWER_OPEN
             }
-            RTDirClose(pDir);
+            RTDirClose(hDir);
         }
         else /* !/sys */
         {
@@ -688,13 +688,13 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
             /*
              * Read the status of the powerline-adapter.
              */
-            rc = RTDirOpen(&pDir, "/proc/acpi/ac_adapter/");
+            rc = RTDirOpen(&hDir, "/proc/acpi/ac_adapter/");
             if (RT_SUCCESS(rc))
             {
 #define POWER_OPEN(s, n) RTStrmOpenF("r", s, "/proc/acpi/ac_adapter/%s/" n, DirEntry.szName)
                 while (pThread->enmState == PDMTHREADSTATE_RUNNING)
                 {
-                    rc = RTDirRead(pDir, &DirEntry, NULL);
+                    rc = RTDirRead(hDir, &DirEntry, NULL);
                     if (RT_FAILURE(rc))
                         break;
                     if (   strcmp(DirEntry.szName, ".") == 0
@@ -724,14 +724,14 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
                         break;
                     }
                 }
-                RTDirClose(pDir);
+                RTDirClose(hDir);
 #undef POWER_OPEN
             }
 
             /*
              * Read the status of all batteries and collect it into one.
              */
-            rc = RTDirOpen(&pDir, "/proc/acpi/battery/");
+            rc = RTDirOpen(&hDir, "/proc/acpi/battery/");
             if (RT_SUCCESS(rc))
             {
 #define POWER_OPEN(s, n) RTStrmOpenF("r", s, "/proc/acpi/battery/%s/" n, DirEntry.szName)
@@ -740,7 +740,7 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
 
                 while (pThread->enmState == PDMTHREADSTATE_RUNNING)
                 {
-                    rc = RTDirRead(pDir, &DirEntry, NULL);
+                    rc = RTDirRead(hDir, &DirEntry, NULL);
                     if (RT_FAILURE(rc))
                         break;
                     if (   strcmp(DirEntry.szName, ".") == 0
@@ -860,7 +860,7 @@ static DECLCALLBACK(int) drvACPIPoller(PPDMDRVINS pDrvIns, PPDMTHREAD pThread)
                     RTStrmClose(pStrmStatus);
                     RTStrmClose(pStrmInfo);
                 }
-                RTDirClose(pDir);
+                RTDirClose(hDir);
 #undef POWER_OPEN
             }
         } /* /proc/acpi */
diff --git a/src/VBox/Devices/PC/DrvAcpiCpu.cpp b/src/VBox/Devices/PC/DrvAcpiCpu.cpp
index defff38..e4dca0d 100644
--- a/src/VBox/Devices/PC/DrvAcpiCpu.cpp
+++ b/src/VBox/Devices/PC/DrvAcpiCpu.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/PC/vbox-cpuhotplug.dsl b/src/VBox/Devices/PC/vbox-cpuhotplug.dsl
index fef7b72..ec55636 100644
--- a/src/VBox/Devices/PC/vbox-cpuhotplug.dsl
+++ b/src/VBox/Devices/PC/vbox-cpuhotplug.dsl
@@ -1,17 +1,19 @@
-// $Id: vbox-cpuhotplug.dsl $
-/// @file
-//
-// VirtualBox ACPI
-//
-// Copyright (C) 2006-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;
-// you can redistribute it and/or modify it under the terms of the GNU
-// General Public License (GPL) as published by the Free Software
-// Foundation, in version 2 as it comes in the "COPYING" file of the
-// VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-// hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+/* $Id: vbox-cpuhotplug.dsl $ */
+/** @file
+ * VirtualBox ACPI
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
 
 DefinitionBlock ("SSDT-cpuhotplug.aml", "SSDT", 1, "VBOX  ", "VBOXCPUT", 2)
 {
diff --git a/src/VBox/Devices/PC/vbox-standard.dsl b/src/VBox/Devices/PC/vbox-standard.dsl
index b1c9958..e4ef88f 100644
--- a/src/VBox/Devices/PC/vbox-standard.dsl
+++ b/src/VBox/Devices/PC/vbox-standard.dsl
@@ -1,17 +1,19 @@
-// $Id: vbox-standard.dsl $
-/// @file
-//
-// VirtualBox ACPI
-//
-// Copyright (C) 2006-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;
-// you can redistribute it and/or modify it under the terms of the GNU
-// General Public License (GPL) as published by the Free Software
-// Foundation, in version 2 as it comes in the "COPYING" file of the
-// VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-// hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+/* $Id: vbox-standard.dsl $ */
+/** @file
+ * VirtualBox ACPI
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
 
 DefinitionBlock ("SSDT.aml", "SSDT", 1, "VBOX  ", "VBOXCPUT", 2)
 {
diff --git a/src/VBox/Devices/PC/vbox.dsl b/src/VBox/Devices/PC/vbox.dsl
index f64aa32..e3cded8 100644
--- a/src/VBox/Devices/PC/vbox.dsl
+++ b/src/VBox/Devices/PC/vbox.dsl
@@ -1,17 +1,19 @@
-// $Id: vbox.dsl $
-/// @file
-//
-// VirtualBox ACPI
-//
-// Copyright (C) 2006-2017 Oracle Corporation
-//
-// This file is part of VirtualBox Open Source Edition (OSE), as
-// available from http://www.virtualbox.org. This file is free software;
-// you can redistribute it and/or modify it under the terms of the GNU
-// General Public License (GPL) as published by the Free Software
-// Foundation, in version 2 as it comes in the "COPYING" file of the
-// VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-// hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+/* $Id: vbox.dsl $ */
+/** @file
+ * VirtualBox ACPI
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
 
 DefinitionBlock ("DSDT.aml", "DSDT", 2, "VBOX  ", "VBOXBIOS", 2)
 {
diff --git a/src/VBox/Devices/Parallel/DevParallel.cpp b/src/VBox/Devices/Parallel/DevParallel.cpp
index 4eea352..b1c5606 100644
--- a/src/VBox/Devices/Parallel/DevParallel.cpp
+++ b/src/VBox/Devices/Parallel/DevParallel.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Parallel/DrvHostParallel.cpp b/src/VBox/Devices/Parallel/DrvHostParallel.cpp
index 3a6574b..1365732 100644
--- a/src/VBox/Devices/Parallel/DrvHostParallel.cpp
+++ b/src/VBox/Devices/Parallel/DrvHostParallel.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Samples/DrvStorageFilter.cpp b/src/VBox/Devices/Samples/DrvStorageFilter.cpp
index cc45d46..bc4e677 100644
--- a/src/VBox/Devices/Samples/DrvStorageFilter.cpp
+++ b/src/VBox/Devices/Samples/DrvStorageFilter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Samples/VBoxSampleDevice.cpp b/src/VBox/Devices/Samples/VBoxSampleDevice.cpp
index f78196f..d0d92c8 100644
--- a/src/VBox/Devices/Samples/VBoxSampleDevice.cpp
+++ b/src/VBox/Devices/Samples/VBoxSampleDevice.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Serial/DevSerial.cpp b/src/VBox/Devices/Serial/DevSerial.cpp
index afa874c..185a805 100644
--- a/src/VBox/Devices/Serial/DevSerial.cpp
+++ b/src/VBox/Devices/Serial/DevSerial.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Serial/DrvChar.cpp b/src/VBox/Devices/Serial/DrvChar.cpp
index bc9c1fe..5747a59 100644
--- a/src/VBox/Devices/Serial/DrvChar.cpp
+++ b/src/VBox/Devices/Serial/DrvChar.cpp
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Serial/DrvHostSerial.cpp b/src/VBox/Devices/Serial/DrvHostSerial.cpp
index b887811..d6eb10a 100644
--- a/src/VBox/Devices/Serial/DrvHostSerial.cpp
+++ b/src/VBox/Devices/Serial/DrvHostSerial.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -951,9 +951,10 @@ static DECLCALLBACK(int) drvHostSerialMonitorThread(PPDMDRVINS pDrvIns, PPDMTHRE
         if (!fPoll)
         {
             rcPsx = ioctl(RTFileToNative(pThis->hDeviceFile), TIOCMIWAIT, uStatusLinesToCheck);
-            if (rcPsx < 0)
+            if (rcPsx < 0 && errno != EINTR)
             {
-                LogRel(("Serial#%u: Failed to wait for status line change, switch to polling\n", pDrvIns->iInstance));
+                LogRel(("Serial#%u: Failed to wait for status line change with rcPsx=%d errno=%d, switch to polling\n",
+                        pDrvIns->iInstance, rcPsx, errno));
                 fPoll = true;
                 pThis->fStatusLines = statusLines;
             }
diff --git a/src/VBox/Devices/Serial/DrvNamedPipe.cpp b/src/VBox/Devices/Serial/DrvNamedPipe.cpp
index 8f924cd..facd071 100644
--- a/src/VBox/Devices/Serial/DrvNamedPipe.cpp
+++ b/src/VBox/Devices/Serial/DrvNamedPipe.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -60,6 +60,7 @@
 # define DRVNAMEDPIPE_WAKEUP_REASON_EXTERNAL       0
 # define DRVNAMEDPIPE_WAKEUP_REASON_NEW_CONNECTION 1
 
+
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
@@ -218,6 +219,7 @@ static DECLCALLBACK(int) drvNamedPipePoll(PPDMISTREAM pInterface, uint32_t fEvts
             {
                 LogFlowFunc(("Read completed: cbReallyRead=%u\n", cbReallyRead));
                 pThis->fReadPending = false;
+                pThis->cbReadBufUsed = cbReallyRead;
                 *pfEvts |= RTPOLL_EVT_READ;
                 return VINF_SUCCESS;
             }
diff --git a/src/VBox/Devices/Serial/DrvRawFile.cpp b/src/VBox/Devices/Serial/DrvRawFile.cpp
index a5adc74..54967e6 100644
--- a/src/VBox/Devices/Serial/DrvRawFile.cpp
+++ b/src/VBox/Devices/Serial/DrvRawFile.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Serial/DrvTCP.cpp b/src/VBox/Devices/Serial/DrvTCP.cpp
index f0b145c..a333604 100644
--- a/src/VBox/Devices/Serial/DrvTCP.cpp
+++ b/src/VBox/Devices/Serial/DrvTCP.cpp
@@ -4,9 +4,9 @@
  */
 
 /*
- * Copyright (C) 2006-2017 Oracle Corporation.
+ * Contributed by Alexey Eromenko (derived from DrvNamedPipe).
  *
- * This file was contributed by Alexey Eromenko (derived from DrvNamedPipe)
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +38,7 @@
 
 #include "VBoxDD.h"
 
+
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
@@ -48,6 +49,7 @@
 #define DRVTCP_WAKEUP_REASON_EXTERNAL       0
 #define DRVTCP_WAKEUP_REASON_NEW_CONNECTION 1
 
+
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
@@ -539,7 +541,7 @@ static DECLCALLBACK(int) drvTCPConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uin
                                        N_("DrvTCP#%d: The port part of the location is not a numerical value"),
                                        pDrvIns->iInstance);
 
-        /** @todo: Allow binding to distinct interfaces. */
+        /** @todo Allow binding to distinct interfaces. */
         rc = RTTcpServerCreateEx(NULL, uPort, &pThis->hTcpServ);
         if (RT_FAILURE(rc))
             return PDMDrvHlpVMSetError(pDrvIns, rc,  RT_SRC_POS,
diff --git a/src/VBox/Devices/Storage/ATAPIPassthrough.cpp b/src/VBox/Devices/Storage/ATAPIPassthrough.cpp
index 089e9c3..9132187 100644
--- a/src/VBox/Devices/Storage/ATAPIPassthrough.cpp
+++ b/src/VBox/Devices/Storage/ATAPIPassthrough.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/ATAPIPassthrough.h b/src/VBox/Devices/Storage/ATAPIPassthrough.h
index 6f4b1c5..ba2f1c9 100644
--- a/src/VBox/Devices/Storage/ATAPIPassthrough.h
+++ b/src/VBox/Devices/Storage/ATAPIPassthrough.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/Debug.cpp b/src/VBox/Devices/Storage/Debug.cpp
index 522e898..4890dcf 100644
--- a/src/VBox/Devices/Storage/Debug.cpp
+++ b/src/VBox/Devices/Storage/Debug.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DevAHCI.cpp b/src/VBox/Devices/Storage/DevAHCI.cpp
index bee0f6c..be92fb0 100644
--- a/src/VBox/Devices/Storage/DevAHCI.cpp
+++ b/src/VBox/Devices/Storage/DevAHCI.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DevATA.cpp b/src/VBox/Devices/Storage/DevATA.cpp
index 800ba10..a864f0a 100644
--- a/src/VBox/Devices/Storage/DevATA.cpp
+++ b/src/VBox/Devices/Storage/DevATA.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -138,6 +138,7 @@
 
 /** @} */
 
+
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
@@ -2486,7 +2487,7 @@ static bool atapiR3ReadTrackInformationSS(ATADevState *s)
                                                             &cBlocks, &cbBlock, &enmDataForm);
             }
             else
-                rc = VERR_NOT_FOUND; /** @todo: Return lead-in information. */
+                rc = VERR_NOT_FOUND; /** @todo Return lead-in information. */
             break;
         }
         case 0x02:
diff --git a/src/VBox/Devices/Storage/DevBusLogic.cpp b/src/VBox/Devices/Storage/DevBusLogic.cpp
index e75e401..d472669 100644
--- a/src/VBox/Devices/Storage/DevBusLogic.cpp
+++ b/src/VBox/Devices/Storage/DevBusLogic.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -2349,7 +2349,7 @@ static int buslogicRegisterWrite(PBUSLOGIC pBusLogic, unsigned iRegister, uint8_
             /* Fast path for mailbox execution command. */
             if ((uVal == BUSLOGICCOMMAND_EXECUTE_MAILBOX_COMMAND) && (pBusLogic->uOperationCode == 0xff))
             {
-                ///@todo: Should fail if BL_STAT_INREQ is set
+                /// @todo Should fail if BL_STAT_INREQ is set
                 /* If there are no mailboxes configured, don't even try to do anything. */
                 if (pBusLogic->cMailbox)
                 {
diff --git a/src/VBox/Devices/Storage/DevFdc.cpp b/src/VBox/Devices/Storage/DevFdc.cpp
index d167ff6..a7c24eb 100644
--- a/src/VBox/Devices/Storage/DevFdc.cpp
+++ b/src/VBox/Devices/Storage/DevFdc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
index e3e4ff4..4da7815 100644
--- a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
+++ b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DevLsiLogicSCSI.h b/src/VBox/Devices/Storage/DevLsiLogicSCSI.h
index ca1cbdd..c16a3dc 100644
--- a/src/VBox/Devices/Storage/DevLsiLogicSCSI.h
+++ b/src/VBox/Devices/Storage/DevLsiLogicSCSI.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp b/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp
index de50d50..54019f7 100644
--- a/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp
+++ b/src/VBox/Devices/Storage/DrvDiskIntegrity.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostBase-darwin.cpp b/src/VBox/Devices/Storage/DrvHostBase-darwin.cpp
index f0d9402..46d930f 100644
--- a/src/VBox/Devices/Storage/DrvHostBase-darwin.cpp
+++ b/src/VBox/Devices/Storage/DrvHostBase-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostBase-freebsd.cpp b/src/VBox/Devices/Storage/DrvHostBase-freebsd.cpp
index 4715026..6de08de 100644
--- a/src/VBox/Devices/Storage/DrvHostBase-freebsd.cpp
+++ b/src/VBox/Devices/Storage/DrvHostBase-freebsd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostBase-linux.cpp b/src/VBox/Devices/Storage/DrvHostBase-linux.cpp
index 0bc37e4..66a5d81 100644
--- a/src/VBox/Devices/Storage/DrvHostBase-linux.cpp
+++ b/src/VBox/Devices/Storage/DrvHostBase-linux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostBase-solaris.cpp b/src/VBox/Devices/Storage/DrvHostBase-solaris.cpp
index c306bfe..c77c104 100644
--- a/src/VBox/Devices/Storage/DrvHostBase-solaris.cpp
+++ b/src/VBox/Devices/Storage/DrvHostBase-solaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostBase-win.cpp b/src/VBox/Devices/Storage/DrvHostBase-win.cpp
index 0df8a9d..49a3951 100644
--- a/src/VBox/Devices/Storage/DrvHostBase-win.cpp
+++ b/src/VBox/Devices/Storage/DrvHostBase-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostBase.cpp b/src/VBox/Devices/Storage/DrvHostBase.cpp
index 079a1ce..5a6ece4 100644
--- a/src/VBox/Devices/Storage/DrvHostBase.cpp
+++ b/src/VBox/Devices/Storage/DrvHostBase.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -348,7 +348,7 @@ static DECLCALLBACK(uint32_t) drvHostBaseGetRegionCount(PPDMIMEDIA pInterface)
     uint32_t cRegions = pThis->fMediaPresent ? 1 : 0;
 
     /* For now just return one region for all devices. */
-    /** @todo: Handle CD/DVD passthrough properly. */
+    /** @todo Handle CD/DVD passthrough properly. */
 
     LogFlowFunc(("returns %u\n", cRegions));
     return cRegions;
diff --git a/src/VBox/Devices/Storage/DrvHostBase.h b/src/VBox/Devices/Storage/DrvHostBase.h
index 6d86ac4..01f5e59 100644
--- a/src/VBox/Devices/Storage/DrvHostBase.h
+++ b/src/VBox/Devices/Storage/DrvHostBase.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvHostDVD.cpp b/src/VBox/Devices/Storage/DrvHostDVD.cpp
index 33a816e..21b543b 100644
--- a/src/VBox/Devices/Storage/DrvHostDVD.cpp
+++ b/src/VBox/Devices/Storage/DrvHostDVD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -56,6 +56,7 @@ typedef struct DRVHOSTDVD
 /** Pointer to the host DVD driver instance data. */
 typedef DRVHOSTDVD *PDRVHOSTDVD;
 
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Devices/Storage/DrvHostFloppy.cpp b/src/VBox/Devices/Storage/DrvHostFloppy.cpp
index 9898660..683315e 100644
--- a/src/VBox/Devices/Storage/DrvHostFloppy.cpp
+++ b/src/VBox/Devices/Storage/DrvHostFloppy.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvRamDisk.cpp b/src/VBox/Devices/Storage/DrvRamDisk.cpp
index 438f4a0..0d03651 100644
--- a/src/VBox/Devices/Storage/DrvRamDisk.cpp
+++ b/src/VBox/Devices/Storage/DrvRamDisk.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -40,6 +40,7 @@
 #include "VBoxDD.h"
 #include "IOBufMgmt.h"
 
+
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
@@ -503,6 +504,7 @@ static int drvramdiskDiscardRecords(PDRVRAMDISK pThis, PCRTRANGE paRanges, unsig
 
 /* -=-=-=-=- IMedia -=-=-=-=- */
 
+
 /*********************************************************************************************************************************
 *   Media interface methods                                                                                                      *
 *********************************************************************************************************************************/
@@ -720,7 +722,7 @@ DECLINLINE(int) drvramdiskMediaExIoReqBufSync(PDRVRAMDISK pThis, PPDMMEDIAEXIORE
  */
 DECLINLINE(unsigned) drvramdiskMediaExIoReqIdHash(PDMMEDIAEXIOREQID uIoReqId)
 {
-    return uIoReqId % DRVVD_VDIOREQ_ALLOC_BINS; /** @todo: Find something better? */
+    return uIoReqId % DRVVD_VDIOREQ_ALLOC_BINS; /** @todo Find something better? */
 }
 
 /**
diff --git a/src/VBox/Devices/Storage/DrvSCSI.cpp b/src/VBox/Devices/Storage/DrvSCSI.cpp
index 8c14399..b10ba75 100644
--- a/src/VBox/Devices/Storage/DrvSCSI.cpp
+++ b/src/VBox/Devices/Storage/DrvSCSI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/DrvVD.cpp b/src/VBox/Devices/Storage/DrvVD.cpp
index 8b59f52..2c8c872 100644
--- a/src/VBox/Devices/Storage/DrvVD.cpp
+++ b/src/VBox/Devices/Storage/DrvVD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -536,6 +536,7 @@ static int drvvdSetWritable(PVBOXDISK pThis)
     return rc;
 }
 
+
 /*********************************************************************************************************************************
 *   Error reporting callback                                                                                                     *
 *********************************************************************************************************************************/
@@ -3112,7 +3113,7 @@ DECLINLINE(int) drvvdMediaExIoReqBufAlloc(PVBOXDISK pThis, PPDMMEDIAEXIOREQINT p
     int rc = VERR_NOT_SUPPORTED;
     LogFlowFunc(("pThis=%#p pIoReq=%#p cb=%zu\n", pThis, pIoReq, cb));
 
-/** @todo: This does not work at all with encryption enabled because the encryption plugin
+/** @todo This does not work at all with encryption enabled because the encryption plugin
  *         encrypts the data in place trashing guest memory and causing data corruption later on!
  *
  * DO NOT ENABLE UNLESS YOU WANT YOUR DATA SHREDDED!!!
@@ -4517,6 +4518,7 @@ static void drvvdStatsDeregister(PVBOXDISK pThis)
     PDMDrvHlpSTAMDeregister(pDrvIns, &pThis->StatReqsPerSec);
 }
 
+
 /*********************************************************************************************************************************
 *   Base interface methods                                                                                                       *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp b/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp
index 78ee903..30f83e5 100644
--- a/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp
+++ b/src/VBox/Devices/Storage/HBDMgmt-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/HBDMgmt-generic.cpp b/src/VBox/Devices/Storage/HBDMgmt-generic.cpp
index 63199c9..f601872 100644
--- a/src/VBox/Devices/Storage/HBDMgmt-generic.cpp
+++ b/src/VBox/Devices/Storage/HBDMgmt-generic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/HBDMgmt-win.cpp b/src/VBox/Devices/Storage/HBDMgmt-win.cpp
index a3dcfd4..c6bdb3f 100644
--- a/src/VBox/Devices/Storage/HBDMgmt-win.cpp
+++ b/src/VBox/Devices/Storage/HBDMgmt-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/HBDMgmt.h b/src/VBox/Devices/Storage/HBDMgmt.h
index 3f335fb..d523099 100644
--- a/src/VBox/Devices/Storage/HBDMgmt.h
+++ b/src/VBox/Devices/Storage/HBDMgmt.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/IOBufMgmt.cpp b/src/VBox/Devices/Storage/IOBufMgmt.cpp
index 1c4fd8a..da1077c 100644
--- a/src/VBox/Devices/Storage/IOBufMgmt.cpp
+++ b/src/VBox/Devices/Storage/IOBufMgmt.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/IOBufMgmt.h b/src/VBox/Devices/Storage/IOBufMgmt.h
index 132c132..ee9a795 100644
--- a/src/VBox/Devices/Storage/IOBufMgmt.h
+++ b/src/VBox/Devices/Storage/IOBufMgmt.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/UsbMsd.cpp b/src/VBox/Devices/Storage/UsbMsd.cpp
index c25beb2..4a503c5 100644
--- a/src/VBox/Devices/Storage/UsbMsd.cpp
+++ b/src/VBox/Devices/Storage/UsbMsd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VBoxSCSI.cpp b/src/VBox/Devices/Storage/VBoxSCSI.cpp
index 68a0e9c..3be4b70 100644
--- a/src/VBox/Devices/Storage/VBoxSCSI.cpp
+++ b/src/VBox/Devices/Storage/VBoxSCSI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VBoxSCSI.h b/src/VBox/Devices/Storage/VBoxSCSI.h
index 9d8afb0..7850b0f 100644
--- a/src/VBox/Devices/Storage/VBoxSCSI.h
+++ b/src/VBox/Devices/Storage/VBoxSCSI.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSIDevice.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSIDevice.cpp
index abd4f94..3600c5b 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSIDevice.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSIDevice.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSIInternal.h b/src/VBox/Devices/Storage/VSCSI/VSCSIInternal.h
index f1cecdb..74ef3d7 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSIInternal.h
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSIInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSIIoReq.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSIIoReq.cpp
index 8a79068..ace8584 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSIIoReq.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSIIoReq.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp
index da8bca1..cf223de 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -31,6 +31,7 @@
 
 #include "VSCSIInternal.h"
 
+
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
@@ -936,7 +937,7 @@ static int vscsiLunMmcReadTrackInformation(PVSCSILUNMMC pVScsiLunMmc, PVSCSIREQI
                                                          &cBlocks, &cbBlock, &enmDataForm);
             }
             else
-                rc = VERR_NOT_FOUND; /** @todo: Return lead-in information. */
+                rc = VERR_NOT_FOUND; /** @todo Return lead-in information. */
             break;
         }
         case 0x02:
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSILunSbc.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSILunSbc.cpp
index ce973fa..4b5217c 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSILunSbc.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSILunSbc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSILunSsc.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSILunSsc.cpp
index cde066b..849ae07 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSILunSsc.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSILunSsc.cpp
@@ -15,9 +15,10 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #define LOG_GROUP LOG_GROUP_VSCSI
 #include <VBox/log.h>
 #include <VBox/err.h>
@@ -181,7 +182,7 @@ static int vscsiLUNSSCReqProcess(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq)
             {
                 *pu8ReplyPos++ = 0x45;  /* Travan TR-4 density. */
                 *pu8ReplyPos++ = 0;     /* All blocks are the same. */
-                *pu8ReplyPos++ = 0;     //@todo: this calls for some macros!
+                *pu8ReplyPos++ = 0;     /// @todo this calls for some macros!
                 *pu8ReplyPos++ = 0;
                 *pu8ReplyPos++ = 0;     /* Reserved. */
                 *pu8ReplyPos++ = 0x00;  /* Block length (512). */
@@ -195,7 +196,7 @@ static int vscsiLUNSSCReqProcess(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq)
         }
         case SCSI_MODE_SELECT_6:
         {
-            /* @todo: implement!! */
+            /** @todo implement!! */
             rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
             break;
         }
@@ -255,7 +256,7 @@ static int vscsiLUNSSCReqProcess(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq)
         case SCSI_VERIFY_10:
         case SCSI_LOAD_UNLOAD:
         {
-            //@todo: should load/unload do anyhting? is verify even supported?
+            /// @todo should load/unload do anyhting? is verify even supported?
             rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
             break;
         }
@@ -304,16 +305,16 @@ static int vscsiLUNSSCReqProcess(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq)
             break;
         }
         case SCSI_REWIND:
-            //@todo: flush data + write EOD? immed bit? partitions?
+            /// @todo flush data + write EOD? immed bit? partitions?
             pVScsiLUNSSC->uCurPos = 0;
             rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
             break;
         case SCSI_RESERVE_6:
-            //@todo: perform actual reservation
+            /// @todo perform actual reservation
             rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
             break;
         case SCSI_RELEASE_6:
-            //@todo: perform actual release
+            /// @todo perform actual release
             rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
             break;
         case SCSI_READ_BLOCK_LIMITS:
@@ -322,7 +323,7 @@ static int vscsiLUNSSCReqProcess(PVSCSILUNINT pVScsiLun, PVSCSIREQINT pVScsiReq)
 
             /* Report unrestricted block sizes (1-FFFFFFh). */
             memset(aReply, 0, sizeof(aReply));
-            //@todo: Helpers for big-endian 16-bit/24-bit/32-bit constants?
+            /// @todo Helpers for big-endian 16-bit/24-bit/32-bit constants?
             aReply[1] = aReply[2] = aReply[3] = 0xff;
             aReply[5] = 0x01;
             RTSgBufCopyFromBuf(&pVScsiReq->SgBuf, aReply, sizeof(aReply));
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSISense.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSISense.cpp
index 58d6fa9..b6afd18 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSISense.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSISense.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPagePool.cpp b/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPagePool.cpp
index ca37a95..136a90f 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPagePool.cpp
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPagePool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPages.h b/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPages.h
index cef321f..572c9f9 100644
--- a/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPages.h
+++ b/src/VBox/Devices/Storage/VSCSI/VSCSIVpdPages.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/Storage/swab.h b/src/VBox/Devices/Storage/swab.h
index 9e4e2a6..4d3b5f2 100644
--- a/src/VBox/Devices/Storage/swab.h
+++ b/src/VBox/Devices/Storage/swab.h
@@ -15,7 +15,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/DevOHCI.cpp b/src/VBox/Devices/USB/DevOHCI.cpp
index 5f32776..fcef963 100644
--- a/src/VBox/Devices/USB/DevOHCI.cpp
+++ b/src/VBox/Devices/USB/DevOHCI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1132,6 +1132,8 @@ static DECLCALLBACK(int) ohciRhReset(PVUSBIROOTHUBPORT pInterface, bool fResetOn
     POHCI pThis = VUSBIROOTHUBPORT_2_OHCI(pInterface);
     PDMCritSectEnter(pThis->pDevInsR3->pCritSectRoR3, VERR_IGNORED);
 
+    Log(("ohci: root hub reset%s\n", fResetOnLinux ? " (reset on linux)" : ""));
+
     pThis->RootHub.status = 0;
     pThis->RootHub.desc_a = OHCI_RHA_NPS | OHCI_NDP_CFG(pThis); /* Preserve NDP value. */
     pThis->RootHub.desc_b = 0x0; /* Impl. specific */
@@ -1152,7 +1154,7 @@ static DECLCALLBACK(int) ohciRhReset(PVUSBIROOTHUBPORT pInterface, bool fResetOn
     {
         if (pThis->RootHub.aPorts[iPort].pDev)
         {
-            pThis->RootHub.aPorts[iPort].fReg = OHCI_PORT_R_CURRENT_CONNECT_STATUS | OHCI_PORT_R_CONNECT_STATUS_CHANGE;
+            pThis->RootHub.aPorts[iPort].fReg = OHCI_PORT_R_CURRENT_CONNECT_STATUS | OHCI_PORT_R_CONNECT_STATUS_CHANGE | OHCI_PORT_PPS;
             if (fResetOnLinux)
             {
                 PVM pVM = PDMDevHlpGetVM(pThis->CTX_SUFF(pDevIns));
@@ -1162,6 +1164,7 @@ static DECLCALLBACK(int) ohciRhReset(PVUSBIROOTHUBPORT pInterface, bool fResetOn
         else
             pThis->RootHub.aPorts[iPort].fReg = 0;
     }
+    ohciR3SetInterrupt(pThis, OHCI_INTR_ROOT_HUB_STATUS_CHANGE);
 
     PDMCritSectLeave(pThis->pDevInsR3->pCritSectRoR3);
     return VINF_SUCCESS;
@@ -1208,7 +1211,7 @@ static void ohciDoReset(POHCI pThis, uint32_t fNewMode, bool fResetOnLinux)
      * Reset the hardware registers.
      */
     if (fNewMode == OHCI_USB_RESET)
-        pThis->ctl |= OHCI_CTL_RWC;                     /* We're the firmware, set RemoteWakeupConnected. */
+        pThis->ctl  = OHCI_CTL_RWC;                     /* We're the firmware, set RemoteWakeupConnected. */
     else
         pThis->ctl &= OHCI_CTL_IR | OHCI_CTL_RWC;       /* IR and RWC are preserved on software reset. */
 
@@ -1218,6 +1221,7 @@ static void ohciDoReset(POHCI pThis, uint32_t fNewMode, bool fResetOnLinux)
     pThis->status = 0;
     pThis->intr_status = 0;
     pThis->intr = 0;
+    PDMDevHlpPCISetIrq(pThis->CTX_SUFF(pDevIns), 0, 0);
 
     pThis->hcca = 0;
     pThis->per_cur = 0;
@@ -1426,6 +1430,28 @@ static void ohciPhysReadCacheRead(POHCI pThis, POHCIPAGECACHE pPageCache, RTGCPH
     }
 }
 
+
+/**
+ * Updates the data in the given page cache if the given guest physical address is currently contained
+ * in the cache.
+ *
+ * @returns nothing.
+ * @param   pPageCache  The page cache to update.
+ * @param   GCPhys      The guest physical address needing the update.
+ * @param   pvBuf       Pointer to the buffer to update the page cache with.
+ * @param   cbBuf       Number of bytes to update.
+ */
+static void ohciPhysCacheUpdate(POHCIPAGECACHE pPageCache, RTGCPHYS GCPhys, const void *pvBuf, size_t cbBuf)
+{
+    const RTGCPHYS GCPhysPage = PAGE_ADDRESS(GCPhys);
+
+    if (GCPhysPage == pPageCache->GCPhysReadCacheAddr)
+    {
+        uint32_t offPage = GCPhys & PAGE_OFFSET_MASK;
+        memcpy(&pPageCache->au8PhysReadCache[offPage], pvBuf, RT_MIN(PAGE_SIZE - offPage, cbBuf));
+    }
+}
+
 static void ohciReadEdCached(POHCI pThis, uint32_t EdAddr, POHCIED pEd)
 {
     ohciPhysReadCacheRead(pThis, pThis->pCacheED, EdAddr, pEd, sizeof(*pEd));
@@ -1436,6 +1462,34 @@ static void ohciReadTdCached(POHCI pThis, uint32_t TdAddr, POHCITD pTd)
     ohciPhysReadCacheRead(pThis, pThis->pCacheTD, TdAddr, pTd, sizeof(*pTd));
 }
 
+
+/**
+ * Update any cached ED data with the given endpoint descriptor at the given address.
+ *
+ * @returns nothing.
+ * @param   pThis       The OHCI instance data.
+ * @param   EdAddr      Endpoint descriptor address.
+ * @param   pEd         The endpoint descriptor which got updated.
+ */
+DECLINLINE(void) ohciCacheEdUpdate(POHCI pThis, RTGCPHYS32 EdAddr, PCOHCIED pEd)
+{
+    ohciPhysCacheUpdate(pThis->pCacheED, EdAddr, pEd, sizeof(*pEd));
+}
+
+
+/**
+ * Update any cached TD data with the given transfer descriptor at the given address.
+ *
+ * @returns nothing.
+ * @param   pThis       The OHCI instance data.
+ * @param   TdAddr      Transfer descriptor address.
+ * @param   pTd         The transfer descriptor which got updated.
+ */
+DECLINLINE(void) ohciCacheTdUpdate(POHCI pThis, RTGCPHYS32 TdAddr, PCOHCITD pTd)
+{
+    ohciPhysCacheUpdate(pThis->pCacheTD, TdAddr, pTd, sizeof(*pTd));
+}
+
 # endif /* VBOX_WITH_OHCI_PHYS_READ_CACHE */
 
 /**
@@ -1570,6 +1624,9 @@ DECLINLINE(void) ohciWriteEd(POHCI pThis, uint32_t EdAddr, PCOHCIED pEd)
 # endif
 
     ohciPutDWords(pThis, EdAddr, (uint32_t *)pEd, sizeof(*pEd) >> 2);
+#ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE
+    ohciCacheEdUpdate(pThis, EdAddr, pEd);
+#endif
 }
 
 
@@ -1601,6 +1658,9 @@ DECLINLINE(void) ohciWriteTd(POHCI pThis, uint32_t TdAddr, PCOHCITD pTd, const c
     RT_NOREF(pszLogMsg);
 # endif
     ohciPutDWords(pThis, TdAddr, (uint32_t *)pTd, sizeof(*pTd) >> 2);
+#ifdef VBOX_WITH_OHCI_PHYS_READ_CACHE
+    ohciCacheTdUpdate(pThis, TdAddr, pTd);
+#endif
 }
 
 /**
@@ -3772,7 +3832,7 @@ static void ohciServicePeriodicList(POHCI pThis)
         {
             if (Ed.hwinfo & ED_HWINFO_SKIP)
             {
-                LogFlow(("ohciServicePeriodicList: Ed=%#010RX32 Ed.TailP=%#010RX32 SKIP\n", EdAddr, Ed.TailP));
+                Log3(("ohciServicePeriodicList: Ed=%#010RX32 Ed.TailP=%#010RX32 SKIP\n", EdAddr, Ed.TailP));
                 /* If the ED is in 'skip' state, no transactions on it are allowed and we must
                  * cancel outstanding URBs, if any.
                  */
@@ -3836,7 +3896,7 @@ static void ohciUpdateHCCA(POHCI pThis)
         fWriteDoneHeadInterrupt = true;
     }
 
-    Log(("ohci: Updating HCCA on frame %#x\n", pThis->HcFmNumber));
+    Log3(("ohci: Updating HCCA on frame %#x\n", pThis->HcFmNumber));
     ohciPhysWrite(pThis, pThis->hcca + OHCI_HCCA_OFS, (uint8_t *)&hcca, sizeof(hcca));
     if (fWriteDoneHeadInterrupt)
         ohciR3SetInterrupt(pThis, OHCI_INTR_WRITE_DONE_HEAD);
@@ -4193,6 +4253,9 @@ static void rhport_power(POHCIROOTHUB pRh, unsigned iPort, bool fPowerUp)
 {
     POHCIHUBPORT pPort = &pRh->aPorts[iPort];
     bool fOldPPS = !!(pPort->fReg & OHCI_PORT_PPS);
+
+    LogFlowFunc(("iPort=%u fPowerUp=%RTbool\n", iPort, fPowerUp));
+
     if (fPowerUp)
     {
         /* power up */
@@ -5865,29 +5928,29 @@ static DECLCALLBACK(void) ohciR3InfoRegs(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp,
 
     /* Control register */
     ctl = pThis->ctl;
-    pHlp->pfnPrintf(pHlp, "HcControl: %08x - CBSR=%d PLE=%d IE=%d CLE=%d BLE=%d HCFS=%#x IR=%d RWC=%d RWE=%d\n",
+    pHlp->pfnPrintf(pHlp, "HcControl:          %08x - CBSR=%d PLE=%d IE=%d CLE=%d BLE=%d HCFS=%#x IR=%d RWC=%d RWE=%d\n",
           ctl, ctl & 3, (ctl >> 2) & 1, (ctl >> 3) & 1, (ctl >> 4) & 1, (ctl >> 5) & 1, (ctl >> 6) & 3, (ctl >> 8) & 1,
           (ctl >> 9) & 1, (ctl >> 10) & 1);
 
     /* Command status register */
     status = pThis->status;
-    pHlp->pfnPrintf(pHlp, "HcCommandStatus:   %08x - HCR=%d CLF=%d BLF=%d OCR=%d SOC=%d\n",
+    pHlp->pfnPrintf(pHlp, "HcCommandStatus:    %08x - HCR=%d CLF=%d BLF=%d OCR=%d SOC=%d\n",
           status, status & 1, (status >> 1) & 1, (status >> 2) & 1, (status >> 3) & 1, (status >> 16) & 3);
 
     /* Interrupt status register */
     val = pThis->intr_status;
-    pHlp->pfnPrintf(pHlp, "HcInterruptStatus: %08x - SO=%d WDH=%d SF=%d RD=%d UE=%d FNO=%d RHSC=%d OC=%d\n",
+    pHlp->pfnPrintf(pHlp, "HcInterruptStatus:  %08x - SO=%d WDH=%d SF=%d RD=%d UE=%d FNO=%d RHSC=%d OC=%d\n",
           val, val & 1, (val >> 1) & 1, (val >> 2) & 1, (val >> 3) & 1, (val >> 4) & 1, (val >> 5) & 1,
           (val >> 6) & 1, (val >> 30) & 1);
 
     /* Interrupt enable register */
     val = pThis->intr;
-    pHlp->pfnPrintf(pHlp, "HcInterruptEnable: %08x - SO=%d WDH=%d SF=%d RD=%d UE=%d FNO=%d RHSC=%d OC=%d MIE=%d\n",
+    pHlp->pfnPrintf(pHlp, "HcInterruptEnable:  %08x - SO=%d WDH=%d SF=%d RD=%d UE=%d FNO=%d RHSC=%d OC=%d MIE=%d\n",
           val, val & 1, (val >> 1) & 1, (val >> 2) & 1, (val >> 3) & 1, (val >> 4) & 1, (val >> 5) & 1,
           (val >> 6) & 1, (val >> 30) & 1, (val >> 31) & 1);
 
     /* HCCA address register */
-    pHlp->pfnPrintf(pHlp, "HcHCCA: %08x\n", pThis->hcca);
+    pHlp->pfnPrintf(pHlp, "HcHCCA:             %08x\n", pThis->hcca);
 
     /* Current periodic ED register */
     pHlp->pfnPrintf(pHlp, "HcPeriodCurrentED:  %08x\n", pThis->per_cur);
@@ -5903,7 +5966,32 @@ static DECLCALLBACK(void) ohciR3InfoRegs(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp,
     /* Done head register */
     pHlp->pfnPrintf(pHlp, "HcDoneHead:         %08x\n", pThis->done);
 
-    pHlp->pfnPrintf(pHlp, "\n");
+    /* Done head register */
+    pHlp->pfnPrintf(pHlp, "HcDoneHead:         %08x\n", pThis->done);
+
+    /* Root hub descriptor A */
+    val = pThis->RootHub.desc_a;
+    pHlp->pfnPrintf(pHlp, "HcRhDescriptorA:    %08x - NDP=%d PSM=%d NPS=%d DT=%d OCPM=%d NOCP=%d POTPGT=%d\n",
+          val, (uint8_t)val, (val >> 8) & 1, (val >> 9) & 1, (val >> 10) & 1, (val >> 11) & 1, (val >> 12) & 1, (uint8_t)(val >> 24));
+
+    /* Root hub descriptor B */
+    val = pThis->RootHub.desc_b;
+    pHlp->pfnPrintf(pHlp, "HcRhDescriptorB:    %08x - DR=%#04x PPCM=%#04x\n", val, (uint16_t)val, (uint16_t)(val >> 16));
+
+    /* Root hub status register */
+    val = pThis->RootHub.status;
+    pHlp->pfnPrintf(pHlp, "HcRhStatus:         %08x - LPS=%d OCI=%d DRWE=%d  LPSC=%d OCIC=%d CRWE=%d\n\n",
+          val, val & 1, (val >> 1) & 1, (val >> 15) & 1, (val >> 16) & 1, (val >> 17) & 1, (val >> 31) & 1);
+
+    /* Port status registers */
+    for (unsigned i = 0; i < OHCI_NDP_CFG(pThis); ++i)
+    {
+        val = pThis->RootHub.aPorts[i].fReg;
+        pHlp->pfnPrintf(pHlp, "HcRhPortStatus%02d: CCS=%d PES =%d PSS =%d POCI=%d PRS =%d  PPS=%d LSDA=%d\n"
+                              "      %08x -  CSC=%d PESC=%d PSSC=%d OCIC=%d PRSC=%d\n",
+              i, val & 1, (val >> 1) & 1, (val >> 2) & 1,(val >> 3) & 1, (val >> 4) & 1, (val >> 8) & 1, (val >> 9) & 1,
+              val, (val >> 16) & 1, (val >> 17) & 1, (val >> 18) & 1, (val >> 19) & 1, (val >> 20) & 1);
+    }
 }
 
 
diff --git a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp b/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
index a430ba4..c76d863 100644
--- a/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
+++ b/src/VBox/Devices/USB/DrvVUSBRootHub.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/USBProxyDevice-stub.cpp b/src/VBox/Devices/USB/USBProxyDevice-stub.cpp
index 72dd8e0..e5bcf70 100644
--- a/src/VBox/Devices/USB/USBProxyDevice-stub.cpp
+++ b/src/VBox/Devices/USB/USBProxyDevice-stub.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/USBProxyDevice.cpp b/src/VBox/Devices/USB/USBProxyDevice.cpp
index aed367f..d8c7fa3 100644
--- a/src/VBox/Devices/USB/USBProxyDevice.cpp
+++ b/src/VBox/Devices/USB/USBProxyDevice.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/USBProxyDevice.h b/src/VBox/Devices/USB/USBProxyDevice.h
index 3c84ea4..9c2ba6c 100644
--- a/src/VBox/Devices/USB/USBProxyDevice.h
+++ b/src/VBox/Devices/USB/USBProxyDevice.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBDevice.cpp b/src/VBox/Devices/USB/VUSBDevice.cpp
index ae12a76..ffbdff4 100644
--- a/src/VBox/Devices/USB/VUSBDevice.cpp
+++ b/src/VBox/Devices/USB/VUSBDevice.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBInternal.h b/src/VBox/Devices/USB/VUSBInternal.h
index 6b877c9..dc343fa 100644
--- a/src/VBox/Devices/USB/VUSBInternal.h
+++ b/src/VBox/Devices/USB/VUSBInternal.h
@@ -9,7 +9,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBSniffer.cpp b/src/VBox/Devices/USB/VUSBSniffer.cpp
index c470947..53b8d02 100644
--- a/src/VBox/Devices/USB/VUSBSniffer.cpp
+++ b/src/VBox/Devices/USB/VUSBSniffer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBSniffer.h b/src/VBox/Devices/USB/VUSBSniffer.h
index b49e45e..39083b0 100644
--- a/src/VBox/Devices/USB/VUSBSniffer.h
+++ b/src/VBox/Devices/USB/VUSBSniffer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBSnifferInternal.h b/src/VBox/Devices/USB/VUSBSnifferInternal.h
index cd2cfa6..b032017 100644
--- a/src/VBox/Devices/USB/VUSBSnifferInternal.h
+++ b/src/VBox/Devices/USB/VUSBSnifferInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBSnifferUsbMon.cpp b/src/VBox/Devices/USB/VUSBSnifferUsbMon.cpp
index 92f32ba..abf86a9 100644
--- a/src/VBox/Devices/USB/VUSBSnifferUsbMon.cpp
+++ b/src/VBox/Devices/USB/VUSBSnifferUsbMon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBSnifferVmx.cpp b/src/VBox/Devices/USB/VUSBSnifferVmx.cpp
index fc1e7da..a5ca079 100644
--- a/src/VBox/Devices/USB/VUSBSnifferVmx.cpp
+++ b/src/VBox/Devices/USB/VUSBSnifferVmx.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBUrb.cpp b/src/VBox/Devices/USB/VUSBUrb.cpp
index cae32c5..164ba8c 100644
--- a/src/VBox/Devices/USB/VUSBUrb.cpp
+++ b/src/VBox/Devices/USB/VUSBUrb.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBUrbPool.cpp b/src/VBox/Devices/USB/VUSBUrbPool.cpp
index 93a557a..67fa33c 100644
--- a/src/VBox/Devices/USB/VUSBUrbPool.cpp
+++ b/src/VBox/Devices/USB/VUSBUrbPool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/VUSBUrbTrace.cpp b/src/VBox/Devices/USB/VUSBUrbTrace.cpp
index 68dfe3a..33faa2a 100644
--- a/src/VBox/Devices/USB/VUSBUrbTrace.cpp
+++ b/src/VBox/Devices/USB/VUSBUrbTrace.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp b/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
index c59e9b2..c41fc6e 100644
--- a/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
+++ b/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp b/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp
index 729adc7..1323076 100644
--- a/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp
+++ b/src/VBox/Devices/USB/freebsd/USBProxyDevice-freebsd.cpp
@@ -6,7 +6,7 @@
 /*
  * Includes contributions from Hans Petter Selasky
  *
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp b/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp
index 1f5a2f0..73cba98 100644
--- a/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp
+++ b/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp b/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp
index afc58e6..517482d 100644
--- a/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp
+++ b/src/VBox/Devices/USB/os2/USBProxyDevice-os2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp b/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp
index abbf473..6e8a6ef 100644
--- a/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp
+++ b/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/testcase/tstOhciRegisterAccess.cpp b/src/VBox/Devices/USB/testcase/tstOhciRegisterAccess.cpp
index 0be3a09..a288363 100644
--- a/src/VBox/Devices/USB/testcase/tstOhciRegisterAccess.cpp
+++ b/src/VBox/Devices/USB/testcase/tstOhciRegisterAccess.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/testcase/tstPalmOne.c b/src/VBox/Devices/USB/testcase/tstPalmOne.c
index 3a40bb2..177a932 100644
--- a/src/VBox/Devices/USB/testcase/tstPalmOne.c
+++ b/src/VBox/Devices/USB/testcase/tstPalmOne.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/testcase/tstTrekStorGo.c b/src/VBox/Devices/USB/testcase/tstTrekStorGo.c
index db28bf9..fbcd448 100644
--- a/src/VBox/Devices/USB/testcase/tstTrekStorGo.c
+++ b/src/VBox/Devices/USB/testcase/tstTrekStorGo.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp b/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp
index 7450935..f414351 100644
--- a/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp
+++ b/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp b/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp
index 62e23a1..c4f35d1 100644
--- a/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp
+++ b/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp b/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp
index c4ea895..b1355a1 100644
--- a/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp
+++ b/src/VBox/Devices/USB/win/USBProxyDevice-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VMMDev/VMMDev.cpp b/src/VBox/Devices/VMMDev/VMMDev.cpp
index b197eb1..bcc2aec 100644
--- a/src/VBox/Devices/VMMDev/VMMDev.cpp
+++ b/src/VBox/Devices/VMMDev/VMMDev.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp b/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp
index 535bc9d..38fa415 100644
--- a/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp
+++ b/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VMMDev/VMMDevHGCM.h b/src/VBox/Devices/VMMDev/VMMDevHGCM.h
index 53d5975..91d0f1a 100644
--- a/src/VBox/Devices/VMMDev/VMMDevHGCM.h
+++ b/src/VBox/Devices/VMMDev/VMMDevHGCM.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VMMDev/VMMDevState.h b/src/VBox/Devices/VMMDev/VMMDevState.h
index e3bcd1a..07b39e2 100644
--- a/src/VBox/Devices/VMMDev/VMMDevState.h
+++ b/src/VBox/Devices/VMMDev/VMMDevState.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VMMDev/VMMDevTesting.cpp b/src/VBox/Devices/VMMDev/VMMDevTesting.cpp
index ee9403b..fcb361b 100644
--- a/src/VBox/Devices/VMMDev/VMMDevTesting.cpp
+++ b/src/VBox/Devices/VMMDev/VMMDevTesting.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VMMDev/VMMDevTesting.h b/src/VBox/Devices/VMMDev/VMMDevTesting.h
index 53de523..2114827 100644
--- a/src/VBox/Devices/VMMDev/VMMDevTesting.h
+++ b/src/VBox/Devices/VMMDev/VMMDevTesting.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VirtIO/Virtio.cpp b/src/VBox/Devices/VirtIO/Virtio.cpp
index 5b8d862..9bf09bc 100644
--- a/src/VBox/Devices/VirtIO/Virtio.cpp
+++ b/src/VBox/Devices/VirtIO/Virtio.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/VirtIO/Virtio.h b/src/VBox/Devices/VirtIO/Virtio.h
index 589531c..f643678 100644
--- a/src/VBox/Devices/VirtIO/Virtio.h
+++ b/src/VBox/Devices/VirtIO/Virtio.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/build/VBoxDD.d b/src/VBox/Devices/build/VBoxDD.d
index a2ac277..1102f80 100644
--- a/src/VBox/Devices/build/VBoxDD.d
+++ b/src/VBox/Devices/build/VBoxDD.d
@@ -32,4 +32,3 @@ provider vboxdd
 #pragma D attributes Evolving/Evolving/Common provider vboxdd name
 #pragma D attributes Evolving/Evolving/Common provider vboxdd args
 
-
diff --git a/src/VBox/Devices/testcase/tstDevice.cpp b/src/VBox/Devices/testcase/tstDevice.cpp
new file mode 100644
index 0000000..cd4b1d0
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDevice.cpp
@@ -0,0 +1,918 @@
+/* $Id: tstDevice.cpp $ */
+/** @file
+ * tstDevice - Test framework for PDM devices/drivers
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEFAULT /** @todo */
+#include <VBox/types.h>
+#include <VBox/sup.h>
+#include <VBox/version.h>
+#include <iprt/assert.h>
+#include <iprt/ctype.h>
+#include <iprt/getopt.h>
+#include <iprt/initterm.h>
+#include <iprt/ldr.h>
+#include <iprt/log.h>
+#include <iprt/list.h>
+#include <iprt/mem.h>
+#include <iprt/once.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+#include <iprt/stream.h>
+#include <iprt/trace.h>
+
+#include "tstDeviceInternal.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+
+
+/**
+ * Testcase plugin descriptor.
+ */
+typedef struct TSTDEVPLUGIN
+{
+    /** Node for the plugin list. */
+    RTLISTNODE                      NdPlugins;
+    /** Copy of the filename. */
+    char                            *pszFilename;
+    /** Loader handle. */
+    RTLDRMOD                        hMod;
+    /** Number of references to this plugin. */
+    volatile uint32_t               cRefs;
+} TSTDEVPLUGIN;
+/** Pointer to a device plugin descriptor. */
+typedef TSTDEVPLUGIN *PTSTDEVPLUGIN;
+/** Pointer to a const plugin descriptor. */
+typedef const TSTDEVPLUGIN *PCTSTDEVPLUGIN;
+
+
+/**
+ * Testcase descriptor.
+ */
+typedef struct TSTDEVTESTCASE
+{
+    /** Node for the list of registered testcases. */
+    RTLISTNODE                      NdTestcases;
+    /** Pointer to the plugin the testcase belongs to. */
+    PCTSTDEVPLUGIN                  pPlugin;
+    /** Pointer to the testcase descriptor. */
+    PCTSTDEVTESTCASEREG             pTestcaseReg;
+} TSTDEVTESTCASE;
+/** Pointer to a testcase descriptor. */
+typedef TSTDEVTESTCASE *PTSTDEVTESTCASE;
+/** Pointer to a constant testcase descriptor. */
+typedef const TSTDEVTESTCASE *PCTSTDEVTESTCASE;
+
+
+/**
+ * PDM R0/RC module trampoline descriptor.
+ */
+#pragma pack(1)
+typedef struct TSTDEVPDMMODTRAMPOLINE
+{
+    /** Jump instruction. */
+    uint8_t                         abJmp[6];
+    /** Address to jump to. */
+    uintptr_t                       AddrTarget;
+    /** Padding to get a 16byte aligned structure. */
+    uint8_t                         abPadding[HC_ARCH_BITS == 64 ? 2 : 5];
+} TSTDEVPDMMODTRAMPOLINE;
+#pragma pack()
+AssertCompileSize(TSTDEVPDMMODTRAMPOLINE, 16);
+/** Pointer to a trampoline descriptor. */
+typedef TSTDEVPDMMODTRAMPOLINE *PTSTDEVPDMMODTRAMPOLINE;
+
+/**
+ * PDM module descriptor.
+ */
+typedef struct TSTDEVPDMMOD
+{
+    /** Node for the module list. */
+    RTLISTNODE                      NdPdmMods;
+    /** Type of module (R3/R0/RC). */
+    TSTDEVPDMMODTYPE                enmType;
+    /** Copy of the filename. */
+    char                            *pszFilename;
+    /** Loader handle. */
+    RTLDRMOD                        hLdrMod;
+    /** Number of references to this plugin. */
+    volatile uint32_t               cRefs;
+    /** R0/RC Module type dependent data. */
+    struct
+    {
+        /** The exectuable image bits. */
+        void                        *pvBits;
+        /** Size of the memory buffer. */
+        size_t                      cbBits;
+        /** Pointer to the executable memory containing the trampoline code. */
+        uint8_t                     *pbTrampoline;
+        /** Number of trampoline entries supported. */
+        uint32_t                    cTrampolinesMax;
+        /** Number of trampoline entries used. */
+        uint32_t                    cTrampolines;
+        /** Pointer to the next unused trampoline entry. */
+        PTSTDEVPDMMODTRAMPOLINE     pTrampolineNext;
+    } R0Rc;
+} TSTDEVPDMMOD;
+/** Pointer to a PDM module descriptor. */
+typedef TSTDEVPDMMOD *PTSTDEVPDMMOD;
+/** Pointer to a const PDM module descriptor. */
+typedef const TSTDEVPDMMOD *PCTSTDEVPDMMOD;
+
+/**
+ * PDM device descriptor.
+ */
+typedef struct TSTDEVPDMDEV
+{
+    /** Node for the known device list. */
+    RTLISTNODE                      NdPdmDevs;
+    /** Pointer to the PDM module containing the device. */
+    PCTSTDEVPDMMOD                  pPdmMod;
+    /** Device registration structure. */
+    const struct PDMDEVREG          *pReg;
+} TSTDEVPDMDEV;
+/** Pointer to a PDM device descriptor .*/
+typedef TSTDEVPDMDEV *PTSTDEVPDMDEV;
+/** Pointer to a constant PDM device descriptor .*/
+typedef const TSTDEVPDMDEV *PCTSTDEVPDMDEV;
+
+
+/**
+ * Internal callback structure pointer.
+ * The main purpose is to define the extra data we associate
+ * with PDMDEVREGCB so we can find the plugin the device is associated with etc.
+ */
+typedef struct TSTDEVPDMDEVREGCBINT
+{
+    /** The callback structure. */
+    PDMDEVREGCB       Core;
+    /** A bit of padding. */
+    uint32_t          u32[4];
+    /** Pointer to plugin. */
+    PTSTDEVPDMMOD     pMod;
+} TSTDEVPDMDEVREGCBINT;
+/** Pointer to a PDMDEVREGCBINT structure. */
+typedef TSTDEVPDMDEVREGCBINT *PTSTDEVPDMDEVREGCBINT;
+/** Pointer to a const PDMDEVREGCBINT structure. */
+typedef const TSTDEVPDMDEVREGCBINT *PCTSTDEVPDMDEVREGCBINT;
+
+
+typedef struct TSTDEVPDMR0IMPORTS
+{
+    /** The symbol name. */
+    const char                      *pszSymbol;
+    /** The pointer. */
+    PFNRT                           pfn;
+} TSTDEVPDMR0IMPORTS;
+typedef const TSTDEVPDMR0IMPORTS *PCTSTDEVPDMR0IMPORTS;
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+/** List of registered testcase plugins. */
+RTLISTANCHOR g_LstPlugins;
+/** List of registered testcases. */
+RTLISTANCHOR g_LstTestcases;
+/** List of registered PDM modules. */
+RTLISTANCHOR g_LstPdmMods;
+/** List of registered PDM devices. */
+RTLISTANCHOR g_LstPdmDevs;
+
+extern const TSTDEVVMMCALLBACKS g_tstDevVmmCallbacks;
+
+/**
+ * PDM R0 imports we implement.
+ */
+static const TSTDEVPDMR0IMPORTS g_aPdmR0Imports[] =
+{
+    {"IOMMMIOMapMMIO2Page",            (PFNRT)IOMMMIOMapMMIO2Page},
+    {"IOMMMIOResetRegion",             (PFNRT)IOMMMIOResetRegion},
+    {"IntNetR0IfSend",                 (PFNRT)/*IntNetR0IfSend*/NULL},
+    {"IntNetR0IfSetPromiscuousMode",   (PFNRT)/*IntNetR0IfSetPromiscuousMode*/NULL},
+    {"PDMCritSectEnterDebug",          (PFNRT)PDMCritSectEnterDebug},
+    {"PDMCritSectIsOwner",             (PFNRT)PDMCritSectIsOwner},
+    {"PDMCritSectLeave",               (PFNRT)PDMCritSectLeave},
+    {"PDMCritSectTryEnterDebug",       (PFNRT)PDMCritSectTryEnterDebug},
+    {"PDMHCCritSectScheduleExitEvent", (PFNRT)PDMHCCritSectScheduleExitEvent},
+    {"PDMNsAllocateBandwidth",         (PFNRT)PDMNsAllocateBandwidth},
+    {"PDMQueueAlloc",                  (PFNRT)PDMQueueAlloc},
+    {"PDMQueueInsert",                 (PFNRT)PDMQueueInsert},
+    {"PGMHandlerPhysicalPageTempOff",  (PFNRT)PGMHandlerPhysicalPageTempOff},
+    {"PGMShwMakePageWritable",         (PFNRT)PGMShwMakePageWritable},
+    {"RTAssertMsg1Weak",               (PFNRT)RTAssertMsg1Weak},
+    {"RTAssertMsg2Weak",               (PFNRT)RTAssertMsg2Weak},
+    {"RTAssertShouldPanic",            (PFNRT)RTAssertShouldPanic},
+    {"RTLogDefaultInstanceEx",         (PFNRT)RTLogDefaultInstanceEx},
+    {"RTLogLoggerEx",                  (PFNRT)RTLogLoggerEx},
+    {"RTLogRelGetDefaultInstanceEx",   (PFNRT)RTLogRelGetDefaultInstanceEx},
+    {"RTOnceSlow",                     (PFNRT)RTOnceSlow},
+    {"RTR0AssertPanicSystem",          (PFNRT)0x10101010},
+    {"RTThreadSleep",                  (PFNRT)RTThreadSleep},
+    {"RTTimeMilliTS",                  (PFNRT)RTTimeMilliTS},
+    {"RTTimeNanoTS",                   (PFNRT)RTTimeNanoTS},
+    {"RTTraceBufAddMsgF",              (PFNRT)RTTraceBufAddMsgF},
+    {"SUPSemEventSignal",              (PFNRT)SUPSemEventSignal},
+    {"TMTimerGet",                     (PFNRT)TMTimerGet},
+    {"TMTimerGetFreq",                 (PFNRT)TMTimerGetFreq},
+    {"TMTimerIsActive",                (PFNRT)TMTimerIsActive},
+    {"TMTimerIsLockOwner",             (PFNRT)TMTimerIsLockOwner},
+    {"TMTimerLock",                    (PFNRT)TMTimerLock},
+    {"TMTimerSet",                     (PFNRT)TMTimerSet},
+    {"TMTimerSetFrequencyHint",        (PFNRT)TMTimerSetFrequencyHint},
+    {"TMTimerSetMicro",                (PFNRT)TMTimerSetMicro},
+    {"TMTimerSetMillies",              (PFNRT)TMTimerSetMillies},
+    {"TMTimerSetNano",                 (PFNRT)TMTimerSetNano},
+    {"TMTimerStop",                    (PFNRT)TMTimerStop},
+    {"TMTimerUnlock",                  (PFNRT)TMTimerUnlock},
+    {"nocrt_memcmp",                   (PFNRT)memcmp},
+    {"nocrt_memcpy",                   (PFNRT)memcpy},
+    {"nocrt_memmove",                  (PFNRT)memmove},
+    {"nocrt_memset",                   (PFNRT)memset},
+    {"nocrt_strlen",                   (PFNRT)strlen},
+};
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+
+#if 0
+/**
+ * Parses the options given to the testcase.
+ *
+ * @returns Process status code.
+ * @param   cArgs       Number of arguments given.
+ * @param   paszArgs    Pointer to the argument vector.
+ */
+static RTEXITCODE tstDevParseOptions(int cArgs, char *paszArgs[])
+{
+    static RTGETOPTDEF const s_aOptions[] =
+    {
+    };
+
+
+    int ch;
+    RTGETOPTUNION Value;
+    RTGETOPTSTATE GetState;
+    RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0 /* fFlags */);
+    while ((ch = RTGetOpt(&GetState, &Value)))
+    {
+        switch (ch)
+        {
+            default:
+                return RTGetOptPrintError(ch, &Value);
+        }
+    }
+}
+#endif
+
+
+/**
+ * Checks whether the given testcase name is already existing.
+ *
+ * @returns Pointer to existing testcase, NULL if not found.
+ * @param   pszFilename    The filename to check.
+ */
+static PCTSTDEVTESTCASE tstDevTestcaseFind(const char *pszName)
+{
+    PCTSTDEVTESTCASE pIt;
+    RTListForEach(&g_LstTestcases, pIt, TSTDEVTESTCASE, NdTestcases)
+    {
+        if (!RTStrCmp(pIt->pTestcaseReg->szName, pszName))
+            return pIt;
+    }
+
+    return NULL;
+}
+
+
+/**
+ * @interface_method_impl{TSTDEVPLUGINREGISTER,pfnRegisterTestcase}
+ */
+static DECLCALLBACK(int) tstDevRegisterTestcase(void *pvUser, PCTSTDEVTESTCASEREG pTestcaseReg)
+{
+    int rc = VINF_SUCCESS;
+    PTSTDEVPLUGIN pPlugin = (PTSTDEVPLUGIN)pvUser;
+
+    /* Try to find a testcase with the name first. */
+    if (!tstDevTestcaseFind(pTestcaseReg->szName))
+    {
+        PTSTDEVTESTCASE pTestcase = (PTSTDEVTESTCASE)RTMemAllocZ(sizeof(TSTDEVPLUGIN));
+        if (RT_LIKELY(pTestcase))
+        {
+            pTestcase->pPlugin = pPlugin;
+            pPlugin->cRefs++;
+            pTestcase->pTestcaseReg = pTestcaseReg;
+            RTListAppend(&g_LstTestcases, &pTestcase->NdTestcases);
+            return VINF_SUCCESS;
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+    else
+        rc = VERR_ALREADY_EXISTS;
+
+    return rc;
+}
+
+
+/**
+ * Checks whether the given plugin filename was already loaded.
+ *
+ * @returns Pointer to already loaded plugin, NULL if not found.
+ * @param   pszFilename    The filename to check.
+ */
+static PCTSTDEVPLUGIN tstDevPluginFind(const char *pszFilename)
+{
+    PCTSTDEVPLUGIN pIt;
+    RTListForEach(&g_LstPlugins, pIt, TSTDEVPLUGIN, NdPlugins)
+    {
+        if (!RTStrCmp(pIt->pszFilename, pszFilename))
+            return pIt;
+    }
+
+    return NULL;
+}
+
+
+/**
+ * Tries to loads the given plugin.
+ *
+ * @returns VBox status code.
+ * @param   pszFilename    The filename to load.
+ */
+static int tstDevLoadPlugin(const char *pszFilename)
+{
+    int rc = VINF_SUCCESS;
+
+    /* Check whether the plugin is loaded first. */
+    if (!tstDevPluginFind(pszFilename))
+    {
+        PTSTDEVPLUGIN pPlugin = (PTSTDEVPLUGIN)RTMemAllocZ(sizeof(TSTDEVPLUGIN));
+        if (RT_LIKELY(pPlugin))
+        {
+            pPlugin->pszFilename = RTStrDup(pszFilename);
+            pPlugin->cRefs       = 1;
+            rc = RTLdrLoad(pszFilename, &pPlugin->hMod);
+            if (RT_SUCCESS(rc))
+            {
+                TSTDEVPLUGINREGISTER TestcaseRegister;
+                PFNTSTDEVPLUGINLOAD pfnPluginLoad = NULL;
+
+                TestcaseRegister.pfnRegisterTestcase = tstDevRegisterTestcase;
+
+                rc = RTLdrGetSymbol(pPlugin->hMod, TSTDEV_PLUGIN_LOAD_NAME, (void**)&pfnPluginLoad);
+                if (RT_FAILURE(rc) || !pfnPluginLoad)
+                {
+                    LogFunc(("error resolving the entry point %s in plugin %s, rc=%Rrc, pfnPluginLoad=%#p\n",
+                             TSTDEV_PLUGIN_LOAD_NAME, pszFilename, rc, pfnPluginLoad));
+                    if (RT_SUCCESS(rc))
+                        rc = VERR_SYMBOL_NOT_FOUND;
+                }
+
+                if (RT_SUCCESS(rc))
+                {
+                    /* Get the function table. */
+                    rc = pfnPluginLoad(pPlugin, &TestcaseRegister);
+                }
+                else
+                    LogFunc(("ignored plugin '%s': rc=%Rrc\n", pszFilename, rc));
+
+                /* Create a plugin entry on success. */
+                if (RT_SUCCESS(rc))
+                {
+                    RTListAppend(&g_LstPlugins, &pPlugin->NdPlugins);
+                    return VINF_SUCCESS;
+                }
+                else
+                    RTLdrClose(pPlugin->hMod);
+            }
+
+            RTMemFree(pPlugin);
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+
+    return rc;
+}
+
+
+/**
+ * Checks whether the given testcase name is already existing.
+ *
+ * @returns Pointer to already loaded plugin, NULL if not found.
+ * @param   pszFilename    The filename to check.
+ */
+static PCTSTDEVPDMDEV tstDevPdmDeviceFind(const char *pszName)
+{
+    PCTSTDEVPDMDEV pIt;
+    RTListForEach(&g_LstPdmDevs, pIt, TSTDEVPDMDEV, NdPdmDevs)
+    {
+        if (!RTStrCmp(pIt->pReg->szName, pszName))
+            return pIt;
+    }
+
+    return NULL;
+}
+
+
+/**
+ * Checks that a PDMDRVREG::szName, PDMDEVREG::szName or PDMUSBREG::szName
+ * field contains only a limited set of ASCII characters.
+ *
+ * @returns true / false.
+ * @param   pszName             The name to validate.
+ */
+bool tstDevPdmR3IsValidName(const char *pszName)
+{
+    char ch;
+    while (   (ch = *pszName) != '\0'
+           && (   RT_C_IS_ALNUM(ch)
+               || ch == '-'
+               || ch == ' ' /** @todo disallow this! */
+               || ch == '_') )
+        pszName++;
+    return ch == '\0';
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREGCB,pfnRegister}
+ */
+static DECLCALLBACK(int) tstDevPdmR3DevReg_Register(PPDMDEVREGCB pCallbacks, PCPDMDEVREG pReg)
+{
+    /*
+     * Validate the registration structure (mostly copy and paste from PDMDevice.cpp).
+     */
+    Assert(pReg);
+    AssertMsgReturn(pReg->u32Version == PDM_DEVREG_VERSION,
+                    ("Unknown struct version %#x!\n", pReg->u32Version),
+                    VERR_PDM_UNKNOWN_DEVREG_VERSION);
+
+    AssertMsgReturn(    pReg->szName[0]
+                    &&  strlen(pReg->szName) < sizeof(pReg->szName)
+                    &&  tstDevPdmR3IsValidName(pReg->szName),
+                    ("Invalid name '%.*s'\n", sizeof(pReg->szName), pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn(   !(pReg->fFlags & PDM_DEVREG_FLAGS_RC)
+                    || (   pReg->szRCMod[0]
+                        && strlen(pReg->szRCMod) < sizeof(pReg->szRCMod)),
+                    ("Invalid GC module name '%s' - (Device %s)\n", pReg->szRCMod, pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn(   !(pReg->fFlags & PDM_DEVREG_FLAGS_R0)
+                    || (   pReg->szR0Mod[0]
+                        && strlen(pReg->szR0Mod) < sizeof(pReg->szR0Mod)),
+                    ("Invalid R0 module name '%s' - (Device %s)\n", pReg->szR0Mod, pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn((pReg->fFlags & PDM_DEVREG_FLAGS_HOST_BITS_MASK) == PDM_DEVREG_FLAGS_HOST_BITS_DEFAULT,
+                    ("Invalid host bits flags! fFlags=%#x (Device %s)\n", pReg->fFlags, pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_HOST_BITS);
+    AssertMsgReturn((pReg->fFlags & PDM_DEVREG_FLAGS_GUEST_BITS_MASK),
+                    ("Invalid guest bits flags! fFlags=%#x (Device %s)\n", pReg->fFlags, pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn(pReg->fClass,
+                    ("No class! (Device %s)\n", pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn(pReg->cMaxInstances > 0,
+                    ("Max instances %u! (Device %s)\n", pReg->cMaxInstances, pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn(pReg->cbInstance <= (uint32_t)(pReg->fFlags & (PDM_DEVREG_FLAGS_RC | PDM_DEVREG_FLAGS_R0)  ? 96 * _1K : _1M),
+                    ("Instance size %d bytes! (Device %s)\n", pReg->cbInstance, pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertMsgReturn(pReg->pfnConstruct,
+                    ("No constructor! (Device %s)\n", pReg->szName),
+                    VERR_PDM_INVALID_DEVICE_REGISTRATION);
+    AssertLogRelMsgReturn((pReg->fFlags & PDM_DEVREG_FLAGS_GUEST_BITS_MASK) == PDM_DEVREG_FLAGS_GUEST_BITS_DEFAULT,
+                          ("PDM: Rejected device '%s' because it didn't match the guest bits.\n", pReg->szName),
+                          VERR_PDM_INVALID_DEVICE_GUEST_BITS);
+    AssertLogRelMsg(pReg->u32VersionEnd == PDM_DEVREG_VERSION,
+                    ("u32VersionEnd=%#x, expected %#x. (szName=%s)\n",
+                     pReg->u32VersionEnd, PDM_DEVREG_VERSION, pReg->szName));
+
+    /*
+     * Check for duplicates.
+     */
+    int rc = VINF_SUCCESS;
+    PCTSTDEVPDMDEVREGCBINT pRegCB = (PCTSTDEVPDMDEVREGCBINT)pCallbacks;
+    if (!tstDevPdmDeviceFind(pReg->szName))
+    {
+        PTSTDEVPDMDEV pPdmDev = (PTSTDEVPDMDEV)RTMemAllocZ(sizeof(TSTDEVPDMDEV));
+        if (RT_LIKELY(pPdmDev))
+        {
+            pPdmDev->pPdmMod = pRegCB->pMod;
+            pRegCB->pMod->cRefs++;
+            pPdmDev->pReg = pReg;
+            RTListAppend(&g_LstPdmDevs, &pPdmDev->NdPdmDevs);
+            return VINF_SUCCESS;
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+    else
+        rc = VERR_PDM_DEVICE_NAME_CLASH;
+
+    return rc;
+}
+
+
+/**
+ * Checks whether the given PDM module filename was already loaded.
+ *
+ * @returns Pointer to already loaded plugin, NULL if not found.
+ * @param   pszFilename    The filename to check.
+ */
+static PCTSTDEVPDMMOD tstDevPdmModFind(const char *pszFilename)
+{
+    PCTSTDEVPDMMOD pIt;
+    RTListForEach(&g_LstPdmMods, pIt, TSTDEVPDMMOD, NdPdmMods)
+    {
+        if (!RTStrCmp(pIt->pszFilename, pszFilename))
+            return pIt;
+    }
+
+    return NULL;
+}
+
+
+/**
+ * Resolve an external symbol during RTLdrGetBits().
+ *
+ * @returns iprt status code.
+ * @param   hLdrMod         The loader module handle.
+ * @param   pszModule       Module name.
+ * @param   pszSymbol       Symbol name, NULL if uSymbol should be used.
+ * @param   uSymbol         Symbol ordinal, ~0 if pszSymbol should be used.
+ * @param   pValue          Where to store the symbol value (address).
+ * @param   pvUser          User argument.
+ */
+static DECLCALLBACK(int) tstDevPdmLoadR0RcModGetImport(RTLDRMOD hLdrMod, const char *pszModule, const char *pszSymbol,
+                                                       unsigned uSymbol, RTUINTPTR *pValue, void *pvUser)
+{
+    RT_NOREF(hLdrMod, uSymbol, pszModule);
+    PTSTDEVPDMMOD pMod = (PTSTDEVPDMMOD)pvUser;
+
+    /* Resolve the import. */
+    PCTSTDEVPDMR0IMPORTS pImpDesc = NULL;
+    bool fFound = false;
+    for (uint32_t i = 0; i < RT_ELEMENTS(g_aPdmR0Imports); i++)
+    {
+        pImpDesc = &g_aPdmR0Imports[i];
+        if (!strcmp(pszSymbol, pImpDesc->pszSymbol))
+        {
+            fFound = true;
+            break;
+        }
+    }
+
+    int rc = VERR_SYMBOL_NOT_FOUND;
+    if (fFound)
+    {
+        /* Check whether the symbol has a trampoline already. */
+        PTSTDEVPDMMODTRAMPOLINE pTrampoline = (PTSTDEVPDMMODTRAMPOLINE)pMod->R0Rc.pbTrampoline;
+        for (uint32_t i = 0; i < pMod->R0Rc.cTrampolines; i++)
+        {
+            if (pTrampoline->AddrTarget == (uintptr_t)pImpDesc->pfn)
+                break;
+            pTrampoline++;
+        }
+
+        /* Create new trampoline if not found. */
+        if (pTrampoline->AddrTarget != (uintptr_t)pImpDesc->pfn)
+        {
+            if (pMod->R0Rc.cTrampolines < pMod->R0Rc.cTrampolinesMax)
+            {
+                pTrampoline = pMod->R0Rc.pTrampolineNext;
+                pMod->R0Rc.pTrampolineNext++;
+                pMod->R0Rc.cTrampolines++;
+                pTrampoline->abJmp[0]   = 0xff; /* jmp */
+                pTrampoline->abJmp[1]   = 0x25; /* rip */
+                pTrampoline->abJmp[2]   = 0x00; /* offset */
+                pTrampoline->abJmp[3]   = 0x00;
+                pTrampoline->abJmp[4]   = 0x00;
+                pTrampoline->abJmp[5]   = 0x00;
+                pTrampoline->AddrTarget = (uintptr_t)pImpDesc->pfn;
+                rc = VINF_SUCCESS;
+            }
+            else
+            {
+                rc = VERR_SYMBOL_NOT_FOUND;
+                AssertFailed();
+            }
+        }
+        else
+            rc = VINF_SUCCESS;
+
+        if (RT_SUCCESS(rc))
+            *pValue = (RTUINTPTR)pTrampoline;
+    }
+    else
+        AssertFailed();
+
+    return rc;
+}
+
+
+/**
+ * Loads a new R0 modules given by the filename.
+ *
+ * @returns VBox status code.
+ * @param   pMod                    Pointer to module structure.
+ */
+static int tstDevPdmLoadR0RcMod(PTSTDEVPDMMOD pMod)
+{
+    int rc = VINF_SUCCESS;
+    const char *pszFile = RTPathFilename(pMod->pszFilename);
+
+    /* Check whether the plugin is loaded first. */
+    if (!tstDevPdmModFind(pszFile))
+    {
+        /*
+         * R0 modules need special treatment as these are relocatable images
+         * which are supposed to run in ring 0.
+         */
+        rc = RTLdrOpen(pMod->pszFilename, 0, RTLDRARCH_HOST, &pMod->hLdrMod);
+        if (RT_SUCCESS(rc))
+        {
+            size_t cb = RTLdrSize(pMod->hLdrMod) + 1024 * sizeof(TSTDEVPDMMODTRAMPOLINE);
+
+            /* Allocate bits. */
+            uint32_t fFlags = RTMEMALLOCEX_FLAGS_EXEC;
+#ifdef RT_OS_LINUX
+            /*
+             * amd64 ELF binaries support only a 2GB code segment everything must be in
+             * (X86_64_PC32 relocation) so we have to use a trampoline to the final destination
+             * which is kept close to the imported module.
+             */
+            fFlags |= RTMEMALLOCEX_FLAGS_32BIT_REACH;
+#endif
+            rc = RTMemAllocEx(cb, 0, fFlags, (void **)&pMod->R0Rc.pbTrampoline);
+            pMod->R0Rc.cbBits = cb;
+            if (RT_SUCCESS(rc))
+            {
+                pMod->R0Rc.pvBits          = pMod->R0Rc.pbTrampoline + 1024 * sizeof(TSTDEVPDMMODTRAMPOLINE);
+                pMod->R0Rc.cTrampolinesMax = 1024;
+                pMod->R0Rc.cTrampolines    = 0;
+                pMod->R0Rc.pTrampolineNext = (PTSTDEVPDMMODTRAMPOLINE)pMod->R0Rc.pbTrampoline;
+                /* Get the bits. */
+                rc = RTLdrGetBits(pMod->hLdrMod, pMod->R0Rc.pvBits, (uintptr_t)pMod->R0Rc.pvBits,
+                                  tstDevPdmLoadR0RcModGetImport, pMod);
+                if (RT_FAILURE(rc))
+                    RTMemFreeEx(pMod->R0Rc.pbTrampoline, pMod->R0Rc.cbBits);
+            }
+
+            if (RT_FAILURE(rc))
+                RTLdrClose(pMod->hLdrMod);
+        }
+    }
+
+    return rc;
+}
+
+
+/**
+ * Loads the given
+ */
+static int tstDevPdmLoadR3Mod(PTSTDEVPDMMOD pMod)
+{
+    int rc = RTLdrLoad(pMod->pszFilename, &pMod->hLdrMod);
+    if (RT_SUCCESS(rc))
+    {
+        FNPDMVBOXDEVICESREGISTER *pfnVBoxDevicesRegister;
+        rc = RTLdrGetSymbol(pMod->hLdrMod, "VBoxDevicesRegister", (void**)&pfnVBoxDevicesRegister);
+        if (RT_FAILURE(rc) || !pfnVBoxDevicesRegister)
+        {
+            LogFunc(("error resolving the entry point %s in plugin %s, rc=%Rrc, pfnPluginLoad=%#p\n",
+                     "VBoxDevicesRegister", pMod->pszFilename, rc, pfnVBoxDevicesRegister));
+            if (RT_SUCCESS(rc))
+                rc = VERR_SYMBOL_NOT_FOUND;
+        }
+
+        if (RT_SUCCESS(rc))
+        {
+            TSTDEVPDMDEVREGCBINT RegCB;
+            RegCB.Core.u32Version  = PDM_DEVREG_CB_VERSION;
+            RegCB.Core.pfnRegister = tstDevPdmR3DevReg_Register;
+            RegCB.pMod             = pMod;
+            rc = pfnVBoxDevicesRegister(&RegCB.Core, VBOX_VERSION);
+        }
+        else
+            LogFunc(("ignored plugin '%s': rc=%Rrc\n", pMod->pszFilename, rc));
+
+        if (RT_FAILURE(rc))
+            RTLdrClose(pMod->hLdrMod);
+    }
+
+    return rc;
+}
+
+
+/**
+ * Tries to loads the given PDM module.
+ *
+ * @returns VBox status code.
+ * @param   pszFilename    The filename to load.
+ * @param   enmModType     The module type.
+ */
+static int tstDevPdmLoadMod(const char *pszFilename, TSTDEVPDMMODTYPE enmModType)
+{
+    int rc = VINF_SUCCESS;
+
+    /* Check whether the plugin is loaded first. */
+    if (!tstDevPdmModFind(pszFilename))
+    {
+        PTSTDEVPDMMOD pMod = (PTSTDEVPDMMOD)RTMemAllocZ(sizeof(TSTDEVPDMMOD));
+        if (RT_LIKELY(pMod))
+        {
+            pMod->pszFilename = RTStrDup(pszFilename);
+            pMod->cRefs       = 1;
+            pMod->enmType     = enmModType;
+
+            if (enmModType == TSTDEVPDMMODTYPE_R3)
+                rc = tstDevPdmLoadR3Mod(pMod);
+            else if (enmModType == TSTDEVPDMMODTYPE_RC || enmModType == TSTDEVPDMMODTYPE_R0)
+                rc = tstDevPdmLoadR0RcMod(pMod);
+
+            if (RT_SUCCESS(rc))
+                RTListAppend(&g_LstPdmMods, &pMod->NdPdmMods);
+            else
+                RTMemFree(pMod);
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+
+    return rc;
+}
+
+
+/**
+ * Tries to resolve the given symbol from the module given.
+ *
+ * @returns VBox status code.
+ * @param   pThis                   The device under test instance.
+ * @param   pszMod                  The module name.
+ * @param   enmModType              The module type if the module needs to be loaded.
+ * @param   pszSymbol               The symbol to resolve.
+ * @param   ppfn                    Where to store the value on success.
+ */
+DECLHIDDEN(int) tstDevPdmLdrGetSymbol(PTSTDEVDUTINT pThis, const char *pszMod, TSTDEVPDMMODTYPE enmModType,
+                                      const char *pszSymbol, PFNRT *ppfn)
+{
+    RT_NOREF(pThis);
+
+    int rc = VINF_SUCCESS;
+    PCTSTDEVPDMMOD pMod = tstDevPdmModFind(pszMod);
+    if (!pMod)
+    {
+        /* Try to load the module. */
+        rc = tstDevPdmLoadMod(pszMod, enmModType);
+        if (RT_SUCCESS(rc))
+        {
+            pMod = tstDevPdmModFind(pszMod);
+            AssertPtr(pMod);
+        }
+    }
+
+    if (RT_SUCCESS(rc))
+    {
+        if (pMod->enmType == TSTDEVPDMMODTYPE_R0 || pMod->enmType == TSTDEVPDMMODTYPE_RC)
+            rc = RTLdrGetSymbolEx(pMod->hLdrMod, pMod->R0Rc.pvBits, (uintptr_t)pMod->R0Rc.pvBits,
+                                  UINT32_MAX, pszSymbol, (PRTLDRADDR)ppfn);
+        else
+            rc = RTLdrGetSymbol(pMod->hLdrMod, pszSymbol, (void **)ppfn);
+    }
+
+    return rc;
+}
+
+
+static TSTDEVCFGITEM s_aTestcaseCfg[] =
+{
+    {"CtrlMemBufSize", TSTDEVCFGITEMTYPE_INTEGER, "0"  },
+    {NULL,             TSTDEVCFGITEMTYPE_INVALID, NULL }
+};
+
+static TSTDEVTESTCASEREG s_TestcaseDef =
+{
+    "test",
+    "Testcase during implementation",
+    "nvme",
+    0,
+    &s_aTestcaseCfg[0],
+    NULL,
+};
+
+/**
+ * Create a new PDM device with default config.
+ *
+ * @returns VBox status code.
+ * @param   pszName                 Name of the device to create.
+ */
+static int tstDevPdmDevCreate(const char *pszName)
+{
+    int rc = VINF_SUCCESS;
+    PCTSTDEVPDMDEV pPdmDev = tstDevPdmDeviceFind(pszName);
+    if (RT_LIKELY(pPdmDev))
+    {
+        TSTDEVDUTINT Dut;
+        Dut.pTestcaseReg    = &s_TestcaseDef;
+        Dut.enmCtx          = TSTDEVDUTCTX_R3;
+        Dut.pVm             = NULL;
+        Dut.SupSession.pDut = &Dut;
+        RTListInit(&Dut.LstIoPorts);
+        RTListInit(&Dut.LstTimers);
+        RTListInit(&Dut.LstMmHeap);
+        RTListInit(&Dut.LstPdmThreads);
+        RTListInit(&Dut.SupSession.LstSupSem);
+        CFGMNODE Cfg;
+        Cfg.pVmmCallbacks = &g_tstDevVmmCallbacks;
+        Cfg.pDut = &Dut;
+
+        rc = RTCritSectRwInit(&Dut.CritSectLists);
+        AssertRC(rc);
+
+        PPDMDEVINS pDevIns = (PPDMDEVINS)RTMemAllocZ(RT_OFFSETOF(PDMDEVINS, achInstanceData[pPdmDev->pReg->cbInstance]));
+        pDevIns->u32Version               = PDM_DEVINS_VERSION;
+        pDevIns->iInstance                = 0;
+        pDevIns->pReg                     = pPdmDev->pReg;
+        pDevIns->pvInstanceDataR3         = &pDevIns->achInstanceData[0];
+        pDevIns->pHlpR3                   = &g_tstDevPdmDevHlpR3;
+        pDevIns->pCfg                     = &Cfg;
+        pDevIns->Internal.s.pVmmCallbacks = &g_tstDevVmmCallbacks;
+        pDevIns->Internal.s.pDut          = &Dut;
+        rc = pPdmDev->pReg->pfnConstruct(pDevIns, 0, &Cfg);
+        if (RT_SUCCESS(rc))
+        {
+            PRTDEVDUTIOPORT pIoPort = RTListGetFirst(&Dut.LstIoPorts, RTDEVDUTIOPORT, NdIoPorts);
+            uint32_t uVal = 0;
+            PDMCritSectEnter(pDevIns->pCritSectRoR3, VERR_IGNORED);
+            pIoPort->pfnInR0(pDevIns, pIoPort->pvUserR0, pIoPort->PortStart, &uVal, sizeof(uint8_t));
+            PDMCritSectLeave(pDevIns->pCritSectRoR3);
+        }
+    }
+    else
+        rc = VERR_NOT_FOUND;
+
+    return rc;
+}
+
+int main(int argc, char *argv[])
+{
+    /*
+     * Init the runtime and parse the arguments.
+     */
+    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
+    int rc = RTR3InitExe(argc, &argv, 0);
+    if (RT_SUCCESS(rc))
+    {
+        RTListInit(&g_LstPlugins);
+        RTListInit(&g_LstTestcases);
+        RTListInit(&g_LstPdmMods);
+        RTListInit(&g_LstPdmDevs);
+
+        rc = tstDevLoadPlugin("TSTDevTestcases");
+        if (RT_SUCCESS(rc) || true)
+        {
+            rc = tstDevPdmLoadMod(argv[1], TSTDEVPDMMODTYPE_R3);
+            if (RT_SUCCESS(rc))
+                rc = tstDevPdmDevCreate("nvme");
+            else
+                rcExit = RTEXITCODE_FAILURE;
+        }
+        else
+            rcExit = RTEXITCODE_FAILURE;
+
+        //rcExit = tstDevParseOptions(argc, argv);
+    }
+    else
+        rcExit = RTEXITCODE_FAILURE;
+
+    return rcExit;
+}
+
diff --git a/src/VBox/Devices/testcase/tstDeviceInternal.h b/src/VBox/Devices/testcase/tstDeviceInternal.h
new file mode 100644
index 0000000..bd9bcad
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDeviceInternal.h
@@ -0,0 +1,238 @@
+/** @file
+ * tstDevice: Shared definitions between the framework and the shim library.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___tstDeviceInternal_h
+#define ___tstDeviceInternal_h
+
+#include <VBox/types.h>
+#include <iprt/assert.h>
+#include <iprt/list.h>
+#include <iprt/semaphore.h>
+
+#include "tstDevicePlugin.h"
+#include "tstDeviceVMMInternal.h"
+
+RT_C_DECLS_BEGIN
+
+
+/** Converts PDM device instance to the device under test structure. */
+#define TSTDEV_PDMDEVINS_2_DUT(a_pDevIns) ((a_pDevIns)->Internal.s.pDut)
+
+/**
+ * PDM module descriptor type.
+ */
+typedef enum TSTDEVPDMMODTYPE
+{
+    /** Invalid module type. */
+    TSTDEVPDMMODTYPE_INVALID = 0,
+    /** Ring 3 module. */
+    TSTDEVPDMMODTYPE_R3,
+    /** Ring 0 module. */
+    TSTDEVPDMMODTYPE_R0,
+    /** Raw context module. */
+    TSTDEVPDMMODTYPE_RC,
+    /** 32bit hack. */
+    TSTDEVPDMMODTYPE_32BIT_HACK = 0x7fffffff
+} TSTDEVPDMMODTYPE;
+
+/**
+ * Registered I/O port access handler.
+ */
+typedef struct RTDEVDUTIOPORT
+{
+    /** Node for the list of registered handlers. */
+    RTLISTNODE                      NdIoPorts;
+    /** Start I/O port the handler is for. */
+    RTIOPORT                        PortStart;
+    /** Number of ports handled. */
+    RTIOPORT                        cPorts;
+    /** Opaque user data - R3. */
+    void                            *pvUserR3;
+    /** Out handler - R3. */
+    PFNIOMIOPORTOUT                 pfnOutR3;
+    /** In handler - R3. */
+    PFNIOMIOPORTIN                  pfnInR3;
+    /** Out string handler - R3. */
+    PFNIOMIOPORTOUTSTRING           pfnOutStrR3;
+    /** In string handler - R3. */
+    PFNIOMIOPORTINSTRING            pfnInStrR3;
+
+    /** Opaque user data - R0. */
+    void                            *pvUserR0;
+    /** Out handler - R0. */
+    PFNIOMIOPORTOUT                 pfnOutR0;
+    /** In handler - R0. */
+    PFNIOMIOPORTIN                  pfnInR0;
+    /** Out string handler - R0. */
+    PFNIOMIOPORTOUTSTRING           pfnOutStrR0;
+    /** In string handler - R0. */
+    PFNIOMIOPORTINSTRING            pfnInStrR0;
+
+#ifdef TSTDEV_SUPPORTS_RC
+    /** Opaque user data - RC. */
+    void                            *pvUserRC;
+    /** Out handler - RC. */
+    PFNIOMIOPORTOUT                 pfnOutRC;
+    /** In handler - RC. */
+    PFNIOMIOPORTIN                  pfnInRC;
+    /** Out string handler - RC. */
+    PFNIOMIOPORTOUTSTRING           pfnOutStrRC;
+    /** In string handler - RC. */
+    PFNIOMIOPORTINSTRING            pfnInStrRC;
+#endif
+} RTDEVDUTIOPORT;
+/** Pointer to a registered I/O port handler. */
+typedef RTDEVDUTIOPORT *PRTDEVDUTIOPORT;
+/** Pointer to a const I/O port handler. */
+typedef const RTDEVDUTIOPORT *PCRTDEVDUTIOPORT;
+
+/**
+ * The Support Driver session state.
+ */
+typedef struct TSTDEVSUPDRVSESSION
+{
+    /** Pointer to the owning device under test instance. */
+    PTSTDEVDUTINT                   pDut;
+    /** List of event semaphores. */
+    RTLISTANCHOR                    LstSupSem;
+} TSTDEVSUPDRVSESSION;
+/** Pointer to the Support Driver session state. */
+typedef TSTDEVSUPDRVSESSION *PTSTDEVSUPDRVSESSION;
+
+/** Converts a Support Driver session handle to the internal state. */
+#define TSTDEV_PSUPDRVSESSION_2_PTSTDEVSUPDRVSESSION(a_pSession) ((PTSTDEVSUPDRVSESSION)(a_pSession))
+/** Converts the internal session state to a Support Driver session handle. */
+#define TSTDEV_PTSTDEVSUPDRVSESSION_2_PSUPDRVSESSION(a_pSession) ((PSUPDRVSESSION)(a_pSession))
+
+/**
+ * Support driver event semaphore.
+ */
+typedef struct TSTDEVSUPSEMEVENT
+{
+    /** Node for the event semaphore list. */
+    RTLISTNODE                      NdSupSem;
+    /** Flag whether this is multi event semaphore. */
+    bool                            fMulti;
+    /** Event smeaphore handles depending on the flag above. */
+    union
+    {
+        RTSEMEVENT                  hSemEvt;
+        RTSEMEVENTMULTI             hSemEvtMulti;
+    } u;
+} TSTDEVSUPSEMEVENT;
+/** Pointer to a support event semaphore state. */
+typedef TSTDEVSUPSEMEVENT *PTSTDEVSUPSEMEVENT;
+
+/** Converts a Support event semaphore handle to the internal state. */
+#define TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(a_pSupSemEvt) ((PTSTDEVSUPSEMEVENT)(a_pSupSemEvt))
+/** Converts the internal session state to a Support event semaphore handle. */
+#define TSTDEV_PTSTDEVSUPSEMEVENT_2_SUPSEMEVENT(a_pSupSemEvt) ((SUPSEMEVENT)(a_pSupSemEvt))
+
+/**
+ * The contex the device under test is currently in.
+ */
+typedef enum TSTDEVDUTCTX
+{
+    /** Invalid context. */
+    TSTDEVDUTCTX_INVALID = 0,
+    /** R3 context. */
+    TSTDEVDUTCTX_R3,
+    /** R0 context. */
+    TSTDEVDUTCTX_R0,
+    /** RC context. */
+    TSTDEVDUTCTX_RC,
+    /** 32bit hack. */
+    TSTDEVDUTCTX_32BIT_HACK = 0x7fffffff
+} TSTDEVDUTCTX;
+
+/**
+ * PCI region descriptor.
+ */
+typedef struct TSTDEVDUTPCIREGION
+{
+    /** Size of the region. */
+    RTGCPHYS                        cbRegion;
+    /** Address space type. */
+    PCIADDRESSSPACE                 enmType;
+    /** Region mapping callback. */
+    PFNPCIIOREGIONMAP               pfnRegionMap;
+} TSTDEVDUTPCIREGION;
+/** Pointer to a PCI region descriptor. */
+typedef TSTDEVDUTPCIREGION *PTSTDEVDUTPCIREGION;
+/** Pointer to a const PCI region descriptor. */
+typedef const TSTDEVDUTPCIREGION *PCTSTDEVDUTPCIREGION;
+
+/**
+ * Device under test instance data.
+ */
+typedef struct TSTDEVDUTINT
+{
+    /** Pointer to the testcase this device is part of. */
+    PCTSTDEVTESTCASEREG             pTestcaseReg;
+    /** Pointer to the PDM device instance. */
+    PPDMDEVINS                      pDevIns;
+    /** Current device context. */
+    TSTDEVDUTCTX                    enmCtx;
+    /** Critical section protecting the lists below. */
+    RTCRITSECTRW                    CritSectLists;
+    /** List of registered I/O port handlers. */
+    RTLISTANCHOR                    LstIoPorts;
+    /** List of timers registered. */
+    RTLISTANCHOR                    LstTimers;
+    /** List of registered MMIO regions. */
+    RTLISTANCHOR                    LstMmio;
+    /** List of MM Heap allocations. */
+    RTLISTANCHOR                    LstMmHeap;
+    /** List of PDM threads. */
+    RTLISTANCHOR                    LstPdmThreads;
+    /** The SUP session we emulate. */
+    TSTDEVSUPDRVSESSION             SupSession;
+    /** The VM state assoicated with this device. */
+    PVM                             pVm;
+    /** The registered PCI device instance if this is a PCI device. */
+    PPDMPCIDEV                      pPciDev;
+    /** PCI Region descriptors. */
+    TSTDEVDUTPCIREGION              aPciRegions[VBOX_PCI_NUM_REGIONS];
+} TSTDEVDUTINT;
+
+
+DECLHIDDEN(int) tstDevPdmLdrGetSymbol(PTSTDEVDUTINT pThis, const char *pszMod, TSTDEVPDMMODTYPE enmModType,
+                                      const char *pszSymbol, PFNRT *ppfn);
+
+
+DECLINLINE(int) tstDevDutLockShared(PTSTDEVDUTINT pThis)
+{
+    return RTCritSectRwEnterShared(&pThis->CritSectLists);
+}
+
+DECLINLINE(int) tstDevDutUnlockShared(PTSTDEVDUTINT pThis)
+{
+    return RTCritSectRwLeaveShared(&pThis->CritSectLists);
+}
+
+DECLINLINE(int) tstDevDutLockExcl(PTSTDEVDUTINT pThis)
+{
+    return RTCritSectRwEnterExcl(&pThis->CritSectLists);
+}
+
+DECLINLINE(int) tstDevDutUnlockExcl(PTSTDEVDUTINT pThis)
+{
+    return RTCritSectRwLeaveExcl(&pThis->CritSectLists);
+}
+
+RT_C_DECLS_END
+
+#endif
diff --git a/src/VBox/Devices/testcase/tstDevicePdmDevHlp.cpp b/src/VBox/Devices/testcase/tstDevicePdmDevHlp.cpp
new file mode 100644
index 0000000..497c033
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDevicePdmDevHlp.cpp
@@ -0,0 +1,1917 @@
+/* $Id: tstDevicePdmDevHlp.cpp $ */
+/** @file
+ * tstDevice - Test framework for PDM devices/drivers, PDM helper implementation.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEFAULT /** @todo */
+#include <VBox/types.h>
+#include <VBox/version.h>
+#include <VBox/vmm/pdmpci.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include "tstDeviceInternal.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+
+/** @def PDMDEV_ASSERT_DEVINS
+ * Asserts the validity of the device instance.
+ */
+#ifdef VBOX_STRICT
+# define PDMDEV_ASSERT_DEVINS(pDevIns)   \
+    do { \
+        AssertPtr(pDevIns); \
+        Assert(pDevIns->u32Version == PDM_DEVINS_VERSION); \
+        Assert(pDevIns->CTX_SUFF(pvInstanceData) == (void *)&pDevIns->achInstanceData[0]); \
+    } while (0)
+#else
+# define PDMDEV_ASSERT_DEVINS(pDevIns)   do { } while (0)
+#endif
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnIOPortRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_IOPortRegister(PPDMDEVINS pDevIns, RTIOPORT Port, RTIOPORT cPorts, RTHCPTR pvUser, PFNIOMIOPORTOUT pfnOut, PFNIOMIOPORTIN pfnIn,
+                                                    PFNIOMIOPORTOUTSTRING pfnOutStr, PFNIOMIOPORTINSTRING pfnInStr, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_IOPortRegister: caller='%s'/%d: Port=%#x cPorts=%#x pvUser=%p pfnOut=%p pfnIn=%p pfnOutStr=%p pfnInStr=%p p32_tszDesc=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, Port, cPorts, pvUser, pfnOut, pfnIn, pfnOutStr, pfnInStr, pszDesc, pszDesc));
+
+    /** @todo Verify there is no overlapping. */
+
+    RT_NOREF(pszDesc);
+    int rc = VINF_SUCCESS;
+    PRTDEVDUTIOPORT pIoPort = (PRTDEVDUTIOPORT)RTMemAllocZ(sizeof(RTDEVDUTIOPORT));
+    if (RT_LIKELY(pIoPort))
+    {
+        pIoPort->PortStart   = Port;
+        pIoPort->cPorts      = cPorts;
+        pIoPort->pvUserR3    = pvUser;
+        pIoPort->pfnOutR3    = pfnOut;
+        pIoPort->pfnInR3     = pfnIn;
+        pIoPort->pfnOutStrR3 = pfnOutStr;
+        pIoPort->pfnInStrR3  = pfnInStr;
+        RTListAppend(&pDevIns->Internal.s.pDut->LstIoPorts, &pIoPort->NdIoPorts);
+    }
+    else
+        rc = VERR_NO_MEMORY;
+
+    LogFlow(("pdmR3DevHlp_IOPortRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnIOPortRegisterRC} */
+static DECLCALLBACK(int) pdmR3DevHlp_IOPortRegisterRC(PPDMDEVINS pDevIns, RTIOPORT Port, RTIOPORT cPorts, RTRCPTR pvUser,
+                                                      const char *pszOut, const char *pszIn,
+                                                      const char *pszOutStr, const char *pszInStr, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_IOPortRegisterRC: caller='%s'/%d: Port=%#x cPorts=%#x pvUser=%p pszOut=%p:{%s} pszIn=%p:{%s} pszOutStr=%p:{%s} pszInStr=%p:{%s} pszDesc=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, Port, cPorts, pvUser, pszOut, pszOut, pszIn, pszIn, pszOutStr, pszOutStr, pszInStr, pszInStr, pszDesc, pszDesc));
+
+    /** @todo */
+    int rc = VINF_SUCCESS;
+    //AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_IOPortRegisterRC: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnIOPortRegisterR0} */
+static DECLCALLBACK(int) pdmR3DevHlp_IOPortRegisterR0(PPDMDEVINS pDevIns, RTIOPORT Port, RTIOPORT cPorts, RTR0PTR pvUser,
+                                                      const char *pszOut, const char *pszIn,
+                                                      const char *pszOutStr, const char *pszInStr, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_IOPortRegisterR0: caller='%s'/%d: Port=%#x cPorts=%#x pvUser=%p pszOut=%p:{%s} pszIn=%p:{%s} pszOutStr=%p:{%s} pszInStr=%p:{%s} pszDesc=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, Port, cPorts, pvUser, pszOut, pszOut, pszIn, pszIn, pszOutStr, pszOutStr, pszInStr, pszInStr, pszDesc, pszDesc));
+
+    PTSTDEVDUTINT pThis = pDevIns->Internal.s.pDut;
+    PRTDEVDUTIOPORT pIoPort;
+    int rc = VERR_NOT_FOUND;
+    RTListForEach(&pThis->LstIoPorts, pIoPort, RTDEVDUTIOPORT, NdIoPorts)
+    {
+        /** @todo Support overlapping port ranges. */
+        if (   pIoPort->PortStart == Port
+            && pIoPort->cPorts == cPorts)
+        {
+            rc = VINF_SUCCESS;
+            pIoPort->pvUserR0 = (void *)pvUser;
+            if (pszOut)
+                rc = tstDevPdmLdrGetSymbol(pThis, pDevIns->pReg->szR0Mod, TSTDEVPDMMODTYPE_R0, pszOut, (PFNRT *)&pIoPort->pfnOutR0);
+            if (RT_SUCCESS(rc) && pszIn)
+                rc = tstDevPdmLdrGetSymbol(pThis, pDevIns->pReg->szR0Mod, TSTDEVPDMMODTYPE_R0, pszIn, (PFNRT *)&pIoPort->pfnInR0);
+            if (RT_SUCCESS(rc) && pszOutStr)
+                rc = tstDevPdmLdrGetSymbol(pThis, pDevIns->pReg->szR0Mod, TSTDEVPDMMODTYPE_R0, pszOutStr, (PFNRT *)&pIoPort->pfnOutStrR0);
+            if (RT_SUCCESS(rc) && pszInStr)
+                rc = tstDevPdmLdrGetSymbol(pThis, pDevIns->pReg->szR0Mod, TSTDEVPDMMODTYPE_R0, pszInStr, (PFNRT *)&pIoPort->pfnInStrR0);
+            break;
+        }
+    }
+
+    LogFlow(("pdmR3DevHlp_IOPortRegisterR0: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnIOPortDeregister} */
+static DECLCALLBACK(int) pdmR3DevHlp_IOPortDeregister(PPDMDEVINS pDevIns, RTIOPORT Port, RTIOPORT cPorts)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_IOPortDeregister: caller='%s'/%d: Port=%#x cPorts=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, Port, cPorts));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_IOPortDeregister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMIORegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIORegister(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTGCPHYS cbRange, RTHCPTR pvUser,
+                                                  PFNIOMMMIOWRITE pfnWrite, PFNIOMMMIOREAD pfnRead, PFNIOMMMIOFILL pfnFill,
+                                                  uint32_t fFlags, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIORegister: caller='%s'/%d: GCPhysStart=%RGp cbRange=%RGp pvUser=%p pfnWrite=%p pfnRead=%p pfnFill=%p fFlags=%#x pszDesc=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhysStart, cbRange, pvUser, pfnWrite, pfnRead, pfnFill, pszDesc, fFlags, pszDesc));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIORegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMIORegisterRC} */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIORegisterRC(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTGCPHYS cbRange, RTRCPTR pvUser,
+                                                    const char *pszWrite, const char *pszRead, const char *pszFill)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIORegisterRC: caller='%s'/%d: GCPhysStart=%RGp cbRange=%RGp pvUser=%p pszWrite=%p:{%s} pszRead=%p:{%s} pszFill=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhysStart, cbRange, pvUser, pszWrite, pszWrite, pszRead, pszRead, pszFill, pszFill));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIORegisterRC: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMIORegisterR0} */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIORegisterR0(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTGCPHYS cbRange, RTR0PTR pvUser,
+                                                    const char *pszWrite, const char *pszRead, const char *pszFill)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIORegisterHC: caller='%s'/%d: GCPhysStart=%RGp cbRange=%RGp pvUser=%p pszWrite=%p:{%s} pszRead=%p:{%s} pszFill=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhysStart, cbRange, pvUser, pszWrite, pszWrite, pszRead, pszRead, pszFill, pszFill));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIORegisterR0: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMIODeregister} */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIODeregister(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTGCPHYS cbRange)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIODeregister: caller='%s'/%d: GCPhysStart=%RGp cbRange=%RGp\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhysStart, cbRange));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIODeregister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMIO2Register
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIO2Register(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS cb,
+                                                   uint32_t fFlags, void **ppv, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIO2Register: caller='%s'/%d: pPciDev=%p (%#x) iRegion=%#x cb=%#RGp fFlags=%RX32 ppv=%p pszDescp=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion,
+             cb, fFlags, ppv, pszDesc, pszDesc));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 == pDevIns, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIO2Register: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVHLPR3,pfnMMIOExPreRegister}
+ */
+static DECLCALLBACK(int)
+pdmR3DevHlp_MMIOExPreRegister(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS cbRegion, uint32_t fFlags,
+                              const char *pszDesc,
+                              RTHCPTR pvUser, PFNIOMMMIOWRITE pfnWrite, PFNIOMMMIOREAD pfnRead, PFNIOMMMIOFILL pfnFill,
+                              RTR0PTR pvUserR0, const char *pszWriteR0, const char *pszReadR0, const char *pszFillR0,
+                              RTRCPTR pvUserRC, const char *pszWriteRC, const char *pszReadRC, const char *pszFillRC)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIOExPreRegister: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x cbRegion=%#RGp fFlags=%RX32 pszDesc=%p:{%s}\n"
+             "                               pvUser=%p pfnWrite=%p pfnRead=%p pfnFill=%p\n"
+             "                               pvUserR0=%p pszWriteR0=%s pszReadR0=%s pszFillR0=%s\n"
+             "                               pvUserRC=%p pszWriteRC=%s pszReadRC=%s pszFillRC=%s\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion, cbRegion,
+             fFlags, pszDesc, pszDesc,
+             pvUser, pfnWrite, pfnRead, pfnFill,
+             pvUserR0, pszWriteR0, pszReadR0, pszFillR0,
+             pvUserRC, pszWriteRC, pszReadRC, pszFillRC));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 == pDevIns, VERR_INVALID_PARAMETER);
+
+    /*
+     * Resolve the functions.
+     */
+    AssertLogRelReturn(   (!pszWriteR0 && !pszReadR0 && !pszFillR0)
+                       || (pDevIns->pReg->szR0Mod[0] && (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_R0)),
+                       VERR_INVALID_PARAMETER);
+    AssertLogRelReturn(   (!pszWriteRC && !pszReadRC && !pszFillRC)
+                       || (pDevIns->pReg->szRCMod[0] && (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_RC)),
+                       VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIOExPreRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMIOExDeregister
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIOExDeregister(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIOExDeregister: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion));
+
+    AssertReturn(iRegion <= UINT8_MAX || iRegion == UINT32_MAX, VERR_INVALID_PARAMETER);
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 == pDevIns, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIOExDeregister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMIOExMap
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIOExMap(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS GCPhys)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIOExMap: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x GCPhys=%#RGp\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion, GCPhys));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 != NULL, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIOExMap: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMIOExUnmap
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIOExUnmap(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS GCPhys)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIOExUnmap: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x GCPhys=%#RGp\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion, GCPhys));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 != NULL, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIOExUnmap: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMIOExReduce
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIOExReduce(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS cbRegion)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIOExReduce: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x cbRegion=%RGp\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion, cbRegion));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 != NULL, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIOExReduce: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMHyperMapMMIO2
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMHyperMapMMIO2(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS off,
+                                                     RTGCPHYS cb, const char *pszDesc, PRTRCPTR pRCPtr)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMHyperMapMMIO2: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x off=%RGp cb=%RGp pszDesc=%p:{%s} pRCPtr=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion, off, cb, pszDesc, pszDesc, pRCPtr));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 == pDevIns, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMHyperMapMMIO2: caller='%s'/%d: returns %Rrc *pRCPtr=%RRv\n", pDevIns->pReg->szName, pDevIns->iInstance, rc, *pRCPtr));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnMMIO2MapKernel
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_MMIO2MapKernel(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion, RTGCPHYS off,
+                                                    RTGCPHYS cb,const char *pszDesc, PRTR0PTR pR0Ptr)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMIO2MapKernel: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%#x off=%RGp cb=%RGp pszDesc=%p:{%s} pR0Ptr=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev ? pPciDev->uDevFn : UINT32_MAX, iRegion, off, cb, pszDesc, pszDesc, pR0Ptr));
+    //AssertReturn(!pPciDev || pPciDev->Int.s.pDevInsR3 == pDevIns, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_MMIO2MapKernel: caller='%s'/%d: returns %Rrc *pR0Ptr=%RHv\n", pDevIns->pReg->szName, pDevIns->iInstance, rc, *pR0Ptr));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnROMRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_ROMRegister(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t cbRange,
+                                                 const void *pvBinary, uint32_t cbBinary, uint32_t fFlags, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_ROMRegister: caller='%s'/%d: GCPhysStart=%RGp cbRange=%#x pvBinary=%p cbBinary=%#x fFlags=%#RX32 pszDesc=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhysStart, cbRange, pvBinary, cbBinary, fFlags, pszDesc, pszDesc));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_ROMRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnROMProtectShadow} */
+static DECLCALLBACK(int) pdmR3DevHlp_ROMProtectShadow(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t cbRange, PGMROMPROT enmProt)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_ROMProtectShadow: caller='%s'/%d: GCPhysStart=%RGp cbRange=%#x enmProt=%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhysStart, cbRange, enmProt));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_ROMProtectShadow: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnSSMRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_SSMRegister(PPDMDEVINS pDevIns, uint32_t uVersion, size_t cbGuess, const char *pszBefore,
+                                                 PFNSSMDEVLIVEPREP pfnLivePrep, PFNSSMDEVLIVEEXEC pfnLiveExec, PFNSSMDEVLIVEVOTE pfnLiveVote,
+                                                 PFNSSMDEVSAVEPREP pfnSavePrep, PFNSSMDEVSAVEEXEC pfnSaveExec, PFNSSMDEVSAVEDONE pfnSaveDone,
+                                                 PFNSSMDEVLOADPREP pfnLoadPrep, PFNSSMDEVLOADEXEC pfnLoadExec, PFNSSMDEVLOADDONE pfnLoadDone)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_SSMRegister: caller='%s'/%d: uVersion=%#x cbGuess=%#x pszBefore=%p:{%s}\n"
+             "    pfnLivePrep=%p pfnLiveExec=%p pfnLiveVote=%p pfnSavePrep=%p pfnSaveExec=%p pfnSaveDone=%p pszLoadPrep=%p pfnLoadExec=%p pfnLoadDone=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, uVersion, cbGuess, pszBefore, pszBefore,
+             pfnLivePrep, pfnLiveExec, pfnLiveVote,
+             pfnSavePrep, pfnSaveExec, pfnSaveDone,
+             pfnLoadPrep, pfnLoadExec, pfnLoadDone));
+
+    /** @todo */
+    int rc = VINF_SUCCESS;
+    //AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_SSMRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnTMTimerCreate} */
+static DECLCALLBACK(int) pdmR3DevHlp_TMTimerCreate(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, void *pvUser,
+                                                   uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_TMTimerCreate: caller='%s'/%d: enmClock=%d pfnCallback=%p pvUser=%p fFlags=%#x pszDesc=%p:{%s} ppTimer=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, enmClock, pfnCallback, pvUser, fFlags, pszDesc, pszDesc, ppTimer));
+
+    int rc = VINF_SUCCESS;
+    PTMTIMERR3 pTimer = (PTMTIMERR3)RTMemAllocZ(sizeof(TMTIMER));
+    if (RT_LIKELY(pTimer))
+    {
+        pTimer->pVmmCallbacks  = pDevIns->Internal.s.pVmmCallbacks;
+        pTimer->enmClock       = enmClock;
+        pTimer->pfnCallbackDev = pfnCallback;
+        pTimer->pvUser         = pvUser;
+        pTimer->fFlags         = fFlags;
+        RTListAppend(&pDevIns->Internal.s.pDut->LstTimers, &pTimer->NdDevTimers);
+        *ppTimer = pTimer;
+    }
+    else
+        rc = VERR_NO_MEMORY;
+
+    LogFlow(("pdmR3DevHlp_TMTimerCreate: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnTMUtcNow} */
+static DECLCALLBACK(PRTTIMESPEC) pdmR3DevHlp_TMUtcNow(PPDMDEVINS pDevIns, PRTTIMESPEC pTime)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_TMUtcNow: caller='%s'/%d: pTime=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pTime));
+
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_TMUtcNow: caller='%s'/%d: returns %RU64\n", pDevIns->pReg->szName, pDevIns->iInstance, RTTimeSpecGetNano(pTime)));
+    return pTime;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnTMTimeVirtGet} */
+static DECLCALLBACK(uint64_t) pdmR3DevHlp_TMTimeVirtGet(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_TMTimeVirtGet: caller='%s'/%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    uint64_t u64Time = 0;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_TMTimeVirtGet: caller='%s'/%d: returns %RU64\n", pDevIns->pReg->szName, pDevIns->iInstance, u64Time));
+    return u64Time;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnTMTimeVirtGetFreq} */
+static DECLCALLBACK(uint64_t) pdmR3DevHlp_TMTimeVirtGetFreq(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_TMTimeVirtGetFreq: caller='%s'/%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    uint64_t u64Freq = 0;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_TMTimeVirtGetFreq: caller='%s'/%d: returns %RU64\n", pDevIns->pReg->szName, pDevIns->iInstance, u64Freq));
+    return u64Freq;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnTMTimeVirtGetNano} */
+static DECLCALLBACK(uint64_t) pdmR3DevHlp_TMTimeVirtGetNano(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_TMTimeVirtGetNano: caller='%s'/%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    uint64_t u64Nano = 0;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_TMTimeVirtGetNano: caller='%s'/%d: returns %RU64\n", pDevIns->pReg->szName, pDevIns->iInstance, u64Nano));
+    return u64Nano;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnGetSupDrvSession} */
+static DECLCALLBACK(PSUPDRVSESSION) pdmR3DevHlp_GetSupDrvSession(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_GetSupDrvSession: caller='%s'/%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    PTSTDEVDUTINT pThis = TSTDEV_PDMDEVINS_2_DUT(pDevIns);
+    PSUPDRVSESSION pSession = TSTDEV_PTSTDEVSUPDRVSESSION_2_PSUPDRVSESSION(&pThis->SupSession);
+
+    LogFlow(("pdmR3DevHlp_GetSupDrvSession: caller='%s'/%d: returns %#p\n", pDevIns->pReg->szName, pDevIns->iInstance, pSession));
+    return pSession;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnQueryGenericUserObject} */
+static DECLCALLBACK(void *) pdmR3DevHlp_QueryGenericUserObject(PPDMDEVINS pDevIns, PCRTUUID pUuid)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_QueryGenericUserObject: caller='%s'/%d: pUuid=%p:%RTuuid\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pUuid, pUuid));
+
+    void *pvRet = NULL;
+
+    LogRel(("pdmR3DevHlp_QueryGenericUserObject: caller='%s'/%d: returns %#p for %RTuuid\n",
+            pDevIns->pReg->szName, pDevIns->iInstance, pvRet, pUuid));
+    return pvRet;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysRead} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysRead(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, void *pvBuf, size_t cbRead)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysRead: caller='%s'/%d: GCPhys=%RGp pvBuf=%p cbRead=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhys, pvBuf, cbRead));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    Log(("pdmR3DevHlp_PhysRead: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysWrite} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysWrite(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, const void *pvBuf, size_t cbWrite)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysWrite: caller='%s'/%d: GCPhys=%RGp pvBuf=%p cbWrite=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhys, pvBuf, cbWrite));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    Log(("pdmR3DevHlp_PhysWrite: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysGCPhys2CCPtr} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPhys2CCPtr(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, void **ppv, PPGMPAGEMAPLOCK pLock)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysGCPhys2CCPtr: caller='%s'/%d: GCPhys=%RGp fFlags=%#x ppv=%p pLock=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhys, fFlags, ppv, pLock));
+    AssertReturn(!fFlags, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    Log(("pdmR3DevHlp_PhysGCPhys2CCPtr: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysGCPhys2CCPtrReadOnly} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPhys2CCPtrReadOnly(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, const void **ppv, PPGMPAGEMAPLOCK pLock)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysGCPhys2CCPtrReadOnly: caller='%s'/%d: GCPhys=%RGp fFlags=%#x ppv=%p pLock=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhys, fFlags, ppv, pLock));
+    AssertReturn(!fFlags, VERR_INVALID_PARAMETER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    Log(("pdmR3DevHlp_PhysGCPhys2CCPtrReadOnly: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysReleasePageMappingLock} */
+static DECLCALLBACK(void) pdmR3DevHlp_PhysReleasePageMappingLock(PPDMDEVINS pDevIns, PPGMPAGEMAPLOCK pLock)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysReleasePageMappingLock: caller='%s'/%d: pLock=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pLock));
+
+    AssertFailed();
+
+    Log(("pdmR3DevHlp_PhysReleasePageMappingLock: caller='%s'/%d: returns void\n", pDevIns->pReg->szName, pDevIns->iInstance));
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysReadGCVirt} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysReadGCVirt(PPDMDEVINS pDevIns, void *pvDst, RTGCPTR GCVirtSrc, size_t cb)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysReadGCVirt: caller='%s'/%d: pvDst=%p GCVirt=%RGv cb=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pvDst, GCVirtSrc, cb));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PhysReadGCVirt: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysWriteGCVirt} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysWriteGCVirt(PPDMDEVINS pDevIns, RTGCPTR GCVirtDst, const void *pvSrc, size_t cb)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysWriteGCVirt: caller='%s'/%d: GCVirtDst=%RGv pvSrc=%p cb=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCVirtDst, pvSrc, cb));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PhysWriteGCVirt: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPhysGCPtr2GCPhys} */
+static DECLCALLBACK(int) pdmR3DevHlp_PhysGCPtr2GCPhys(PPDMDEVINS pDevIns, RTGCPTR GCPtr, PRTGCPHYS pGCPhys)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PhysGCPtr2GCPhys: caller='%s'/%d: GCPtr=%RGv pGCPhys=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPtr, pGCPhys));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PhysGCPtr2GCPhys: caller='%s'/%d: returns %Rrc *pGCPhys=%RGp\n", pDevIns->pReg->szName, pDevIns->iInstance, rc, *pGCPhys));
+
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMHeapAlloc} */
+static DECLCALLBACK(void *) pdmR3DevHlp_MMHeapAlloc(PPDMDEVINS pDevIns, size_t cb)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMHeapAlloc: caller='%s'/%d: cb=%#x\n", pDevIns->pReg->szName, pDevIns->iInstance, cb));
+
+    PTSTDEVDUTINT pThis = TSTDEV_PDMDEVINS_2_DUT(pDevIns);
+
+    void *pv = NULL;
+    PTSTDEVMMHEAPALLOC pHeapAlloc = (PTSTDEVMMHEAPALLOC)RTMemAllocZ(cb + sizeof(TSTDEVMMHEAPALLOC) - 1);
+    if (pHeapAlloc)
+    {
+        /* Poison */
+        memset(&pHeapAlloc->abAlloc[0], 0xfe, cb);
+        pHeapAlloc->cbAlloc       = cb;
+        pHeapAlloc->pVmmCallbacks = pDevIns->Internal.s.pVmmCallbacks;
+        pHeapAlloc->pDut          = pThis;
+
+        tstDevDutLockExcl(pThis);
+        RTListAppend(&pThis->LstMmHeap, &pHeapAlloc->NdMmHeap);
+        tstDevDutUnlockExcl(pThis);
+
+        pv = &pHeapAlloc->abAlloc[0];
+    }
+
+    LogFlow(("pdmR3DevHlp_MMHeapAlloc: caller='%s'/%d: returns %p\n", pDevIns->pReg->szName, pDevIns->iInstance, pv));
+    return pv;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMHeapAllocZ} */
+static DECLCALLBACK(void *) pdmR3DevHlp_MMHeapAllocZ(PPDMDEVINS pDevIns, size_t cb)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMHeapAllocZ: caller='%s'/%d: cb=%#x\n", pDevIns->pReg->szName, pDevIns->iInstance, cb));
+
+    void *pv = pdmR3DevHlp_MMHeapAlloc(pDevIns, cb);
+    if (VALID_PTR(pv))
+        memset(pv, 0, cb);
+
+    LogFlow(("pdmR3DevHlp_MMHeapAllocZ: caller='%s'/%d: returns %p\n", pDevIns->pReg->szName, pDevIns->iInstance, pv));
+    return pv;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnMMHeapFree} */
+static DECLCALLBACK(void) pdmR3DevHlp_MMHeapFree(PPDMDEVINS pDevIns, void *pv)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_MMHeapFree: caller='%s'/%d: pv=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, pv));
+
+    MMR3HeapFree(pv);
+
+    LogFlow(("pdmR3DevHlp_MMHeapAlloc: caller='%s'/%d: returns void\n", pDevIns->pReg->szName, pDevIns->iInstance));
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMState} */
+static DECLCALLBACK(VMSTATE) pdmR3DevHlp_VMState(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    VMSTATE enmVMState = VMSTATE_CREATING;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_VMState: caller='%s'/%d: returns %d\n", pDevIns->pReg->szName, pDevIns->iInstance,
+             enmVMState));
+    return enmVMState;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMTeleportedAndNotFullyResumedYet} */
+static DECLCALLBACK(bool) pdmR3DevHlp_VMTeleportedAndNotFullyResumedYet(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    bool fRc = false;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_VMState: caller='%s'/%d: returns %RTbool\n", pDevIns->pReg->szName, pDevIns->iInstance,
+             fRc));
+    return fRc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMSetError} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMSetError(PPDMDEVINS pDevIns, int rc, RT_SRC_POS_DECL, const char *pszFormat, ...)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(rc, pszFile, iLine, pszFunction, pszFormat);
+    rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMSetErrorV} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMSetErrorV(PPDMDEVINS pDevIns, int rc, RT_SRC_POS_DECL, const char *pszFormat, va_list va)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(rc, pszFile, iLine, pszFunction, pszFormat, va);
+    rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMSetRuntimeError} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMSetRuntimeError(PPDMDEVINS pDevIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, ...)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(fFlags, pszErrorId, pszFormat);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMSetRuntimeErrorV} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMSetRuntimeErrorV(PPDMDEVINS pDevIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, va_list va)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(fFlags, pszErrorId, pszFormat, va);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDBGFStopV} */
+static DECLCALLBACK(int) pdmR3DevHlp_DBGFStopV(PPDMDEVINS pDevIns, const char *pszFile, unsigned iLine, const char *pszFunction, const char *pszFormat, va_list args)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+#ifdef LOG_ENABLED
+    va_list va2;
+    va_copy(va2, args);
+    LogFlow(("pdmR3DevHlp_DBGFStopV: caller='%s'/%d: pszFile=%p:{%s} iLine=%d pszFunction=%p:{%s} pszFormat=%p:{%s} (%N)\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pszFile, pszFile, iLine, pszFunction, pszFunction, pszFormat, pszFormat, pszFormat, &va2));
+    va_end(va2);
+#endif
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DBGFStopV: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDBGFInfoRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_DBGFInfoRegister(PPDMDEVINS pDevIns, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDEV pfnHandler)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DBGFInfoRegister: caller='%s'/%d: pszName=%p:{%s} pszDesc=%p:{%s} pfnHandler=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pszName, pszName, pszDesc, pszDesc, pfnHandler));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DBGFInfoRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDBGFRegRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_DBGFRegRegister(PPDMDEVINS pDevIns, PCDBGFREGDESC paRegisters)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DBGFRegRegister: caller='%s'/%d: paRegisters=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, paRegisters));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DBGFRegRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDBGFTraceBuf} */
+static DECLCALLBACK(RTTRACEBUF) pdmR3DevHlp_DBGFTraceBuf(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RTTRACEBUF hTraceBuf = NULL;
+    AssertFailed();
+    LogFlow(("pdmR3DevHlp_DBGFTraceBuf: caller='%s'/%d: returns %p\n", pDevIns->pReg->szName, pDevIns->iInstance, hTraceBuf));
+    return hTraceBuf;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnSTAMRegister} */
+static DECLCALLBACK(void) pdmR3DevHlp_STAMRegister(PPDMDEVINS pDevIns, void *pvSample, STAMTYPE enmType, const char *pszName,
+                                                   STAMUNIT enmUnit, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pvSample, enmType, pszName, enmUnit, pszDesc);
+    AssertFailed();
+}
+
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnSTAMRegisterF} */
+static DECLCALLBACK(void) pdmR3DevHlp_STAMRegisterF(PPDMDEVINS pDevIns, void *pvSample, STAMTYPE enmType, STAMVISIBILITY enmVisibility,
+                                                    STAMUNIT enmUnit, const char *pszDesc, const char *pszName, ...)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pvSample, enmType, enmVisibility, enmUnit, pszDesc, pszName);
+    AssertFailed();
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnSTAMRegisterV} */
+static DECLCALLBACK(void) pdmR3DevHlp_STAMRegisterV(PPDMDEVINS pDevIns, void *pvSample, STAMTYPE enmType, STAMVISIBILITY enmVisibility,
+                                                    STAMUNIT enmUnit, const char *pszDesc, const char *pszName, va_list args)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pvSample, enmType, enmVisibility, enmUnit, pszDesc, pszName, args);
+    AssertFailed();
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVHLPR3,pfnPCIRegister}
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_PCIRegister(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t idxDevCfg, uint32_t fFlags,
+                                                 uint8_t uPciDevNo, uint8_t uPciFunNo, const char *pszName)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PCIRegister: caller='%s'/%d: pPciDev=%p:{.config={%#.256Rhxs} idxDevCfg=%d fFlags=%#x uPciDevNo=%#x uPciFunNo=%#x pszName=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev->abConfig, idxDevCfg, fFlags, uPciDevNo, uPciFunNo, pszName, pszName ? pszName : ""));
+
+    /*
+     * Validate input.
+     */
+    AssertLogRelMsgReturn(RT_VALID_PTR(pPciDev),
+                          ("'%s'/%d: Invalid pPciDev value: %p\n", pDevIns->pReg->szName, pDevIns->iInstance, pPciDev),
+                          VERR_INVALID_POINTER);
+    AssertLogRelMsgReturn(PDMPciDevGetVendorId(pPciDev),
+                          ("'%s'/%d: Vendor ID is not set!\n", pDevIns->pReg->szName, pDevIns->iInstance),
+                          VERR_INVALID_POINTER);
+    AssertLogRelMsgReturn(idxDevCfg < 256 || idxDevCfg == PDMPCIDEVREG_CFG_NEXT,
+                          ("'%s'/%d: Invalid config selector: %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, idxDevCfg),
+                          VERR_OUT_OF_RANGE);
+    AssertLogRelMsgReturn(   uPciDevNo < 32
+                          || uPciDevNo == PDMPCIDEVREG_DEV_NO_FIRST_UNUSED
+                          || uPciDevNo == PDMPCIDEVREG_DEV_NO_SAME_AS_PREV,
+                          ("'%s'/%d: Invalid PCI device number: %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, uPciDevNo),
+                          VERR_INVALID_PARAMETER);
+    AssertLogRelMsgReturn(   uPciFunNo < 8
+                          || uPciFunNo == PDMPCIDEVREG_FUN_NO_FIRST_UNUSED,
+                          ("'%s'/%d: Invalid PCI funcion number: %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, uPciFunNo),
+                          VERR_INVALID_PARAMETER);
+    AssertLogRelMsgReturn(!(fFlags & ~PDMPCIDEVREG_F_VALID_MASK),
+                          ("'%s'/%d: Invalid flags: %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, fFlags),
+                          VERR_INVALID_FLAGS);
+    int rc = VINF_SUCCESS;
+    pDevIns->Internal.s.pDut->pPciDev = pPciDev;
+
+    LogFlow(("pdmR3DevHlp_PCIRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCIRegisterMsi} */
+static DECLCALLBACK(int) pdmR3DevHlp_PCIRegisterMsi(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, PPDMMSIREG pMsiReg)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PCIRegisterMsi: caller='%s'/%d: pPciDev=%p:{%#x} pMsgReg=%p:{cMsiVectors=%d, cMsixVectors=%d}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev->uDevFn, pMsiReg, pMsiReg->cMsiVectors, pMsiReg->cMsixVectors));
+
+    int rc = VERR_NOT_SUPPORTED; /** @todo */
+
+    LogFlow(("pdmR3DevHlp_PCIRegisterMsi: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCIIORegionRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_PCIIORegionRegister(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion,
+                                                         RTGCPHYS cbRegion, PCIADDRESSSPACE enmType, PFNPCIIOREGIONMAP pfnCallback)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PCIIORegionRegister: caller='%s'/%d: pPciDev=%p:{%#x} iRegion=%d cbRegion=%RGp enmType=%d pfnCallback=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev->uDevFn, iRegion, cbRegion, enmType, pfnCallback));
+
+    AssertLogRelMsgReturn(iRegion < VBOX_PCI_NUM_REGIONS,
+                          ("Region %u exceeds maximum region index %u\n", iRegion, VBOX_PCI_NUM_REGIONS),
+                          VERR_INVALID_PARAMETER);
+
+    int rc = VINF_SUCCESS;
+    PTSTDEVDUTINT pThis = TSTDEV_PDMDEVINS_2_DUT(pDevIns);
+    PTSTDEVDUTPCIREGION pRegion = &pThis->aPciRegions[iRegion];
+    pRegion->cbRegion     = cbRegion;
+    pRegion->enmType      = enmType;
+    pRegion->pfnRegionMap = pfnCallback;
+
+    LogFlow(("pdmR3DevHlp_PCIIORegionRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCISetConfigCallbacks} */
+static DECLCALLBACK(void) pdmR3DevHlp_PCISetConfigCallbacks(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, PFNPCICONFIGREAD pfnRead, PPFNPCICONFIGREAD ppfnReadOld,
+                                                            PFNPCICONFIGWRITE pfnWrite, PPFNPCICONFIGWRITE ppfnWriteOld)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PCISetConfigCallbacks: caller='%s'/%d: pPciDev=%p pfnRead=%p ppfnReadOld=%p pfnWrite=%p ppfnWriteOld=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pfnRead, ppfnReadOld, pfnWrite, ppfnWriteOld));
+
+    /*
+     * Validate input and resolve defaults.
+     */
+    AssertPtr(pfnRead);
+    AssertPtr(pfnWrite);
+    AssertPtrNull(ppfnReadOld);
+    AssertPtrNull(ppfnWriteOld);
+    AssertPtrNull(pPciDev);
+
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PCISetConfigCallbacks: caller='%s'/%d: returns void\n", pDevIns->pReg->szName, pDevIns->iInstance));
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCIPhysRead} */
+static DECLCALLBACK(int) pdmR3DevHlp_PCIPhysRead(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, RTGCPHYS GCPhys, void *pvBuf, size_t cbRead)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pPciDev);
+    return pDevIns->pHlpR3->pfnPhysRead(pDevIns, GCPhys, pvBuf, cbRead);
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCIPhysWrite} */
+static DECLCALLBACK(int)
+pdmR3DevHlp_PCIPhysWrite(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, RTGCPHYS GCPhys, const void *pvBuf, size_t cbWrite)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pPciDev);
+    return pDevIns->pHlpR3->pfnPhysWrite(pDevIns, GCPhys, pvBuf, cbWrite);
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCISetIrq} */
+static DECLCALLBACK(void) pdmR3DevHlp_PCISetIrq(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, int iIrq, int iLevel)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PCISetIrq: caller='%s'/%d: pPciDev=%p:{%#x} iIrq=%d iLevel=%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciDev, pPciDev->uDevFn, iIrq, iLevel));
+
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PCISetIrq: caller='%s'/%d: returns void\n", pDevIns->pReg->szName, pDevIns->iInstance));
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCISetIrqNoWait} */
+static DECLCALLBACK(void) pdmR3DevHlp_PCISetIrqNoWait(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, int iIrq, int iLevel)
+{
+    pdmR3DevHlp_PCISetIrq(pDevIns, pPciDev, iIrq, iLevel);
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnISASetIrq} */
+static DECLCALLBACK(void) pdmR3DevHlp_ISASetIrq(PPDMDEVINS pDevIns, int iIrq, int iLevel)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_ISASetIrq: caller='%s'/%d: iIrq=%d iLevel=%d\n", pDevIns->pReg->szName, pDevIns->iInstance, iIrq, iLevel));
+
+    //AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_ISASetIrq: caller='%s'/%d: returns void\n", pDevIns->pReg->szName, pDevIns->iInstance));
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnISASetIrqNoWait} */
+static DECLCALLBACK(void) pdmR3DevHlp_ISASetIrqNoWait(PPDMDEVINS pDevIns, int iIrq, int iLevel)
+{
+    pdmR3DevHlp_ISASetIrq(pDevIns, iIrq, iLevel);
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnIoApicSendMsi} */
+static DECLCALLBACK(void) pdmR3DevHlp_IoApicSendMsi(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t uValue)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_IoApicSendMsi: caller='%s'/%d: GCPhys=%RGp uValue=%#x\n", pDevIns->pReg->szName, pDevIns->iInstance, GCPhys, uValue));
+
+    /*
+     * Validate input.
+     */
+    Assert(GCPhys != 0);
+    Assert(uValue != 0);
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_IoApicSendMsi: caller='%s'/%d: returns void\n", pDevIns->pReg->szName, pDevIns->iInstance));
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDriverAttach} */
+static DECLCALLBACK(int) pdmR3DevHlp_DriverAttach(PPDMDEVINS pDevIns, uint32_t iLun, PPDMIBASE pBaseInterface, PPDMIBASE *ppBaseInterface, const char *pszDesc)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DriverAttach: caller='%s'/%d: iLun=%d pBaseInterface=%p ppBaseInterface=%p pszDesc=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, iLun, pBaseInterface, ppBaseInterface, pszDesc, pszDesc));
+
+    /** @todo */
+    int rc = VERR_PDM_NO_ATTACHED_DRIVER;
+    //AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DriverAttach: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDriverDetach} */
+static DECLCALLBACK(int) pdmR3DevHlp_DriverDetach(PPDMDEVINS pDevIns, PPDMDRVINS pDrvIns, uint32_t fFlags)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF_PV(pDevIns);
+    LogFlow(("pdmR3DevHlp_DriverDetach: caller='%s'/%d: pDrvIns=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pDrvIns));
+
+    RT_NOREF(fFlags);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DriverDetach: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnQueueCreate} */
+static DECLCALLBACK(int) pdmR3DevHlp_QueueCreate(PPDMDEVINS pDevIns, size_t cbItem, uint32_t cItems, uint32_t cMilliesInterval,
+                                                 PFNPDMQUEUEDEV pfnCallback, bool fRZEnabled, const char *pszName, PPDMQUEUE *ppQueue)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_QueueCreate: caller='%s'/%d: cbItem=%#x cItems=%#x cMilliesInterval=%u pfnCallback=%p fRZEnabled=%RTbool pszName=%p:{%s} ppQueue=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, cbItem, cItems, cMilliesInterval, pfnCallback, fRZEnabled, pszName, pszName, ppQueue));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_QueueCreate: caller='%s'/%d: returns %Rrc *ppQueue=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, rc, *ppQueue));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCritSectInit} */
+static DECLCALLBACK(int) pdmR3DevHlp_CritSectInit(PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect, RT_SRC_POS_DECL,
+                                                  const char *pszNameFmt, va_list va)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_CritSectInit: caller='%s'/%d: pCritSect=%p pszNameFmt=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pCritSect, pszNameFmt, pszNameFmt));
+
+    RT_NOREF(RT_SRC_POS_ARGS, pszNameFmt, pCritSect, va);
+    int rc = RTCritSectInit(&pCritSect->s.CritSect);
+    if (RT_SUCCESS(rc))
+        pCritSect->s.pVmmCallbacks = pDevIns->Internal.s.pVmmCallbacks;
+
+    LogFlow(("pdmR3DevHlp_CritSectInit: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCritSectGetNop} */
+static DECLCALLBACK(PPDMCRITSECT) pdmR3DevHlp_CritSectGetNop(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    AssertFailed();
+    PPDMCRITSECT pCritSect = NULL;
+
+    LogFlow(("pdmR3DevHlp_CritSectGetNop: caller='%s'/%d: return %p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pCritSect));
+    return pCritSect;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCritSectGetNopR0} */
+static DECLCALLBACK(R0PTRTYPE(PPDMCRITSECT)) pdmR3DevHlp_CritSectGetNopR0(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    R0PTRTYPE(PPDMCRITSECT) pCritSect = 0;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_CritSectGetNopR0: caller='%s'/%d: return %RHv\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pCritSect));
+    return pCritSect;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCritSectGetNopRC} */
+static DECLCALLBACK(RCPTRTYPE(PPDMCRITSECT)) pdmR3DevHlp_CritSectGetNopRC(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    RCPTRTYPE(PPDMCRITSECT) pCritSect = 0;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_CritSectGetNopRC: caller='%s'/%d: return %RRv\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pCritSect));
+    return pCritSect;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnSetDeviceCritSect} */
+static DECLCALLBACK(int) pdmR3DevHlp_SetDeviceCritSect(PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect)
+{
+    /*
+     * Validate input.
+     *
+     * Note! We only allow the automatically created default critical section
+     *       to be replaced by this API.
+     */
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    AssertPtrReturn(pCritSect, VERR_INVALID_POINTER);
+    LogFlow(("pdmR3DevHlp_SetDeviceCritSect: caller='%s'/%d: pCritSect=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pCritSect));
+
+    /** @todo Implement default atomatic critical section. */
+    pDevIns->pCritSectRoR3 = pCritSect;
+
+    LogFlow(("pdmR3DevHlp_SetDeviceCritSect: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, VINF_SUCCESS));
+    return VINF_SUCCESS;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnThreadCreate} */
+static DECLCALLBACK(int) pdmR3DevHlp_ThreadCreate(PPDMDEVINS pDevIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADDEV pfnThread,
+                                                  PFNPDMTHREADWAKEUPDEV pfnWakeup, size_t cbStack, RTTHREADTYPE enmType, const char *pszName)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_ThreadCreate: caller='%s'/%d: ppThread=%p pvUser=%p pfnThread=%p pfnWakeup=%p cbStack=%#zx enmType=%d pszName=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, ppThread, pvUser, pfnThread, pfnWakeup, cbStack, enmType, pszName, pszName));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_ThreadCreate: caller='%s'/%d: returns %Rrc *ppThread=%RTthrd\n", pDevIns->pReg->szName, pDevIns->iInstance,
+            rc, *ppThread));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnSetAsyncNotification} */
+static DECLCALLBACK(int) pdmR3DevHlp_SetAsyncNotification(PPDMDEVINS pDevIns, PFNPDMDEVASYNCNOTIFY pfnAsyncNotify)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_SetAsyncNotification: caller='%s'/%d: pfnAsyncNotify=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, pfnAsyncNotify));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_SetAsyncNotification: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnAsyncNotificationCompleted} */
+static DECLCALLBACK(void) pdmR3DevHlp_AsyncNotificationCompleted(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    AssertFailed();
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnRTCRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_RTCRegister(PPDMDEVINS pDevIns, PCPDMRTCREG pRtcReg, PCPDMRTCHLP *ppRtcHlp)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_RTCRegister: caller='%s'/%d: pRtcReg=%p:{.u32Version=%#x, .pfnWrite=%p, .pfnRead=%p} ppRtcHlp=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pRtcReg, pRtcReg->u32Version, pRtcReg->pfnWrite,
+             pRtcReg->pfnWrite, ppRtcHlp));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_RTCRegister: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMARegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_DMARegister(PPDMDEVINS pDevIns, unsigned uChannel, PFNDMATRANSFERHANDLER pfnTransferHandler, void *pvUser)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    RT_NOREF(uChannel, pfnTransferHandler, pvUser);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DMARegister: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMAReadMemory} */
+static DECLCALLBACK(int) pdmR3DevHlp_DMAReadMemory(PPDMDEVINS pDevIns, unsigned uChannel, void *pvBuffer, uint32_t off, uint32_t cbBlock, uint32_t *pcbRead)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DMAReadMemory: caller='%s'/%d: uChannel=%d pvBuffer=%p off=%#x cbBlock=%#x pcbRead=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, uChannel, pvBuffer, off, cbBlock, pcbRead));
+
+    RT_NOREF(uChannel, pvBuffer, off, cbBlock, pcbRead);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DMAReadMemory: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMAWriteMemory} */
+static DECLCALLBACK(int) pdmR3DevHlp_DMAWriteMemory(PPDMDEVINS pDevIns, unsigned uChannel, const void *pvBuffer, uint32_t off, uint32_t cbBlock, uint32_t *pcbWritten)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DMAWriteMemory: caller='%s'/%d: uChannel=%d pvBuffer=%p off=%#x cbBlock=%#x pcbWritten=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, uChannel, pvBuffer, off, cbBlock, pcbWritten));
+
+    RT_NOREF(uChannel, pvBuffer, off, cbBlock, pcbWritten);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DMAWriteMemory: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMASetDREQ} */
+static DECLCALLBACK(int) pdmR3DevHlp_DMASetDREQ(PPDMDEVINS pDevIns, unsigned uChannel, unsigned uLevel)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DMASetDREQ: caller='%s'/%d: uChannel=%d uLevel=%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, uChannel, uLevel));
+
+    RT_NOREF(uChannel, uLevel);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DMASetDREQ: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMAGetChannelMode} */
+static DECLCALLBACK(uint8_t) pdmR3DevHlp_DMAGetChannelMode(PPDMDEVINS pDevIns, unsigned uChannel)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DMAGetChannelMode: caller='%s'/%d: uChannel=%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, uChannel));
+
+    uint8_t u8Mode = 0;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DMAGetChannelMode: caller='%s'/%d: returns %#04x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, u8Mode));
+    return u8Mode;
+}
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMASchedule} */
+static DECLCALLBACK(void) pdmR3DevHlp_DMASchedule(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DMASchedule: caller='%s'/%d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    AssertFailed();
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCMOSWrite} */
+static DECLCALLBACK(int) pdmR3DevHlp_CMOSWrite(PPDMDEVINS pDevIns, unsigned iReg, uint8_t u8Value)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_CMOSWrite: caller='%s'/%d: iReg=%#04x u8Value=%#04x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, iReg, u8Value));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_CMOSWrite: caller='%s'/%d: return %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCMOSRead} */
+static DECLCALLBACK(int) pdmR3DevHlp_CMOSRead(PPDMDEVINS pDevIns, unsigned iReg, uint8_t *pu8Value)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_CMOSWrite: caller='%s'/%d: iReg=%#04x pu8Value=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, iReg, pu8Value));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_CMOSWrite: caller='%s'/%d: return %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnAssertEMT} */
+static DECLCALLBACK(bool) pdmR3DevHlp_AssertEMT(PPDMDEVINS pDevIns, const char *pszFile, unsigned iLine, const char *pszFunction)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pszFile, iLine, pszFunction);
+    AssertFailed();
+    return false;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnAssertOther} */
+static DECLCALLBACK(bool) pdmR3DevHlp_AssertOther(PPDMDEVINS pDevIns, const char *pszFile, unsigned iLine, const char *pszFunction)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    RT_NOREF(pszFile, iLine, pszFunction);
+    AssertFailed();
+    return false;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnLdrGetRCInterfaceSymbols} */
+static DECLCALLBACK(int) pdmR3DevHlp_LdrGetRCInterfaceSymbols(PPDMDEVINS pDevIns, void *pvInterface, size_t cbInterface,
+                                                              const char *pszSymPrefix, const char *pszSymList)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PDMLdrGetRCInterfaceSymbols: caller='%s'/%d: pvInterface=%p cbInterface=%zu pszSymPrefix=%p:{%s} pszSymList=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pvInterface, cbInterface, pszSymPrefix, pszSymPrefix, pszSymList, pszSymList));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PDMLdrGetRCInterfaceSymbols: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName,
+             pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnLdrGetR0InterfaceSymbols} */
+static DECLCALLBACK(int) pdmR3DevHlp_LdrGetR0InterfaceSymbols(PPDMDEVINS pDevIns, void *pvInterface, size_t cbInterface,
+                                                              const char *pszSymPrefix, const char *pszSymList)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PDMLdrGetR0InterfaceSymbols: caller='%s'/%d: pvInterface=%p cbInterface=%zu pszSymPrefix=%p:{%s} pszSymList=%p:{%s}\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pvInterface, cbInterface, pszSymPrefix, pszSymPrefix, pszSymList, pszSymList));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PDMLdrGetR0InterfaceSymbols: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName,
+             pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnCallR0} */
+static DECLCALLBACK(int) pdmR3DevHlp_CallR0(PPDMDEVINS pDevIns, uint32_t uOperation, uint64_t u64Arg)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_CallR0: caller='%s'/%d: uOperation=%#x u64Arg=%#RX64\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, uOperation, u64Arg));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_CallR0: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName,
+             pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMGetSuspendReason} */
+static DECLCALLBACK(VMSUSPENDREASON) pdmR3DevHlp_VMGetSuspendReason(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    VMSUSPENDREASON enmReason = VMSUSPENDREASON_INVALID;
+    AssertFailed();
+    LogFlow(("pdmR3DevHlp_VMGetSuspendReason: caller='%s'/%d: returns %d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, enmReason));
+    return enmReason;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMGetResumeReason} */
+static DECLCALLBACK(VMRESUMEREASON) pdmR3DevHlp_VMGetResumeReason(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    VMRESUMEREASON enmReason = VMRESUMEREASON_INVALID;
+    AssertFailed();
+    LogFlow(("pdmR3DevHlp_VMGetResumeReason: caller='%s'/%d: returns %d\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, enmReason));
+    return enmReason;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnGetUVM} */
+static DECLCALLBACK(PUVM) pdmR3DevHlp_GetUVM(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    AssertFailed();
+    LogFlow(("pdmR3DevHlp_GetUVM: caller='%s'/%d: returns %p\n", pDevIns->pReg->szName, pDevIns->iInstance, NULL));
+    return NULL;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnGetVM} */
+static DECLCALLBACK(PVM) pdmR3DevHlp_GetVM(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    PTSTDEVDUTINT pThis = TSTDEV_PDMDEVINS_2_DUT(pDevIns);
+    PVM pVM = pThis->pVm;
+    LogFlow(("pdmR3DevHlp_GetVM: caller='%s'/%d: returns %p\n", pDevIns->pReg->szName, pDevIns->iInstance, NULL));
+    return pVM;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnGetVMCPU} */
+static DECLCALLBACK(PVMCPU) pdmR3DevHlp_GetVMCPU(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    AssertFailed();
+    LogFlow(("pdmR3DevHlp_GetVMCPU: caller='%s'/%d for CPU %u\n", pDevIns->pReg->szName, pDevIns->iInstance, NULL));
+    return NULL;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnGetCurrentCpuId} */
+static DECLCALLBACK(VMCPUID) pdmR3DevHlp_GetCurrentCpuId(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    VMCPUID idCpu = 0;
+    AssertFailed();
+    LogFlow(("pdmR3DevHlp_GetCurrentCpuId: caller='%s'/%d for CPU %u\n", pDevIns->pReg->szName, pDevIns->iInstance, idCpu));
+    return idCpu;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCIBusRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_PCIBusRegister(PPDMDEVINS pDevIns, PPDMPCIBUSREG pPciBusReg,
+                                                    PCPDMPCIHLPR3 *ppPciHlpR3, uint32_t *piBus)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PCIBusRegister: caller='%s'/%d: pPciBusReg=%p:{.u32Version=%#x, .pfnRegisterR3=%p, .pfnIORegionRegisterR3=%p, "
+             ".pfnSetIrqR3=%p, .pszSetIrqRC=%p:{%s}, .pszSetIrqR0=%p:{%s}} ppPciHlpR3=%p piBus=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPciBusReg, pPciBusReg->u32Version, pPciBusReg->pfnRegisterR3,
+             pPciBusReg->pfnIORegionRegisterR3, pPciBusReg->pfnSetIrqR3, pPciBusReg->pszSetIrqRC, pPciBusReg->pszSetIrqRC,
+             pPciBusReg->pszSetIrqR0, pPciBusReg->pszSetIrqR0, ppPciHlpR3, piBus));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PCIBusRegister: caller='%s'/%d: returns %Rrc *piBus=%u\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc, *piBus));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPICRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_PICRegister(PPDMDEVINS pDevIns, PPDMPICREG pPicReg, PCPDMPICHLPR3 *ppPicHlpR3)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: pPicReg=%p:{.u32Version=%#x, .pfnSetIrqR3=%p, .pfnGetInterruptR3=%p, .pszGetIrqRC=%p:{%s}, .pszGetInterruptRC=%p:{%s}, .pszGetIrqR0=%p:{%s}, .pszGetInterruptR0=%p:{%s} } ppPicHlpR3=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pPicReg, pPicReg->u32Version, pPicReg->pfnSetIrqR3, pPicReg->pfnGetInterruptR3,
+             pPicReg->pszSetIrqRC, pPicReg->pszSetIrqRC, pPicReg->pszGetInterruptRC, pPicReg->pszGetInterruptRC,
+             pPicReg->pszSetIrqR0, pPicReg->pszSetIrqR0, pPicReg->pszGetInterruptR0, pPicReg->pszGetInterruptR0,
+             ppPicHlpR3));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnAPICRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_APICRegister(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_APICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnIOAPICRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_IOAPICRegister(PPDMDEVINS pDevIns, PPDMIOAPICREG pIoApicReg, PCPDMIOAPICHLPR3 *ppIoApicHlpR3)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_IOAPICRegister: caller='%s'/%d: pIoApicReg=%p:{.u32Version=%#x, .pfnSetIrqR3=%p, .pszSetIrqRC=%p:{%s}, .pszSetIrqR0=%p:{%s}} ppIoApicHlpR3=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pIoApicReg, pIoApicReg->u32Version, pIoApicReg->pfnSetIrqR3,
+             pIoApicReg->pszSetIrqRC, pIoApicReg->pszSetIrqRC, pIoApicReg->pszSetIrqR0, pIoApicReg->pszSetIrqR0, ppIoApicHlpR3));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_IOAPICRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnHPETRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_HPETRegister(PPDMDEVINS pDevIns, PPDMHPETREG pHpetReg, PCPDMHPETHLPR3 *ppHpetHlpR3)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF_PV(pDevIns);
+    LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));
+
+    RT_NOREF(pHpetReg, ppHpetHlpR3);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_HPETRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnPciRawRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_PciRawRegister(PPDMDEVINS pDevIns, PPDMPCIRAWREG pPciRawReg, PCPDMPCIRAWHLPR3 *ppPciRawHlpR3)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns); RT_NOREF_PV(pDevIns);
+    LogFlow(("pdmR3DevHlp_PciRawRegister: caller='%s'/%d:\n", pDevIns->pReg->szName, pDevIns->iInstance));
+
+    RT_NOREF(pPciRawReg, ppPciRawHlpR3);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_PciRawRegister: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnDMACRegister} */
+static DECLCALLBACK(int) pdmR3DevHlp_DMACRegister(PPDMDEVINS pDevIns, PPDMDMACREG pDmacReg, PCPDMDMACHLP *ppDmacHlp)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_DMACRegister: caller='%s'/%d: pDmacReg=%p:{.u32Version=%#x, .pfnRun=%p, .pfnRegister=%p, .pfnReadMemory=%p, .pfnWriteMemory=%p, .pfnSetDREQ=%p, .pfnGetChannelMode=%p} ppDmacHlp=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pDmacReg, pDmacReg->u32Version, pDmacReg->pfnRun, pDmacReg->pfnRegister,
+             pDmacReg->pfnReadMemory, pDmacReg->pfnWriteMemory, pDmacReg->pfnSetDREQ, pDmacReg->pfnGetChannelMode, ppDmacHlp));
+
+    RT_NOREF(pDmacReg, ppDmacHlp);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_DMACRegister: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @copydoc PDMDEVHLPR3::pfnRegisterVMMDevHeap
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_RegisterVMMDevHeap(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RTR3PTR pvHeap, unsigned cbHeap)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_RegisterVMMDevHeap: caller='%s'/%d: GCPhys=%RGp pvHeap=%p cbHeap=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, GCPhys, pvHeap, cbHeap));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_RegisterVMMDevHeap: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVHLPR3,pfnFirmwareRegister}
+ */
+static DECLCALLBACK(int) pdmR3DevHlp_FirmwareRegister(PPDMDEVINS pDevIns, PCPDMFWREG pFwReg, PCPDMFWHLPR3 *ppFwHlp)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_FirmwareRegister: caller='%s'/%d: pFWReg=%p:{.u32Version=%#x, .pfnIsHardReset=%p, .u32TheEnd=%#x} ppFwHlp=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, pFwReg, pFwReg->u32Version, pFwReg->pfnIsHardReset, pFwReg->u32TheEnd, ppFwHlp));
+
+    RT_NOREF(pFwReg, ppFwHlp);
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_FirmwareRegister: caller='%s'/%d: returns %Rrc\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMReset} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMReset(PPDMDEVINS pDevIns, uint32_t fFlags)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_VMReset: caller='%s'/%d: fFlags=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, fFlags));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_VMReset: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMSuspend} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMSuspend(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_VMSuspend: caller='%s'/%d:\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_VMSuspend: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMSuspendSaveAndPowerOff} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMSuspendSaveAndPowerOff(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_VMSuspendSaveAndPowerOff: caller='%s'/%d:\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_VMSuspendSaveAndPowerOff: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMPowerOff} */
+static DECLCALLBACK(int) pdmR3DevHlp_VMPowerOff(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_VMPowerOff: caller='%s'/%d:\n",
+             pDevIns->pReg->szName, pDevIns->iInstance));
+
+    int rc = VERR_NOT_IMPLEMENTED;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_VMPowerOff: caller='%s'/%d: returns %Rrc\n", pDevIns->pReg->szName, pDevIns->iInstance, rc));
+    return rc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnA20IsEnabled} */
+static DECLCALLBACK(bool) pdmR3DevHlp_A20IsEnabled(PPDMDEVINS pDevIns)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+
+    bool fRc = false;
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_A20IsEnabled: caller='%s'/%d: returns %d\n", pDevIns->pReg->szName, pDevIns->iInstance, fRc));
+    return fRc;
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnA20Set} */
+static DECLCALLBACK(void) pdmR3DevHlp_A20Set(PPDMDEVINS pDevIns, bool fEnable)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_A20Set: caller='%s'/%d: fEnable=%d\n", pDevIns->pReg->szName, pDevIns->iInstance, fEnable));
+    AssertFailed();
+}
+
+
+/** @interface_method_impl{PDMDEVHLPR3,pfnGetCpuId} */
+static DECLCALLBACK(void) pdmR3DevHlp_GetCpuId(PPDMDEVINS pDevIns, uint32_t iLeaf,
+                                               uint32_t *pEax, uint32_t *pEbx, uint32_t *pEcx, uint32_t *pEdx)
+{
+    PDMDEV_ASSERT_DEVINS(pDevIns);
+    LogFlow(("pdmR3DevHlp_GetCpuId: caller='%s'/%d: iLeaf=%d pEax=%p pEbx=%p pEcx=%p pEdx=%p\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, iLeaf, pEax, pEbx, pEcx, pEdx));
+    AssertPtr(pEax); AssertPtr(pEbx); AssertPtr(pEcx); AssertPtr(pEdx);
+
+    AssertFailed();
+
+    LogFlow(("pdmR3DevHlp_GetCpuId: caller='%s'/%d: returns void - *pEax=%#x *pEbx=%#x *pEcx=%#x *pEdx=%#x\n",
+             pDevIns->pReg->szName, pDevIns->iInstance, *pEax, *pEbx, *pEcx, *pEdx));
+}
+
+const PDMDEVHLPR3 g_tstDevPdmDevHlpR3 =
+{
+    PDM_DEVHLPR3_VERSION,
+    pdmR3DevHlp_IOPortRegister,
+    pdmR3DevHlp_IOPortRegisterRC,
+    pdmR3DevHlp_IOPortRegisterR0,
+    pdmR3DevHlp_IOPortDeregister,
+    pdmR3DevHlp_MMIORegister,
+    pdmR3DevHlp_MMIORegisterRC,
+    pdmR3DevHlp_MMIORegisterR0,
+    pdmR3DevHlp_MMIODeregister,
+    pdmR3DevHlp_MMIO2Register,
+    pdmR3DevHlp_MMIOExPreRegister,
+    pdmR3DevHlp_MMIOExDeregister,
+    pdmR3DevHlp_MMIOExMap,
+    pdmR3DevHlp_MMIOExUnmap,
+    pdmR3DevHlp_MMIOExReduce,
+    pdmR3DevHlp_MMHyperMapMMIO2,
+    pdmR3DevHlp_MMIO2MapKernel,
+    pdmR3DevHlp_ROMRegister,
+    pdmR3DevHlp_ROMProtectShadow,
+    pdmR3DevHlp_SSMRegister,
+    pdmR3DevHlp_TMTimerCreate,
+    pdmR3DevHlp_TMUtcNow,
+    pdmR3DevHlp_PhysRead,
+    pdmR3DevHlp_PhysWrite,
+    pdmR3DevHlp_PhysGCPhys2CCPtr,
+    pdmR3DevHlp_PhysGCPhys2CCPtrReadOnly,
+    pdmR3DevHlp_PhysReleasePageMappingLock,
+    pdmR3DevHlp_PhysReadGCVirt,
+    pdmR3DevHlp_PhysWriteGCVirt,
+    pdmR3DevHlp_PhysGCPtr2GCPhys,
+    pdmR3DevHlp_MMHeapAlloc,
+    pdmR3DevHlp_MMHeapAllocZ,
+    pdmR3DevHlp_MMHeapFree,
+    pdmR3DevHlp_VMState,
+    pdmR3DevHlp_VMTeleportedAndNotFullyResumedYet,
+    pdmR3DevHlp_VMSetError,
+    pdmR3DevHlp_VMSetErrorV,
+    pdmR3DevHlp_VMSetRuntimeError,
+    pdmR3DevHlp_VMSetRuntimeErrorV,
+    pdmR3DevHlp_DBGFStopV,
+    pdmR3DevHlp_DBGFInfoRegister,
+    pdmR3DevHlp_DBGFRegRegister,
+    pdmR3DevHlp_DBGFTraceBuf,
+    pdmR3DevHlp_STAMRegister,
+    pdmR3DevHlp_STAMRegisterF,
+    pdmR3DevHlp_STAMRegisterV,
+    pdmR3DevHlp_PCIRegister,
+    pdmR3DevHlp_PCIRegisterMsi,
+    pdmR3DevHlp_PCIIORegionRegister,
+    pdmR3DevHlp_PCISetConfigCallbacks,
+    pdmR3DevHlp_PCIPhysRead,
+    pdmR3DevHlp_PCIPhysWrite,
+    pdmR3DevHlp_PCISetIrq,
+    pdmR3DevHlp_PCISetIrqNoWait,
+    pdmR3DevHlp_ISASetIrq,
+    pdmR3DevHlp_ISASetIrqNoWait,
+    pdmR3DevHlp_IoApicSendMsi,
+    pdmR3DevHlp_DriverAttach,
+    pdmR3DevHlp_DriverDetach,
+    pdmR3DevHlp_QueueCreate,
+    pdmR3DevHlp_CritSectInit,
+    pdmR3DevHlp_CritSectGetNop,
+    pdmR3DevHlp_CritSectGetNopR0,
+    pdmR3DevHlp_CritSectGetNopRC,
+    pdmR3DevHlp_SetDeviceCritSect,
+    pdmR3DevHlp_ThreadCreate,
+    pdmR3DevHlp_SetAsyncNotification,
+    pdmR3DevHlp_AsyncNotificationCompleted,
+    pdmR3DevHlp_RTCRegister,
+    pdmR3DevHlp_PCIBusRegister,
+    pdmR3DevHlp_PICRegister,
+    pdmR3DevHlp_APICRegister,
+    pdmR3DevHlp_IOAPICRegister,
+    pdmR3DevHlp_HPETRegister,
+    pdmR3DevHlp_PciRawRegister,
+    pdmR3DevHlp_DMACRegister,
+    pdmR3DevHlp_DMARegister,
+    pdmR3DevHlp_DMAReadMemory,
+    pdmR3DevHlp_DMAWriteMemory,
+    pdmR3DevHlp_DMASetDREQ,
+    pdmR3DevHlp_DMAGetChannelMode,
+    pdmR3DevHlp_DMASchedule,
+    pdmR3DevHlp_CMOSWrite,
+    pdmR3DevHlp_CMOSRead,
+    pdmR3DevHlp_AssertEMT,
+    pdmR3DevHlp_AssertOther,
+    pdmR3DevHlp_LdrGetRCInterfaceSymbols,
+    pdmR3DevHlp_LdrGetR0InterfaceSymbols,
+    pdmR3DevHlp_CallR0,
+    pdmR3DevHlp_VMGetSuspendReason,
+    pdmR3DevHlp_VMGetResumeReason,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    pdmR3DevHlp_GetUVM,
+    pdmR3DevHlp_GetVM,
+    pdmR3DevHlp_GetVMCPU,
+    pdmR3DevHlp_GetCurrentCpuId,
+    pdmR3DevHlp_RegisterVMMDevHeap,
+    pdmR3DevHlp_FirmwareRegister,
+    pdmR3DevHlp_VMReset,
+    pdmR3DevHlp_VMSuspend,
+    pdmR3DevHlp_VMSuspendSaveAndPowerOff,
+    pdmR3DevHlp_VMPowerOff,
+    pdmR3DevHlp_A20IsEnabled,
+    pdmR3DevHlp_A20Set,
+    pdmR3DevHlp_GetCpuId,
+    pdmR3DevHlp_TMTimeVirtGet,
+    pdmR3DevHlp_TMTimeVirtGetFreq,
+    pdmR3DevHlp_TMTimeVirtGetNano,
+    pdmR3DevHlp_GetSupDrvSession,
+    pdmR3DevHlp_QueryGenericUserObject,
+    PDM_DEVHLPR3_VERSION /* the end */
+};
+
diff --git a/src/VBox/Devices/testcase/tstDevicePlugin.h b/src/VBox/Devices/testcase/tstDevicePlugin.h
new file mode 100644
index 0000000..44475a9
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDevicePlugin.h
@@ -0,0 +1,125 @@
+/** @file
+ * tstDevice: Plugin API.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___tstDevicePlugin_h
+#define ___tstDevicePlugin_h
+
+#include <VBox/types.h>
+
+/**
+ * Config item type.
+ */
+typedef enum TSTDEVCFGITEMTYPE
+{
+    /** Invalid type. */
+    TSTDEVCFGITEMTYPE_INVALID = 0,
+    /** String type. */
+    TSTDEVCFGITEMTYPE_STRING,
+    /** Integer value encoded in the string. */
+    TSTDEVCFGITEMTYPE_INTEGER,
+    /** Raw bytes. */
+    TSTDEVCFGITEMTYPE_BYTES,
+    /** 32bit hack. */
+    TSTDEVCFGITEMTYPE_32BIT_HACK = 0x7fffffff
+} TSTDEVCFGITEMTYPE;
+/** Pointer to a config item type. */
+typedef TSTDEVCFGITEMTYPE *PTSTDEVCFGITEMTYPE;
+
+
+/**
+ * Testcase config item.
+ */
+typedef struct TSTDEVCFGITEM
+{
+    /** The key of the item. */
+    const char          *pszKey;
+    /** Type of the config item. */
+    TSTDEVCFGITEMTYPE   enmType;
+    /** The value of the item (as a string/number of bytes to make static
+     * instantiation easier). */
+    const char          *pszVal;
+} TSTDEVCFGITEM;
+/** Pointer to a testcase config item. */
+typedef TSTDEVCFGITEM *PTSTDEVCFGITEM;
+/** Pointer to a constant testcase config item. */
+typedef const TSTDEVCFGITEM *PCTSTDEVCFGITEM;
+
+
+/** Device under test handle. */
+typedef struct TSTDEVDUTINT *TSTDEVDUT;
+
+/**
+ * Testcase registration structure.
+ */
+typedef struct TSTDEVTESTCASEREG
+{
+    /** Testcase name. */
+    char                szName[16];
+    /** Testcase description. */
+    const char          *pszDesc;
+    /** The device name the testcase handles. */
+    char                szDevName[16];
+    /** Flags for this testcase. */
+    uint32_t            fFlags;
+    /** CFGM configuration for the device to be instantiated. */
+    PCTSTDEVCFGITEM     paDevCfg;
+
+    /**
+     * Testcase entry point.
+     *
+     * @returns VBox status code.
+     * @param   hDut      Handle of the device under test.
+     */
+    DECLR3CALLBACKMEMBER(int, pfnTestEntry, (TSTDEVDUT hDut));
+} TSTDEVTESTCASEREG;
+/** Pointer to a testcase registration structure. */
+typedef TSTDEVTESTCASEREG *PTSTDEVTESTCASEREG;
+/** Pointer to a constant testcase registration structure. */
+typedef const TSTDEVTESTCASEREG *PCTSTDEVTESTCASEREG;
+
+
+/**
+ * Testcase register callbacks structure.
+ */
+typedef struct TSTDEVPLUGINREGISTER
+{
+    /**
+     * Registers a new testcase.
+     *
+     * @returns VBox status code.
+     * @param   pvUser       Opaque user data given in the plugin load callback.
+     * @param   pTestcaseReg The testcase descriptor to register.
+     */
+    DECLR3CALLBACKMEMBER(int, pfnRegisterTestcase, (void *pvUser, PCTSTDEVTESTCASEREG pTestcaseReg));
+
+} TSTDEVPLUGINREGISTER;
+/** Pointer to a backend register callbacks structure. */
+typedef TSTDEVPLUGINREGISTER *PTSTDEVPLUGINREGISTER;
+
+
+/**
+ * Initialization entry point called by the device test framework when
+ * a plugin is loaded.
+ *
+ * @returns VBox status code.
+ * @param   pvUser             Opaque user data passed in the register callbacks.
+ * @param   pRegisterCallbacks Pointer to the register callbacks structure.
+ */
+typedef DECLCALLBACK(int) FNTSTDEVPLUGINLOAD(void *pvUser, PTSTDEVPLUGINREGISTER pRegisterCallbacks);
+typedef FNTSTDEVPLUGINLOAD *PFNTSTDEVPLUGINLOAD;
+#define TSTDEV_PLUGIN_LOAD_NAME "TSTDevPluginLoad"
+
+#endif
diff --git a/src/VBox/Devices/testcase/tstDeviceSUP.cpp b/src/VBox/Devices/testcase/tstDeviceSUP.cpp
new file mode 100644
index 0000000..54cff5d
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDeviceSUP.cpp
@@ -0,0 +1,251 @@
+/* $Id: tstDeviceSUP.cpp $ */
+/** @file
+ * tstDevice - Test framework for PDM devices/drivers, SUP library exports.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEFAULT /** @todo */
+#include <VBox/sup.h>
+
+#include <iprt/mem.h>
+#include <iprt/semaphore.h>
+
+#include "tstDeviceInternal.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+
+SUPR3DECL(int) SUPR3HardenedLdrLoadAppPriv(const char *pszFilename, PRTLDRMOD phLdrMod, uint32_t fFlags, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(fFlags, pErrInfo);
+    int rc = VINF_SUCCESS;
+
+    if (!RTStrCmp(pszFilename, "VBoxVMM"))
+        rc = RTLdrLoad("tstDeviceVBoxVMMStubs", phLdrMod);
+    else
+    {
+        /* Implement loading of any missing libraries here. */
+        AssertFailed();
+        rc = VERR_NOT_FOUND;
+    }
+
+    return rc;
+}
+
+
+SUPDECL(int) SUPSemEventCreate(PSUPDRVSESSION pSession, PSUPSEMEVENT phEvent)
+{
+    PTSTDEVSUPDRVSESSION pThis = TSTDEV_PSUPDRVSESSION_2_PTSTDEVSUPDRVSESSION(pSession);
+    int rc = VINF_SUCCESS;
+    PTSTDEVSUPSEMEVENT pSupSem = (PTSTDEVSUPSEMEVENT)RTMemAllocZ(sizeof(TSTDEVSUPSEMEVENT));
+
+    if (VALID_PTR(pSupSem))
+    {
+        pSupSem->fMulti = false;
+        rc = RTSemEventCreate(&pSupSem->u.hSemEvt);
+        if (RT_SUCCESS(rc))
+        {
+            RTListAppend(&pThis->LstSupSem, &pSupSem->NdSupSem);
+            *phEvent = TSTDEV_PTSTDEVSUPSEMEVENT_2_SUPSEMEVENT(pSupSem);
+        }
+        else
+            RTMemFree(pSupSem);
+    }
+    else
+        rc = VERR_NO_MEMORY;
+
+    return rc;
+}
+
+SUPDECL(int) SUPSemEventClose(PSUPDRVSESSION pSession, SUPSEMEVENT hEvent)
+{
+    PTSTDEVSUPDRVSESSION pThis = TSTDEV_PSUPDRVSESSION_2_PTSTDEVSUPDRVSESSION(pSession);
+    PTSTDEVSUPSEMEVENT pSupSem = TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(hEvent);
+
+    PTSTDEVSUPSEMEVENT pIt;
+    RTListForEach(&pThis->LstSupSem, pIt, TSTDEVSUPSEMEVENT, NdSupSem)
+    {
+        if (pIt == pSupSem)
+        {
+            AssertReturn(!pSupSem->fMulti, VERR_INVALID_HANDLE);
+            RTListNodeRemove(&pSupSem->NdSupSem);
+            RTSemEventDestroy(pSupSem->u.hSemEvt);
+            RTMemFree(pSupSem);
+            return VINF_OBJECT_DESTROYED;
+        }
+    }
+
+    AssertFailed();
+    return VERR_INVALID_HANDLE;
+}
+
+SUPDECL(int) SUPSemEventSignal(PSUPDRVSESSION pSession, SUPSEMEVENT hEvent)
+{
+    RT_NOREF(pSession);
+    PTSTDEVSUPSEMEVENT pSupSem = TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(hEvent);
+    AssertReturn(!pSupSem->fMulti, VERR_INVALID_HANDLE);
+
+    return RTSemEventSignal(pSupSem->u.hSemEvt);
+}
+
+SUPDECL(int) SUPSemEventWait(PSUPDRVSESSION pSession, SUPSEMEVENT hEvent, uint32_t cMillies)
+{
+    RT_NOREF(pSession);
+    PTSTDEVSUPSEMEVENT pSupSem = TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(hEvent);
+    AssertReturn(!pSupSem->fMulti, VERR_INVALID_HANDLE);
+
+    return RTSemEventWait(pSupSem->u.hSemEvt, cMillies);
+}
+
+SUPDECL(int) SUPSemEventWaitNoResume(PSUPDRVSESSION pSession, SUPSEMEVENT hEvent, uint32_t cMillies)
+{
+    RT_NOREF(pSession);
+    PTSTDEVSUPSEMEVENT pSupSem = TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(hEvent);
+    AssertReturn(!pSupSem->fMulti, VERR_INVALID_HANDLE);
+
+    return RTSemEventWaitNoResume(pSupSem->u.hSemEvt, cMillies);
+}
+
+SUPDECL(int) SUPSemEventWaitNsAbsIntr(PSUPDRVSESSION pSession, SUPSEMEVENT hEvent, uint64_t uNsTimeout)
+{
+    RT_NOREF(pSession);
+    PTSTDEVSUPSEMEVENT pSupSem = TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(hEvent);
+    AssertReturn(!pSupSem->fMulti, VERR_INVALID_HANDLE);
+
+#if 0
+    return RTSemEventWaitEx(pSupSem->u.hSemEvt,
+                            RTSEMWAIT_FLAGS_INTERRUPTIBLE | RTSEMWAIT_FLAGS_ABSOLUTE | RTSEMWAIT_FLAGS_NANOSECS,
+                            uNsTimeout);
+#else
+    RT_NOREF(uNsTimeout);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
+
+SUPDECL(int) SUPSemEventWaitNsRelIntr(PSUPDRVSESSION pSession, SUPSEMEVENT hEvent, uint64_t cNsTimeout)
+{
+    RT_NOREF(pSession);
+    PTSTDEVSUPSEMEVENT pSupSem = TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(hEvent);
+    AssertReturn(!pSupSem->fMulti, VERR_INVALID_HANDLE);
+
+#if 0
+    return RTSemEventWaitEx(pSupSem->u.hSemEvt,
+                            RTSEMWAIT_FLAGS_INTERRUPTIBLE | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_NANOSECS,
+                            cNsTimeout);
+#else
+    RT_NOREF(cNsTimeout);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
+
+SUPDECL(uint32_t) SUPSemEventGetResolution(PSUPDRVSESSION pSession)
+{
+    RT_NOREF(pSession);
+#if 0
+    return RTSemEventGetResolution();
+#else
+    AssertFailed();
+    return 0;
+#endif
+}
+
+SUPDECL(int) SUPSemEventMultiCreate(PSUPDRVSESSION pSession, PSUPSEMEVENTMULTI phEventMulti)
+{
+    RT_NOREF(pSession, phEventMulti);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiClose(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti)
+{
+    RT_NOREF(pSession, hEventMulti);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiSignal(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti)
+{
+    RT_NOREF(pSession, hEventMulti);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiReset(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti)
+{
+    RT_NOREF(pSession, hEventMulti);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiWait(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti, uint32_t cMillies)
+{
+    RT_NOREF(pSession, hEventMulti, cMillies);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiWaitNoResume(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti, uint32_t cMillies)
+{
+    RT_NOREF(pSession, hEventMulti, cMillies);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiWaitNsAbsIntr(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti, uint64_t uNsTimeout)
+{
+    RT_NOREF(pSession, hEventMulti, uNsTimeout);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(int) SUPSemEventMultiWaitNsRelIntr(PSUPDRVSESSION pSession, SUPSEMEVENTMULTI hEventMulti, uint64_t cNsTimeout)
+{
+    RT_NOREF(pSession, hEventMulti, cNsTimeout);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+SUPDECL(uint32_t) SUPSemEventMultiGetResolution(PSUPDRVSESSION pSession)
+{
+    RT_NOREF(pSession);
+    AssertFailed();
+    return 0;
+}
+
diff --git a/src/VBox/Devices/testcase/tstDeviceStructSize.cpp b/src/VBox/Devices/testcase/tstDeviceStructSize.cpp
index 95ade9a..cea7940 100644
--- a/src/VBox/Devices/testcase/tstDeviceStructSize.cpp
+++ b/src/VBox/Devices/testcase/tstDeviceStructSize.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
index 441f82f..1afeb1b 100644
--- a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
+++ b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1898,7 +1898,7 @@ int main()
     GEN_CHECK_OFF(HDASTATE, SinkMicIn);
 #endif
     GEN_CHECK_OFF(HDASTATE, u64WalClk);
-    GEN_CHECK_OFF(HDASTATE, u8RespIntCnt);
+    GEN_CHECK_OFF(HDASTATE, u16RespIntCnt);
     GEN_CHECK_OFF(HDASTATE, u8IRQL);
 
 #ifdef VBOX_WITH_NVME_IMPL
diff --git a/src/VBox/Devices/testcase/tstDeviceVMM.cpp b/src/VBox/Devices/testcase/tstDeviceVMM.cpp
new file mode 100644
index 0000000..380b5f0
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDeviceVMM.cpp
@@ -0,0 +1,1108 @@
+/* $Id: tstDeviceVMM.cpp $ */
+/** @file
+ * tstDevice - Test framework for PDM devices/drivers, VMM callbacks implementation.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEFAULT /** @todo */
+#include <VBox/types.h>
+#include <VBox/version.h>
+#include <VBox/vmm/pdmpci.h>
+
+#include <iprt/mem.h>
+
+#include "tstDeviceInternal.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+
+/** Frequency of the real clock. */
+#define TMCLOCK_FREQ_REAL       UINT32_C(1000)
+/** Frequency of the virtual clock. */
+#define TMCLOCK_FREQ_VIRTUAL    UINT32_C(1000000000)
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+
+/**
+ * Resolves a path reference to a configuration item.
+ *
+ * @returns VBox status code.
+ * @param   paDevCfg        The array of config items.
+ * @param   pszName         Name of a byte string value.
+ * @param   ppItem          Where to store the pointer to the item.
+ */
+static int tstDev_CfgmR3ResolveItem(PCTSTDEVCFGITEM paDevCfg, const char *pszName, PCTSTDEVCFGITEM *ppItem)
+{
+    *ppItem = NULL;
+    if (!paDevCfg)
+        return VERR_CFGM_VALUE_NOT_FOUND;
+
+    size_t          cchName = strlen(pszName);
+    PCTSTDEVCFGITEM pDevCfgItem = paDevCfg;
+    while (pDevCfgItem->pszKey != NULL)
+    {
+        size_t cchKey = strlen(pDevCfgItem->pszKey);
+        if (cchName == cchKey)
+        {
+            int iDiff = memcmp(pszName, pDevCfgItem->pszKey, cchName);
+            if (iDiff <= 0)
+            {
+                if (iDiff != 0)
+                    break;
+                *ppItem = pDevCfgItem;
+                return VINF_SUCCESS;
+            }
+        }
+
+        /* next */
+        pDevCfgItem++;
+    }
+    return VERR_CFGM_VALUE_NOT_FOUND;
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_CFGMR3AreValuesValid(PCFGMNODE pNode, const char *pszzValid)
+{
+    if (pNode && pNode->pDut->pTestcaseReg->paDevCfg)
+    {
+        PCTSTDEVCFGITEM pDevCfgItem = pNode->pDut->pTestcaseReg->paDevCfg;
+        while (pDevCfgItem->pszKey != NULL)
+        {
+            size_t cchKey = strlen(pDevCfgItem->pszKey);
+
+            /* search pszzValid for the name */
+            const char *psz = pszzValid;
+            while (*psz)
+            {
+                size_t cch = strlen(psz);
+                if (    cch == cchKey
+                    &&  !memcmp(psz, pDevCfgItem->pszKey, cch))
+                    break;
+
+                /* next */
+                psz += cch + 1;
+            }
+
+            /* if at end of pszzValid we didn't find it => failure */
+            if (!*psz)
+                return false;
+
+            pDevCfgItem++;
+        }
+    }
+
+    return true;
+}
+
+
+static DECLCALLBACK(void) tstDevVmm_CFGMR3Dump(PCFGMNODE pRoot)
+{
+    RT_NOREF(pRoot);
+    AssertFailed();
+}
+
+
+static DECLCALLBACK(PCFGMNODE) tstDevVmm_CFGMR3GetChild(PCFGMNODE pNode, const char *pszPath)
+{
+    RT_NOREF(pNode, pszPath);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(PCFGMNODE) tstDevVmm_CFGMR3GetChildFV(PCFGMNODE pNode, const char *pszPathFormat, va_list Args)
+{
+    RT_NOREF(pNode, pszPathFormat, Args);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(PCFGMNODE) tstDevVmm_CFGMR3GetFirstChild(PCFGMNODE pNode)
+{
+    RT_NOREF(pNode);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3GetName(PCFGMNODE pCur, char *pszName, size_t cchName)
+{
+    RT_NOREF(pCur, pszName, cchName);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(PCFGMNODE) tstDevVmm_CFGMR3GetNextChild(PCFGMNODE pCur)
+{
+    RT_NOREF(pCur);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(PCFGMNODE) tstDevVmm_CFGMR3GetParent(PCFGMNODE pNode)
+{
+    RT_NOREF(pNode);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(PCFGMNODE) tstDevVmm_CFGMR3GetRoot(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3InsertNode(PCFGMNODE pNode, const char *pszName, PCFGMNODE *ppChild)
+{
+    RT_NOREF(pNode, pszName, ppChild);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3InsertNodeFV(PCFGMNODE pNode, PCFGMNODE *ppChild,
+                                                      const char *pszNameFormat, va_list Args)
+{
+    RT_NOREF(pNode, ppChild, pszNameFormat, Args);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3InsertString(PCFGMNODE pNode, const char *pszName, const char *pszString)
+{
+    RT_NOREF(pNode, pszName, pszString);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3QueryBytes(PCFGMNODE pNode, const char *pszName, void *pvData, size_t cbData)
+{
+    RT_NOREF(pNode, pszName, pvData, cbData);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3QueryInteger(PCFGMNODE pNode, const char *pszName, uint64_t *pu64)
+{
+    if (!pNode)
+        return VERR_CFGM_NO_PARENT;
+
+    PCTSTDEVCFGITEM pCfgItem;
+    int rc = tstDev_CfgmR3ResolveItem(pNode->pDut->pTestcaseReg->paDevCfg, pszName, &pCfgItem);
+    if (RT_SUCCESS(rc))
+    {
+        if (pCfgItem->enmType == TSTDEVCFGITEMTYPE_INTEGER)
+            *pu64 = RTStrToUInt64(pCfgItem->pszVal);
+        else
+            rc = VERR_CFGM_NOT_INTEGER;
+    }
+
+    return rc;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3QuerySize(PCFGMNODE pNode, const char *pszName, size_t *pcb)
+{
+    if (!pNode)
+        return VERR_CFGM_NO_PARENT;
+
+    PCTSTDEVCFGITEM pCfgItem;
+    int rc = tstDev_CfgmR3ResolveItem(pNode->pDut->pTestcaseReg->paDevCfg, pszName, &pCfgItem);
+    if (RT_SUCCESS(rc))
+    {
+        switch (pCfgItem->enmType)
+        {
+            case TSTDEVCFGITEMTYPE_INTEGER:
+                *pcb = sizeof(uint64_t);
+                break;
+
+            case TSTDEVCFGITEMTYPE_STRING:
+                *pcb = strlen(pCfgItem->pszVal) + 1;
+                break;
+
+            case TSTDEVCFGITEMTYPE_BYTES:
+                AssertFailed();
+                break;
+
+            default:
+                rc = VERR_CFGM_IPE_1;
+                AssertMsgFailed(("Invalid value type %d\n", pCfgItem->enmType));
+                break;
+        }
+    }
+    return rc;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3QueryString(PCFGMNODE pNode, const char *pszName, char *pszString, size_t cchString)
+{
+    if (!pNode)
+        return VERR_CFGM_NO_PARENT;
+
+    PCTSTDEVCFGITEM pCfgItem;
+    int rc = tstDev_CfgmR3ResolveItem(pNode->pDut->pTestcaseReg->paDevCfg, pszName, &pCfgItem);
+    if (RT_SUCCESS(rc))
+    {
+        switch (pCfgItem->enmType)
+        {
+            case TSTDEVCFGITEMTYPE_STRING:
+            {
+                size_t cchVal = strlen(pCfgItem->pszVal);
+                if (cchString <= cchVal + 1)
+                    memcpy(pszString, pCfgItem->pszVal, cchVal);
+                else
+                    rc = VERR_CFGM_NOT_ENOUGH_SPACE;
+                break;
+            }
+            case TSTDEVCFGITEMTYPE_INTEGER:
+            case TSTDEVCFGITEMTYPE_BYTES:
+            default:
+                rc = VERR_CFGM_IPE_1;
+                AssertMsgFailed(("Invalid value type %d\n", pCfgItem->enmType));
+                break;
+        }
+    }
+    else
+        rc = VERR_CFGM_VALUE_NOT_FOUND;
+
+    return rc;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3QueryStringAlloc(PCFGMNODE pNode, const char *pszName, char **ppszString)
+{
+    RT_NOREF(pNode, pszName, ppszString);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3QueryStringAllocDef(PCFGMNODE pNode, const char *pszName, char **ppszString, const char *pszDef)
+{
+    RT_NOREF(pNode, pszName, ppszString, pszDef);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(void) tstDevVmm_CFGMR3RemoveNode(PCFGMNODE pNode)
+{
+    RT_NOREF(pNode);
+    AssertFailed();
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_CFGMR3ValidateConfig(PCFGMNODE pNode, const char *pszNode,
+                                                        const char *pszValidValues, const char *pszValidNodes,
+                                                        const char *pszWho, uint32_t uInstance)
+{
+    RT_NOREF(pNode, pszNode, pszValidValues, pszValidNodes, pszWho, uInstance);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_IOMIOPortWrite(PVM pVM, PVMCPU pVCpu, RTIOPORT Port, uint32_t u32Value, size_t cbValue)
+{
+    RT_NOREF(pVM, pVCpu, Port, u32Value, cbValue);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_IOMMMIOMapMMIO2Page(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysRemapped, uint64_t fPageFlags)
+{
+    RT_NOREF(pVM, GCPhys, GCPhysRemapped, fPageFlags);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_IOMMMIOResetRegion(PVM pVM, RTGCPHYS GCPhys)
+{
+    RT_NOREF(pVM, GCPhys);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_MMHyperAlloc(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv)
+{
+    RT_NOREF(pVM, cb, uAlignment, enmTag, ppv);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_MMHyperFree(PVM pVM, void *pv)
+{
+    RT_NOREF(pVM, pv);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(RTR0PTR) tstDevVmm_MMHyperR3ToR0(PVM pVM, RTR3PTR R3Ptr)
+{
+    RT_NOREF(pVM, R3Ptr);
+    AssertFailed();
+    return NIL_RTR0PTR;
+}
+
+
+static DECLCALLBACK(RTRCPTR) tstDevVmm_MMHyperR3ToRC(PVM pVM, RTR3PTR R3Ptr)
+{
+    RT_NOREF(pVM, R3Ptr);
+    AssertFailed();
+    return NIL_RTRCPTR;
+}
+
+
+static DECLCALLBACK(void) tstDevVmm_MMR3HeapFree(void *pv)
+{
+    PTSTDEVMMHEAPALLOC pHeapAlloc = (PTSTDEVMMHEAPALLOC)((uint8_t *)pv - RT_OFFSETOF(TSTDEVMMHEAPALLOC, abAlloc[0]));
+    PTSTDEVDUTINT pThis = pHeapAlloc->pDut;
+
+    tstDevDutLockExcl(pThis);
+    RTListNodeRemove(&pHeapAlloc->NdMmHeap);
+    tstDevDutUnlockExcl(pThis);
+
+    /* Poison */
+    memset(&pHeapAlloc->abAlloc[0], 0xfc, pHeapAlloc->cbAlloc);
+    RTMemFree(pHeapAlloc);
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv)
+{
+    RT_NOREF(pVM, cb, uAlignment, enmTag, ppv);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_MMR3PhysGetRamSize(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_MMR3PhysGetRamSizeAbove4GB(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(uint32_t) tstDevVmm_MMR3PhysGetRamSizeBelow4GB(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMCritSectEnterDebug(PPDMCRITSECT pCritSect, int rcBusy, RTHCUINTPTR uId, RT_SRC_POS_DECL)
+{
+    RT_NOREF(rcBusy, uId, RT_SRC_POS_ARGS);
+    return RTCritSectEnter(&pCritSect->s.CritSect);
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_PDMCritSectIsInitialized(PCPDMCRITSECT pCritSect)
+{
+    RT_NOREF(pCritSect);
+    AssertFailed();
+    return false;
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_PDMCritSectIsOwner(PCPDMCRITSECT pCritSect)
+{
+    return RTCritSectIsOwner(&pCritSect->s.CritSect);
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMCritSectLeave(PPDMCRITSECT pCritSect)
+{
+    return RTCritSectLeave(&pCritSect->s.CritSect);
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMCritSectTryEnterDebug(PPDMCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
+{
+    RT_NOREF(pCritSect, uId, RT_SRC_POS_ARGS);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMHCCritSectScheduleExitEvent(PPDMCRITSECT pCritSect, SUPSEMEVENT hEventToSignal)
+{
+    RT_NOREF(pCritSect, hEventToSignal);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_PDMNsAllocateBandwidth(PPDMNSFILTER pFilter, size_t cbTransfer)
+{
+    RT_NOREF(pFilter, cbTransfer);
+    AssertFailed();
+    return false;
+}
+
+
+static DECLCALLBACK(PPDMQUEUEITEMCORE) tstDevVmm_PDMQueueAlloc(PPDMQUEUE pQueue)
+{
+    RT_NOREF(pQueue);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_PDMQueueFlushIfNecessary(PPDMQUEUE pQueue)
+{
+    RT_NOREF(pQueue);
+    AssertFailed();
+    return false;
+}
+
+
+static DECLCALLBACK(void) tstDevVmm_PDMQueueInsert(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem)
+{
+    RT_NOREF(pQueue, pItem);
+    AssertFailed();
+}
+
+
+static DECLCALLBACK(R0PTRTYPE(PPDMQUEUE)) tstDevVmm_PDMQueueR0Ptr(PPDMQUEUE pQueue)
+{
+    RT_NOREF(pQueue);
+    AssertFailed();
+    return NIL_RTR0PTR;
+}
+
+
+static DECLCALLBACK(RCPTRTYPE(PPDMQUEUE)) tstDevVmm_PDMQueueRCPtr(PPDMQUEUE pQueue)
+{
+    RT_NOREF(pQueue);
+    AssertFailed();
+    return NIL_RTRCPTR;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpClose(PPDMASYNCCOMPLETIONENDPOINT pEndpoint)
+{
+    RT_NOREF(pEndpoint);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpCreateForFile(PPPDMASYNCCOMPLETIONENDPOINT ppEndpoint,
+                                                                       const char *pszFilename, uint32_t fFlags,
+                                                                       PPDMASYNCCOMPLETIONTEMPLATE pTemplate)
+{
+    RT_NOREF(ppEndpoint, pszFilename, fFlags, pTemplate);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpFlush(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, void *pvUser,
+                                                               PPPDMASYNCCOMPLETIONTASK ppTask)
+{
+    RT_NOREF(pEndpoint, pvUser, ppTask);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpGetSize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t *pcbSize)
+{
+    RT_NOREF(pEndpoint, pcbSize);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpRead(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, RTFOFF off,
+                                                              PCRTSGSEG paSegments, unsigned cSegments,
+                                                              size_t cbRead, void *pvUser,
+                                                              PPPDMASYNCCOMPLETIONTASK ppTask)
+{
+    RT_NOREF(pEndpoint, off, paSegments, cSegments, cbRead, pvUser, ppTask);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpSetBwMgr(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, const char *pszBwMgr)
+{
+    RT_NOREF(pEndpoint, pszBwMgr);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpSetSize(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t cbSize)
+{
+    RT_NOREF(pEndpoint, cbSize);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionEpWrite(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, RTFOFF off,
+                                                               PCRTSGSEG paSegments, unsigned cSegments,
+                                                               size_t cbWrite, void *pvUser,
+                                                               PPPDMASYNCCOMPLETIONTASK ppTask)
+{
+    RT_NOREF(pEndpoint, off, paSegments, cSegments, cbWrite, pvUser, ppTask);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3AsyncCompletionTemplateDestroy(PPDMASYNCCOMPLETIONTEMPLATE pTemplate)
+{
+    RT_NOREF(pTemplate);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheClear(PPDMBLKCACHE pBlkCache)
+{
+    RT_NOREF(pBlkCache);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheDiscard(PPDMBLKCACHE pBlkCache, PCRTRANGE paRanges,
+                                                        unsigned cRanges, void *pvUser)
+{
+    RT_NOREF(pBlkCache, paRanges, cRanges, pvUser);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheFlush(PPDMBLKCACHE pBlkCache, void *pvUser)
+{
+    RT_NOREF(pBlkCache, pvUser);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheIoXferComplete(PPDMBLKCACHE pBlkCache, PPDMBLKCACHEIOXFER hIoXfer, int rcIoXfer)
+{
+    RT_NOREF(pBlkCache, hIoXfer, rcIoXfer);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheRead(PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbRead, void *pvUser)
+{
+    RT_NOREF(pBlkCache, off, pSgBuf, cbRead, pvUser);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheRelease(PPDMBLKCACHE pBlkCache)
+{
+    RT_NOREF(pBlkCache);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheResume(PPDMBLKCACHE pBlkCache)
+{
+    RT_NOREF(pBlkCache);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheSuspend(PPDMBLKCACHE pBlkCache)
+{
+    RT_NOREF(pBlkCache);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3BlkCacheWrite(PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbWrite, void *pvUser)
+{
+    RT_NOREF(pBlkCache, off, pSgBuf, cbWrite, pvUser);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3CritSectDelete(PPDMCRITSECT pCritSect)
+{
+    RT_NOREF(pCritSect);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3QueryLun(PUVM pUVM, const char *pszDevice, unsigned iInstance, unsigned iLun, PPPDMIBASE ppBase)
+{
+    RT_NOREF(pUVM, pszDevice, iInstance, iLun, ppBase);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3ThreadDestroy(PPDMTHREAD pThread, int *pRcThread)
+{
+    RT_NOREF(pThread, pRcThread);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3ThreadResume(PPDMTHREAD pThread)
+{
+    RT_NOREF(pThread);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3ThreadSleep(PPDMTHREAD pThread, RTMSINTERVAL cMillies)
+{
+    RT_NOREF(pThread, cMillies);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_PDMR3ThreadSuspend(PPDMTHREAD pThread)
+{
+    RT_NOREF(pThread);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_TMCpuTicksPerSecond(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMR3TimerDestroy(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMR3TimerLoad(PTMTIMERR3 pTimer, PSSMHANDLE pSSM)
+{
+    RT_NOREF(pTimer, pSSM);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMR3TimerSave(PTMTIMERR3 pTimer, PSSMHANDLE pSSM)
+{
+    RT_NOREF(pTimer, pSSM);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMR3TimerSetCritSect(PTMTIMERR3 pTimer, PPDMCRITSECT pCritSect)
+{
+    RT_NOREF(pTimer, pCritSect);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_TMTimerFromMilli(PTMTIMER pTimer, uint64_t cMilliSecs)
+{
+    RT_NOREF(pTimer, cMilliSecs);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_TMTimerFromNano(PTMTIMER pTimer, uint64_t cNanoSecs)
+{
+    RT_NOREF(pTimer, cNanoSecs);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_TMTimerGet(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_TMTimerGetFreq(PTMTIMER pTimer)
+{
+    switch (pTimer->enmClock)
+    {
+        case TMCLOCK_VIRTUAL:
+        case TMCLOCK_VIRTUAL_SYNC:
+            return TMCLOCK_FREQ_VIRTUAL;
+
+        case TMCLOCK_REAL:
+            return TMCLOCK_FREQ_REAL;
+
+        default:
+            AssertMsgFailed(("Invalid enmClock=%d\n", pTimer->enmClock));
+            return 0;
+    }
+}
+
+
+static DECLCALLBACK(uint64_t) tstDevVmm_TMTimerGetNano(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+    return 0;
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_TMTimerIsActive(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+    return false;
+}
+
+
+static DECLCALLBACK(bool) tstDevVmm_TMTimerIsLockOwner(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+    return false;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerLock(PTMTIMER pTimer, int rcBusy)
+{
+    RT_NOREF(pTimer, rcBusy);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(PTMTIMERR0) tstDevVmm_TMTimerR0Ptr(PTMTIMER pTimer)
+{
+    return (PTMTIMERR0)pTimer;
+}
+
+
+static DECLCALLBACK(PTMTIMERRC) tstDevVmm_TMTimerRCPtr(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    /* Impossible to implement RC modules at the moment. */
+    return NIL_RTRCPTR;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerSet(PTMTIMER pTimer, uint64_t u64Expire)
+{
+    RT_NOREF(pTimer, u64Expire);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerSetFrequencyHint(PTMTIMER pTimer, uint32_t uHz)
+{
+    RT_NOREF(pTimer, uHz);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerSetMicro(PTMTIMER pTimer, uint64_t cMicrosToNext)
+{
+    RT_NOREF(pTimer, cMicrosToNext);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerSetMillies(PTMTIMER pTimer, uint32_t cMilliesToNext)
+{
+    RT_NOREF(pTimer, cMilliesToNext);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerSetNano(PTMTIMER pTimer, uint64_t cNanosToNext)
+{
+    RT_NOREF(pTimer, cNanosToNext);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_TMTimerStop(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(void) tstDevVmm_TMTimerUnlock(PTMTIMER pTimer)
+{
+    RT_NOREF(pTimer);
+    AssertFailed();
+}
+
+
+static DECLCALLBACK(PVMCPU) tstDevVmm_VMMGetCpu(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return NULL;
+}
+
+
+static DECLCALLBACK(VMCPUID) tstDevVmm_VMMGetCpuId(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return NIL_VMCPUID;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMMR3DeregisterPatchMemory(PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem)
+{
+    RT_NOREF(pVM, pPatchMem, cbPatchMem);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMMR3RegisterPatchMemory(PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem)
+{
+    RT_NOREF(pVM, pPatchMem, cbPatchMem);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(RTNATIVETHREAD) tstDevVmm_VMR3GetVMCPUNativeThread(PVM pVM)
+{
+    RT_NOREF(pVM);
+    AssertFailed();
+    return NIL_RTNATIVETHREAD;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMR3NotifyCpuDeviceReady(PVM pVM, VMCPUID idCpu)
+{
+    RT_NOREF(pVM, idCpu);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMR3ReqCallNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
+{
+    RT_NOREF(pVM, idDstCpu, pfnFunction, cArgs);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMR3ReqCallVoidNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
+{
+    RT_NOREF(pVM, idDstCpu, pfnFunction, cArgs);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMR3ReqPriorityCallWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
+{
+    RT_NOREF(pVM, idDstCpu, pfnFunction, cArgs);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) tstDevVmm_VMR3WaitForDeviceReady(PVM pVM, VMCPUID idCpu)
+{
+    RT_NOREF(pVM, idCpu);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+
+const TSTDEVVMMCALLBACKS g_tstDevVmmCallbacks =
+{
+    tstDevVmm_CFGMR3AreValuesValid,
+    tstDevVmm_CFGMR3Dump,
+    tstDevVmm_CFGMR3GetChild,
+    tstDevVmm_CFGMR3GetChildFV,
+    tstDevVmm_CFGMR3GetFirstChild,
+    tstDevVmm_CFGMR3GetName,
+    tstDevVmm_CFGMR3GetNextChild,
+    tstDevVmm_CFGMR3GetParent,
+    tstDevVmm_CFGMR3GetRoot,
+    tstDevVmm_CFGMR3InsertNode,
+    tstDevVmm_CFGMR3InsertNodeFV,
+    tstDevVmm_CFGMR3InsertString,
+    tstDevVmm_CFGMR3QueryBytes,
+    tstDevVmm_CFGMR3QueryInteger,
+    tstDevVmm_CFGMR3QuerySize,
+    tstDevVmm_CFGMR3QueryString,
+    tstDevVmm_CFGMR3QueryStringAlloc,
+    tstDevVmm_CFGMR3QueryStringAllocDef,
+    tstDevVmm_CFGMR3RemoveNode,
+    tstDevVmm_CFGMR3ValidateConfig,
+    tstDevVmm_IOMIOPortWrite,
+    tstDevVmm_IOMMMIOMapMMIO2Page,
+    tstDevVmm_IOMMMIOResetRegion,
+    tstDevVmm_MMHyperAlloc,
+    tstDevVmm_MMHyperFree,
+    tstDevVmm_MMHyperR3ToR0,
+    tstDevVmm_MMHyperR3ToRC,
+    tstDevVmm_MMR3HeapFree,
+    tstDevVmm_MMR3HyperAllocOnceNoRel,
+    tstDevVmm_MMR3PhysGetRamSize,
+    tstDevVmm_MMR3PhysGetRamSizeAbove4GB,
+    tstDevVmm_MMR3PhysGetRamSizeBelow4GB,
+    tstDevVmm_PDMCritSectEnterDebug,
+    tstDevVmm_PDMCritSectIsInitialized,
+    tstDevVmm_PDMCritSectIsOwner,
+    tstDevVmm_PDMCritSectLeave,
+    tstDevVmm_PDMCritSectTryEnterDebug,
+    tstDevVmm_PDMHCCritSectScheduleExitEvent,
+    tstDevVmm_PDMNsAllocateBandwidth,
+    tstDevVmm_PDMQueueAlloc,
+    tstDevVmm_PDMQueueFlushIfNecessary,
+    tstDevVmm_PDMQueueInsert,
+    tstDevVmm_PDMQueueR0Ptr,
+    tstDevVmm_PDMQueueRCPtr,
+    tstDevVmm_PDMR3AsyncCompletionEpClose,
+    tstDevVmm_PDMR3AsyncCompletionEpCreateForFile,
+    tstDevVmm_PDMR3AsyncCompletionEpFlush,
+    tstDevVmm_PDMR3AsyncCompletionEpGetSize,
+    tstDevVmm_PDMR3AsyncCompletionEpRead,
+    tstDevVmm_PDMR3AsyncCompletionEpSetBwMgr,
+    tstDevVmm_PDMR3AsyncCompletionEpSetSize,
+    tstDevVmm_PDMR3AsyncCompletionEpWrite,
+    tstDevVmm_PDMR3AsyncCompletionTemplateDestroy,
+    tstDevVmm_PDMR3BlkCacheClear,
+    tstDevVmm_PDMR3BlkCacheDiscard,
+    tstDevVmm_PDMR3BlkCacheFlush,
+    tstDevVmm_PDMR3BlkCacheIoXferComplete,
+    tstDevVmm_PDMR3BlkCacheRead,
+    tstDevVmm_PDMR3BlkCacheRelease,
+    tstDevVmm_PDMR3BlkCacheResume,
+    tstDevVmm_PDMR3BlkCacheSuspend,
+    tstDevVmm_PDMR3BlkCacheWrite,
+    tstDevVmm_PDMR3CritSectDelete,
+    tstDevVmm_PDMR3QueryLun,
+    tstDevVmm_PDMR3ThreadDestroy,
+    tstDevVmm_PDMR3ThreadResume,
+    tstDevVmm_PDMR3ThreadSleep,
+    tstDevVmm_PDMR3ThreadSuspend,
+    tstDevVmm_TMCpuTicksPerSecond,
+    tstDevVmm_TMR3TimerDestroy,
+    tstDevVmm_TMR3TimerLoad,
+    tstDevVmm_TMR3TimerSave,
+    tstDevVmm_TMR3TimerSetCritSect,
+    tstDevVmm_TMTimerFromMilli,
+    tstDevVmm_TMTimerFromNano,
+    tstDevVmm_TMTimerGet,
+    tstDevVmm_TMTimerGetFreq,
+    tstDevVmm_TMTimerGetNano,
+    tstDevVmm_TMTimerIsActive,
+    tstDevVmm_TMTimerIsLockOwner,
+    tstDevVmm_TMTimerLock,
+    tstDevVmm_TMTimerR0Ptr,
+    tstDevVmm_TMTimerRCPtr,
+    tstDevVmm_TMTimerSet,
+    tstDevVmm_TMTimerSetFrequencyHint,
+    tstDevVmm_TMTimerSetMicro,
+    tstDevVmm_TMTimerSetMillies,
+    tstDevVmm_TMTimerSetNano,
+    tstDevVmm_TMTimerStop,
+    tstDevVmm_TMTimerUnlock,
+    tstDevVmm_VMMGetCpu,
+    tstDevVmm_VMMGetCpuId,
+    tstDevVmm_VMMR3DeregisterPatchMemory,
+    tstDevVmm_VMMR3RegisterPatchMemory,
+    tstDevVmm_VMR3GetVMCPUNativeThread,
+    tstDevVmm_VMR3NotifyCpuDeviceReady,
+    tstDevVmm_VMR3ReqCallNoWait,
+    tstDevVmm_VMR3ReqCallVoidNoWait,
+    tstDevVmm_VMR3ReqPriorityCallWait,
+    tstDevVmm_VMR3WaitForDeviceReady
+};
+
diff --git a/src/VBox/Devices/testcase/tstDeviceVMMInternal.h b/src/VBox/Devices/testcase/tstDeviceVMMInternal.h
new file mode 100644
index 0000000..88c7fa2
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDeviceVMMInternal.h
@@ -0,0 +1,360 @@
+/* $Id: tstDeviceVMMInternal.h $ */
+/** @file
+ * tstDevice - Test framework for PDM devices/drivers, definitions of VMM internal types.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+#ifndef ___tstDeviceVMMInternal_h
+#define ___tstDeviceVMMInternal_h
+
+#include <VBox/types.h>
+#include <VBox/vmm/tm.h>
+#include <iprt/critsect.h>
+#include <iprt/list.h>
+
+RT_C_DECLS_BEGIN
+
+/** Pointer to a VMM callback table. */
+typedef struct TSTDEVVMMCALLBACKS *PTSTDEVVMMCALLBACKS;
+/** Pointer to a constant VMM callback table. */
+typedef const struct TSTDEVVMMCALLBACKS *PCTSTDEVVMMCALLBACKS;
+
+/** Pointer to the internal device under test instance. */
+typedef struct TSTDEVDUTINT *PTSTDEVDUTINT;
+/** Pointer to a constant device under test instance. */
+typedef const struct TSTDEVDUTINT *PCTSTDEVDUTINT;
+
+/**
+ * Private device instance data.
+ */
+typedef struct PDMDEVINSINT
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS            pVmmCallbacks;
+    /** Pointer to the device under test the PDM device instance is for. */
+    PTSTDEVDUTINT                   pDut;
+} PDMDEVINSINT;
+AssertCompile(sizeof(PDMDEVINSINT) <= (HC_ARCH_BITS == 32 ? 72 : 112 + 0x28));
+
+/**
+ * CFGM node structure.
+ */
+typedef struct CFGMNODE
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** Device under test this CFGM node is for. */
+    PTSTDEVDUTINT        pDut;
+    /** @todo: */
+} CFGMNODE;
+
+/**
+ * PDM queue structure.
+ */
+typedef struct PDMQUEUE
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} PDMQUEUE;
+
+/**
+ * TM timer structure.
+ */
+typedef struct TMTIMER
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** List of timers created by the device. */
+    RTLISTNODE           NdDevTimers;
+    /** Clock this timer belongs to. */
+    TMCLOCK              enmClock;
+    /** Callback to call when the timer expires. */
+    PFNTMTIMERDEV        pfnCallbackDev;
+    /** Opaque user data to pass to the callback. */
+    void                 *pvUser;
+    /** Flags. */
+    uint32_t             fFlags;
+    /** @todo: */
+} TMTIMER;
+
+/**
+ * Internal VMM structure of VMCPU
+ */
+typedef struct VMMCPU
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} VMMCPU;
+AssertCompile(sizeof(VMMCPU) <= 704);
+
+/**
+ * Internal VMM structure of VM
+ */
+typedef struct VMM
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} VMM;
+AssertCompile(sizeof(VMM) <= 1600);
+
+/**
+ * Internal VM structure of VM
+ */
+typedef struct VMINT
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} VMINT;
+AssertCompile(sizeof(VMINT) <= 24);
+
+/**
+ * Internal per vCPU user VM structure.
+ */
+typedef struct VMINTUSERPERVMCPU
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} VMINTUSERPERVMCPU;
+AssertCompile(sizeof(VMINTUSERPERVMCPU) <= 512);
+
+/**
+ * Internal user VM structure.
+ */
+typedef struct VMINTUSERPERVM
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} VMINTUSERPERVM;
+AssertCompile(sizeof(VMINTUSERPERVM) <= 512);
+
+/**
+ * Internal PDM critical section structure.
+ */
+typedef struct PDMCRITSECTINT
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** The actual critical section used for emulation. */
+    RTCRITSECT           CritSect;
+} PDMCRITSECTINT;
+AssertCompile(sizeof(PDMCRITSECTINT) <= (HC_ARCH_BITS == 32 ? 0x80 : 0xc0));
+
+/**
+ * Internal PDM thread instance data.
+ */
+typedef struct PDMTHREADINT
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS            pVmmCallbacks;
+    /** Pointer to the device under test. */
+    PTSTDEVDUTINT                   pDut;
+    /** Node for the list of PDM threads. */
+    RTLISTNODE                      NdPdmThreads;
+} PDMTHREADINT;
+AssertCompile(sizeof(PDMTHREADINT) <= 64);
+
+/**
+ * MM Heap allocation.
+ */
+typedef struct TSTDEVMMHEAPALLOC
+{
+    /** Node for the list of allocations. */
+    RTLISTNODE                      NdMmHeap;
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS            pVmmCallbacks;
+    /** Pointer to the device under test the allocation was made for. */
+    PTSTDEVDUTINT                   pDut;
+    /** Size of the allocation. */
+    size_t                          cbAlloc;
+    /** Align the next member on a 16byte boundary. */
+    size_t                          uAlignment0;
+    /** Start of the real allocation. */
+    uint8_t                         abAlloc[RT_FLEXIBLE_ARRAY];
+} TSTDEVMMHEAPALLOC;
+/** Pointer to a MM Heap allocation. */
+typedef TSTDEVMMHEAPALLOC *PTSTDEVMMHEAPALLOC;
+/** Pointer to a const MM Heap allocation. */
+typedef const TSTDEVMMHEAPALLOC *PCTSTDEVMMHEAPALLOC;
+
+AssertCompileMemberAlignment(TSTDEVMMHEAPALLOC, abAlloc, HC_ARCH_BITS == 64 ? 16 : 8);
+
+#if 0
+/**
+ * Internal PDM netshaper filter instance data.
+ */
+typedef struct PDMNSFILTER
+{
+    /** Pointer to the callback table. */
+    PCTSTDEVVMMCALLBACKS pVmmCallbacks;
+    /** @todo: */
+} PDMNSFILTER;
+#endif
+
+#define PDMCRITSECTINT_DECLARED
+#define PDMTHREADINT_DECLARED
+#define PDMDEVINSINT_DECLARED
+#define ___VMInternal_h
+#define ___VMMInternal_h
+RT_C_DECLS_END
+#include <VBox/vmm/pdmcritsect.h>
+#include <VBox/vmm/vm.h>
+#include <VBox/vmm/uvm.h>
+#include <VBox/vmm/cfgm.h>
+#include <VBox/vmm/tm.h>
+#include <VBox/vmm/pdmblkcache.h>
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/vmm/pdmqueue.h>
+#include <VBox/vmm/pdmthread.h>
+#include <VBox/vmm/cfgm.h>
+#include <VBox/vmm/mm.h>
+#include <VBox/vmm/pdmasynccompletion.h>
+#include <VBox/vmm/pdmnetshaper.h>
+#include <VBox/vmm/pgm.h>
+RT_C_DECLS_BEGIN
+
+
+/**
+ * Callback table from the VMM shim library to the PDM test framework.
+ */
+typedef struct TSTDEVVMMCALLBACKS
+{
+    DECLR3CALLBACKMEMBER(bool, pfnCFGMR3AreValuesValid, (PCFGMNODE pNode, const char *pszzValid));
+    DECLR3CALLBACKMEMBER(void, pfnCFGMR3Dump, (PCFGMNODE pRoot));
+    DECLR3CALLBACKMEMBER(PCFGMNODE, pfnCFGMR3GetChild, (PCFGMNODE pNode, const char *pszPath));
+    DECLR3CALLBACKMEMBER(PCFGMNODE, pfnCFGMR3GetChildFV, (PCFGMNODE pNode, const char *pszPathFormat, va_list Args));
+    DECLR3CALLBACKMEMBER(PCFGMNODE, pfnCFGMR3GetFirstChild, (PCFGMNODE pNode));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3GetName, (PCFGMNODE pCur, char *pszName, size_t cchName));
+    DECLR3CALLBACKMEMBER(PCFGMNODE, pfnCFGMR3GetNextChild, (PCFGMNODE pCur));
+    DECLR3CALLBACKMEMBER(PCFGMNODE, pfnCFGMR3GetParent, (PCFGMNODE pNode));
+    DECLR3CALLBACKMEMBER(PCFGMNODE, pfnCFGMR3GetRoot, (PVM pVM));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3InsertNode, (PCFGMNODE pNode, const char *pszName, PCFGMNODE *ppChild));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3InsertNodeFV, (PCFGMNODE pNode, PCFGMNODE *ppChild,
+                                                     const char *pszNameFormat, va_list Args));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3InsertString, (PCFGMNODE pNode, const char *pszName, const char *pszString));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3QueryBytes, (PCFGMNODE pNode, const char *pszName, void *pvData, size_t cbData));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3QueryInteger, (PCFGMNODE pNode, const char *pszName, uint64_t *pu64));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3QuerySize, (PCFGMNODE pNode, const char *pszName, size_t *pcb));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3QueryString, (PCFGMNODE pNode, const char *pszName, char *pszString, size_t cchString));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3QueryStringAlloc, (PCFGMNODE pNode, const char *pszName, char **ppszString));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3QueryStringAllocDef, (PCFGMNODE pNode, const char *pszName, char **ppszString, const char *pszDef));
+    DECLR3CALLBACKMEMBER(void, pfnCFGMR3RemoveNode, (PCFGMNODE pNode));
+    DECLR3CALLBACKMEMBER(int, pfnCFGMR3ValidateConfig, (PCFGMNODE pNode, const char *pszNode,
+                                                        const char *pszValidValues, const char *pszValidNodes,
+                                                        const char *pszWho, uint32_t uInstance));
+
+    DECLR3CALLBACKMEMBER(int, pfnIOMIOPortWrite, (PVM pVM, PVMCPU pVCpu, RTIOPORT Port, uint32_t u32Value, size_t cbValue));
+    DECLR3CALLBACKMEMBER(int, pfnIOMMMIOMapMMIO2Page, (PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysRemapped, uint64_t fPageFlags));
+    DECLR3CALLBACKMEMBER(int, pfnIOMMMIOResetRegion, (PVM pVM, RTGCPHYS GCPhys));
+    DECLR3CALLBACKMEMBER(int, pfnMMHyperAlloc, (PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv));
+    DECLR3CALLBACKMEMBER(int, pfnMMHyperFree, (PVM pVM, void *pv));
+    DECLR3CALLBACKMEMBER(RTR0PTR, pfnMMHyperR3ToR0, (PVM pVM, RTR3PTR R3Ptr));
+    DECLR3CALLBACKMEMBER(RTRCPTR, pfnMMHyperR3ToRC, (PVM pVM, RTR3PTR R3Ptr));
+    DECLR3CALLBACKMEMBER(void, pfnMMR3HeapFree, (void *pv));
+    DECLR3CALLBACKMEMBER(int, pfnMMR3HyperAllocOnceNoRel, (PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnMMR3PhysGetRamSize, (PVM pVM));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnMMR3PhysGetRamSizeAbove4GB, (PVM pVM));
+    DECLR3CALLBACKMEMBER(uint32_t, pfnMMR3PhysGetRamSizeBelow4GB, (PVM pVM));
+    DECLR3CALLBACKMEMBER(int, pfnPDMCritSectEnterDebug, (PPDMCRITSECT pCritSect, int rcBusy, RTHCUINTPTR uId, RT_SRC_POS_DECL));
+    DECLR3CALLBACKMEMBER(bool, pfnPDMCritSectIsInitialized, (PCPDMCRITSECT pCritSect));
+    DECLR3CALLBACKMEMBER(bool, pfnPDMCritSectIsOwner, (PCPDMCRITSECT pCritSect));
+    DECLR3CALLBACKMEMBER(int, pfnPDMCritSectLeave, (PPDMCRITSECT pCritSect));
+    DECLR3CALLBACKMEMBER(int, pfnPDMCritSectTryEnterDebug, (PPDMCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL));
+    DECLR3CALLBACKMEMBER(int, pfnPDMHCCritSectScheduleExitEvent, (PPDMCRITSECT pCritSect, SUPSEMEVENT hEventToSignal));
+    DECLR3CALLBACKMEMBER(bool, pfnPDMNsAllocateBandwidth, (PPDMNSFILTER pFilter, size_t cbTransfer));
+    DECLR3CALLBACKMEMBER(PPDMQUEUEITEMCORE, pfnPDMQueueAlloc, (PPDMQUEUE pQueue));
+    DECLR3CALLBACKMEMBER(bool, pfnPDMQueueFlushIfNecessary, (PPDMQUEUE pQueue));
+    DECLR3CALLBACKMEMBER(void, pfnPDMQueueInsert, (PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem));
+    DECLR3CALLBACKMEMBER(R0PTRTYPE(PPDMQUEUE), pfnPDMQueueR0Ptr, (PPDMQUEUE pQueue));
+    DECLR3CALLBACKMEMBER(RCPTRTYPE(PPDMQUEUE), pfnPDMQueueRCPtr, (PPDMQUEUE pQueue));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpClose, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpCreateForFile, (PPPDMASYNCCOMPLETIONENDPOINT ppEndpoint,
+                                                                       const char *pszFilename, uint32_t fFlags,
+                                                                       PPDMASYNCCOMPLETIONTEMPLATE pTemplate));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpFlush, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint, void *pvUser,
+                                                               PPPDMASYNCCOMPLETIONTASK ppTask));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpGetSize, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t *pcbSize));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpRead, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint, RTFOFF off,
+                                                              PCRTSGSEG paSegments, unsigned cSegments,
+                                                              size_t cbRead, void *pvUser,
+                                                              PPPDMASYNCCOMPLETIONTASK ppTask));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpSetBwMgr, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint, const char *pszBwMgr));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpSetSize, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t cbSize));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionEpWrite, (PPDMASYNCCOMPLETIONENDPOINT pEndpoint, RTFOFF off,
+                                                               PCRTSGSEG paSegments, unsigned cSegments,
+                                                               size_t cbWrite, void *pvUser,
+                                                               PPPDMASYNCCOMPLETIONTASK ppTask));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3AsyncCompletionTemplateDestroy, (PPDMASYNCCOMPLETIONTEMPLATE pTemplate));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheClear, (PPDMBLKCACHE pBlkCache));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheDiscard, (PPDMBLKCACHE pBlkCache, PCRTRANGE paRanges,
+                                                        unsigned cRanges, void *pvUser));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheFlush, (PPDMBLKCACHE pBlkCache, void *pvUser));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheIoXferComplete, (PPDMBLKCACHE pBlkCache, PPDMBLKCACHEIOXFER hIoXfer, int rcIoXfer));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheRead, (PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbRead, void *pvUser));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheRelease, (PPDMBLKCACHE pBlkCache));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheResume, (PPDMBLKCACHE pBlkCache));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheSuspend, (PPDMBLKCACHE pBlkCache));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3BlkCacheWrite, (PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbWrite, void *pvUser));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3CritSectDelete, (PPDMCRITSECT pCritSect));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3QueryLun, (PUVM pUVM, const char *pszDevice, unsigned iInstance, unsigned iLun, PPPDMIBASE ppBase));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3ThreadDestroy, (PPDMTHREAD pThread, int *pRcThread));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3ThreadResume, (PPDMTHREAD pThread));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3ThreadSleep, (PPDMTHREAD pThread, RTMSINTERVAL cMillies));
+    DECLR3CALLBACKMEMBER(int, pfnPDMR3ThreadSuspend, (PPDMTHREAD pThread));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnTMCpuTicksPerSecond, (PVM pVM));
+    DECLR3CALLBACKMEMBER(int, pfnTMR3TimerDestroy, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(int, pfnTMR3TimerLoad, (PTMTIMERR3 pTimer, PSSMHANDLE pSSM));
+    DECLR3CALLBACKMEMBER(int, pfnTMR3TimerSave, (PTMTIMERR3 pTimer, PSSMHANDLE pSSM));
+    DECLR3CALLBACKMEMBER(int, pfnTMR3TimerSetCritSect, (PTMTIMERR3 pTimer, PPDMCRITSECT pCritSect));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnTMTimerFromMilli, (PTMTIMER pTimer, uint64_t cMilliSecs));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnTMTimerFromNano, (PTMTIMER pTimer, uint64_t cNanoSecs));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnTMTimerGet, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnTMTimerGetFreq, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(uint64_t, pfnTMTimerGetNano, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(bool, pfnTMTimerIsActive, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(bool, pfnTMTimerIsLockOwner, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerLock, (PTMTIMER pTimer, int rcBusy));
+    DECLR3CALLBACKMEMBER(PTMTIMERR0, pfnTMTimerR0Ptr, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(PTMTIMERRC, pfnTMTimerRCPtr, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerSet, (PTMTIMER pTimer, uint64_t u64Expire));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerSetFrequencyHint, (PTMTIMER pTimer, uint32_t uHz));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerSetMicro, (PTMTIMER pTimer, uint64_t cMicrosToNext));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerSetMillies, (PTMTIMER pTimer, uint32_t cMilliesToNext));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerSetNano, (PTMTIMER pTimer, uint64_t cNanosToNext));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerStop, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(void, pfnTMTimerUnlock, (PTMTIMER pTimer));
+    DECLR3CALLBACKMEMBER(PVMCPU, pfnVMMGetCpu, (PVM pVM));
+    DECLR3CALLBACKMEMBER(VMCPUID, pfnVMMGetCpuId, (PVM pVM));
+    DECLR3CALLBACKMEMBER(int, pfnVMMR3DeregisterPatchMemory, (PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem));
+    DECLR3CALLBACKMEMBER(int, pfnVMMR3RegisterPatchMemory, (PVM pVM, RTGCPTR pPatchMem, unsigned cbPatchMem));
+    DECLR3CALLBACKMEMBER(RTNATIVETHREAD, pfnVMR3GetVMCPUNativeThread, (PVM pVM));
+    DECLR3CALLBACKMEMBER(int, pfnVMR3NotifyCpuDeviceReady, (PVM pVM, VMCPUID idCpu));
+    DECLR3CALLBACKMEMBER(int, pfnVMR3ReqCallNoWait, (PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...));
+    DECLR3CALLBACKMEMBER(int, pfnVMR3ReqCallVoidNoWait, (PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...));
+    DECLR3CALLBACKMEMBER(int, pfnVMR3ReqPriorityCallWait, (PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...));
+    DECLR3CALLBACKMEMBER(int, pfnVMR3WaitForDeviceReady, (PVM pVM, VMCPUID idCpu));
+} TSTDEVVMMCALLBACKS;
+
+
+extern const PDMDEVHLPR3 g_tstDevPdmDevHlpR3;
+extern const TSTDEVVMMCALLBACKS g_tstDevVmmCallbacks;
+
+RT_C_DECLS_END
+
+#endif
+
diff --git a/src/VBox/Devices/testcase/tstDeviceVMMStubs.cpp b/src/VBox/Devices/testcase/tstDeviceVMMStubs.cpp
new file mode 100644
index 0000000..e1a7c08
--- /dev/null
+++ b/src/VBox/Devices/testcase/tstDeviceVMMStubs.cpp
@@ -0,0 +1,991 @@
+/* $Id: tstDeviceVMMStubs.cpp $ */
+/** @file
+ * tstDevice - Test framework for PDM devices/drivers, shim library exporting methods
+ *             originally for VBoxVMM for intercepting (we don't want to use the PDM module
+ *             to use the originals from VBoxVMM).
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+/* Methods imported from VBoxVMM by VBoxDD are extracted with:
+ *     objdump -T VBoxDD.so | grep "UND" | awk -F ' ' '{print $5}' | grep -E "^TM|^PGM|^PDM|^CFGM|^IOM|^MM|^VM|^PDM|^SUP" | sort
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEFAULT /** @todo */
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include <VBox/err.h>
+#include <VBox/cdefs.h>
+
+#include "tstDeviceVMMInternal.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+
+
+/**
+ * @copydoc CFGMR3AreValuesValid
+ */
+VMMR3DECL(bool) CFGMR3AreValuesValid(PCFGMNODE pNode, const char *pszzValid)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3AreValuesValid(pNode, pszzValid);
+}
+
+
+/**
+ * @copydoc CFGMR3Dump
+ */
+VMMR3DECL(void) CFGMR3Dump(PCFGMNODE pRoot)
+{
+    pRoot->pVmmCallbacks->pfnCFGMR3Dump(pRoot);
+}
+
+
+/**
+ * @copydoc CFGMR3GetChild
+ */
+VMMR3DECL(PCFGMNODE) CFGMR3GetChild(PCFGMNODE pNode, const char *pszPath)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3GetChild(pNode, pszPath);
+}
+
+
+/**
+ * @copydoc CFGMR3GetChildF
+ */
+VMMR3DECL(PCFGMNODE) CFGMR3GetChildF(PCFGMNODE pNode, const char *pszPathFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3)
+{
+    va_list Args;
+    va_start(Args, pszPathFormat);
+    PCFGMNODE pChild = pNode->pVmmCallbacks->pfnCFGMR3GetChildFV(pNode, pszPathFormat, Args);
+    va_end(Args);
+
+    return pChild;
+}
+
+
+/**
+ * @copydoc CFGMR3GetFirstChild
+ */
+VMMR3DECL(PCFGMNODE) CFGMR3GetFirstChild(PCFGMNODE pNode)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3GetFirstChild(pNode);
+}
+
+
+/**
+ * @copydoc CFGMR3GetName
+ */
+VMMR3DECL(int) CFGMR3GetName(PCFGMNODE pCur, char *pszName, size_t cchName)
+{
+    return pCur->pVmmCallbacks->pfnCFGMR3GetName(pCur, pszName, cchName);
+}
+
+
+/**
+ * @copydoc CFGMR3GetFirstChild
+ */
+VMMR3DECL(PCFGMNODE) CFGMR3GetNextChild(PCFGMNODE pNode)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3GetNextChild(pNode);
+}
+
+
+/**
+ * @copydoc CFGMR3GetParent
+ */
+VMMR3DECL(PCFGMNODE) CFGMR3GetParent(PCFGMNODE pNode)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3GetParent(pNode);
+}
+
+
+/**
+ * @copydoc CFGMR3GetRoot
+ */
+VMMR3DECL(PCFGMNODE) CFGMR3GetRoot(PVM pVM)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnCFGMR3GetRoot(pVM);
+}
+
+
+/**
+ * @copydoc CFGMR3InsertNode
+ */
+VMMR3DECL(int) CFGMR3InsertNode(PCFGMNODE pNode, const char *pszName, PCFGMNODE *ppChild)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3InsertNode(pNode, pszName, ppChild);
+}
+
+
+/**
+ * @copydoc CFGMR3InsertNodeF
+ */
+VMMR3DECL(int) CFGMR3InsertNodeF(PCFGMNODE pNode, PCFGMNODE *ppChild,
+                                 const char *pszNameFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4)
+{
+    va_list Args;
+    va_start(Args, pszNameFormat);
+    int rc = pNode->pVmmCallbacks->pfnCFGMR3InsertNodeFV(pNode, ppChild, pszNameFormat, Args);
+    va_end(Args);
+
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3InsertString
+ */
+VMMR3DECL(int) CFGMR3InsertString(PCFGMNODE pNode, const char *pszName, const char *pszString)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3InsertString(pNode, pszName, pszString);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryBool
+ */
+VMMR3DECL(int) CFGMR3QueryBool(PCFGMNODE pNode, const char *pszName, bool *pf)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryInteger(pNode, pszName, &u64);
+    if (RT_SUCCESS(rc))
+        *pf = u64 ? true : false;
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryBoolDef
+ */
+VMMR3DECL(int) CFGMR3QueryBoolDef(PCFGMNODE pNode, const char *pszName, bool *pf, bool fDef)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryIntegerDef(pNode, pszName, &u64, fDef);
+    *pf = u64 ? true : false;
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryBytes
+ */
+VMMR3DECL(int) CFGMR3QueryBytes(PCFGMNODE pNode, const char *pszName, void *pvData, size_t cbData)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3QueryBytes(pNode, pszName, pvData, cbData);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryInteger
+ */
+VMMR3DECL(int) CFGMR3QueryInteger(PCFGMNODE pNode, const char *pszName, uint64_t *pu64)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3QueryInteger(pNode, pszName, pu64);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryIntegerDef
+ */
+VMMR3DECL(int) CFGMR3QueryIntegerDef(PCFGMNODE pNode, const char *pszName, uint64_t *pu64, uint64_t u64Def)
+{
+    int rc = CFGMR3QueryInteger(pNode, pszName, pu64);
+    if (RT_FAILURE(rc))
+    {
+        *pu64 = u64Def;
+        if (rc == VERR_CFGM_VALUE_NOT_FOUND || rc == VERR_CFGM_NO_PARENT)
+            rc = VINF_SUCCESS;
+    }
+
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryPortDef
+ */
+VMMR3DECL(int) CFGMR3QueryPortDef(PCFGMNODE pNode, const char *pszName, PRTIOPORT pPort, RTIOPORT PortDef)
+{
+    AssertCompileSize(RTIOPORT, 2);
+    return CFGMR3QueryU16Def(pNode, pszName, pPort, PortDef);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryPtr
+ */
+VMMR3DECL(int) CFGMR3QueryPtr(PCFGMNODE pNode, const char *pszName, void **ppv)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryInteger(pNode, pszName, &u64);
+    if (RT_SUCCESS(rc))
+    {
+        uintptr_t u = (uintptr_t)u64;
+        if (u64 == u)
+            *ppv = (void *)u;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryS32
+ */
+VMMR3DECL(int) CFGMR3QueryS32(PCFGMNODE pNode, const char *pszName, int32_t *pi32)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryInteger(pNode, pszName, &u64);
+    if (RT_SUCCESS(rc))
+    {
+        if (   !(u64 & UINT64_C(0xffffffff80000000))
+            ||  (u64 & UINT64_C(0xffffffff80000000)) == UINT64_C(0xffffffff80000000))
+            *pi32 = (int32_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryS32Def
+ */
+VMMR3DECL(int) CFGMR3QueryS32Def(PCFGMNODE pNode, const char *pszName, int32_t *pi32, int32_t i32Def)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryIntegerDef(pNode, pszName, &u64, i32Def);
+    if (RT_SUCCESS(rc))
+    {
+        if (   !(u64 & UINT64_C(0xffffffff80000000))
+            ||  (u64 & UINT64_C(0xffffffff80000000)) == UINT64_C(0xffffffff80000000))
+            *pi32 = (int32_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    if (RT_FAILURE(rc))
+        *pi32 = i32Def;
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QuerySIntDef
+ */
+VMMR3DECL(int) CFGMR3QuerySIntDef(PCFGMNODE pNode, const char *pszName, signed int *pi, signed int iDef)
+{
+    AssertCompileSize(signed int, 4);
+    return CFGMR3QueryS32Def(pNode, pszName, (int32_t *)pi, iDef);
+}
+
+
+/**
+ * @copydoc CFGMR3QuerySize
+ */
+VMMDECL(int) CFGMR3QuerySize(PCFGMNODE pNode, const char *pszName, size_t *pcb)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3QuerySize(pNode, pszName, pcb);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryString
+ */
+VMMR3DECL(int) CFGMR3QueryString(PCFGMNODE pNode, const char *pszName, char *pszString, size_t cchString)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3QueryString(pNode, pszName, pszString, cchString);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryStringDef
+ */
+VMMR3DECL(int) CFGMR3QueryStringDef(PCFGMNODE pNode, const char *pszName, char *pszString, size_t cchString, const char *pszDef)
+{
+    int rc = CFGMR3QueryString(pNode, pszName, pszString, cchString);
+    if (RT_FAILURE(rc) && rc != VERR_CFGM_NOT_ENOUGH_SPACE)
+    {
+        size_t cchDef = strlen(pszDef);
+        if (cchString > cchDef)
+        {
+            memcpy(pszString, pszDef, cchDef);
+            memset(pszString + cchDef, 0, cchString - cchDef);
+            if (rc == VERR_CFGM_VALUE_NOT_FOUND || rc == VERR_CFGM_NO_PARENT)
+                rc = VINF_SUCCESS;
+        }
+        else if (rc == VERR_CFGM_VALUE_NOT_FOUND || rc == VERR_CFGM_NO_PARENT)
+            rc = VERR_CFGM_NOT_ENOUGH_SPACE;
+    }
+
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryStringAlloc
+ */
+VMMR3DECL(int) CFGMR3QueryStringAlloc(PCFGMNODE pNode, const char *pszName, char **ppszString)
+{
+#if 0
+    size_t cbString;
+    int rc = CFGMR3QuerySize(pNode, pszName, &cbString);
+    if (RT_SUCCESS(rc))
+    {
+        char *pszString = cfgmR3StrAlloc(pNode->pVM, MM_TAG_CFGM_USER, cbString);
+        if (pszString)
+        {
+            rc = CFGMR3QueryString(pNode, pszName, pszString, cbString);
+            if (RT_SUCCESS(rc))
+                *ppszString = pszString;
+            else
+                cfgmR3StrFree(pNode->pVM, pszString);
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+    return rc;
+#endif
+    RT_NOREF(pNode, pszName, ppszString);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryStringAllocDef
+ */
+VMMR3DECL(int) CFGMR3QueryStringAllocDef(PCFGMNODE pNode, const char *pszName, char **ppszString, const char *pszDef)
+{
+    RT_NOREF(pNode, pszName, ppszString, pszDef);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU16
+ */
+VMMR3DECL(int) CFGMR3QueryU16(PCFGMNODE pNode, const char *pszName, uint16_t *pu16)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryInteger(pNode, pszName, &u64);
+    if (RT_SUCCESS(rc))
+    {
+        if (!(u64 & UINT64_C(0xffffffffffff0000)))
+            *pu16 = (int16_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU16Def
+ */
+VMMR3DECL(int) CFGMR3QueryU16Def(PCFGMNODE pNode, const char *pszName, uint16_t *pu16, uint16_t u16Def)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryIntegerDef(pNode, pszName, &u64, u16Def);
+    if (RT_SUCCESS(rc))
+    {
+        if (!(u64 & UINT64_C(0xffffffffffff0000)))
+            *pu16 = (int16_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    if (RT_FAILURE(rc))
+        *pu16 = u16Def;
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU32
+ */
+VMMR3DECL(int) CFGMR3QueryU32(PCFGMNODE pNode, const char *pszName, uint32_t *pu32)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryInteger(pNode, pszName, &u64);
+    if (RT_SUCCESS(rc))
+    {
+        if (!(u64 & UINT64_C(0xffffffff00000000)))
+            *pu32 = (uint32_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU32Def
+ */
+VMMR3DECL(int) CFGMR3QueryU32Def(PCFGMNODE pNode, const char *pszName, uint32_t *pu32, uint32_t u32Def)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryIntegerDef(pNode, pszName, &u64, u32Def);
+    if (RT_SUCCESS(rc))
+    {
+        if (!(u64 & UINT64_C(0xffffffff00000000)))
+            *pu32 = (uint32_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    if (RT_FAILURE(rc))
+        *pu32 = u32Def;
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU64
+ */
+VMMR3DECL(int) CFGMR3QueryU64(PCFGMNODE pNode, const char *pszName, uint64_t *pu64)
+{
+    return CFGMR3QueryInteger(pNode, pszName, pu64);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU64Def
+ */
+VMMR3DECL(int) CFGMR3QueryU64Def(PCFGMNODE pNode, const char *pszName, uint64_t *pu64, uint64_t u64Def)
+{
+    return CFGMR3QueryIntegerDef(pNode, pszName, pu64, u64Def);
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU8
+ */
+VMMR3DECL(int) CFGMR3QueryU8(PCFGMNODE pNode, const char *pszName, uint8_t *pu8)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryInteger(pNode, pszName, &u64);
+    if (RT_SUCCESS(rc))
+    {
+        if (!(u64 & UINT64_C(0xffffffffffffff00)))
+            *pu8 = (uint8_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3QueryU8Def
+ */
+VMMR3DECL(int) CFGMR3QueryU8Def(PCFGMNODE pNode, const char *pszName, uint8_t *pu8, uint8_t u8Def)
+{
+    uint64_t u64;
+    int rc = CFGMR3QueryIntegerDef(pNode, pszName, &u64, u8Def);
+    if (RT_SUCCESS(rc))
+    {
+        if (!(u64 & UINT64_C(0xffffffffffffff00)))
+            *pu8 = (uint8_t)u64;
+        else
+            rc = VERR_CFGM_INTEGER_TOO_BIG;
+    }
+    if (RT_FAILURE(rc))
+        *pu8 = u8Def;
+    return rc;
+}
+
+
+/**
+ * @copydoc CFGMR3RemoveNode
+ */
+VMMR3DECL(void) CFGMR3RemoveNode(PCFGMNODE pNode)
+{
+    pNode->pVmmCallbacks->pfnCFGMR3RemoveNode(pNode);
+}
+
+
+/**
+ * @copydoc CFGMR3ValidateConfig
+ */
+VMMR3DECL(int) CFGMR3ValidateConfig(PCFGMNODE pNode, const char *pszNode,
+                                    const char *pszValidValues, const char *pszValidNodes,
+                                    const char *pszWho, uint32_t uInstance)
+{
+    return pNode->pVmmCallbacks->pfnCFGMR3ValidateConfig(pNode, pszNode, pszValidValues, pszValidNodes, pszWho, uInstance);
+}
+
+
+/**
+ * @copydoc IOMIOPortWrite
+ */
+VMMDECL(VBOXSTRICTRC) IOMIOPortWrite(PVM pVM, PVMCPU pVCpu, RTIOPORT Port, uint32_t u32Value, size_t cbValue)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnIOMIOPortWrite(pVM, pVCpu, Port, u32Value, cbValue);
+}
+
+
+/**
+ * @copydoc IOMMMIOMapMMIO2Page
+ */
+VMMDECL(int) IOMMMIOMapMMIO2Page(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysRemapped, uint64_t fPageFlags)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnIOMMMIOMapMMIO2Page(pVM, GCPhys, GCPhysRemapped, fPageFlags);
+}
+
+
+/**
+ * @copydoc IOMMMIOResetRegion
+ */
+VMMDECL(int) IOMMMIOResetRegion(PVM pVM, RTGCPHYS GCPhys)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnIOMMMIOResetRegion(pVM, GCPhys);
+}
+
+
+/**
+ * @copydoc MMHyperAlloc
+ */
+VMMDECL(int) MMHyperAlloc(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMHyperAlloc(pVM, cb, uAlignment, enmTag, ppv);
+}
+
+
+/**
+ * @copydoc MMHyperFree
+ */
+VMMDECL(int) MMHyperFree(PVM pVM, void *pv)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMHyperFree(pVM, pv);
+}
+
+
+/**
+ * @copydoc MMHyperR3ToR0
+ */
+VMMDECL(RTR0PTR) MMHyperR3ToR0(PVM pVM, RTR3PTR R3Ptr)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMHyperR3ToR0(pVM, R3Ptr);
+}
+
+
+/**
+ * @copydoc MMHyperR3ToRC
+ */
+VMMDECL(RTRCPTR) MMHyperR3ToRC(PVM pVM, RTR3PTR R3Ptr)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMHyperR3ToRC(pVM, R3Ptr);
+}
+
+
+/**
+ * @copydoc MMR3HeapFree
+ */
+VMMR3DECL(void) MMR3HeapFree(void *pv)
+{
+    PTSTDEVMMHEAPALLOC pHeapAlloc = (PTSTDEVMMHEAPALLOC)((uint8_t *)pv - RT_OFFSETOF(TSTDEVMMHEAPALLOC, abAlloc[0]));
+    pHeapAlloc->pVmmCallbacks->pfnMMR3HeapFree(pv);
+}
+
+
+/**
+ * @copydoc MMR3HyperAllocOnceNoRel
+ */
+VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMR3HyperAllocOnceNoRel(pVM, cb, uAlignment, enmTag, ppv);
+}
+
+
+/**
+ * @copydoc MMR3PhysGetRamSize
+ */
+VMMR3DECL(uint64_t) MMR3PhysGetRamSize(PVM pVM)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMR3PhysGetRamSize(pVM);
+}
+
+
+/**
+ * @copydoc MMR3PhysGetRamSizeBelow4GB
+ */
+VMMR3DECL(uint32_t) MMR3PhysGetRamSizeBelow4GB(PVM pVM)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMR3PhysGetRamSizeBelow4GB(pVM);
+}
+
+
+/**
+ * @copydoc MMR3PhysGetRamSizeAbove4GB
+ */
+VMMR3DECL(uint64_t) MMR3PhysGetRamSizeAbove4GB(PVM pVM)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnMMR3PhysGetRamSizeAbove4GB(pVM);
+}
+
+
+/**
+ * @copydoc PDMCritSectEnterDebug
+ */
+VMMDECL(int) PDMCritSectEnterDebug(PPDMCRITSECT pCritSect, int rcBusy, RTHCUINTPTR uId, RT_SRC_POS_DECL)
+{
+    return pCritSect->s.pVmmCallbacks->pfnPDMCritSectEnterDebug(pCritSect, rcBusy, uId, RT_SRC_POS_ARGS);
+}
+
+
+/**
+ * @copydoc PDMCritSectIsInitialized
+ */
+VMMDECL(bool) PDMCritSectIsInitialized(PCPDMCRITSECT pCritSect)
+{
+    return pCritSect->s.pVmmCallbacks->pfnPDMCritSectIsInitialized(pCritSect);
+}
+
+
+/**
+ * @copydoc PDMCritSectIsOwner
+ */
+VMMDECL(bool) PDMCritSectIsOwner(PCPDMCRITSECT pCritSect)
+{
+    return pCritSect->s.pVmmCallbacks->pfnPDMCritSectIsOwner(pCritSect);
+}
+
+
+/**
+ * @copydoc PDMCritSectLeave
+ */
+VMMDECL(int) PDMCritSectLeave(PPDMCRITSECT pCritSect)
+{
+    return pCritSect->s.pVmmCallbacks->pfnPDMCritSectLeave(pCritSect);
+}
+
+
+/**
+ * @copydoc PDMCritSectTryEnterDebug
+ */
+VMMDECL(int) PDMCritSectTryEnterDebug(PPDMCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
+{
+    return pCritSect->s.pVmmCallbacks->pfnPDMCritSectTryEnterDebug(pCritSect, uId, RT_SRC_POS_ARGS);
+}
+
+
+/**
+ * @copydoc PDMHCCritSectScheduleExitEvent
+ */
+VMMDECL(int) PDMHCCritSectScheduleExitEvent(PPDMCRITSECT pCritSect, SUPSEMEVENT hEventToSignal)
+{
+    return pCritSect->s.pVmmCallbacks->pfnPDMHCCritSectScheduleExitEvent(pCritSect, hEventToSignal);
+}
+
+
+/**
+ * @copydoc PDMNsAllocateBandwidth
+ */
+VMMDECL(bool) PDMNsAllocateBandwidth(PPDMNSFILTER pFilter, size_t cbTransfer)
+{
+#if 0
+    return pFilter->pVmmCallbacks->pfnPDMNsAllocateBandwidth(pFilter, cbTransfer);
+#endif
+    RT_NOREF(pFilter, cbTransfer);
+    AssertFailed();
+    return false;
+}
+
+
+/**
+ * @copydoc PDMQueueAlloc
+ */
+VMMDECL(PPDMQUEUEITEMCORE) PDMQueueAlloc(PPDMQUEUE pQueue)
+{
+    return pQueue->pVmmCallbacks->pfnPDMQueueAlloc(pQueue);
+}
+
+
+/**
+ * @copydoc PDMQueueFlushIfNecessary
+ */
+VMMDECL(bool) PDMQueueFlushIfNecessary(PPDMQUEUE pQueue)
+{
+    return pQueue->pVmmCallbacks->pfnPDMQueueFlushIfNecessary(pQueue);
+}
+
+
+/**
+ * @copydoc PDMQueueInsert
+ */
+VMMDECL(void) PDMQueueInsert(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem)
+{
+    pQueue->pVmmCallbacks->pfnPDMQueueInsert(pQueue, pItem);
+}
+
+
+/**
+ * @copydoc PDMQueueR0Ptr
+ */
+VMMDECL(R0PTRTYPE(PPDMQUEUE)) PDMQueueR0Ptr(PPDMQUEUE pQueue)
+{
+    return pQueue->pVmmCallbacks->pfnPDMQueueR0Ptr(pQueue);
+}
+
+
+/**
+ * @copydoc PDMQueueRCPtr
+ */
+VMMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueRCPtr(PPDMQUEUE pQueue)
+{
+    return pQueue->pVmmCallbacks->pfnPDMQueueRCPtr(pQueue);
+}
+
+
+/**
+ * @copydoc PGMHandlerPhysicalPageTempOff
+ */
+VMMDECL(int) PGMHandlerPhysicalPageTempOff(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysPage)
+{
+    RT_NOREF(pVM, GCPhys, GCPhysPage);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * @copydoc PGMShwMakePageWritable
+ */
+VMMDECL(int) PGMShwMakePageWritable(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags)
+{
+    RT_NOREF(pVCpu, GCPtr, fFlags);
+    AssertFailed();
+    return VERR_NOT_IMPLEMENTED;
+}
+
+/** @todo PDMR3AsyncCompletion + BlkCache + CritSect + QueryLun + Thread. */
+
+/**
+ * @copydoc TMCpuTicksPerSecond
+ */
+VMMDECL(uint64_t) TMCpuTicksPerSecond(PVM pVM)
+{
+    return pVM->vm.s.pVmmCallbacks->pfnTMCpuTicksPerSecond(pVM);
+}
+
+
+/**
+ * @copydoc TMR3TimerDestroy
+ */
+VMMR3DECL(int) TMR3TimerDestroy(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMR3TimerDestroy(pTimer);
+}
+
+
+/**
+ * @copydoc TMR3TimerSave
+ */
+VMMR3DECL(int) TMR3TimerSave(PTMTIMERR3 pTimer, PSSMHANDLE pSSM)
+{
+    return pTimer->pVmmCallbacks->pfnTMR3TimerSave(pTimer, pSSM);
+}
+
+
+/**
+ * @copydoc TMR3TimerLoad
+ */
+VMMR3DECL(int) TMR3TimerLoad(PTMTIMERR3 pTimer, PSSMHANDLE pSSM)
+{
+    return pTimer->pVmmCallbacks->pfnTMR3TimerLoad(pTimer, pSSM);
+}
+
+
+/**
+ * @copydoc TMR3TimerSetCritSect
+ */
+VMMR3DECL(int) TMR3TimerSetCritSect(PTMTIMERR3 pTimer, PPDMCRITSECT pCritSect)
+{
+    return pTimer->pVmmCallbacks->pfnTMR3TimerSetCritSect(pTimer, pCritSect);
+}
+
+
+/**
+ * @copydoc TMTimerFromMilli
+ */
+VMMDECL(uint64_t) TMTimerFromMilli(PTMTIMER pTimer, uint64_t cMilliSecs)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerFromMilli(pTimer, cMilliSecs);
+}
+
+
+/**
+ * @copydoc TMTimerFromNano
+ */
+VMMDECL(uint64_t) TMTimerFromNano(PTMTIMER pTimer, uint64_t cNanoSecs)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerFromNano(pTimer, cNanoSecs);
+}
+
+
+/**
+ * @copydoc TMTimerGet
+ */
+VMMDECL(uint64_t) TMTimerGet(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerGet(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerGetFreq
+ */
+VMMDECL(uint64_t) TMTimerGetFreq(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerGetFreq(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerGetNano
+ */
+VMMDECL(uint64_t) TMTimerGetNano(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerGetNano(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerIsActive
+ */
+VMMDECL(bool) TMTimerIsActive(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerIsActive(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerIsLockOwner
+ */
+VMMDECL(bool) TMTimerIsLockOwner(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerIsLockOwner(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerLock
+ */
+VMMDECL(int) TMTimerLock(PTMTIMER pTimer, int rcBusy)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerLock(pTimer, rcBusy);
+}
+
+
+/**
+ * @copydoc TMTimerR0Ptr
+ */
+VMMDECL(PTMTIMERR0) TMTimerR0Ptr(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerR0Ptr(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerRCPtr
+ */
+VMMDECL(PTMTIMERRC) TMTimerRCPtr(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerRCPtr(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerSet
+ */
+VMMDECL(int) TMTimerSet(PTMTIMER pTimer, uint64_t u64Expire)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerSet(pTimer, u64Expire);
+}
+
+
+/**
+ * @copydoc TMTimerSetFrequencyHint
+ */
+VMMDECL(int) TMTimerSetFrequencyHint(PTMTIMER pTimer, uint32_t uHz)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerSetFrequencyHint(pTimer, uHz);
+}
+
+
+/**
+ * @copydoc TMTimerSetMicro
+ */
+VMMDECL(int) TMTimerSetMicro(PTMTIMER pTimer, uint64_t cMicrosToNext)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerSetMicro(pTimer, cMicrosToNext);
+}
+
+
+/**
+ * @copydoc TMTimerSetMillies
+ */
+VMMDECL(int) TMTimerSetMillies(PTMTIMER pTimer, uint32_t cMilliesToNext)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerSetMillies(pTimer, cMilliesToNext);
+}
+
+
+/**
+ * @copydoc TMTimerSetNano
+ */
+VMMDECL(int) TMTimerSetNano(PTMTIMER pTimer, uint64_t cNanosToNext)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerSetNano(pTimer, cNanosToNext);
+}
+
+
+/**
+ * @copydoc TMTimerStop
+ */
+VMMDECL(int) TMTimerStop(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerStop(pTimer);
+}
+
+
+/**
+ * @copydoc TMTimerUnlock
+ */
+VMMDECL(void) TMTimerUnlock(PTMTIMER pTimer)
+{
+    return pTimer->pVmmCallbacks->pfnTMTimerUnlock(pTimer);
+}
+
diff --git a/src/VBox/Disassembler/.scm-settings b/src/VBox/Disassembler/.scm-settings
new file mode 100644
index 0000000..553703a
--- /dev/null
+++ b/src/VBox/Disassembler/.scm-settings
@@ -0,0 +1,19 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the diassembler.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+--filter-out-files *.bin
+
diff --git a/src/VBox/Disassembler/DisasmTables.cpp b/src/VBox/Disassembler/DisasmTables.cpp
index cec6883..00e55f6 100644
--- a/src/VBox/Disassembler/DisasmTables.cpp
+++ b/src/VBox/Disassembler/DisasmTables.cpp
@@ -21,7 +21,6 @@
 *********************************************************************************************************************************/
 #include <VBox/dis.h>
 #include <VBox/disopcode.h>
-#include "DisasmTables.h"
 #include "DisasmInternal.h"
 
 
diff --git a/src/VBox/Disassembler/DisasmTables.h b/src/VBox/Disassembler/DisasmTables.h
deleted file mode 100644
index 8b13789..0000000
--- a/src/VBox/Disassembler/DisasmTables.h
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm b/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm
index 72eef00..dbaa363 100644
--- a/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm
+++ b/src/VBox/Disassembler/testcase/tstAsmFnstsw-1.asm
@@ -1,4 +1,4 @@
-; $Id: tstAsmLock-1.asm $
+; $Id: tstAsmFnstsw-1.asm $
 ;; @file
 ; Disassembly testcase - Valid fnstsw* instructitons.
 ;
diff --git a/src/VBox/Disassembler/testcase/tstAsmPush-1.asm b/src/VBox/Disassembler/testcase/tstAsmPush-1.asm
index 56e86bc..b744334 100644
--- a/src/VBox/Disassembler/testcase/tstAsmPush-1.asm
+++ b/src/VBox/Disassembler/testcase/tstAsmPush-1.asm
@@ -34,4 +34,3 @@
  %endif
 %endif
 
-
diff --git a/src/VBox/Disassembler/testcase/tstAsmRegs-1.asm b/src/VBox/Disassembler/testcase/tstAsmRegs-1.asm
index 9ddd10e..1585e6e 100644
--- a/src/VBox/Disassembler/testcase/tstAsmRegs-1.asm
+++ b/src/VBox/Disassembler/testcase/tstAsmRegs-1.asm
@@ -107,4 +107,3 @@
     mov     rax, r15
 %endif
 
-
diff --git a/src/VBox/ExtPacks/.scm-settings b/src/VBox/ExtPacks/.scm-settings
new file mode 100644
index 0000000..013e000
--- /dev/null
+++ b/src/VBox/ExtPacks/.scm-settings
@@ -0,0 +1,21 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for extension packs.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+# The ExtPack.xml files doesn't include any license or copyright.
+*/ExtPack.xml: --no-update-copyright-year --no-update-license
+
diff --git a/src/VBox/ExtPacks/BusMouseSample/.scm-settings b/src/VBox/ExtPacks/BusMouseSample/.scm-settings
new file mode 100644
index 0000000..a8b0d0f
--- /dev/null
+++ b/src/VBox/ExtPacks/BusMouseSample/.scm-settings
@@ -0,0 +1,33 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for BusMouse sample.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+
+# This directory contains sample code and are therefore under MIT license.
+--license-mit
+
diff --git a/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp b/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
index 13e1279..bf5e92b 100644
--- a/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
+++ b/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk b/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk
index cd8a7a9..1703b4d 100644
--- a/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk
+++ b/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk
@@ -21,7 +21,7 @@
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMain.cpp b/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMain.cpp
index 8b32a31..660dbdc 100644
--- a/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMain.cpp
+++ b/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMain.cpp
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMainVM.cpp b/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMainVM.cpp
index 02fd46e..e4ecb3e 100644
--- a/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMainVM.cpp
+++ b/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMainVM.cpp
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/Skeleton/.scm-settings b/src/VBox/ExtPacks/Skeleton/.scm-settings
new file mode 100644
index 0000000..caed3ca
--- /dev/null
+++ b/src/VBox/ExtPacks/Skeleton/.scm-settings
@@ -0,0 +1,33 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for extension pack skeleton.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+
+# This directory contains sample code and are therefore under MIT license.
+--license-mit
+
diff --git a/src/VBox/ExtPacks/Skeleton/Makefile.kmk b/src/VBox/ExtPacks/Skeleton/Makefile.kmk
index 0c7ad3f..830e0c1 100644
--- a/src/VBox/ExtPacks/Skeleton/Makefile.kmk
+++ b/src/VBox/ExtPacks/Skeleton/Makefile.kmk
@@ -21,7 +21,7 @@
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMain.cpp b/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMain.cpp
index 3631130..9805393 100644
--- a/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMain.cpp
+++ b/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMain.cpp
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMainVM.cpp b/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMainVM.cpp
index 3550448..c26065e 100644
--- a/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMainVM.cpp
+++ b/src/VBox/ExtPacks/Skeleton/VBoxSkeletonMainVM.cpp
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/VBoxDTrace/.scm-settings b/src/VBox/ExtPacks/VBoxDTrace/.scm-settings
index c5f931d..93f0d1c 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/.scm-settings
+++ b/src/VBox/ExtPacks/VBoxDTrace/.scm-settings
@@ -4,31 +4,30 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation 
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-#
-# The contents of this file may alternatively be used under the terms
-# of the Common Development and Distribution License Version 1.0
-# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-# VirtualBox OSE distribution, in which case the provisions of the
-# CDDL are applicable instead of those of the GPL.
-#
-# You may elect to license modified versions of this file under the
-# terms and conditions of either the GPL or the CDDL or both.
+# you can redistribute it and/or modify it under the terms of the Common
+# Development and Distribution License Version 1.0 (CDDL) only, as it
+# comes in the "COPYING.CDDL" file of the VirtualBox OSE distribution.
+# VirtualBox OSE is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY of any kind.
 #
 
 
---filter-out-dirs  "*/onnv/cmd/."
---filter-out-dirs  "*/onnv/common/."
---filter-out-dirs  "*/onnv/lib/."
---filter-out-dirs  "*/onnv/uts/."
+--filter-out-dirs  "/onnv/cmd/."
+--filter-out-dirs  "/onnv/common/."
+--filter-out-dirs  "/onnv/lib/."
+--filter-out-dirs  "/onnv/uts/."
+
+--filter-out-files "/generated/dt_*"
+--filter-out-files "/CDDL-ONLY"
+
+# This is CDDL licensed
+--license-ose-cddl
+VBoxDTraceMain.cpp: --license-mit
 
---filter-out-files "*/generated/dt_*"
+# MIT license on the samples.
+/Samples/*: --license-mit
 
diff --git a/src/VBox/ExtPacks/VBoxDTrace/Samples/Hello.d b/src/VBox/ExtPacks/VBoxDTrace/Samples/Hello.d
index 345f9f8..a5a1248 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/Samples/Hello.d
+++ b/src/VBox/ExtPacks/VBoxDTrace/Samples/Hello.d
@@ -3,6 +3,31 @@
  * VBoxDTrace - Hello world sample.
  */
 
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
 
 /* This works by matching the dtrace:::BEGIN probe, printing the greeting and
    then quitting immediately. */
diff --git a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceMain.cpp b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceMain.cpp
index 662267c..fc3e3f8 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceMain.cpp
+++ b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceMain.cpp
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0.cpp b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0.cpp
index 56a455a..4af0cbf 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0.cpp
+++ b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,7 +15,6 @@
  * comes in the "COPYING.CDDL" file of the VirtualBox OSE distribution.
  * VirtualBox OSE is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY of any kind.
- *
  */
 
 
diff --git a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0A.asm b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0A.asm
index 9af5d07..65384a0 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0A.asm
+++ b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceR0A.asm
@@ -1,12 +1,12 @@
 ; $Id: VBoxDTraceR0A.asm $
 ;; @file
 ; VBoxDTraceR0 - Assembly Hacks.
-;  
-; Contributed by: bird 
+;
+; Contributed by: bird
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -29,4 +29,3 @@ extern NAME(dtrace_probe)
 GLOBALNAME dtrace_probe6
     jmp     NAME(dtrace_probe)
 
-
diff --git a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceWrapper.cpp b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceWrapper.cpp
index dbf921d..98950b8 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceWrapper.cpp
+++ b/src/VBox/ExtPacks/VBoxDTrace/VBoxDTraceWrapper.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2016-2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -14,7 +14,6 @@
  * comes in the "COPYING.CDDL" file of the VirtualBox OSE distribution.
  * VirtualBox OSE is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY of any kind.
- *
  */
 
 
diff --git a/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceLibCWrappers.h b/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceLibCWrappers.h
index 60ebe14..4f713a8 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceLibCWrappers.h
+++ b/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceLibCWrappers.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,7 +15,6 @@
  * comes in the "COPYING.CDDL" file of the VirtualBox OSE distribution.
  * VirtualBox OSE is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY of any kind.
- *
  */
 
 #ifndef ___VBoxDTraceLibCWrappers_h___
diff --git a/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h b/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h
index 6fcb08c..c34e575 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h
+++ b/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -16,7 +16,6 @@
  * comes in the "COPYING.CDDL" file of the VirtualBox OSE distribution.
  * VirtualBox OSE is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY of any kind.
- *
  */
 
 #ifndef ___VBoxDTraceTypes_h___
@@ -436,7 +435,7 @@ extern int dtrace_close(struct dtrace_state *state);
 /*
  * gelf
  */
-# include "../../../Runtime/include/internal/ldrELF64.h"
+# include <iprt/formats/elf64.h>
 typedef Elf64_Half  GElf_Half;
 typedef Elf64_Xword GElf_Xword;
 typedef Elf64_Shdr  GElf_Shdr;
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_impl.h b/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_impl.h
index cbf2b15..b8dcc6d 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_impl.h
+++ b/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_impl.h
@@ -35,8 +35,8 @@
 #include <sys/errno.h>
 #include <sys/sysmacros.h>
 #else  /* VBOX */
-# include "../../../../../Runtime/include/internal/ldrELF32.h"
-# include "../../../../../Runtime/include/internal/ldrELF64.h"
+# include <iprt/formats/elf32.h>
+# include <iprt/formats/elf64.h>
 # include <errno.h>
 # include "VBoxDTraceLibCWrappers.h"
 #endif /* VBOX */
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_cc.c b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_cc.c
index 21b564c..4f69ed3 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_cc.c
+++ b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_cc.c
@@ -1969,7 +1969,7 @@ dt_load_libs_dir(dtrace_hdl_t *dtp, const char *path)
 	const char *p;
 	DIR *dirp;
 #else
-	PRTDIR pDir;
+	RTDIR hDir;
 	RTDIRENTRY DirEntry;
 	const char *p;
 	int rc;
@@ -1987,7 +1987,7 @@ dt_load_libs_dir(dtrace_hdl_t *dtp, const char *path)
 		return (0);
 	}
 #else
-	rc = RTDirOpen(&pDir, path);
+	rc = RTDirOpen(&hDir, path);
 	if (RT_FAILURE(rc)) {
 		dt_dprintf("skipping lib dir %s: %s\n", path, RTErrGetShort(rc));
 		return (0);
@@ -1998,7 +1998,7 @@ dt_load_libs_dir(dtrace_hdl_t *dtp, const char *path)
 #ifndef VBOX
 	while ((dp = readdir(dirp)) != NULL) {
 #else
-	while (RT_SUCCESS(RTDirRead(pDir, &DirEntry, 0))) {
+	while (RT_SUCCESS(RTDirRead(hDir, &DirEntry, 0))) {
 		struct FakeDirEntry {
 			const char *d_name;
 		} FakeDirEntry, *dp = &FakeDirEntry;
@@ -2040,7 +2040,7 @@ dt_load_libs_dir(dtrace_hdl_t *dtp, const char *path)
 #ifndef VBOX
 	(void) closedir(dirp);
 #else
-	RTDirClose(pDir);
+	RTDirClose(hDir);
 #endif
 	/*
 	 * Finish building the graph containing the library dependencies
diff --git a/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_module.c b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_module.c
index 88da272..8cafc7a 100644
--- a/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_module.c
+++ b/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_module.c
@@ -42,7 +42,7 @@
 #include <errno.h>
 #include <dirent.h>
 #else  /* VBOX */
-# include "../../../../../../Runtime/include/internal/ldrELF32.h"
+# include <iprt/formats/elf32.h>
 # ifdef _MSC_VER
 #  include <process.h>
 #  define getuid() 0
diff --git a/src/VBox/ExtPacks/VNC/VBoxVNC.cpp b/src/VBox/ExtPacks/VNC/VBoxVNC.cpp
index 664b79e..2bf880a 100644
--- a/src/VBox/ExtPacks/VNC/VBoxVNC.cpp
+++ b/src/VBox/ExtPacks/VNC/VBoxVNC.cpp
@@ -5,9 +5,9 @@
 
 /*
  * Contributed by Ivo Smits <Ivo at UFO-Net.nl>, Howard Su and
- * Christophe Devriese <christophe.devriese at gmail.com>
+ * Christophe Devriese <christophe.devriese at gmail.com>.
  *
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/.scm-settings b/src/VBox/Frontends/Common/VBoxKeyboard/.scm-settings
new file mode 100644
index 0000000..795dd34
--- /dev/null
+++ b/src/VBox/Frontends/Common/VBoxKeyboard/.scm-settings
@@ -0,0 +1,21 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for VBoxKeyboard.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+# These are LGPL and generally external.
+/keyboard*|/xkbtoscan.h: --external-copyright
+
diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/Makefile b/src/VBox/Frontends/Common/VBoxKeyboard/Makefile
index 492eab4..a4c8a09 100644
--- a/src/VBox/Frontends/Common/VBoxKeyboard/Makefile
+++ b/src/VBox/Frontends/Common/VBoxKeyboard/Makefile
@@ -1,4 +1,4 @@
-# $Id
+# $Id: Makefile $
 ## @file
 # Makefile for building the VirtualBox keyboard handler library.
 #
@@ -6,7 +6,8 @@
 # Note that for reasons of convenience, VirtualBox builds this library
 # from inside its own build system rather than using this file.
 
-# Copyright (C) 2007-2010 Oracle Corporation
+#
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h
index 6e41c29..a833bcb 100644
--- a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h
+++ b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-layouts.h
@@ -2,14 +2,13 @@
 /** @file
  * VBox/Frontends/Common - X11 keyboard driver translation tables (keyboard layouts).
  *
+ * This file was generated by successively loading each of the keyboard
+ * layouts listed in the file keyboard-list.h into the X server and
+ * reading and dumping the values associated with each key.  The format
+ * of the dumped data is chosen to be compatible with the keyboard code
+ * in keyboard-new.c, which is based on code from the Wine project.
  */
 
-/* This file was generated by successively loading each of the keyboard
-   layouts listed in the file keyboard-list.h into the X server and
-   reading and dumping the values associated with each key.  The format
-   of the dumped data is chosen to be compatible with the keyboard code
-   in keyboard-new.c, which is based on code from the Wine project. */
-
 /*
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
diff --git a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h
index 8177fbf..88858c0 100644
--- a/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h
+++ b/src/VBox/Frontends/Common/VBoxKeyboard/keyboard-list.h
@@ -1,12 +1,12 @@
 /* $Id: keyboard-list.h $ */
 /** @file
  * VBox/Frontends/Common - X11 keyboard driver translation tables (keyboard layouts)
+ *
+ * This file was originally generated from the X.org file
+ * /etc/X11/xkb/rules/xorg.xml, in an attempt to support all
+ * keyboard layouts known to X.org.
  */
 
-/* This file was originally generated from the X.org file
-   /etc/X11/xkb/rules/xorg.xml, in an attempt to support all
-   keyboard layouts known to X.org. */
-
 /*
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-posix.cpp b/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-posix.cpp
index 1d0db23..f87eeb8 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-posix.cpp
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-posix.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -497,15 +497,15 @@ int main(int argc, char *argv[])
         return RTEXITCODE_SUCCESS;
 
     /* create release logger, to stdout */
-    char szError[RTPATH_MAX + 128];
+    RTERRINFOSTATIC ErrInfo;
     rc = com::VBoxLogRelCreate("Autostart", g_fDaemonize ? NULL : pszLogFile,
                                RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
                                "all", "VBOXAUTOSTART_RELEASE_LOG",
                                RTLOGDEST_STDOUT, UINT32_MAX /* cMaxEntriesPerGroup */,
                                g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
-                               szError, sizeof(szError));
+                               RTErrInfoInitStatic(&ErrInfo));
     if (RT_FAILURE(rc))
-        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, rc);
 
 #ifdef VBOXAUTOSTART_DAEMONIZE
     if (g_fDaemonize)
@@ -533,9 +533,9 @@ int main(int argc, char *argv[])
                                    "all", "VBOXAUTOSTART_RELEASE_LOG",
                                    RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
                                    g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
-                                   szError, sizeof(szError));
+                                   RTErrInfoInitStatic(&ErrInfo));
         if (RT_FAILURE(rc))
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, rc);
     }
 #endif
 
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-win.cpp b/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-win.cpp
index 7373f8b..74747e9 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-win.cpp
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostart-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostart.h b/src/VBox/Frontends/VBoxAutostart/VBoxAutostart.h
index a404805..0e6b8a7 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostart.h
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostart.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartCfg.cpp b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartCfg.cpp
index 665bf12..c2c4013 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartCfg.cpp
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartCfg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStart.cpp b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStart.cpp
index b19cb4b..56fbde0 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStart.cpp
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStart.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStop.cpp b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStop.cpp
index 5ba4a6d..dfd45e6 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStop.cpp
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartStop.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartUtils.cpp b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartUtils.cpp
index e63e6f5..9e64e23 100644
--- a/src/VBox/Frontends/VBoxAutostart/VBoxAutostartUtils.cpp
+++ b/src/VBox/Frontends/VBoxAutostart/VBoxAutostartUtils.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.rc b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.rc
index c991764..3ec55e2 100644
--- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.rc
+++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModAPIMonitor.cpp b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModAPIMonitor.cpp
index add76e3..ec3590f 100644
--- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModAPIMonitor.cpp
+++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModAPIMonitor.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModBallooning.cpp b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModBallooning.cpp
index d75ecc8..3e91188 100644
--- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModBallooning.cpp
+++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModBallooning.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp
index 981e9d3..0c1b47e 100644
--- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp
+++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1098,15 +1098,15 @@ int main(int argc, char *argv[])
     displayHeader();
 
     /* create release logger, to stdout */
-    char szError[RTPATH_MAX + 128];
+    RTERRINFOSTATIC ErrInfo;
     rc = com::VBoxLogRelCreate("Watchdog", g_fDaemonize ? NULL : pszLogFile,
                                RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
                                "all", "VBOXBALLOONCTRL_RELEASE_LOG",
                                RTLOGDEST_STDOUT, UINT32_MAX /* cMaxEntriesPerGroup */,
                                g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
-                               szError, sizeof(szError));
+                               RTErrInfoInitStatic(&ErrInfo));
     if (RT_FAILURE(rc))
-        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, rc);
 
 #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined (RT_OS_SOLARIS) || defined(RT_OS_FREEBSD)
     if (g_fDaemonize)
@@ -1134,9 +1134,9 @@ int main(int argc, char *argv[])
                                    "all", "VBOXBALLOONCTRL_RELEASE_LOG",
                                    RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
                                    g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
-                                   szError, sizeof(szError));
+                                   RTErrInfoInitStatic(&ErrInfo));
         if (RT_FAILURE(rc))
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, rc);
     }
 #endif
 
diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogInternal.h b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogInternal.h
index ce45b7a..59a02b9 100644
--- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogInternal.h
+++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogUtils.cpp b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogUtils.cpp
index 8a1e9f3..b9b6456 100644
--- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogUtils.cpp
+++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxWatchdogUtils.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp
index 354f585..631b491 100644
--- a/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp
+++ b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -119,29 +119,29 @@ typedef std::list<MachineInfo*> MachineInfoList;
 class VBRDir
 {
 public:
-    VBRDir(const char *pcszPath)
-        {
-            int rc = RTDirOpenFiltered(&m_pDir, pcszPath, RTDIRFILTER_WINNT, 0);
-            if (RT_FAILURE(rc))
-                throw RTCError(com::Utf8StrFmt("Failed to open directory '%s'\n", pcszPath));
-        };
+    VBRDir(const char *pcszPath) : m_hDir(NIL_RTDIR)
+    {
+        int rc = RTDirOpenFiltered(&m_hDir, pcszPath, RTDIRFILTER_WINNT, 0);
+        if (RT_FAILURE(rc))
+            throw RTCError(com::Utf8StrFmt("Failed to open directory '%s'\n", pcszPath));
+    };
     ~VBRDir()
-        {
-            int rc = RTDirClose(m_pDir);
-            AssertRC(rc);
-        };
+    {
+        int rc = RTDirClose(m_hDir);
+        AssertRC(rc);
+    };
     const char *next(void)
-        {
-            int rc = RTDirRead(m_pDir, &m_DirEntry, NULL);
-            if (RT_SUCCESS(rc))
-                return m_DirEntry.szName;
-            else if (rc == VERR_NO_MORE_FILES)
-                return NULL;
-            throw RTCError("Failed to read directory element\n");
-        };
+    {
+        int rc = RTDirRead(m_hDir, &m_DirEntry, NULL);
+        if (RT_SUCCESS(rc))
+            return m_DirEntry.szName;
+        if (rc == VERR_NO_MORE_FILES)
+            return NULL;
+        throw RTCError("Failed to read directory element\n");
+    };
 
 private:
-    PRTDIR m_pDir;
+    RTDIR m_hDir;
     RTDIRENTRY m_DirEntry;
 };
 
diff --git a/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h
index 073113a..c11323a 100644
--- a/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h
+++ b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp b/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp
index e171327..2190bf6 100644
--- a/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp
+++ b/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxFB/Framebuffer.cpp b/src/VBox/Frontends/VBoxFB/Framebuffer.cpp
index 9f24ed0..4f1ef48 100644
--- a/src/VBox/Frontends/VBoxFB/Framebuffer.cpp
+++ b/src/VBox/Frontends/VBoxFB/Framebuffer.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxFB/Framebuffer.h b/src/VBox/Frontends/VBoxFB/Framebuffer.h
index 5a4a716..a5caeeb 100644
--- a/src/VBox/Frontends/VBoxFB/Framebuffer.h
+++ b/src/VBox/Frontends/VBoxFB/Framebuffer.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxFB/Helper.cpp b/src/VBox/Frontends/VBoxFB/Helper.cpp
index 00b161c..cf94e99 100644
--- a/src/VBox/Frontends/VBoxFB/Helper.cpp
+++ b/src/VBox/Frontends/VBoxFB/Helper.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxFB/Helper.h b/src/VBox/Frontends/VBoxFB/Helper.h
index 2000794..89e9f5d 100644
--- a/src/VBox/Frontends/VBoxFB/Helper.h
+++ b/src/VBox/Frontends/VBoxFB/Helper.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxFB/VBoxFB.cpp b/src/VBox/Frontends/VBoxFB/VBoxFB.cpp
index e326935..e3c3e68 100644
--- a/src/VBox/Frontends/VBoxFB/VBoxFB.cpp
+++ b/src/VBox/Frontends/VBoxFB/VBoxFB.cpp
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxFB/VBoxFB.h b/src/VBox/Frontends/VBoxFB/VBoxFB.h
index 26b03b7..cb10859 100644
--- a/src/VBox/Frontends/VBoxFB/VBoxFB.h
+++ b/src/VBox/Frontends/VBoxFB/VBoxFB.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.rc b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.rc
index 3501601..c58a3f5 100644
--- a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.rc
+++ b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxHeadless/VBoxHeadlessHardened.cpp b/src/VBox/Frontends/VBoxHeadless/VBoxHeadlessHardened.cpp
index 6196daa..8946804 100644
--- a/src/VBox/Frontends/VBoxHeadless/VBoxHeadlessHardened.cpp
+++ b/src/VBox/Frontends/VBoxHeadless/VBoxHeadlessHardened.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp b/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp
index 3c318a3..66b924b 100644
--- a/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp
+++ b/src/VBox/Frontends/VBoxHeadless/testcase/tstHeadless.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp b/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
index 4cbb9d5..2cfecbc 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1501,7 +1501,7 @@ static RTEXITCODE CmdCreateRawVMDK(int argc, char **argv, ComPtr<IVirtualBox> aV
     /* Check whether cbSize is actually sensible. */
     if (!cbSize || cbSize % 512)
     {
-        RTMsgError("Detected size of raw disk '%s' is %s, an invalid value", rawdisk.c_str(), cbSize);
+        RTMsgError("Detected size of raw disk '%s' is %RU64, an invalid value", rawdisk.c_str(), cbSize);
         vrc = VERR_INVALID_PARAMETER;
         goto out;
     }
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManage.cpp b/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
index e0ab1b1..b9a59c0 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManage.h b/src/VBox/Frontends/VBoxManage/VBoxManage.h
index 915b879..e324130 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManage.h
+++ b/src/VBox/Frontends/VBoxManage/VBoxManage.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManage.rc b/src/VBox/Frontends/VBoxManage/VBoxManage.rc
index 305d4e7..87d195a 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManage.rc
+++ b/src/VBox/Frontends/VBoxManage/VBoxManage.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp
index d325d64..835e265 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageBandwidthControl.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageBandwidthControl.cpp
index d7eaefc..53d00a1 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageBandwidthControl.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageBandwidthControl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp
index 2a22022..e85c279 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp
index ce2552f..10413bd 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
index 0c87bae..fe61be3 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp
index e0f5005..5226ab9 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -2222,129 +2222,123 @@ static int gctlCopyDirToGuest(PCOPYCONTEXT pContext,
      * Open directory without a filter - RTDirOpenFiltered unfortunately
      * cannot handle sub directories so we have to do the filtering ourselves.
      */
-    PRTDIR pDir = NULL;
     if (RT_SUCCESS(vrc))
     {
-        vrc = RTDirOpen(&pDir, szCurDir);
-        if (RT_FAILURE(vrc))
-            pDir = NULL;
-    }
-    if (RT_SUCCESS(vrc))
-    {
-        /*
-         * Enumerate the directory tree.
-         */
-        while (RT_SUCCESS(vrc))
+        RTDIR hDir;
+        vrc = RTDirOpen(&hDir, szCurDir);
+        if (RT_SUCCESS(vrc))
         {
-            RTDIRENTRY DirEntry;
-            vrc = RTDirRead(pDir, &DirEntry, NULL);
-            if (RT_FAILURE(vrc))
-            {
-                if (vrc == VERR_NO_MORE_FILES)
-                    vrc = VINF_SUCCESS;
-                break;
-            }
-            /** @todo r=bird: This ain't gonna work on most UNIX file systems because
-             *        enmType is RTDIRENTRYTYPE_UNKNOWN.  This is clearly documented in
-             *        RTDIRENTRY::enmType. For trunk, RTDirQueryUnknownType can be used. */
-            switch (DirEntry.enmType)
+            /*
+             * Enumerate the directory tree.
+             */
+            size_t        cbDirEntry = 0;
+            PRTDIRENTRYEX pDirEntry  = NULL;
+            while (RT_SUCCESS(vrc))
             {
-                case RTDIRENTRYTYPE_DIRECTORY:
+                vrc = RTDirReadExA(hDir, &pDirEntry, &cbDirEntry, RTFSOBJATTRADD_NOTHING, 0);
+                if (RT_FAILURE(vrc))
                 {
-                    /* Skip "." and ".." entries. */
-                    if (   !strcmp(DirEntry.szName, ".")
-                        || !strcmp(DirEntry.szName, ".."))
-                        break;
-
-                    if (pContext->pCmdCtx->cVerbose)
-                        RTPrintf("Directory: %s\n", DirEntry.szName);
+                    if (vrc == VERR_NO_MORE_FILES)
+                        vrc = VINF_SUCCESS;
+                    break;
+                }
 
-                    if (enmFlags & kGctlCopyFlags_Recursive)
+                switch (pDirEntry->Info.Attr.fMode & RTFS_TYPE_MASK)
+                {
+                    case RTFS_TYPE_DIRECTORY:
                     {
-                        char *pszNewSub = NULL;
-                        if (pszSubDir)
-                            pszNewSub = RTPathJoinA(pszSubDir, DirEntry.szName);
-                        else
-                        {
-                            pszNewSub = RTStrDup(DirEntry.szName);
-                            RTPathStripTrailingSlash(pszNewSub);
-                        }
+                        /* Skip "." and ".." entries. */
+                        if (RTDirEntryExIsStdDotLink(pDirEntry))
+                            break;
+
+                        if (pContext->pCmdCtx->cVerbose)
+                            RTPrintf("Directory: %s\n", pDirEntry->szName);
 
-                        if (pszNewSub)
+                        if (enmFlags & kGctlCopyFlags_Recursive)
                         {
-                            vrc = gctlCopyDirToGuest(pContext,
-                                                     pszSource, pszFilter,
-                                                     pszDest, enmFlags, pszNewSub);
-                            RTStrFree(pszNewSub);
+                            char *pszNewSub = NULL;
+                            if (pszSubDir)
+                                pszNewSub = RTPathJoinA(pszSubDir, pDirEntry->szName);
+                            else
+                            {
+                                pszNewSub = RTStrDup(pDirEntry->szName);
+                                RTPathStripTrailingSlash(pszNewSub);
+                            }
+
+                            if (pszNewSub)
+                            {
+                                vrc = gctlCopyDirToGuest(pContext,
+                                                         pszSource, pszFilter,
+                                                         pszDest, enmFlags, pszNewSub);
+                                RTStrFree(pszNewSub);
+                            }
+                            else
+                                vrc = VERR_NO_MEMORY;
                         }
-                        else
-                            vrc = VERR_NO_MEMORY;
+                        break;
                     }
-                    break;
-                }
 
-                case RTDIRENTRYTYPE_SYMLINK:
-                    if (   (enmFlags & kGctlCopyFlags_Recursive)
-                        && (enmFlags & kGctlCopyFlags_FollowLinks))
-                    {
-                        /* Fall through to next case is intentional. */
-                    }
-                    else
-                        break;
+                    case RTFS_TYPE_SYMLINK:
+                        if (   (enmFlags & kGctlCopyFlags_Recursive)
+                            && (enmFlags & kGctlCopyFlags_FollowLinks))
+                        { /* Fall through to next case is intentional. */ }
+                        else
+                            break;
+                        RT_FALL_THRU();
 
-                case RTDIRENTRYTYPE_FILE:
-                {
-                    if (   pszFilter
-                        && !RTStrSimplePatternMatch(pszFilter, DirEntry.szName))
+                    case RTFS_TYPE_FILE:
                     {
-                        break; /* Filter does not match. */
-                    }
+                        if (   pszFilter
+                            && !RTStrSimplePatternMatch(pszFilter, pDirEntry->szName))
+                        {
+                            break; /* Filter does not match. */
+                        }
 
-                    if (pContext->pCmdCtx->cVerbose)
-                        RTPrintf("File: %s\n", DirEntry.szName);
+                        if (pContext->pCmdCtx->cVerbose)
+                            RTPrintf("File: %s\n", pDirEntry->szName);
 
-                    if (!fDirCreated)
-                    {
-                        char *pszDestDir;
-                        vrc = gctlCopyTranslatePath(pszSource, szCurDir,
-                                                    pszDest, &pszDestDir);
-                        if (RT_SUCCESS(vrc))
+                        if (!fDirCreated)
                         {
-                            vrc = gctlCopyDirCreate(pContext, pszDestDir);
-                            RTStrFree(pszDestDir);
+                            char *pszDestDir;
+                            vrc = gctlCopyTranslatePath(pszSource, szCurDir, pszDest, &pszDestDir);
+                            if (RT_SUCCESS(vrc))
+                            {
+                                vrc = gctlCopyDirCreate(pContext, pszDestDir);
+                                RTStrFree(pszDestDir);
 
-                            fDirCreated = true;
+                                fDirCreated = true;
+                            }
                         }
-                    }
 
-                    if (RT_SUCCESS(vrc))
-                    {
-                        char *pszFileSource = RTPathJoinA(szCurDir, DirEntry.szName);
-                        if (pszFileSource)
+                        if (RT_SUCCESS(vrc))
                         {
-                            char *pszFileDest;
-                            vrc = gctlCopyTranslatePath(pszSource, pszFileSource,
-                                                       pszDest, &pszFileDest);
-                            if (RT_SUCCESS(vrc))
+                            char *pszFileSource = RTPathJoinA(szCurDir, pDirEntry->szName);
+                            if (pszFileSource)
                             {
-                                vrc = gctlCopyFileToDest(pContext, pszFileSource,
-                                                         pszFileDest, kGctlCopyFlags_None);
-                                RTStrFree(pszFileDest);
+                                char *pszFileDest;
+                                vrc = gctlCopyTranslatePath(pszSource, pszFileSource, pszDest, &pszFileDest);
+                                if (RT_SUCCESS(vrc))
+                                {
+                                    vrc = gctlCopyFileToDest(pContext, pszFileSource,
+                                                             pszFileDest, kGctlCopyFlags_None);
+                                    RTStrFree(pszFileDest);
+                                }
+                                RTStrFree(pszFileSource);
                             }
-                            RTStrFree(pszFileSource);
                         }
+                        break;
                     }
-                    break;
-                }
 
-                default:
+                    default:
+                        break;
+                }
+                if (RT_FAILURE(vrc))
                     break;
             }
-            if (RT_FAILURE(vrc))
-                break;
-        }
 
-        RTDirClose(pDir);
+            RTDirReadExAFree(&pDirEntry, &cbDirEntry);
+            RTDirClose(hDir);
+        }
     }
     return vrc;
 }
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.h b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.h
index 53474d8..c6a957f 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.h
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrlListener.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrlListener.cpp
index 4d46ee2..9bdd4c2 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrlListener.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrlListener.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageGuestProp.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageGuestProp.cpp
index a9f64a6..0b9d2c8 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageGuestProp.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageGuestProp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
index e7a038a..0171bc4 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
@@ -901,6 +901,7 @@ void printUsage(USAGECATEGORY fCategory, uint32_t fSubCategory, PRTSTREAM pStrm)
                      "                            [--encodedlun <lun>]\n"
                      "                            [--username <username>]\n"
                      "                            [--password <password>]\n"
+                     "                            [--passwordfile <file>]\n"
                      "                            [--initiator <initiator>]\n"
                      "                            [--intnet]\n"
                      "\n", SEP);
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp
index 5ed1887..a070009 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
index 2b060e1..3d33b7c 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -170,6 +170,9 @@ static HRESULT listNetworkInterfaces(const ComPtr<IVirtualBox> pVirtualBox,
         HostNetworkInterfaceMediumType_T Type;
         networkInterface->COMGETTER(MediumType)(&Type);
         RTPrintf("MediumType:      %s\n", getHostIfMediumTypeText(Type));
+        BOOL fWireless;
+        networkInterface->COMGETTER(Wireless)(&fWireless);
+        RTPrintf("Wireless:        %s\n", fWireless ? "Yes" : "No");
         HostNetworkInterfaceStatus_T Status;
         networkInterface->COMGETTER(Status)(&Status);
         RTPrintf("Status:          %s\n", getHostIfStatusText(Status));
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp
index 22dab2b..aba8e76 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
index 2f7faaa..57c7ba2 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp
index bb12e22..f08989f 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageNATNetwork.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp
index f348478..84244c5 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
index 238bbb9..24cdd79 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageStorageController.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -69,6 +69,7 @@ static const RTGETOPTDEF g_aStorageAttachOptions[] =
     { "--encodedlun",       'E', RTGETOPT_REQ_STRING },
     { "--username",         'U', RTGETOPT_REQ_STRING },
     { "--password",         'W', RTGETOPT_REQ_STRING },
+    { "--passwordfile",     'w', RTGETOPT_REQ_STRING },
     { "--initiator",        'N', RTGETOPT_REQ_STRING },
     { "--intnet",           'I', RTGETOPT_REQ_NOTHING },
 };
@@ -285,6 +286,15 @@ RTEXITCODE handleStorageAttach(HandlerArg *a)
                 bstrPassword = ValueUnion.psz;
                 break;
 
+            case 'w':   // --passwordFile
+            {
+                Utf8Str utf8Password;
+                RTEXITCODE rcExit = readPasswordFile(ValueUnion.psz, &utf8Password);
+                if (rcExit != RTEXITCODE_SUCCESS)
+                    rc = E_FAIL;
+                bstrPassword = utf8Password;
+                break;
+            }
             case 'N':   // --initiator
                 bstrInitiator = ValueUnion.psz;
                 break;
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageUSB.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageUSB.cpp
index 693dad8..a519b16 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageUSB.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageUSB.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/.scm-settings b/src/VBox/Frontends/VBoxSDL/.scm-settings
new file mode 100644
index 0000000..d7abd76
--- /dev/null
+++ b/src/VBox/Frontends/VBoxSDL/.scm-settings
@@ -0,0 +1,22 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for VBoxSDL.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+/VBoxSDLMain-darwin.h: --external-copyright
+/VBoxSDLMain-darwin.m: --external-copyright
+
+--filter-out-files /diff_SDL13_svn
+
diff --git a/src/VBox/Frontends/VBoxSDL/Framebuffer-darwin.m b/src/VBox/Frontends/VBoxSDL/Framebuffer-darwin.m
index fe44031..06c5786 100644
--- a/src/VBox/Frontends/VBoxSDL/Framebuffer-darwin.m
+++ b/src/VBox/Frontends/VBoxSDL/Framebuffer-darwin.m
@@ -1,3 +1,19 @@
+/* $Id: Framebuffer-darwin.m $ */
+/** @file
+ * VBoxSDL - Darwin Cocoa helper functions.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
 
 
 /*********************************************************************************************************************************
diff --git a/src/VBox/Frontends/VBoxSDL/Framebuffer.cpp b/src/VBox/Frontends/VBoxSDL/Framebuffer.cpp
index 2a93f2e..6f5d8cf 100644
--- a/src/VBox/Frontends/VBoxSDL/Framebuffer.cpp
+++ b/src/VBox/Frontends/VBoxSDL/Framebuffer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/Framebuffer.h b/src/VBox/Frontends/VBoxSDL/Framebuffer.h
index ef2e643..d434e45 100644
--- a/src/VBox/Frontends/VBoxSDL/Framebuffer.h
+++ b/src/VBox/Frontends/VBoxSDL/Framebuffer.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/Helper.cpp b/src/VBox/Frontends/VBoxSDL/Helper.cpp
index 1cfe33b..d64ee32 100644
--- a/src/VBox/Frontends/VBoxSDL/Helper.cpp
+++ b/src/VBox/Frontends/VBoxSDL/Helper.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/Helper.h b/src/VBox/Frontends/VBoxSDL/Helper.h
index 9edaa9c..27bb3d6 100644
--- a/src/VBox/Frontends/VBoxSDL/Helper.h
+++ b/src/VBox/Frontends/VBoxSDL/Helper.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp b/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
index 888f7e4..e6388d3 100644
--- a/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
+++ b/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDL.h b/src/VBox/Frontends/VBoxSDL/VBoxSDL.h
index a1bcf1a..096a21f 100644
--- a/src/VBox/Frontends/VBoxSDL/VBoxSDL.h
+++ b/src/VBox/Frontends/VBoxSDL/VBoxSDL.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDLHardened.cpp b/src/VBox/Frontends/VBoxSDL/VBoxSDLHardened.cpp
index 793afca..9dacbc0 100644
--- a/src/VBox/Frontends/VBoxSDL/VBoxSDLHardened.cpp
+++ b/src/VBox/Frontends/VBoxSDL/VBoxSDLHardened.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDLMain-darwin.h b/src/VBox/Frontends/VBoxSDL/VBoxSDLMain-darwin.h
index ef9c104..6d4177f 100644
--- a/src/VBox/Frontends/VBoxSDL/VBoxSDLMain-darwin.h
+++ b/src/VBox/Frontends/VBoxSDL/VBoxSDLMain-darwin.h
@@ -1,4 +1,4 @@
-/* $Id:  $ */
+/* $Id: VBoxSDLMain-darwin.h $ */
 /*   SDLMain.m - main entry point for our Cocoa-ized SDL app
        Initial Version: Darrell Walisser <dwaliss1 at purdue.edu>
        Non-NIB-Code & other changes: Max Horn <max at quendi.de>
diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDLTest.cpp b/src/VBox/Frontends/VBoxSDL/VBoxSDLTest.cpp
index 1a921bf..4352601 100644
--- a/src/VBox/Frontends/VBoxSDL/VBoxSDLTest.cpp
+++ b/src/VBox/Frontends/VBoxSDL/VBoxSDLTest.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VBoxShell/vboxinfo.vb b/src/VBox/Frontends/VBoxShell/vboxinfo.vb
index e0d7924..bd94a11 100644
--- a/src/VBox/Frontends/VBoxShell/vboxinfo.vb
+++ b/src/VBox/Frontends/VBoxShell/vboxinfo.vb
@@ -1,5 +1,10 @@
+' $Id: vboxinfo.vb $
+'' @file
+' ???
 '
-' Copyright (C) 2009-2010 Oracle Corporation
+
+'
+' Copyright (C) 2009-2017 Oracle Corporation
 '
 ' This file is part of VirtualBox Open Source Edition (OSE), as
 ' available from http://www.virtualbox.org. This file is free software;
@@ -9,6 +14,7 @@
 ' VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ' hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 '
+
 Imports System
 Imports System.Drawing
 Imports System.Windows.Forms
@@ -19,9 +25,9 @@ Module Module1
         Dim vb As VirtualBox.IVirtualBox
         Dim listBox As New ListBox()
         Dim form As New Form
-        
+
         vb = CreateObject("VirtualBox.VirtualBox")
-        
+
         form.Text = "VirtualBox version " & vb.Version
         form.Size = New System.Drawing.Size(400, 320)
         form.Location = New System.Drawing.Point(10, 10)
@@ -41,3 +47,4 @@ Module Module1
     End Sub
 
 End Module
+
diff --git a/src/VBox/Frontends/VBoxShell/vboxinfo.vbs b/src/VBox/Frontends/VBoxShell/vboxinfo.vbs
index 7808e72..49a8aeb 100644
--- a/src/VBox/Frontends/VBoxShell/vboxinfo.vbs
+++ b/src/VBox/Frontends/VBoxShell/vboxinfo.vbs
@@ -1,5 +1,10 @@
+' $Id: vboxinfo.vbs $
+'' @file
+' ???
 '
-' Copyright (C) 2009-2010 Oracle Corporation
+
+'
+' Copyright (C) 2009-2017 Oracle Corporation
 '
 ' This file is part of VirtualBox Open Source Edition (OSE), as
 ' available from http://www.virtualbox.org. This file is free software;
@@ -54,3 +59,4 @@ Sub Main
 End Sub
 
 Main
+
diff --git a/src/VBox/Frontends/VBoxShell/vboxshell.py b/src/VBox/Frontends/VBoxShell/vboxshell.py
index 1dd674f..6bf6411 100755
--- a/src/VBox/Frontends/VBoxShell/vboxshell.py
+++ b/src/VBox/Frontends/VBoxShell/vboxshell.py
@@ -23,7 +23,7 @@ from __future__ import print_function
 
 __copyright__ = \
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
@@ -33,7 +33,7 @@ Foundation, in version 2 as it comes in the "COPYING" file of the
 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 """
-__version__ = "$Revision: 117428 $"
+__version__ = "$Revision: 118839 $"
 
 
 import gc
diff --git a/src/VBox/Frontends/VirtualBox/.scm-settings b/src/VBox/Frontends/VirtualBox/.scm-settings
new file mode 100644
index 0000000..fc2ae6a
--- /dev/null
+++ b/src/VBox/Frontends/VirtualBox/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for VirtualBox.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# The .qrc files are (mostly?) autogenerated and have no copyright or license in them.
+/*.qrc: --no-update-license --no-update-copyright-year
+
diff --git a/src/VBox/Frontends/VirtualBox/Makefile.kmk b/src/VBox/Frontends/VirtualBox/Makefile.kmk
index 3295bfe..c715cd5 100644
--- a/src/VBox/Frontends/VirtualBox/Makefile.kmk
+++ b/src/VBox/Frontends/VirtualBox/Makefile.kmk
@@ -286,7 +286,6 @@ endif
 
 # Headers containing definitions of classes that use the Q_OBJECT macro.
 VirtualBox_QT_MOCHDRS = \
-	src/UIMediumTypeChangeDialog.h \
 	src/VBoxAboutDlg.h \
 	src/VBoxLicenseViewer.h \
 	src/UITakeSnapshotDialog.h \
@@ -544,7 +543,6 @@ VirtualBox_QT_MOCSRCS = \
 	src/globals/UIMainEventListener.cpp \
 	src/globals/UIThreadPool.cpp \
 	src/medium/UIMediumEnumerator.cpp \
-	src/medium/UIMediumManager.cpp \
 	src/runtime/UIActionPoolRuntime.cpp \
 	src/runtime/UIAddDiskEncryptionPasswordDialog.cpp \
 	src/runtime/UIConsoleEventHandler.cpp \
@@ -593,7 +591,6 @@ endif
 
 VirtualBox_SOURCES = \
 	src/main.cpp \
-	src/UIMediumTypeChangeDialog.cpp \
 	src/VBoxAboutDlg.cpp \
 	src/VBoxLicenseViewer.cpp \
 	src/UITakeSnapshotDialog.cpp \
diff --git a/src/VBox/Frontends/VirtualBox/VBoxUI.pro b/src/VBox/Frontends/VirtualBox/VBoxUI.pro
index 637fa93..1f7deba 100644
--- a/src/VBox/Frontends/VirtualBox/VBoxUI.pro
+++ b/src/VBox/Frontends/VirtualBox/VBoxUI.pro
@@ -6,7 +6,7 @@
 #
 
 #
-# Copyright (C) 2006-2012 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc b/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc
index 7c715d3..9efe204 100644
--- a/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc
+++ b/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc
@@ -39,6 +39,10 @@
         <file alias="cd_modify_22px.png">images/cd_modify_22px.png</file>
         <file alias="cd_modify_disabled_16px.png">images/cd_modify_disabled_16px.png</file>
         <file alias="cd_modify_disabled_22px.png">images/cd_modify_disabled_22px.png</file>
+        <file alias="cd_move_16px.png">images/cd_move_16px.png</file>
+        <file alias="cd_move_22px.png">images/cd_move_22px.png</file>
+        <file alias="cd_move_disabled_16px.png">images/cd_move_disabled_16px.png</file>
+        <file alias="cd_move_disabled_22px.png">images/cd_move_disabled_22px.png</file>
         <file alias="cd_read_16px.png">images/cd_read_16px.png</file>
         <file alias="cd_release_16px.png">images/cd_release_16px.png</file>
         <file alias="cd_release_22px.png">images/cd_release_22px.png</file>
@@ -62,13 +66,13 @@
         <file alias="commit_host_iface_22px.png">images/commit_host_iface_22px.png</file>
         <file alias="commit_host_iface_disabled_22px.png">images/commit_host_iface_disabled_22px.png</file>
         <file alias="connect_16px.png">images/connect_16px.png</file>
+        <file alias="connect_on_16px.png">images/connect_on_16px.png</file>
         <file alias="controller_add_16px.png">images/controller_add_16px.png</file>
         <file alias="controller_add_disabled_16px.png">images/controller_add_disabled_16px.png</file>
         <file alias="controller_remove_16px.png">images/controller_remove_16px.png</file>
         <file alias="controller_remove_disabled_16px.png">images/controller_remove_disabled_16px.png</file>
         <file alias="cpu_16px.png">images/cpu_16px.png</file>
         <file alias="description_16px.png">images/description_16px.png</file>
-        <file alias="disconnect_16px.png">images/disconnect_16px.png</file>
         <file alias="diskimage_16px.png">images/diskimage_16px.png</file>
         <file alias="diskimage_22px.png">images/diskimage_22px.png</file>
         <file alias="diskimage_32px.png">images/diskimage_32px.png</file>
@@ -128,6 +132,10 @@
         <file alias="fd_modify_22px.png">images/fd_modify_22px.png</file>
         <file alias="fd_modify_disabled_16px.png">images/fd_modify_disabled_16px.png</file>
         <file alias="fd_modify_disabled_22px.png">images/fd_modify_disabled_22px.png</file>
+        <file alias="fd_move_16px.png">images/fd_move_16px.png</file>
+        <file alias="fd_move_22px.png">images/fd_move_22px.png</file>
+        <file alias="fd_move_disabled_16px.png">images/fd_move_disabled_16px.png</file>
+        <file alias="fd_move_disabled_22px.png">images/fd_move_disabled_22px.png</file>
         <file alias="fd_read_16px.png">images/fd_read_16px.png</file>
         <file alias="fd_release_16px.png">images/fd_release_16px.png</file>
         <file alias="fd_release_22px.png">images/fd_release_22px.png</file>
@@ -167,6 +175,10 @@
         <file alias="hd_modify_22px.png">images/hd_modify_22px.png</file>
         <file alias="hd_modify_disabled_16px.png">images/hd_modify_disabled_16px.png</file>
         <file alias="hd_modify_disabled_22px.png">images/hd_modify_disabled_22px.png</file>
+        <file alias="hd_move_16px.png">images/hd_move_16px.png</file>
+        <file alias="hd_move_22px.png">images/hd_move_22px.png</file>
+        <file alias="hd_move_disabled_16px.png">images/hd_move_disabled_16px.png</file>
+        <file alias="hd_move_disabled_22px.png">images/hd_move_disabled_22px.png</file>
         <file alias="hd_new_16px.png">images/hd_new_16px.png</file>
         <file alias="hd_new_disabled_16px.png">images/hd_new_disabled_16px.png</file>
         <file alias="hd_read_16px.png">images/hd_read_16px.png</file>
diff --git a/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc b/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc
index c8789c8..a591462 100644
--- a/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc
+++ b/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc
@@ -39,6 +39,10 @@
         <file alias="cd_modify_22px_hidpi.png">images/hidpi/cd_modify_22px_hidpi.png</file>
         <file alias="cd_modify_disabled_16px_hidpi.png">images/hidpi/cd_modify_disabled_16px_hidpi.png</file>
         <file alias="cd_modify_disabled_22px_hidpi.png">images/hidpi/cd_modify_disabled_22px_hidpi.png</file>
+        <file alias="cd_move_16px_hidpi.png">images/hidpi/cd_move_16px_hidpi.png</file>
+        <file alias="cd_move_22px_hidpi.png">images/hidpi/cd_move_22px_hidpi.png</file>
+        <file alias="cd_move_disabled_16px_hidpi.png">images/hidpi/cd_move_disabled_16px_hidpi.png</file>
+        <file alias="cd_move_disabled_22px_hidpi.png">images/hidpi/cd_move_disabled_22px_hidpi.png</file>
         <file alias="cd_read_16px_hidpi.png">images/hidpi/cd_read_16px_hidpi.png</file>
         <file alias="cd_release_16px_hidpi.png">images/hidpi/cd_release_16px_hidpi.png</file>
         <file alias="cd_release_22px_hidpi.png">images/hidpi/cd_release_22px_hidpi.png</file>
@@ -62,13 +66,13 @@
         <file alias="commit_host_iface_22px_hidpi.png">images/hidpi/commit_host_iface_22px_hidpi.png</file>
         <file alias="commit_host_iface_disabled_22px_hidpi.png">images/hidpi/commit_host_iface_disabled_22px_hidpi.png</file>
         <file alias="connect_16px_hidpi.png">images/hidpi/connect_16px_hidpi.png</file>
+        <file alias="connect_on_16px_hidpi.png">images/hidpi/connect_on_16px_hidpi.png</file>
         <file alias="controller_add_16px_hidpi.png">images/hidpi/controller_add_16px_hidpi.png</file>
         <file alias="controller_add_disabled_16px_hidpi.png">images/hidpi/controller_add_disabled_16px_hidpi.png</file>
         <file alias="controller_remove_16px_hidpi.png">images/hidpi/controller_remove_16px_hidpi.png</file>
         <file alias="controller_remove_disabled_16px_hidpi.png">images/hidpi/controller_remove_disabled_16px_hidpi.png</file>
         <file alias="cpu_16px_hidpi.png">images/hidpi/cpu_16px_hidpi.png</file>
         <file alias="description_16px_hidpi.png">images/hidpi/description_16px_hidpi.png</file>
-        <file alias="disconnect_16px_hidpi.png">images/hidpi/disconnect_16px_hidpi.png</file>
         <file alias="diskimage_16px_hidpi.png">images/hidpi/diskimage_16px_hidpi.png</file>
         <file alias="diskimage_22px_hidpi.png">images/hidpi/diskimage_22px_hidpi.png</file>
         <file alias="diskimage_32px_hidpi.png">images/hidpi/diskimage_32px_hidpi.png</file>
@@ -128,6 +132,10 @@
         <file alias="fd_modify_22px_hidpi.png">images/hidpi/fd_modify_22px_hidpi.png</file>
         <file alias="fd_modify_disabled_16px_hidpi.png">images/hidpi/fd_modify_disabled_16px_hidpi.png</file>
         <file alias="fd_modify_disabled_22px_hidpi.png">images/hidpi/fd_modify_disabled_22px_hidpi.png</file>
+        <file alias="fd_move_16px_hidpi.png">images/hidpi/fd_move_16px_hidpi.png</file>
+        <file alias="fd_move_22px_hidpi.png">images/hidpi/fd_move_22px_hidpi.png</file>
+        <file alias="fd_move_disabled_16px_hidpi.png">images/hidpi/fd_move_disabled_16px_hidpi.png</file>
+        <file alias="fd_move_disabled_22px_hidpi.png">images/hidpi/fd_move_disabled_22px_hidpi.png</file>
         <file alias="fd_read_16px_hidpi.png">images/hidpi/fd_read_16px_hidpi.png</file>
         <file alias="fd_release_16px_hidpi.png">images/hidpi/fd_release_16px_hidpi.png</file>
         <file alias="fd_release_22px_hidpi.png">images/hidpi/fd_release_22px_hidpi.png</file>
@@ -167,6 +175,10 @@
         <file alias="hd_modify_22px_hidpi.png">images/hidpi/hd_modify_22px_hidpi.png</file>
         <file alias="hd_modify_disabled_16px_hidpi.png">images/hidpi/hd_modify_disabled_16px_hidpi.png</file>
         <file alias="hd_modify_disabled_22px_hidpi.png">images/hidpi/hd_modify_disabled_22px_hidpi.png</file>
+        <file alias="hd_move_16px_hidpi.png">images/hidpi/hd_move_16px_hidpi.png</file>
+        <file alias="hd_move_22px_hidpi.png">images/hidpi/hd_move_22px_hidpi.png</file>
+        <file alias="hd_move_disabled_16px_hidpi.png">images/hidpi/hd_move_disabled_16px_hidpi.png</file>
+        <file alias="hd_move_disabled_22px_hidpi.png">images/hidpi/hd_move_disabled_22px_hidpi.png</file>
         <file alias="hd_new_16px_hidpi.png">images/hidpi/hd_new_16px_hidpi.png</file>
         <file alias="hd_new_disabled_16px_hidpi.png">images/hidpi/hd_new_disabled_16px_hidpi.png</file>
         <file alias="hd_read_16px_hidpi.png">images/hidpi/hd_read_16px_hidpi.png</file>
diff --git a/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc b/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc
index 83a60f0..5f8376e 100644
--- a/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc
+++ b/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc
@@ -275,8 +275,6 @@
         <file alias="vmw_first_run_bg.png">images/vmw_first_run_bg.png</file>
         <file alias="vmw_new_harddisk.png">images/vmw_new_harddisk.png</file>
         <file alias="vmw_new_harddisk_bg.png">images/vmw_new_harddisk_bg.png</file>
-        <file alias="vmw_new_user.png">images/vmw_new_user.png</file>
-        <file alias="vmw_new_user_bg.png">images/vmw_new_user_bg.png</file>
         <file alias="vmw_new_welcome.png">images/vmw_new_welcome.png</file>
         <file alias="vmw_new_welcome_bg.png">images/vmw_new_welcome_bg.png</file>
         <file alias="vmw_ovf_export.png">images/vmw_ovf_export.png</file>
diff --git a/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc b/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc
index e50d717..d92bce0 100644
--- a/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc
+++ b/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc
@@ -277,6 +277,12 @@
         <file alias="vm_start_disabled_32px_hidpi.png">images/hidpi/vm_start_disabled_32px_hidpi.png</file>
         <file alias="vm_start_headless_16px_hidpi.png">images/hidpi/vm_start_headless_16px_hidpi.png</file>
         <file alias="vm_start_separate_16px_hidpi.png">images/hidpi/vm_start_separate_16px_hidpi.png</file>
+        <file alias="vmw_clone_hidpi.png">images/hidpi/vmw_clone_hidpi.png</file>
+        <file alias="vmw_first_run_hidpi.png">images/hidpi/vmw_first_run_hidpi.png</file>
+        <file alias="vmw_new_harddisk_hidpi.png">images/hidpi/vmw_new_harddisk_hidpi.png</file>
+        <file alias="vmw_new_welcome_hidpi.png">images/hidpi/vmw_new_welcome_hidpi.png</file>
+        <file alias="vmw_ovf_export_hidpi.png">images/hidpi/vmw_ovf_export_hidpi.png</file>
+        <file alias="vmw_ovf_import_hidpi.png">images/hidpi/vmw_ovf_import_hidpi.png</file>
         <file alias="vrdp_16px_hidpi.png">images/hidpi/vrdp_16px_hidpi.png</file>
         <file alias="vrdp_24px_hidpi.png">images/hidpi/vrdp_24px_hidpi.png</file>
         <file alias="vrdp_32px_hidpi.png">images/hidpi/vrdp_32px_hidpi.png</file>
diff --git a/src/VBox/Frontends/VirtualBox/VirtualBoxMac.qrc b/src/VBox/Frontends/VirtualBox/VirtualBoxMac.qrc
index 9e7335d..52757b6 100644
--- a/src/VBox/Frontends/VirtualBox/VirtualBoxMac.qrc
+++ b/src/VBox/Frontends/VirtualBox/VirtualBoxMac.qrc
@@ -3,7 +3,6 @@
     <file alias="vmw_new_welcome_bg.png">images/vmw_new_welcome_bg.png</file>
     <file alias="vmw_new_harddisk_bg.png">images/vmw_new_harddisk_bg.png</file>
     <file alias="vmw_first_run_bg.png">images/vmw_first_run_bg.png</file>
-    <file alias="vmw_new_user_bg.png">images/vmw_new_user_bg.png</file>
     <file alias="vmw_ovf_import_bg.png">images/vmw_ovf_import_bg.png</file>
     <file alias="vmw_ovf_export_bg.png">images/vmw_ovf_export_bg.png</file>
     <file alias="vmw_clone_bg.png">images/vmw_clone_bg.png</file>
diff --git a/src/VBox/Frontends/VirtualBox/VirtualBoxOther.qrc b/src/VBox/Frontends/VirtualBox/VirtualBoxOther.qrc
index 7d1d922..2f2da6d 100644
--- a/src/VBox/Frontends/VirtualBox/VirtualBoxOther.qrc
+++ b/src/VBox/Frontends/VirtualBox/VirtualBoxOther.qrc
@@ -2,7 +2,6 @@
  <qresource prefix="/">
     <file alias="vmw_new_welcome.png">images/vmw_new_welcome.png</file>
     <file alias="vmw_new_harddisk.png">images/vmw_new_harddisk.png</file>
-    <file alias="vmw_new_user.png">images/vmw_new_user.png</file>
     <file alias="vmw_first_run.png">images/vmw_first_run.png</file>
     <file alias="vmw_ovf_export.png">images/vmw_ovf_export.png</file>
     <file alias="vmw_ovf_import.png">images/vmw_ovf_import.png</file>
diff --git a/src/VBox/Frontends/VirtualBox/images/cd_move_16px.png b/src/VBox/Frontends/VirtualBox/images/cd_move_16px.png
new file mode 100644
index 0000000..1b6d8d9
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/cd_move_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/cd_move_22px.png b/src/VBox/Frontends/VirtualBox/images/cd_move_22px.png
new file mode 100644
index 0000000..016acb5
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/cd_move_22px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/cd_move_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/cd_move_disabled_16px.png
new file mode 100644
index 0000000..50e07bb
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/cd_move_disabled_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/cd_move_disabled_22px.png b/src/VBox/Frontends/VirtualBox/images/cd_move_disabled_22px.png
new file mode 100644
index 0000000..83ae3a9
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/cd_move_disabled_22px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/connect_16px.png b/src/VBox/Frontends/VirtualBox/images/connect_16px.png
index 9907eb7..6369314 100644
Binary files a/src/VBox/Frontends/VirtualBox/images/connect_16px.png and b/src/VBox/Frontends/VirtualBox/images/connect_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/connect_on_16px.png b/src/VBox/Frontends/VirtualBox/images/connect_on_16px.png
new file mode 100644
index 0000000..fe2af03
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/connect_on_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/disconnect_16px.png b/src/VBox/Frontends/VirtualBox/images/disconnect_16px.png
deleted file mode 100644
index 731aa80..0000000
Binary files a/src/VBox/Frontends/VirtualBox/images/disconnect_16px.png and /dev/null differ
diff --git a/src/VBox/Frontends/VirtualBox/images/fd_move_16px.png b/src/VBox/Frontends/VirtualBox/images/fd_move_16px.png
new file mode 100644
index 0000000..fbd7880
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/fd_move_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/fd_move_22px.png b/src/VBox/Frontends/VirtualBox/images/fd_move_22px.png
new file mode 100644
index 0000000..af69a39
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/fd_move_22px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/fd_move_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/fd_move_disabled_16px.png
new file mode 100644
index 0000000..e7b0d53
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/fd_move_disabled_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/fd_move_disabled_22px.png b/src/VBox/Frontends/VirtualBox/images/fd_move_disabled_22px.png
new file mode 100644
index 0000000..20cc46d
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/fd_move_disabled_22px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hd_move_16px.png b/src/VBox/Frontends/VirtualBox/images/hd_move_16px.png
new file mode 100644
index 0000000..639e71a
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hd_move_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hd_move_22px.png b/src/VBox/Frontends/VirtualBox/images/hd_move_22px.png
new file mode 100644
index 0000000..34b4f29
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hd_move_22px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hd_move_disabled_16px.png b/src/VBox/Frontends/VirtualBox/images/hd_move_disabled_16px.png
new file mode 100644
index 0000000..e9777be
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hd_move_disabled_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hd_move_disabled_22px.png b/src/VBox/Frontends/VirtualBox/images/hd_move_disabled_22px.png
new file mode 100644
index 0000000..bde2891
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hd_move_disabled_22px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_16px_hidpi.png
new file mode 100644
index 0000000..098d7c6
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_22px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_22px_hidpi.png
new file mode 100644
index 0000000..8e7257c
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_22px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_disabled_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_disabled_16px_hidpi.png
new file mode 100644
index 0000000..7ee63b3
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_disabled_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_disabled_22px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_disabled_22px_hidpi.png
new file mode 100644
index 0000000..30ce0e2
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/cd_move_disabled_22px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/connect_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/connect_16px_hidpi.png
index 241e704..243eb8e 100644
Binary files a/src/VBox/Frontends/VirtualBox/images/hidpi/connect_16px_hidpi.png and b/src/VBox/Frontends/VirtualBox/images/hidpi/connect_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/connect_on_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/connect_on_16px_hidpi.png
new file mode 100644
index 0000000..4c3422e
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/connect_on_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/disconnect_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/disconnect_16px_hidpi.png
deleted file mode 100644
index 5b37a09..0000000
Binary files a/src/VBox/Frontends/VirtualBox/images/hidpi/disconnect_16px_hidpi.png and /dev/null differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_16px_hidpi.png
new file mode 100644
index 0000000..3c266ca
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_22px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_22px_hidpi.png
new file mode 100644
index 0000000..8467aa5
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_22px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_disabled_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_disabled_16px_hidpi.png
new file mode 100644
index 0000000..ae3d159
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_disabled_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_disabled_22px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_disabled_22px_hidpi.png
new file mode 100644
index 0000000..9062aeb
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/fd_move_disabled_22px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_16px_hidpi.png
new file mode 100644
index 0000000..bf80aa4
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_22px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_22px_hidpi.png
new file mode 100644
index 0000000..e7cbd31
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_22px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_disabled_16px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_disabled_16px_hidpi.png
new file mode 100644
index 0000000..2040082
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_disabled_16px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_disabled_22px_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_disabled_22px_hidpi.png
new file mode 100644
index 0000000..8fb9ff1
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/hd_move_disabled_22px_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_clone_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_clone_hidpi.png
new file mode 100644
index 0000000..23c6b8e
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_clone_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_first_run_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_first_run_hidpi.png
new file mode 100644
index 0000000..865a123
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_first_run_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_new_harddisk_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_new_harddisk_hidpi.png
new file mode 100644
index 0000000..ab3be5e
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_new_harddisk_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_new_welcome_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_new_welcome_hidpi.png
new file mode 100644
index 0000000..980f503
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_new_welcome_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_ovf_export_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_ovf_export_hidpi.png
new file mode 100644
index 0000000..24b947e
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_ovf_export_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_ovf_import_hidpi.png b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_ovf_import_hidpi.png
new file mode 100644
index 0000000..c1ed4d9
Binary files /dev/null and b/src/VBox/Frontends/VirtualBox/images/hidpi/vmw_ovf_import_hidpi.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/sf_write_16px.png b/src/VBox/Frontends/VirtualBox/images/sf_write_16px.png
index 9bfc88e..e81a586 100644
Binary files a/src/VBox/Frontends/VirtualBox/images/sf_write_16px.png and b/src/VBox/Frontends/VirtualBox/images/sf_write_16px.png differ
diff --git a/src/VBox/Frontends/VirtualBox/images/vmw_new_user.png b/src/VBox/Frontends/VirtualBox/images/unused/vmw_new_user.png
similarity index 100%
rename from src/VBox/Frontends/VirtualBox/images/vmw_new_user.png
rename to src/VBox/Frontends/VirtualBox/images/unused/vmw_new_user.png
diff --git a/src/VBox/Frontends/VirtualBox/images/vmw_new_user_bg.png b/src/VBox/Frontends/VirtualBox/images/unused/vmw_new_user_bg.png
similarity index 100%
rename from src/VBox/Frontends/VirtualBox/images/vmw_new_user_bg.png
rename to src/VBox/Frontends/VirtualBox/images/unused/vmw_new_user_bg.png
diff --git a/src/VBox/Frontends/VirtualBox/nls/.scm-settings b/src/VBox/Frontends/VirtualBox/nls/.scm-settings
new file mode 100644
index 0000000..b036747
--- /dev/null
+++ b/src/VBox/Frontends/VirtualBox/nls/.scm-settings
@@ -0,0 +1,20 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for VirtualBox nls
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# The NLS files does not contains a copyright or license statement due to the editing tool.
+/*.ts: --no-update-license --no-update-copyright-year
+
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
index 427d87f..1923e1b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
@@ -9724,6 +9724,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">Този тип съхранение е закачен директно или индиректно, запазва се при правене на снимки.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">Този тип съхранение е закачен индиректно, промените се заличават при следващото зареждане на виртуалната машина.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">Този тип съхранение е закачен директно, игнорира се при правене на снимки.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">Този тип съхранение е закачен директно, позволено е едновременното му използване от няколко машини.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">Този тип съхранение е закачен директно и може да се използва от няколко машини.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">Този тип съхранение е закачен индиректно, така че едно основно съхранение може да се използва от няколко ВМ, които имат свое различаващо съхранение, на което да запазват собствените си модификации.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9921,6 +9953,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumSizeEditor</name>
@@ -9937,39 +9989,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Промяна атрибутите на медията</translation>
+        <translation type="vanished">Промяна атрибутите на медията</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Предстои да промените атрибутите на виртуалния диск, разположен в <b>%1</b>.</p><p>Моля, изберете един от следните типове медия и натиснете <b>%2</b>, за да продължите или <b>%3</b> в противен случай.</p></translation>
+        <translation type="vanished"><p>Предстои да промените атрибутите на виртуалния диск, разположен в <b>%1</b>.</p><p>Моля, изберете един от следните типове медия и натиснете <b>%2</b>, за да продължите или <b>%3</b> в противен случай.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Изберете тип медия:</translation>
+        <translation type="vanished">Изберете тип медия:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Този тип съхранение е закачен директно или индиректно, запазва се при правене на снимки.</translation>
+        <translation type="vanished">Този тип съхранение е закачен директно или индиректно, запазва се при правене на снимки.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Този тип съхранение е закачен индиректно, промените се заличават при следващото зареждане на виртуалната машина.</translation>
+        <translation type="vanished">Този тип съхранение е закачен индиректно, промените се заличават при следващото зареждане на виртуалната машина.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Този тип съхранение е закачен директно, игнорира се при правене на снимки.</translation>
+        <translation type="vanished">Този тип съхранение е закачен директно, игнорира се при правене на снимки.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Този тип съхранение е закачен директно, позволено е едновременното му използване от няколко машини.</translation>
+        <translation type="vanished">Този тип съхранение е закачен директно, позволено е едновременното му използване от няколко машини.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Този тип съхранение е закачен директно и може да се използва от няколко машини.</translation>
+        <translation type="vanished">Този тип съхранение е закачен директно и може да се използва от няколко машини.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Този тип съхранение е закачен индиректно, така че едно основно съхранение може да се използва от няколко ВМ, които имат свое различаващо съхранение, на което да запазват собствените си модификации.</translation>
+        <translation type="vanished">Този тип съхранение е закачен индиректно, така че едно основно съхранение може да се използва от няколко ВМ, които имат свое различаващо съхранение, на което да запазват собствените си модификации.</translation>
     </message>
 </context>
 <context>
@@ -11944,6 +11996,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14230,7 +14290,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_копие</translation>
+        <translation type="vanished">%1_копие</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14246,27 +14306,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Копиране на виртуален твърд диск</translation>
+        <translation type="vanished">Копиране на виртуален твърд диск</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Твърд диск за копиране</translation>
+        <translation type="vanished">Твърд диск за копиране</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><p>Моля, изберете файла на виртуалния диск, който искате да копирате, ако вече не е избран. Можете да изберете един от списъка или използвайте иконата на папка до списъка, за да изберете един.</p></translation>
+        <translation type="vanished"><p>Моля, изберете файла на виртуалния диск, който искате да копирате, ако вече не е избран. Можете да изберете един от списъка или използвайте иконата на папка до списъка, за да изберете един.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Изберете файл с виртуален твърд диск за копиране...</translation>
+        <translation type="vanished">Изберете файл с виртуален твърд диск за копиране...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Тип файл за твърд диск</translation>
+        <translation type="vanished">Тип файл за твърд диск</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>Моля, изберете типа на файла, който искате да използвате за новия виртуален твърд диск! Ако нямате нужда да използвате този файл с друг виртуализационен софтуер, можете да оставите тази настройка непроменена.</translation>
+        <translation type="vanished">Моля, изберете типа на файла, който искате да използвате за новия виртуален твърд диск! Ако нямате нужда да използвате този файл с друг виртуализационен софтуер, можете да оставите тази настройка непроменена.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14274,47 +14334,120 @@ p, li { white-space: pre-wrap; }
     </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>Моля, изберете дали файлът на новия виртуален твърд диск ще нараства докато се използва (динамично зададен), или искате да бъде създаден в максималния си размер (фиксиран размер).</translation>
+        <translation type="vanished">Моля, изберете дали файлът на новия виртуален твърд диск ще нараства докато се използва (динамично зададен), или искате да бъде създаден в максималния си размер (фиксиран размер).</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><p><b>Днамично зададен</b> файл на виртуален твърд диск ще използва място на вашия физически твърд диск, само когато се запълни (но не повече от максималния <b>фиксиран размер</b>), но няма да се смали отново автоматично, когато се освободи място на него.</p></translation>
+        <translation type="vanished"><p><b>Днамично зададен</b> файл на виртуален твърд диск ще използва място на вашия физически твърд диск, само когато се запълни (но не повече от максималния <b>фиксиран размер</b>), но няма да се смали отново автоматично, когато се освободи място на него.</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><p>Файл с<b>фиксиран размер</b> на виртуален твърд диск може да отнеме повече време при създаване на някои системи, но често е по-бърз при използване.</p></translation>
+        <translation type="vanished"><p>Файл с<b>фиксиран размер</b> на виртуален твърд диск може да отнеме повече време при създаване на някои системи, но често е по-бърз при използване.</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><p>Също така, можете да изберете да <b>разделите</b> виртуалния диск в няколко файла до 2ГБ всеки. Това е полезно, ако искате да съхраните виртуалната машина на преносими USB устройства или стари системи, някои от които не поддържат много големи файлове.</translation>
+        <translation type="vanished"><p>Също така, можете да изберете да <b>разделите</b> виртуалния диск в няколко файла до 2ГБ всеки. Това е полезно, ако искате да съхраните виртуалната машина на преносими USB устройства или стари системи, някои от които не поддържат много големи файлове.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Моля, изберете папка за новия файл на виртуален твърд диск</translation>
+        <translation type="vanished">Моля, изберете папка за новия файл на виртуален твърд диск</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Нов твърд диск за създаване</translation>
+        <translation type="vanished">Нов твърд диск за създаване</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>Моля, впишете името на файла на новия виртуален твърд диск в кутийката по-долу или щракнете на иконата с папка, за да изберете друга папка, в която да се създаде файлът.</translation>
+        <translation type="vanished">Моля, впишете името на файла на новия виртуален твърд диск в кутийката по-долу или щракнете на иконата с папка, за да изберете друга папка, в която да се създаде файлът.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Изберете папка за новия файл на виртуален твърд диск...</translation>
+        <translation type="vanished">Изберете папка за новия файл на виртуален твърд диск...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Твърд диск за &копиране</translation>
+        <translation type="vanished">Твърд диск за &копиране</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Нов твърд диск за създаване</translation>
+        <translation type="vanished">&Нов твърд диск за създаване</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Тип файл за твърд диск</translation>
+        <translation type="vanished">&Тип файл за твърд диск</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_копие</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
index 2db3a82..1d349cb 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
@@ -5725,6 +5725,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5910,55 +5942,51 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Modifica els atributs del suport</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Ara canviareu els atributs del disc virtual ubicat a <b>%1</b>.</p><p>Seleccioneu un dels tipus de suport següents i premeu <b>%2</b> per procedir o <b>%3</b> en altre cas.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Trieu el tipus de suport:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Modifica els atributs del suport</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Ara canviareu els atributs del disc virtual ubicat a <b>%1</b>.</p><p>Seleccioneu un dels tipus de suport següents i premeu <b>%2</b> per procedir o <b>%3</b> en altre cas.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Trieu el tipus de suport:</translation>
     </message>
 </context>
 <context>
@@ -7159,6 +7187,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -8340,31 +8376,31 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_còpia</translation>
+        <translation type="vanished">%1_còpia</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Copia el disc dur virtual</translation>
+        <translation type="vanished">Copia el disc dur virtual</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Disc dur que es copiarà</translation>
+        <translation type="vanished">Disc dur que es copiarà</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><p>Seleccioneu el disc dur virtual que voleu seleccionar si no ho està encara. Podeu triar un de la llista o fer servir la icona de carpeta per seleccionar-ne un altre.</p></translation>
+        <translation type="vanished"><p>Seleccioneu el disc dur virtual que voleu seleccionar si no ho està encara. Podeu triar un de la llista o fer servir la icona de carpeta per seleccionar-ne un altre.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Seleccioneu un fitxer de disc dur virtual per copiar...</translation>
+        <translation type="vanished">Seleccioneu un fitxer de disc dur virtual per copiar...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Tipus de fitxer de disc dur</translation>
+        <translation type="vanished">Tipus de fitxer de disc dur</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>Seleccioneu el tipus de fitxer que voleu crear per al disc dur virtual nou. Si no necessiteu cap altre programari de virtualització, podeu deixar aquest camp sense canvis.</translation>
+        <translation type="vanished">Seleccioneu el tipus de fitxer que voleu crear per al disc dur virtual nou. Si no necessiteu cap altre programari de virtualització, podeu deixar aquest camp sense canvis.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -8372,47 +8408,120 @@
     </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>Seleccioneu si el fitxer de disc dur ha de créixer conforme s'usa (ubicació dinàmica) o bé si s'ha de crear amb la mida màxima assignada (mida fixa).</translation>
+        <translation type="vanished">Seleccioneu si el fitxer de disc dur ha de créixer conforme s'usa (ubicació dinàmica) o bé si s'ha de crear amb la mida màxima assignada (mida fixa).</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><p>Un disc dur <b>ubicat dinàmicament</b> només farà servir espai al disc dur conforme creixi (fins a una <b>mida fixa</b> màxima), tot i que no es reduirà l'espai ocupat en cas d'alliberar espai més tard.</p></translation>
+        <translation type="vanished"><p>Un disc dur <b>ubicat dinàmicament</b> només farà servir espai al disc dur conforme creixi (fins a una <b>mida fixa</b> màxima), tot i que no es reduirà l'espai ocupat en cas d'alliberar espai més tard.</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><p>Un fitxer de disc dur de <b>mida fixa</b> pot requerir més temps per ser creat, però sol ser més ràpid.</p></translation>
+        <translation type="vanished"><p>Un fitxer de disc dur de <b>mida fixa</b> pot requerir més temps per ser creat, però sol ser més ràpid.</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><p>També podeu triar <b>dividir</b> el fitxer de disc dur en diversos fitxers de fins a 2GB cada un. Això és útil principalment si voleu emmagatzemar la màquina virtual en dispositius USB o en sistemes antics que no poden gestionar fitxers molt grans.</translation>
+        <translation type="vanished"><p>També podeu triar <b>dividir</b> el fitxer de disc dur en diversos fitxers de fins a 2GB cada un. Això és útil principalment si voleu emmagatzemar la màquina virtual en dispositius USB o en sistemes antics que no poden gestionar fitxers molt grans.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Seleccioneu una ubicació per al fitxer de disc dur virtual nou</translation>
+        <translation type="vanished">Seleccioneu una ubicació per al fitxer de disc dur virtual nou</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Disc dur nou que es crearà</translation>
+        <translation type="vanished">Disc dur nou que es crearà</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>Introduïu el nom del disc dur virtual nou al camp següent o feu clic a la icona de carpeta per seleccionar una carpeta diferent on crear-lo.</translation>
+        <translation type="vanished">Introduïu el nom del disc dur virtual nou al camp següent o feu clic a la icona de carpeta per seleccionar una carpeta diferent on crear-lo.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Seleccioneu una ubicació per al fitxer de disc dur virtual nou...</translation>
+        <translation type="vanished">Seleccioneu una ubicació per al fitxer de disc dur virtual nou...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Disc dur que es &copiarà</translation>
+        <translation type="vanished">Disc dur que es &copiarà</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>Disc dur &nou que es crearà</translation>
+        <translation type="vanished">Disc dur &nou que es crearà</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Tipus de fitxer de disc dur</translation>
+        <translation type="vanished">&Tipus de fitxer de disc dur</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_còpia</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
index 0eb1a3c..09e6aba 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
@@ -9710,6 +9710,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9907,55 +9939,51 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Modifica els atributs del suport</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Ara canviareu els atributs del disc virtual ubicat a <b>%1</b>.</p><p>Seleccioneu un dels tipus de suport següents i premeu <b>%2</b> per procedir o <b>%3</b> en altre cas.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Trieu el tipus de suport:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Modifica els atributs del suport</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Ara canviareu els atributs del disc virtual ubicat a <b>%1</b>.</p><p>Seleccioneu un dels tipus de suport següents i premeu <b>%2</b> per procedir o <b>%3</b> en altre cas.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Trieu el tipus de suport:</translation>
     </message>
 </context>
 <context>
@@ -12045,6 +12073,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14477,7 +14513,7 @@ pas i connectar discos durs més avant, fent servir el diàleg de configuració
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_còpia</translation>
+        <translation type="vanished">%1_còpia</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14492,75 +14528,80 @@ pas i connectar discos durs més avant, fent servir el diàleg de configuració
         <translation type="obsolete">&Tipus de fitxer de disc</translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></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>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></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>
+        <source>Disk image file type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></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>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></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>
+        <source>Please type the name of the new virtual disk image 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>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_còpia</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
index 09250ac..1e6c068 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
@@ -9709,6 +9709,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9906,55 +9938,51 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Změna atributů média</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><b>Chystáte se změnit atributy virtuálního disku umístěného v <b>%1</b>.</p><p>Zvolte prosím jeden z následujících typů média a klepněte na <b>%2</b> pro pokračování nebo <b>%3</b> v jiném případě.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Zvolte typ média:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Změna atributů média</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><b>Chystáte se změnit atributy virtuálního disku umístěného v <b>%1</b>.</p><p>Zvolte prosím jeden z následujících typů média a klepněte na <b>%2</b> pro pokračování nebo <b>%3</b> v jiném případě.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Zvolte typ média:</translation>
     </message>
 </context>
 <context>
@@ -12069,6 +12097,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14530,7 +14566,7 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopie</translation>
+        <translation type="vanished">%1_kopie</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14546,27 +14582,27 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Kopírování virtuálního pevného disku</translation>
+        <translation type="vanished">Kopírování virtuálního pevného disku</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Pevný disk pro kopírování</translation>
+        <translation type="vanished">Pevný disk pro kopírování</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><p>Vyberte prosím virtuální disk, který chce zkopírovat. Můžete si vybrat ze seznamu nebo pomocí ikony vedle seznamu otevřít složku a vybrat soubor s virtuálním pevným diskem.</p></translation>
+        <translation type="vanished"><p>Vyberte prosím virtuální disk, který chce zkopírovat. Můžete si vybrat ze seznamu nebo pomocí ikony vedle seznamu otevřít složku a vybrat soubor s virtuálním pevným diskem.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Vyberte soubor s virtuálním pevným diskem...</translation>
+        <translation type="vanished">Vyberte soubor s virtuálním pevným diskem...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Typ souboru s pevným diskem</translation>
+        <translation type="vanished">Typ souboru s pevným diskem</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>Zvolte prosím soubor, který budete chtít použít pro nový virtuální pevný disk. Pokud jej máte již vytvořen jiným virtualizačním software, můžete toto nastavení nechat beze změny.</translation>
+        <translation type="vanished">Zvolte prosím soubor, který budete chtít použít pro nový virtuální pevný disk. Pokud jej máte již vytvořen jiným virtualizačním software, můžete toto nastavení nechat beze změny.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14574,47 +14610,120 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </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>Vyberte prosím zda se virtuální pevný disk bude zvětšovat podle potřeby (dynamicky alokovaný) nebo zda jeho velikost bude pevně dána (pevná velikost).</translation>
+        <translation type="vanished">Vyberte prosím zda se virtuální pevný disk bude zvětšovat podle potřeby (dynamicky alokovaný) nebo zda jeho velikost bude pevně dána (pevná velikost).</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><p><b>Dynamicky alokovaný</b> virtuální disk bude zabírat na fyzickém disku místo tak jak bude zaplněn (do definované <b>maximální velikosti</b>), ale nebude automaticky zmenšen pokud se v něm místo uvolní.</p></translation>
+        <translation type="vanished"><p><b>Dynamicky alokovaný</b> virtuální disk bude zabírat na fyzickém disku místo tak jak bude zaplněn (do definované <b>maximální velikosti</b>), ale nebude automaticky zmenšen pokud se v něm místo uvolní.</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><p>Vytvoření virtuálního disku s <b>pevnou velikostí</b> může na některých systémech trvat déle ale používá se častěji.</p></translation>
+        <translation type="vanished"><p>Vytvoření virtuálního disku s <b>pevnou velikostí</b> může na některých systémech trvat déle ale používá se častěji.</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><p>Můžete si zvolit <b>rozdělení</b> souboru s virtuálním diskem na několik částí menších než dva gigabajty. To je především vhodné pokud budete ukládat virtuální disk na USB zařízení nebo starší systémy, které mají problém s načtením tak velkých souborů.</translation>
+        <translation type="vanished"><p>Můžete si zvolit <b>rozdělení</b> souboru s virtuálním diskem na několik částí menších než dva gigabajty. To je především vhodné pokud budete ukládat virtuální disk na USB zařízení nebo starší systémy, které mají problém s načtením tak velkých souborů.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Zvolte prosím umístění pro soubor s novým vituálním pevným diskem</translation>
+        <translation type="vanished">Zvolte prosím umístění pro soubor s novým vituálním pevným diskem</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Vytvoření nového virtuálního pevného disku</translation>
+        <translation type="vanished">Vytvoření nového virtuálního pevného disku</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>Zadejte prosím název nového virtuálního pevného disku do políčka níže nebo klepněte na ikonku pro výběr jiné složky kde bude soubor následně vytvořen.</translation>
+        <translation type="vanished">Zadejte prosím název nového virtuálního pevného disku do políčka níže nebo klepněte na ikonku pro výběr jiné složky kde bude soubor následně vytvořen.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Zvolte umístění nového souboru s virtuálním pevným diskem...</translation>
+        <translation type="vanished">Zvolte umístění nového souboru s virtuálním pevným diskem...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Pevný disk pro &kopírování</translation>
+        <translation type="vanished">Pevný disk pro &kopírování</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Vytvořit nový pevný disk</translation>
+        <translation type="vanished">&Vytvořit nový pevný disk</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Typ souboru pro virtuální disk</translation>
+        <translation type="vanished">&Typ souboru pro virtuální disk</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_kopie</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
index 55afba5..4cf6728 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
@@ -9338,6 +9338,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9535,55 +9567,51 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Ret mediets egenskaber</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Du er ved at ændre egenskaber for den virtuelle disk indsat i <b>%1</b>.</p><p>Vælg en af følgende medie-typer og tryk <b>%2</b> for at fortsætte eller <b>%3</b> hvis ikke.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Vælg medie-type:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Ret mediets egenskaber</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Du er ved at ændre egenskaber for den virtuelle disk indsat i <b>%1</b>.</p><p>Vælg en af følgende medie-typer og tryk <b>%2</b> for at fortsætte eller <b>%3</b> hvis ikke.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Vælg medie-type:</translation>
     </message>
 </context>
 <context>
@@ -11514,6 +11542,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -13734,7 +13770,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopi</translation>
+        <translation type="vanished">%1_kopi</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -13750,27 +13786,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Kopier virtuel disk</translation>
+        <translation type="vanished">Kopier virtuel disk</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Harddisk der kopieres</translation>
+        <translation type="vanished">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><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>
+        <translation type="vanished"><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>Vælg virtuelt disk-aftryk der skal kopieres...</translation>
+        <translation type="vanished">Vælg virtuelt disk-aftryk der skal kopieres...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Harddisk-filtype</translation>
+        <translation type="vanished">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>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>
+        <translation type="vanished">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>
@@ -13778,47 +13814,120 @@ p, li { white-space: pre-wrap; }
     </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>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>
+        <translation type="vanished">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><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>
+        <translation type="vanished"><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><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>
+        <translation type="vanished"><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><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>
+        <translation type="vanished"><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>Angiv placeringen af den nye virtuelle disk-fil</translation>
+        <translation type="vanished">Angiv placeringen af den nye virtuelle disk-fil</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Harddisk der skal oprettes</translation>
+        <translation type="vanished">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>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>
+        <translation type="vanished">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>Angiv placeringen af den nye virtuelle disk-fil...</translation>
+        <translation type="vanished">Angiv placeringen af den nye virtuelle disk-fil...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Harddisk der kopieres</translation>
+        <translation type="vanished">Harddisk der kopieres</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Ny harddisk der skal oprettes</translation>
+        <translation type="vanished">&Ny harddisk der skal oprettes</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Harddisk-filforma&t</translation>
+        <translation type="vanished">Harddisk-filforma&t</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_kopi</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></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 8dbaba0..46c5c00 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
@@ -5767,6 +5767,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Die Größe des Mediums kann nicht von <b>%1</b> nach <b>%2</b> verringert werden, weil dies nicht implementiert ist.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation>Speicherort des Mediums auswählen</translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation>Speicherort darf nicht leer sein.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>Das Medium ist direkt oder indirekt angeschlossen und wird beim Laden von Sicherungspunkten wieder hergestellt.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>Änderungen von diesem indirekt angeschlossenen Medium gehen beim nächsten Start der virtuellen Maschine verloren.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>Das Medium ist direkt angeschlossen und wird beim Speichern von Sicherungspunkten ignoriert.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>Das Medium ist direkt angeschlossen und kann gleichzeitig von mehreren Maschinen benutzt werden.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>Das Medium ist direkt angeschlossen und kann von mehreren Maschinen benutzt werden.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>Das Medium kann zugleich von mehreren VMs benutzt werden. Schreibzugriffe gehen auf jeweils gesonderte virtuelle Differenzmedien, die separat für jede VM angelegt werden.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5992,6 +6024,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation>Plattenabbilder aktualisieren (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation>Aktuelle Erweiterung (*.%1)</translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation>Ort für dieses Medium auswählen</translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation>&Verschieben...</translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation>Plattenabbild verschieben (%1)</translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation>Ausgewähltes Plattenabbild verschieben</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -6031,39 +6083,39 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Mediumattribute ändern</translation>
+        <translation type="vanished">Mediumattribute ändern</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Sie möchten die Attribute der virtuellen Festplatte <b>%1</b> ändern.</p><p>Bitte wählen Sie einen der folgenden Medientypen und bestätigen dann mit <b>%2</b> um fortzufahren oder verwerfen die Änderung mit <b>%3</b>.</p></translation>
+        <translation type="vanished"><p>Sie möchten die Attribute der virtuellen Festplatte <b>%1</b> ändern.</p><p>Bitte wählen Sie einen der folgenden Medientypen und bestätigen dann mit <b>%2</b> um fortzufahren oder verwerfen die Änderung mit <b>%3</b>.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Mediumtyp ändern:</translation>
+        <translation type="vanished">Mediumtyp ändern:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Das Medium wird normal an die VM gebunden und beim Laden von Sicherungspunkten ordungsgemäß wieder hergestellt.</translation>
+        <translation type="vanished">Das Medium wird normal an die VM gebunden und beim Laden von Sicherungspunkten ordungsgemäß wieder hergestellt.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Schreibzugriffe auf das Medium werden nur temporär gespeichert und gehen beim Ausschalten der VM verloren.</translation>
+        <translation type="vanished">Schreibzugriffe auf das Medium werden nur temporär gespeichert und gehen beim Ausschalten der VM verloren.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>In diesem Modus wird immer direkt auf das virtuelle Medium geschrieben und Sicherungspunkte werden nicht berücksichtigt.</translation>
+        <translation type="vanished">In diesem Modus wird immer direkt auf das virtuelle Medium geschrieben und Sicherungspunkte werden nicht berücksichtigt.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Das Medium kann zugleich von mehreren VMs benutzt werden. Die Gäste müssen gemeinsame Zugriffe auf das Medium aber untereinander koordinieren.</translation>
+        <translation type="vanished">Das Medium kann zugleich von mehreren VMs benutzt werden. Die Gäste müssen gemeinsame Zugriffe auf das Medium aber untereinander koordinieren.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Das Medium ist direkt angeschlossen und kann von mehreren Maschinen benutzt werden.</translation>
+        <translation type="vanished">Das Medium ist direkt angeschlossen und kann von mehreren Maschinen benutzt werden.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Das Medium kann zugleich von mehreren VMs benutzt werden. Schreibzugriffe gehen auf jeweils gesonderte virtuelle Differenzmedien, die separat für jede VM angelegt werden.</translation>
+        <translation type="vanished">Das Medium kann zugleich von mehreren VMs benutzt werden. Schreibzugriffe gehen auf jeweils gesonderte virtuelle Differenzmedien, die separat für jede VM angelegt werden.</translation>
     </message>
 </context>
 <context>
@@ -6400,7 +6452,7 @@
     </message>
     <message>
         <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source>
-        <translation>Die virtuelle Festplatte <nobr><b>%1</b></nobr> konnte nicht erzeugt werden.</translation>
+        <translation>Die virtuelle Festplatte konnte nicht erzeugt werden: <nobr><b>%1</b>.</nobr></translation>
     </message>
     <message>
         <source>Failed to access the disk image file <nobr><b>%1</b></nobr>.</source>
@@ -6629,23 +6681,23 @@
     </message>
     <message>
         <source>Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might not be installed on the host computer</source>
-        <translation>Der USB-Proxy-Dienst konnte nicht gestarted werden. Dieser Dienst ist möglicherweise nicht auf diesem Computer installiert.</translation>
+        <translation>Der USB-Proxy-Dienst konnte nicht gestarted werden (VERR_FILE_NOT_FOUND). Dieser Dienst ist möglicherweise nicht auf diesem Computer installiert</translation>
     </message>
     <message>
         <source>VirtualBox is not currently allowed to access USB devices.  You can change this by adding your user to the 'vboxusers' group.  Please see the user manual for a more detailed explanation</source>
-        <translation>VirtualBox kann nicht auf USB-Geräte zugreifen. Dieses Problem kann dadurch gelöst werden, indem der aktuelle Nutzer Mitglied der Gruppe 'vboxusers' wird. In der Dokumentation finden Sie weitere Erläuterungen.</translation>
+        <translation>VirtualBox kann nicht auf USB-Geräte zugreifen. Dieses Problem kann dadurch gelöst werden, indem der aktuelle Nutzer Mitglied der Gruppe 'vboxusers' wird. In der Dokumentation finden Sie weitere Erläuterungen</translation>
     </message>
     <message>
         <source>VirtualBox is not currently allowed to access USB devices.  You can change this by allowing your user to access the 'usbfs' folder and files.  Please see the user manual for a more detailed explanation</source>
-        <translation>VirtualBox kann nicht auf USB-Geräte zugreifen. Dieses Problem wird gelöst, wenn der aktuelle Nutzer auf die Dateien und Order des USB-Dateisystems (usbfs) zugreifen kann. In der Dokumentation finden Sie eine genauere Erklärung.</translation>
+        <translation>VirtualBox kann nicht auf USB-Geräte zugreifen. Dieses Problem wird gelöst, wenn der aktuelle Nutzer auf die Dateien und Order des USB-Dateisystems (usbfs) zugreifen kann. In der Dokumentation finden Sie eine genauere Erklärung</translation>
     </message>
     <message>
         <source>The USB Proxy Service has not yet been ported to this host</source>
-        <translation>Der USB-Proxy-Dienst wurde nicht auf diesen Host portiert.</translation>
+        <translation>Der USB-Proxy-Dienst wurde noch nicht auf diesen Host portiert</translation>
     </message>
     <message>
         <source>Could not load the Host USB Proxy service</source>
-        <translation>Der USB-Proxy-Dienst konnte nicht gestartet werden.</translation>
+        <translation>Der USB-Proxy-Dienst konnte nicht geladen werden</translation>
     </message>
     <message>
         <source>Failed to register the virtual machine <b>%1</b>.</source>
@@ -7258,12 +7310,20 @@
     </message>
     <message>
         <source><p>Could not insert the <b>%1</b> disk image file into the virtual machine <b>%2</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>Konnte das Abbild <b>%1</b> nicht zur virtuellen Maschine lt;b>%2</b> hinzufügen, da diese kein optisches Laufwerk enthält. Bitte ein optisches Laufwerk in den VM-Einstellungen hinzufügen.</translation>
+        <translation><p>Konnte das Abbild <b>%1</b> nicht zur virtuellen Maschine lt;b>%2</b> hinzufügen, da diese kein optisches Laufwerk enthält. Bitte ein optisches Laufwerk in den VM-Einstellungen hinzufügen.</p></translation>
     </message>
     <message>
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>Ändern des Sicherungspunktes <b>%1</b> der virtuellen Maschine lt;b>%2</b> fehlgeschlagen.</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation>Die Plattenabbilddatei konnte nicht erstellt werden: <nobr><b>%1</b>.</nobr></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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><p>Die Änderungen die Sie vornehmen möchten erfordern, dass diese Festplatte von der Maschine abgelöst wird.</p><p>Sind Sie sicher, dass Sie die Festplatte <nobr><b>%1</b></nobr> ablösen wollen?</p><p>Diese wird dann von den folgenden Maschinen abgelöst: <b>%2</b>.</p></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -8493,31 +8553,31 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_Kopie</translation>
+        <translation type="vanished">%1_Kopie</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Virtuelle Festplatte kopieren</translation>
+        <translation type="vanished">Virtuelle Festplatte kopieren</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Zu kopierende Festplatte</translation>
+        <translation type="vanished">Zu kopierende Festplatte</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><p>Bitte wählen Sie eine virtuelle Festplatte zum Kopieren aus. Diese können Sie entweder aus der Liste oder mit Hilfe des Icons neben der Liste mittels Dateidialog auswählen.</p></translation>
+        <translation type="vanished"><p>Bitte wählen Sie eine virtuelle Festplatte zum Kopieren aus. Diese können Sie entweder aus der Liste oder mit Hilfe des Icons neben der Liste mittels Dateidialog auswählen.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Wählen Sie eine virtuelle Festplatte zum Kopieren...</translation>
+        <translation type="vanished">Wählen Sie eine virtuelle Festplatte zum Kopieren...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Dateityp der Festplatte</translation>
+        <translation type="vanished">Dateityp der Festplatte</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>Bitte wählen Sie den Typ der neuen virtuelle Festplatte. Falls Sie diese nicht mit anderer Virtualisierungssoftware verwenden, können Sie diese Einstellung unverändert lassen.</translation>
+        <translation type="vanished">Bitte wählen Sie den Typ der neuen virtuelle Festplatte. Falls Sie diese nicht mit anderer Virtualisierungssoftware verwenden, können Sie diese Einstellung unverändert lassen.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -8525,46 +8585,119 @@
     </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>Bitte wählen Sie, ob die neue virtuelle Festplatte erst nach und nach zur Laufzeit (dynamisch) alloziert werden soll oder ob die Platte jetzt sofort vollständig alloziert werden soll (feste Größe).</translation>
+        <translation type="vanished">Bitte wählen Sie, ob die neue virtuelle Festplatte erst nach und nach zur Laufzeit (dynamisch) alloziert werden soll oder ob die Platte jetzt sofort vollständig alloziert werden soll (feste Größe).</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><p>Eine <b>dynamisch allozierte</b> Datei einer virtuellen Platte belegt nur dann Platz auf der physischen Platte des Hosts, wenn der Gast Daten schreibt. Einmal belegter Platz wird nicht automatisch freigegeben.</p></translation>
+        <translation type="vanished"><p>Eine <b>dynamisch allozierte</b> Datei einer virtuellen Platte belegt nur dann Platz auf der physischen Platte des Hosts, wenn der Gast Daten schreibt. Einmal belegter Platz wird nicht automatisch freigegeben.</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><p>Das Erzeugen einer Datei <b>fester Größe</b> dauert auf manchen Systemen länger aber bietet eine etwas bessere Performance.</p></translation>
+        <translation type="vanished"><p>Das Erzeugen einer Datei <b>fester Größe</b> dauert auf manchen Systemen länger aber bietet eine etwas bessere Performance.</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><p>Die virtuelle Platte kann ebenfalls auf mehrere Dateien mit einer maximalen Größe von 2 GB aufgeteilt werden. Dies ist sinnvoll, wenn die virtuelle Maschine auf einem USB-Gerät oder auf älteren Systemen gespeichert werden soll, die keine größeren Dateien unterstützen.</translation>
+        <translation type="vanished"><p>Die virtuelle Platte kann ebenfalls auf mehrere Dateien mit einer maximalen Größe von 2 GB aufgeteilt werden. Dies ist sinnvoll, wenn die virtuelle Maschine auf einem USB-Gerät oder auf älteren Systemen gespeichert werden soll, die keine größeren Dateien unterstützen.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Bitte wählen Sie einen Dateinamen für die neue virtuelle Festplatte</translation>
+        <translation type="vanished">Bitte wählen Sie einen Dateinamen für die neue virtuelle Festplatte</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Neue Festplatte</translation>
+        <translation type="vanished">Neue Festplatte</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>Bitte geben Sie den Namen der neuen Festplatte an oder wählen Sie das Ordner-Icon, um einen anderen Ordner für die Datei zu wählen.</translation>
+        <translation type="vanished">Bitte geben Sie den Namen der neuen Festplatte an oder wählen Sie das Ordner-Icon, um einen anderen Ordner für die Datei zu wählen.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Bitte wählen Sie einen Dateinamen für die neue virtuelle Festplatte...</translation>
+        <translation type="vanished">Bitte wählen Sie einen Dateinamen für die neue virtuelle Festplatte...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Zu &kopierende Festplatte</translation>
+        <translation type="vanished">Zu &kopierende Festplatte</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Neue Festplatte</translation>
+        <translation type="vanished">&Neue Festplatte</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
+        <translation type="vanished">Datei&typ der Festplatte</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation>Plattenabbild kopieren</translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation>Zu kopierendes Plattenabbild</translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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><p>Bitte wählen Sie eine virtuelle Festplatte zum Kopieren aus sofern noch keine gewählt ist. Diese können Sie entweder aus der Liste oder mit Hilfe des Icons neben der Liste mittels Dateidialog auswählen.</p></translation>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>Wählen Sie eine virtuelle Festplatte zum Kopieren...</translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation>Dateityp der Festplatte</translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>Bitte wählen Sie den Typ der neuen virtuelle Festplatte. Falls Sie diese nicht mit anderer Virtualisierungssoftware verwenden, können Sie diese Einstellung unverändert lassen.</translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>Bitte wählen Sie, ob die neue virtuelle Festplatte erst nach und nach zur Laufzeit (dynamisch) alloziert werden soll oder ob die Platte jetzt sofort vollständig alloziert werden soll (feste Größe).</translation>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p>Eine <b>dynamisch allozierte</b> Datei einer virtuellen Platte belegt nur dann Platz auf der physischen Platte des Hosts, wenn der Gast Daten schreibt. Einmal belegter Platz wird nicht automatisch freigegeben.</p></translation>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p>Das Erzeugen einer Datei <b>fester Größe</b> dauert auf manchen Systemen länger aber bietet eine etwas bessere Performance.</p></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>Die virtuelle Platte kann ebenfalls auf mehrere Dateien mit einer maximalen Größe von 2 GB aufgeteilt werden. Dies ist sinnvoll, wenn die virtuelle Maschine auf einem USB-Gerät oder auf älteren Systemen gespeichert werden soll, die keine größeren Dateien unterstützen.</translation>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>Bitte wählen Sie einen Dateinamen für die neue virtuelle Festplatte</translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation>Neue Festplatte</translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>Bitte geben Sie unten in das Feld den Namen der neuen Festplatte an oder wählen Sie das Ordner-Icon, um einen anderen Ordner für die Datei zu wählen.</translation>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>Bitte wählen Sie einen Dateinamen für die neue virtuelle Festplatte...</translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_Kopie</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation>Zu &kopierendes Plattenabbild</translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation>&Neue Platte erzeugen</translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
         <translation>Datei&typ der Festplatte</translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
index 9ad09fe..1df681f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
@@ -6,7 +6,7 @@
     <message>
         <source>English</source>
         <comment>Native language name</comment>
-        <translatorcomment>2017-10-01</translatorcomment>
+        <translatorcomment>2017-11-04</translatorcomment>
         <translation>Ελληνικά</translation>
     </message>
     <message>
@@ -5374,7 +5374,7 @@
     </message>
     <message>
         <source>Determines whether the emulated pointing device is a standard PS/2 mouse, a USB tablet or a USB multi-touch tablet.</source>
-        <translation>Καθορίζει αν η εξομοιωμένη συσκευή του δείκτη είναι ένα τυπικό ποντίκι PS/2, μία ταμπλέτα USB ή ένα μία ταμπλέτα πολλαπλής αφής USB.</translation>
+        <translation>Καθορίζει αν η εξομοιωμένη συσκευή του δείκτη είναι ένα τυπικό ποντίκι PS/2, μία ταμπλέτα USB ή μία ταμπλέτα πολλαπλής αφής USB.</translation>
     </message>
     <message>
         <source>More than <b>%1%</b> of the host computer's memory (<b>%2</b>) is assigned to the virtual machine. Not enough memory is left for the host operating system. Please select a smaller amount.</source>
@@ -5785,6 +5785,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Δεν μπορεί να αλλάξει το μέγεθος του μέσου από <b>%1</b> σε <b>%2</b> μιας και η συρρίκνωση αποθήκευσης δεν είναι διαθέσιμη.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation>Επιλογή Τοποθεσίας Μέσου</translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation>Η τοποθεσία δεν μπορεί να είναι κενή.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα ή έμμεσα, διατηρείται όταν παίρνονται στιγμιότυπα.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>Αυτό το είδος του μέσου προσαρτάται έμμεσα, οι αλλαγές διαγράφονται κατά την επόμενη εκκίνηση της εικονικής μηχανής.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα, αγνοείται όταν παίρνονται στιγμιότυπα.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα, επιτρέποντας την ταυτόχρονη χρήση από μερικές μηχανές.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα, και μπορεί να χρησιμοποιηθεί από μερικές μηχανές.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>Αυτό το είδος του μέσου προσαρτάται έμμεσα, έτσι ώστε το βασικό μέσο να μπορεί να χρησιμοποιηθεί για μερικές μηχανές οι οποίες χρησιμοποιούν το διαφορικό μέσο για να αποθηκεύουν τις τροποποιήσεις τους.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5970,6 +6002,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation>Ανανέωση Αρχείου Σκληρού Δίσκου (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation>Τρέχουσα επέκταση (*.%1)</translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation>Επιλογή της τοποθεσίας του μέσου</translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation>Μετακίνηση...</translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation>Μετακίνηση Αρχείου Σκληρού Δίσκου (%1)</translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation>Μετακίνηση επιλεγμένων αρχείων εικόνας δίσκου</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -6009,39 +6061,39 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Αλλάξτε τις ιδιότητες του μέσου</translation>
+        <translation type="vanished">Αλλάξτε τις ιδιότητες του μέσου</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Πρόκειται να αλλάξετε τις ρυθμίσεις του αρχείου εικόνας δίσκου <b>%1</b>.</p><p>Επιλέξτε μία από τις παρακάτω λειτουργίες και πατήστε <b>%2</b> για να προχωρήσετε ή <b>%3</b> αλλιώς.</p></translation>
+        <translation type="vanished"><p>Πρόκειται να αλλάξετε τις ρυθμίσεις του αρχείου εικόνας δίσκου <b>%1</b>.</p><p>Επιλέξτε μία από τις παρακάτω λειτουργίες και πατήστε <b>%2</b> για να προχωρήσετε ή <b>%3</b> αλλιώς.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Επιλέξτε λειτουργία:</translation>
+        <translation type="vanished">Επιλέξτε λειτουργία:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα ή έμμεσα, διατηρείται όταν παίρνονται στιγμιότυπα.</translation>
+        <translation type="vanished">Αυτό το είδος του μέσου προσαρτάται άμεσα ή έμμεσα, διατηρείται όταν παίρνονται στιγμιότυπα.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Αυτό το είδος του μέσου προσαρτάται έμμεσα, οι αλλαγές διαγράφονται κατά την επόμενη εκκίνηση της εικονικής μηχανής.</translation>
+        <translation type="vanished">Αυτό το είδος του μέσου προσαρτάται έμμεσα, οι αλλαγές διαγράφονται κατά την επόμενη εκκίνηση της εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα, αγνοείται όταν παίρνονται στιγμιότυπα.</translation>
+        <translation type="vanished">Αυτό το είδος του μέσου προσαρτάται άμεσα, αγνοείται όταν παίρνονται στιγμιότυπα.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα, επιτρέποντας την ταυτόχρονη χρήση από μερικές μηχανές.</translation>
+        <translation type="vanished">Αυτό το είδος του μέσου προσαρτάται άμεσα, επιτρέποντας την ταυτόχρονη χρήση από μερικές μηχανές.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Αυτό το είδος του μέσου προσαρτάται άμεσα, και μπορεί να χρησιμοποιηθεί από μερικές μηχανές.</translation>
+        <translation type="vanished">Αυτό το είδος του μέσου προσαρτάται άμεσα, και μπορεί να χρησιμοποιηθεί από μερικές μηχανές.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Αυτό το είδος του μέσου προσαρτάται έμμεσα, έτσι ώστε το βασικό μέσο να μπορεί να χρησιμοποιηθεί για μερικές μηχανές οι οποίες χρησιμοποιούν το διαφορικό μέσο για να αποθηκεύουν τις τροποποιήσεις τους.</translation>
+        <translation type="vanished">Αυτό το είδος του μέσου προσαρτάται έμμεσα, έτσι ώστε το βασικό μέσο να μπορεί να χρησιμοποιηθεί για μερικές μηχανές οι οποίες χρησιμοποιούν το διαφορικό μέσο για να αποθηκεύουν τις τροποποιήσεις τους.</translation>
     </message>
 </context>
 <context>
@@ -7248,6 +7300,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>Αποτυχία αλλαγής του στιγμιότυπου <b>%1</b> της εικονικής μηχανής <b>%2</b>.</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation>Αποτυχία δημιουργίας της αποθήκευσης του εικονικού μέσου <nobr><b>%1</b>.</nobr></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -8433,31 +8493,31 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_αντίγραφο</translation>
+        <translation type="vanished">%1_αντίγραφο</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Αντιγραφή Εικονικού  Σκληρού Δίσκου</translation>
+        <translation type="vanished">Αντιγραφή Εικονικού Σκληρού Δίσκου</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Σκληρός δίσκος για αντιγραφή</translation>
+        <translation type="vanished">Σκληρός δίσκος για αντιγραφή</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><p>Παρακαλώ επιλέξτε τον εικονικό σκληρό δίσκο που θέλετε να αντιγράψετε αν δεν είναι ήδη επιλεγμένος. Μπορείτε να διαλέξετε είτε από τον κατάλογο, ή να χρησιμοποιήσετε το εικονίδιο φακέλου δίπλα από τον κατάλογο για να επιλέξετε.</p></translation>
+        <translation type="vanished"><p>Παρακαλώ επιλέξτε τον εικονικό σκληρό δίσκο που θέλετε να αντιγράψετε αν δεν είναι ήδη επιλεγμένος. Μπορείτε να διαλέξετε είτε από τον κατάλογο, ή να χρησιμοποιήσετε το εικονίδιο φακέλου δίπλα από τον κατάλογο για να επιλέξετε.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Παρακαλώ επιλέξτε έναν εικονικό σκληρό δίσκο για αντιγραφή...</translation>
+        <translation type="vanished">Παρακαλώ επιλέξτε έναν εικονικό σκληρό δίσκο για αντιγραφή...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Τύπος αρχείου σκληρού δίσκου</translation>
+        <translation type="vanished">Τύπος αρχείου σκληρού δίσκου</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>Επιλέξτε τον τύπο του αρχείου που θέλετε να χρησιμοποιήσετε για το νέο εικονικό σκληρό δίσκο. Αν δεν χρειάζεται να τον χρησιμοποιήσετε με άλλο λογισμικό εικονοποίησης μπορείτε να αφήσετε αυτή τη ρύθμιση όπως είναι.</translation>
+        <translation type="vanished">Επιλέξτε τον τύπο του αρχείου που θέλετε να χρησιμοποιήσετε για το νέο εικονικό σκληρό δίσκο. Αν δεν χρειάζεται να τον χρησιμοποιήσετε με άλλο λογισμικό εικονοποίησης μπορείτε να αφήσετε αυτή τη ρύθμιση όπως είναι.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -8465,15 +8525,15 @@
     </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>Επιλέξτε αν ο νέος εικονικός σκληρός δίσκος θα μεγαλώνει δυναμικά με τη χρήση (δυναμική εκχώρηση) ή αν θα δημιουργηθεί με το μέγιστο μέγεθος (πάγιο μέγεθος).</translation>
+        <translation type="vanished">Επιλέξτε αν ο νέος εικονικός σκληρός δίσκος θα μεγαλώνει δυναμικά με τη χρήση (δυναμική εκχώρηση) ή αν θα δημιουργηθεί με το μέγιστο μέγεθος (πάγιο μέγεθος).</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><p>Η <b>δυναμική εκχώρηση</b> σκληρού δίσκου θα χρησιμοποιήσει χώρο στον πραγματικό σκληρό δίσκο καθώς χρησιμοποιείται (μέχρι το μέγιστο <b>πάγιο μέγεθος</b>), αν και δεν θα συρρικνωθεί αυτόματα αν ελευθερωθεί χώρος στον εικονικό σκληρό δίσκο.</p></translation>
+        <translation type="vanished"><p>Η <b>δυναμική εκχώρηση</b> σκληρού δίσκου θα χρησιμοποιήσει χώρο στον πραγματικό σκληρό δίσκο καθώς χρησιμοποιείται (μέχρι το μέγιστο <b>πάγιο μέγεθος</b>), αν και δεν θα συρρικνωθεί αυτόματα αν ελευθερωθεί χώρος στον εικονικό σκληρό δίσκο.</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><p>Ένας σκληρός δίσκος με <b>πάγιο μέγεθος</b> μπορεί να πάρει περισότερο να δημιουργηθεί σε κάποια συστήματα αλλά συχνά είναι πιο γρήγορος κατά τη χρήση.</p></translation>
+        <translation type="vanished"><p>Ένας σκληρός δίσκος με <b>πάγιο μέγεθος</b> μπορεί να πάρει περισότερο να δημιουργηθεί σε κάποια συστήματα αλλά συχνά είναι πιο γρήγορος κατά τη χρήση.</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.</p></source>
@@ -8481,36 +8541,109 @@
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Παρακαλώ επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου</translation>
+        <translation type="vanished">Παρακαλώ επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Δημιουργία νέου σκληρού δίσκου</translation>
+        <translation type="vanished">Δημιουργία νέου σκληρού δίσκου</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>Παρακαλώ συμπληρώστε το όνομα του αρχείου του νέου εικονικού σκληρού δίσκου στο κουτί παρακάτω ή κάντε κλικ στο εικονίδιο φακέλου για να επιλέξετε ένα φάκελο στον οποίο θα δημιουργηθεί το αρχείο.</translation>
+        <translation type="vanished">Παρακαλώ συμπληρώστε το όνομα του αρχείου του νέου εικονικού σκληρού δίσκου στο κουτί παρακάτω ή κάντε κλικ στο εικονίδιο φακέλου για να επιλέξετε ένα φάκελο στον οποίο θα δημιουργηθεί το αρχείο.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου...</translation>
+        <translation type="vanished">Επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Σκληρός δίσκος για αντιγραφή</translation>
+        <translation type="vanished">Σκληρός δίσκος για αντιγραφή</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>Νέος σκληρός δίσκος για δημιουργία</translation>
+        <translation type="vanished">Νέος σκληρός δίσκος για δημιουργία</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Τύπος αρχείου σκληρού δίσκου</translation>
+        <translation type="vanished">Τύπος αρχείου σκληρού δίσκου</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="vanished"><p>Μπορείτε επίσης να επιλέξετε να <b>χωρίσετε</b> το αρχείο του σκληρού δίσκου σε αρχεία μέγιστου μεγέθους 2 gigabytes το καθένα. Αυτό είναι κυρίως χρήσιμο αν θέλετε να αποθηκεύσετε την εικονική μηχανή σε αποσπώμενη συσκευή USB ή σε παλιά συστήματα, μερικά απ' τα οποία δεν διαχειρίζονται πολύ μεγάλα αρχεία.</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation>Αντιγραφή Εικονικού Αρχείου Δίσκου</translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation>Αρχείο δίσκου για αντιγραφή</translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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><p>Παρακαλώ επιλέξτε το εικονικό αρχείο δίσκου που θέλετε να αντιγράψετε αν δεν είναι ήδη επιλεγμένο. Μπορείτε να διαλέξετε είτε από τον κατάλογο, ή να χρησιμοποιήσετε το εικονίδιο φακέλου δίπλα από τον κατάλογο για να επιλέξετε.</p></translation>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>Παρακαλώ επιλέξτε έναν εικονικό αρχείο δίσκου για αντιγραφή...</translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation>Τύπος αρχείου δίσκου</translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>Επιλέξτε τον τύπο του αρχείου που θέλετε να χρησιμοποιήσετε για το νέο εικονικό σκληρό δίσκο. Αν δεν χρειάζεται να τον χρησιμοποιήσετε με άλλο λογισμικό εικονοποίησης μπορείτε να αφήσετε αυτή τη ρύθμιση όπως είναι.</translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>Επιλέξτε αν ο νέος εικονικός σκληρός δίσκος θα μεγαλώνει δυναμικά με τη χρήση (δυναμική εκχώρηση) ή αν θα δημιουργηθεί με το μέγιστο μέγεθος (πάγιο μέγεθος).</translation>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p>Η <b>δυναμική εκχώρηση</b> σκληρού δίσκου θα χρησιμοποιήσει χώρο στον πραγματικό σκληρό δίσκο καθώς χρησιμοποιείται (μέχρι το μέγιστο <b>πάγιο μέγεθος</b>), αν και δεν θα συρρικνωθεί αυτόματα αν ελευθερωθεί χώρος στον εικονικό σκληρό δίσκο.</p></translation>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p>Ένας σκληρός δίσκος με <b>πάγιο μέγεθος</b> μπορεί να πάρει περισότερο να δημιουργηθεί σε κάποια συστήματα αλλά συχνά είναι πιο γρήγορος κατά τη χρήση.</p></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>Μπορείτε επίσης να επιλέξετε να <b>χωρίσετε</b> το αρχείο του σκληρού δίσκου σε αρχεία μέγιστου μεγέθους 2 gigabytes το καθένα. Αυτό είναι κυρίως χρήσιμο αν θέλετε να αποθηκεύσετε την εικονική μηχανή σε αποσπώμενη συσκευή USB ή σε παλιά συστήματα, μερικά απ' τα οποία δεν διαχειρίζονται πολύ μεγάλα αρχεία.</translation>
     </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>Παρακαλώ επιλέξτε μία θέση για το αρχείο του νέου εικονικού δίσκου</translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation>Δημιουργία νέου αρχείου δίσκου</translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>Παρακαλώ συμπληρώστε το όνομα του αρχείου του νέου εικονικού δίσκου στο κουτί παρακάτω ή κάντε κλικ στο εικονίδιο φακέλου για να επιλέξετε ένα φάκελο στον οποίο θα δημιουργηθεί το αρχείο.</translation>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>Επιλέξτε μία θέση για το αρχείο του νέου εικονικού δίσκου...</translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_αντίγραφο</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation>Αρχείο δίσκου για αντιγραφή</translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation>Δημιουργία νέου αρχείου δίσκου</translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation>Τύπος αρχείου δίσκου</translation>
+    </message>
 </context>
 <context>
     <name>UIWizardCloneVM</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
index 3400cf3..5ab6da7 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
@@ -9903,6 +9903,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>No se puede cambiar el tamaño del medio de <b>%1</b> a <b>%2</b> debido a que la reducción no está actualmente implementada.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">Este tipo de medio está conectado directa o indirectamente, preservado al tomar instantáneas.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">Este tipo de medio está conectado indirectamente, los cambios son borrados la siguiente vez que la máquina virtual sea iniciada.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">Este tipo de medio está conectado directamente, ignorado al tomar instantáneas.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">Este tipo de medio está conectado directamente, está permitido ser usado concurrentemente por varias máquinas.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">Este tipo de medio está conectado directamente, y puede ser usado por varias máquinas.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">Este tipo de medio está conectado indirectamente, de modo que un medio base puede ser usado por varias MVs que tienen su propio medio diferenciado para almacenar sus modificaciones.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -10100,6 +10132,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">Actualizar archivos de imagen de discos (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -10139,7 +10191,7 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Modificar atributos del medio</translation>
+        <translation type="vanished">Modificar atributos del medio</translation>
     </message>
     <message>
         <source><p>You are about to change the attributes of the virtual disk located in <b>%1</b>.</p><p>Please choose one of the following medium types and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
@@ -10151,35 +10203,35 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Está a punto de cambiar los atributos del disco virtual localizados en <b>%1</b>.</p><p>Seleccione uno de los siguientes tipos de medios y presione <b>%2</b> para proceder o <b>%3</b> en caso contrario.</p></translation>
+        <translation type="vanished"><p>Está a punto de cambiar los atributos del disco virtual localizados en <b>%1</b>.</p><p>Seleccione uno de los siguientes tipos de medios y presione <b>%2</b> para proceder o <b>%3</b> en caso contrario.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Seleccione un modo:</translation>
+        <translation type="vanished">Seleccione un modo:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Este tipo de medio está conectado directa o indirectamente, preservado al tomar instantáneas.</translation>
+        <translation type="vanished">Este tipo de medio está conectado directa o indirectamente, preservado al tomar instantáneas.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Este tipo de medio está conectado indirectamente, los cambios son borrados la siguiente vez que la máquina virtual sea iniciada.</translation>
+        <translation type="vanished">Este tipo de medio está conectado indirectamente, los cambios son borrados la siguiente vez que la máquina virtual sea iniciada.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Este tipo de medio está conectado directamente, ignorado al tomar instantáneas.</translation>
+        <translation type="vanished">Este tipo de medio está conectado directamente, ignorado al tomar instantáneas.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Este tipo de medio está conectado directamente, está permitido ser usado concurrentemente por varias máquinas.</translation>
+        <translation type="vanished">Este tipo de medio está conectado directamente, está permitido ser usado concurrentemente por varias máquinas.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Este tipo de medio está conectado directamente, y puede ser usado por varias máquinas.</translation>
+        <translation type="vanished">Este tipo de medio está conectado directamente, y puede ser usado por varias máquinas.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Este tipo de medio está conectado indirectamente, de modo que un medio base puede ser usado por varias MVs que tienen su propio medio diferenciado para almacenar sus modificaciones.</translation>
+        <translation type="vanished">Este tipo de medio está conectado indirectamente, de modo que un medio base puede ser usado por varias MVs que tienen su propio medio diferenciado para almacenar sus modificaciones.</translation>
     </message>
 </context>
 <context>
@@ -12370,6 +12422,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14915,7 +14975,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_copiado</translation>
+        <translation type="vanished">%1_copiado</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14931,27 +14991,27 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Copiar disco duro virtual</translation>
+        <translation type="vanished">Copiar disco duro virtual</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Disco duro a copiar</translation>
+        <translation type="vanished">Disco duro a copiar</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><p>Seleccione el archivo del disco duro que quiere copiar si no está seleccionado. Puede seleccionar uno de la lista o usar el icono de carpeta al lado de la lista para seleccionar uno.</p></translation>
+        <translation type="vanished"><p>Seleccione el archivo del disco duro que quiere copiar si no está seleccionado. Puede seleccionar uno de la lista o usar el icono de carpeta al lado de la lista para seleccionar uno.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Seleccione un archivo de disco duro virtual a copiar...</translation>
+        <translation type="vanished">Seleccione un archivo de disco duro virtual a copiar...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Tipo de archivo de disco duro</translation>
+        <translation type="vanished">Tipo de archivo de disco duro</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>Seleccione el tipo de archivo que quiere usar para el nuevo disco duro virtual. Si no necesita usarlo con otro software de virtualización puede dejar esta preferencia sin modificar.</translation>
+        <translation type="vanished">Seleccione el tipo de archivo que quiere usar para el nuevo disco duro virtual. Si no necesita usarlo con otro software de virtualización puede dejar esta preferencia sin modificar.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14959,47 +15019,120 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración
     </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>Seleccione si el nuevo archivo de unidad de disco duro virtual debería crecer según se use (reserva dinámica) o si debería ser creado con su tamaño máximo (tamaño fijo).</translation>
+        <translation type="vanished">Seleccione si el nuevo archivo de unidad de disco duro virtual debería crecer según se use (reserva dinámica) o si debería ser creado con su tamaño máximo (tamaño fijo).</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><p>Un archivo de disco duro <b>reservado dinámicamente</b> solo usará espacio en su disco físico a medida que se llena (hasta un máximo <b>tamaño fijo</b>), sin embargo no se reducirá de nuevo automáticamente cuando el espacio en él se libere.</p></translation>
+        <translation type="vanished"><p>Un archivo de disco duro <b>reservado dinámicamente</b> solo usará espacio en su disco físico a medida que se llena (hasta un máximo <b>tamaño fijo</b>), sin embargo no se reducirá de nuevo automáticamente cuando el espacio en él se libere.</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><p>Un archivo de disco duro de <b>tamaño fijo</b> puede tomar más tiempo para su creación en algunos sistemas, pero normalmente es más rápido al usarlo.</p></translation>
+        <translation type="vanished"><p>Un archivo de disco duro de <b>tamaño fijo</b> puede tomar más tiempo para su creación en algunos sistemas, pero normalmente es más rápido al usarlo.</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><p>También puede seleccionar <b>dividir</b> el archivo de disco duro virtual en varios archivos de hasta dos gigabytes cada uno. Principalmente esto es útil si desea almacenar la máquina virtual en dispositivos USB extraíbles o en sistemas antiguos, algunos de los cuales no pueden manejar archivos muy grandes.</translation>
+        <translation type="vanished"><p>También puede seleccionar <b>dividir</b> el archivo de disco duro virtual en varios archivos de hasta dos gigabytes cada uno. Principalmente esto es útil si desea almacenar la máquina virtual en dispositivos USB extraíbles o en sistemas antiguos, algunos de los cuales no pueden manejar archivos muy grandes.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Seleccione una ubicación para el nuevo archivo de disco duro virtual</translation>
+        <translation type="vanished">Seleccione una ubicación para el nuevo archivo de disco duro virtual</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Nuevo disco duro a crear</translation>
+        <translation type="vanished">Nuevo disco duro a crear</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>Escriba el nombre del archivo de disco duro virtual en el campo debajo o haga clic en el icono de carpeta para seleccionar una carpeta diferente donde crear el archivo.</translation>
+        <translation type="vanished">Escriba el nombre del archivo de disco duro virtual en el campo debajo o haga clic en el icono de carpeta para seleccionar una carpeta diferente donde crear el archivo.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Seleccione una ubicación para el archivo de disco duro virtual...</translation>
+        <translation type="vanished">Seleccione una ubicación para el archivo de disco duro virtual...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Disco duro a &copiar</translation>
+        <translation type="vanished">Disco duro a &copiar</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Nuevo disco duro a crear</translation>
+        <translation type="vanished">&Nuevo disco duro a crear</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Tipo de archivo de disco duro</translation>
+        <translation type="vanished">&Tipo de archivo de disco duro</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
index 96f602c..4adc6c5 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="+1562"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+1563"/>
         <source>English</source>
         <comment>Native language name</comment>
         <translation>Euskara</translation>
@@ -172,7 +172,7 @@
     <name>QIMessageBox</name>
     <message>
         <location filename="../src/extensions/QIMessageBox.cpp" line="+302"/>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+1854"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1887"/>
         <location filename="../src/widgets/UIPopupPaneButtonPane.cpp" line="+180"/>
         <source>OK</source>
         <translation>Ongi</translation>
@@ -2269,7 +2269,7 @@
 <context>
     <name>UIDetailsPagePrivate</name>
     <message>
-        <location filename="../src/selector/UIDesktopPane.cpp" line="+590"/>
+        <location filename="../src/selector/UIDesktopPane.cpp" line="+593"/>
         <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>Hautaturiko makina birtuala <i>eskuraezina</i> da. Mesedez aztertu behean erakusten den akats mezua eta sakatu <b>Berritu</b> botoia sarbidetasun egiaztapena berregitea nahi baduzu:</translation>
     </message>
@@ -2539,7 +2539,7 @@
 <context>
     <name>UIGChooserItemGroup</name>
     <message>
-        <location filename="../src/selector/graphics/chooser/UIGChooserItemGroup.cpp" line="+673"/>
+        <location filename="../src/selector/graphics/chooser/UIGChooserItemGroup.cpp" line="+674"/>
         <source><b>%1</b></source>
         <comment>Group item tool-tip / Group name</comment>
         <translation><b>%1</b></translation>
@@ -2642,7 +2642,7 @@
 <context>
     <name>UIGDetails</name>
     <message>
-        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+1173"/>
+        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+1161"/>
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+248"/>
         <source>Name</source>
         <comment>details (general)</comment>
@@ -3242,7 +3242,7 @@
 <context>
     <name>UIGMachinePreview</name>
     <message>
-        <location filename="../src/selector/graphics/details/UIGMachinePreview.cpp" line="+355"/>
+        <location filename="../src/selector/graphics/details/UIGMachinePreview.cpp" line="+356"/>
         <source>Every 0.5 s</source>
         <translation>0.5 seg-tik behin</translation>
     </message>
@@ -8654,7 +8654,7 @@
 <context>
     <name>UIMachineWindow</name>
     <message>
-        <location filename="../src/runtime/UIMachineWindow.cpp" line="+239"/>
+        <location filename="../src/runtime/UIMachineWindow.cpp" line="+245"/>
         <source> EXPERIMENTAL build %1r%2 - %3</source>
         <translation> ESPERIMENTALA eraiketa %1r%2 - %3</translation>
     </message>
@@ -8670,7 +8670,7 @@
 <context>
     <name>UIMediumDetailsWidget</name>
     <message>
-        <location filename="../src/medium/UIMediumDetailsWidget.cpp" line="+89"/>
+        <location filename="../src/medium/UIMediumDetailsWidget.cpp" line="+99"/>
         <source>&Attributes</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8711,6 +8711,11 @@
     </message>
     <message>
         <location line="+1"/>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
         <source>Holds the description of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8750,10 +8755,45 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+575"/>
+        <location line="+637"/>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+40"/>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8762,13 +8802,13 @@
         <translation type="obsolete">Diska &gogorrak</translation>
     </message>
     <message>
-        <location filename="../src/medium/UIMediumManager.cpp" line="+365"/>
+        <location filename="../src/medium/UIMediumManager.cpp" line="+379"/>
         <source>%1, %2: %3, %4: %5</source>
         <comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+34"/>
+        <location line="+35"/>
         <source>Format:</source>
         <translation type="unfinished">Heuskarria:</translation>
     </message>
@@ -8812,12 +8852,12 @@
         <translation type="unfinished">--</translation>
     </message>
     <message>
-        <location line="+134"/>
+        <location line="+119"/>
         <source>Removing medium...</source>
         <translation>Medioak kentzen...</translation>
     </message>
     <message>
-        <location line="+189"/>
+        <location line="+241"/>
         <source>&Medium</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8838,6 +8878,21 @@
     </message>
     <message>
         <location line="+4"/>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
         <source>&Remove...</source>
         <translation type="unfinished">&Kendu...</translation>
     </message>
@@ -8940,13 +8995,14 @@
         <translation type="unfinished">Sarbidetasuna egiaztatzen</translation>
     </message>
     <message>
-        <location line="+75"/>
+        <location line="-636"/>
+        <location line="+722"/>
         <location line="+29"/>
         <source>Moving medium...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+1302"/>
+        <location line="+1333"/>
         <source>Virtual Media Manager</source>
         <translation type="unfinished">Multimedia Birtual Kudeatzailea</translation>
     </message>
@@ -9003,6 +9059,18 @@
         <source>C&lose</source>
         <translation type="obsolete">It&xi</translation>
     </message>
+    <message>
+        <location filename="../src/medium/UIMediumDetailsWidget.cpp" line="-666"/>
+        <location filename="../src/medium/UIMediumManager.cpp" line="-2128"/>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/medium/UIMediumManager.cpp" line="+3"/>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumSizeEditor</name>
@@ -9021,49 +9089,16 @@
 <context>
     <name>UIMediumTypeChangeDialog</name>
     <message>
-        <location filename="../src/UIMediumTypeChangeDialog.cpp" line="+73"/>
         <source>Modify medium attributes</source>
-        <translation>Aldatu medioaren ezaugarriak</translation>
+        <translation type="vanished">Aldatu medioaren ezaugarriak</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p><b>%1</b> diska irudi agiriaren ezarpenak aldatzear zaude.</p><p>Mesedez hautatu hurrengo moduetako bat eta sakatu <b>%2</b> jarraitzeko edo <b>%3</b> bestela.</p></translation>
+        <translation type="vanished"><p><b>%1</b> diska irudi agiriaren ezarpenak aldatzear zaude.</p><p>Mesedez hautatu hurrengo moduetako bat eta sakatu <b>%2</b> jarraitzeko edo <b>%3</b> bestela.</p></translation>
     </message>
     <message>
-        <location line="+8"/>
         <source>Choose mode:</source>
-        <translation>Hautatu modua:</translation>
-    </message>
-    <message>
-        <location line="+190"/>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Hautatu modua:</translation>
     </message>
 </context>
 <context>
@@ -9079,7 +9114,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+912"/>
+        <location line="+915"/>
         <source>Virtual Screen Resize</source>
         <translation>Ikusleiho Birtual Birneurriratzea</translation>
     </message>
@@ -9107,42 +9142,42 @@
 <context>
     <name>UIMessageCenter</name>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-1570"/>
-        <location line="+2419"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-1603"/>
+        <location line="+2452"/>
         <source>VirtualBox - Information</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Argibideak</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Question</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Galdera</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Warning</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Ohartarazpena</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Error</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Akatsa</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Critical Error</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Akats Larria</translation>
     </message>
     <message>
-        <location line="-2278"/>
+        <location line="-2311"/>
         <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
         <translation><p>Hutsegitea VirtualBox COM objetua sortzerakoan.</p><p>Orain aplikazioak amaitu egingo du.</p></translation>
     </message>
@@ -9270,7 +9305,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+34"/>
+        <location line="+26"/>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
+        <location line="+17"/>
         <source><p>Are you sure you want to remove the virtual hard disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
         <translation><p>Zihur zaude <nobr><b>%1</b></nobr> diska gogor birtuala kentzea nahi duzula diska irudi agiri ezagunen zerrendatik?</p></translation>
     </message>
@@ -9373,8 +9413,15 @@
         <source>Failed to save DHCP server parameter.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+84"/>
+        <location line="+8"/>
+        <location line="+8"/>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
     <message numerus="yes">
-        <location line="+149"/>
+        <location line="+73"/>
         <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>
@@ -9502,7 +9549,7 @@
         <translation>Ez erakutsi mezu hau berriro</translation>
     </message>
     <message>
-        <location line="-2209"/>
+        <location line="-2242"/>
         <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source>
         <translation>Hutsegitea <tt>%1</tt> irekitzerakoan. Zihurtatu zure mahaigin inguruak mota honetako URL-ak egoki kudeatu ditzakeela.</translation>
     </message>
@@ -9526,7 +9573,7 @@
         <translation>Hutsegitea USB azpisistemara sartzerakoan.</translation>
     </message>
     <message>
-        <location line="+541"/>
+        <location line="+550"/>
         <source>Failed to create a new virtual machine.</source>
         <translation>Hutsegitea makina birtual berri bat sortzerakoan.</translation>
     </message>
@@ -9539,13 +9586,13 @@
         <translation type="obsolete">Hutsegitea <b>%1</b> makina birtualari ezarpenak ezartzerakoan.</translation>
     </message>
     <message>
-        <location line="+359"/>
+        <location line="+383"/>
         <location line="+8"/>
         <source>Failed to start the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtuala abiarazterakoan.</translation>
     </message>
     <message>
-        <location line="-1160"/>
+        <location line="-1193"/>
         <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtualaren exekuzioa pausatzerakoan.</translation>
     </message>
@@ -9600,13 +9647,13 @@
         <translation>Hutsegitea <b>%1</b> makina birtualerako saio bat irekitzerakoan.</translation>
     </message>
     <message>
-        <location line="+982"/>
+        <location line="+991"/>
         <location line="+8"/>
         <source>Failed to remove the host network interface <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> hostalari sare interfazea kentzerakoan.</translation>
     </message>
     <message>
-        <location line="-413"/>
+        <location line="-422"/>
         <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><p>Zihur zaude gailu optikoa ezabatzea nahi duzula?</p><p>Ezingo duzu diska optikorik edo ISO irudirik txertatu edo Gonbidatu Gehigarririk ezarri bera gabe!</p></translation>
     </message>
@@ -9651,12 +9698,12 @@
         <translation>Oraingo berbidalketa ataka arauak ez dira baliozkoak. Arau gutxi batzuek hostalari ataka berdinak eta IP helbide gatazkak dituzte.</translation>
     </message>
     <message>
-        <location line="+70"/>
+        <location line="+71"/>
         <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><p>Zihur zaude <nobr><b>%1</b></nobr> diska irudi agiria askatzea nahi duzula?</p><p>Honek hurrengo makina birtuale(ta)tik deserantsiko du: <b>%2</b>.</p></translation>
     </message>
     <message>
-        <location line="+63"/>
+        <location line="+71"/>
         <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><p>Ezabatzea nahi duzu <nobr><b>%1</b></nobr> diska gogor birtualaren biltegiratze unitatea?</p><p><b>Ezabatu</b> hautatzen baduzu adierazitako biltegiratze unitatea betirako ezabatuko da. Eragiketa hau <b>ezin da desegin</b>.</p><p><b>Heutsi</b> hautatzen baduzu diska gogorra diska gogor ezagunen zerrendatik besterik ez da kenduko, baina biltegiratze unitateak ikutugabe jarrait [...]
     </message>
@@ -9687,7 +9734,7 @@
         <translation>Makina birtual berri bat diska gogor bat gabe sortzear zaude. Ezingo duzu sistema eragilerik ezarri makinan bat gehitu arte. Bitartean makina diska optiko birtual bat erabiliz edo saretik bakarrik abiatu ahalko duzu.</translation>
     </message>
     <message>
-        <location line="+180"/>
+        <location line="+204"/>
         <location line="+313"/>
         <source>Bad password or authentication failure.</source>
         <translation>Sarhitz okerra edo egiaztapen hutsegitea.</translation>
@@ -9951,7 +9998,7 @@
         <translation>Hutsegitea <nobr><b>%1</b></nobr> baimen agiria irekitzerakoan. Egiaztatu agiri baimenak.</translation>
     </message>
     <message>
-        <location line="-1621"/>
+        <location line="-1654"/>
         <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea ACPI Indar Botoi sakatze gertaera <b>%1</b> makina birtualera bildatzerakoan.</translation>
     </message>
@@ -9994,7 +10041,7 @@
         <translation type="obsolete">Osatu</translation>
     </message>
     <message>
-        <location line="+1215"/>
+        <location line="+1248"/>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-199"/>
         <source><p>The host key is currently defined as <b>%1</b>.</p></source>
         <comment>additional message box paragraph</comment>
@@ -10007,7 +10054,7 @@
         <translation>Harpena</translation>
     </message>
     <message>
-        <location line="-1233"/>
+        <location line="-1266"/>
         <source>Check</source>
         <comment>inaccessible media message box</comment>
         <translation>Egiaztatu</translation>
@@ -10029,7 +10076,7 @@
         <translation>Berrezarri</translation>
     </message>
     <message>
-        <location line="+813"/>
+        <location line="+822"/>
         <source>Continue</source>
         <comment>no hard disk attached</comment>
         <translation>Jarraitu</translation>
@@ -10041,7 +10088,7 @@
         <translation>Joan Atzera</translation>
     </message>
     <message>
-        <location line="+456"/>
+        <location line="+480"/>
         <source><p>Could not enter seamless 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></source>
         <translation><p>Ezin da irudizko modura sartu gonbidatuan ez dagoela nahikoa bideo oroimen.</p><p>Makina birtuala itxuratu behar duzu gutxienez<b>%1</b> bideo oroimen izateko.</p></translation>
     </message>
@@ -10071,7 +10118,8 @@
         <translation><p>VirtualBox bertsio berri bat argitaratu da! <b>%1</b> bertsioa eskuragari dago hemen, <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>Bertsioa hau hurrengo lotura erabiliz jeitsi dezakezu:</p><p><a href=%2>%3</a></p></translation>
     </message>
     <message>
-        <location line="-822"/>
+        <location line="-854"/>
+        <location line="+8"/>
         <source>Release</source>
         <comment>detach medium</comment>
         <translation>Argitaratu</translation>
@@ -10129,7 +10177,7 @@
         <translation type="obsolete"><p>Hutsegitea VirtualBox-en onlineko erregistrazio zerbitzura elkartzerakoan hurrengo akatsagaitik: </p><p><b>%1</b></p></translation>
     </message>
     <message>
-        <location line="+211"/>
+        <location line="+235"/>
         <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><p>Akats larri bat gertatu da makina birtualaren jardunean eta makinaren exekuzioa gelditu egin da.</p><p>Laguntza lortzeko, mesedez ikusi Herkidegoa atala <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> edo zure sostengu itunean. Mesedez hornitu <tt>VBox.log</tt> ohar agiriaren edukiak eta <tt>VBox.png</tt> irudi agiria, hauek <nobr><b>%1</b></nobr> zuzenbidean aurkitu di [...]
     </message>
@@ -10139,7 +10187,7 @@
         <translation>Jadanik badaude hurrengo agiriak:<br /><br />%1<br /><br />Zihur zaude ordeztea nahi dituzula? Hauek ordezteak beren edukiak gainidaztea eragingo du.</translation>
     </message>
     <message>
-        <location line="-2052"/>
+        <location line="-2085"/>
         <source>You are running a prerelease version of VirtualBox. This version is not suitable for production use.</source>
         <translation>VirtualBox aurreargitalpen bertsio bat ari zara erabiltzen. Bertsio hau ez da ekoizpen erabilpenerako.</translation>
     </message>
@@ -10149,7 +10197,7 @@
         <translation>Gonbidatua ACPI indar botoiarekin itzaltzen saiatzen ari zara. Hau oraingoz ezinezkoa da gonbidatuak ez duelako software itzalketa sostengatzen.</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+1475"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1508"/>
         <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source>
         <translation><p>VT-x/AMD-V hardware bizkorpena gaitu egin da, baina ez dago eraginkor. Zure 64-biteko gonbidatuak huts egingo du 64-bit CPU bat atzematerakoan eta ez da abiatzeko gai izango.</p><p>Mesedez zihurtatu VT-x/AMD-V egoki gaituta duzula zure hostalari ordenagailuaren BIOS-ean.</p></translation>
     </message>
@@ -10172,7 +10220,7 @@
         <translation>Jarraitu</translation>
     </message>
     <message>
-        <location line="-1052"/>
+        <location line="-1085"/>
         <location line="+9"/>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-167"/>
         <source>Cancel</source>
@@ -10187,7 +10235,7 @@
         <translation type="obsolete">Hutsegitea makina birtuala irekitzerakoan.</translation>
     </message>
     <message>
-        <location line="+801"/>
+        <location line="+834"/>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> gailua ireki/interpretatzerakoan.</translation>
     </message>
@@ -10216,12 +10264,12 @@
         <translation>Hutsegitea makina birtuala esportatzerakoan <b>%1</b>.</translation>
     </message>
     <message>
-        <location line="-279"/>
+        <location line="-303"/>
         <source><p>Deleting this host-only network will remove the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different in [...]
         <translation><p>Hostalaria-bakarrik sare hau ezabatzeak sare honek ohinarri duen hostalaria-bakarrik interfazea kenduko du. <nobr><b>%1</b> (hostalaria-bakarrik sarea) interfazea kentzea nahi duzu?</nobr></p><p><b>Oharra:</b> egokitzaile birtual bat baino gehiago egon daiteke interfaze hau erabiltzen zure MB-etan. Kendu ondoren, egokitzaile hauek ezingo dira gehiago erabili beren ezarpenak zuzentzen dituzun arte beste interfaz [...]
     </message>
     <message>
-        <location line="+994"/>
+        <location line="+1018"/>
         <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents.</source>
         <translation>Jadanik badago <b>%1</b> izeneko agiri bat. Zihur zaude ordeztea nahi duzula? Ordezteak bere edukiak gainidaztea eragingo du.</translation>
     </message>
@@ -10249,7 +10297,7 @@
         <translation>Hutsegitea agiria kentzerakoan.</translation>
     </message>
     <message>
-        <location line="-1300"/>
+        <location line="-1333"/>
         <source>You seem to have the USBFS filesystem mounted at /sys/bus/usb/drivers. We strongly recommend that you change this, as it is a severe mis-configuration of your system which could cause USB devices to fail in unexpected ways.</source>
         <translation>Dirudienez USBFS agiri-sistema duzu muntatuta honela: /sys/bus/usb/drivers. Hau aldatzea gomendatzen dizugu, zure sistemaren itxurapen-oker larria denez eta USB gailuek ustekabeko moduan huts egitea eragin dezakeelako.</translation>
     </message>
@@ -10285,14 +10333,14 @@
     </message>
     <message>
         <location line="+203"/>
-        <location line="+1131"/>
+        <location line="+1164"/>
         <location line="+156"/>
         <location line="+21"/>
         <source>Ignore</source>
         <translation>Ezikusi</translation>
     </message>
     <message>
-        <location line="-1175"/>
+        <location line="-1208"/>
         <location line="+9"/>
         <source>Restore</source>
         <translation>Leheneratu</translation>
@@ -10324,7 +10372,7 @@
         <translation type="obsolete">Ezinezkoa %1 osatzea <nobr><b>%2</b></nobr> <b>%3</b> makinatik.</translation>
     </message>
     <message>
-        <location line="+479"/>
+        <location line="+488"/>
         <source>Force Unmount</source>
         <translation>Behartu Demuntatzea</translation>
     </message>
@@ -10363,13 +10411,13 @@
         <translation type="obsolete"><p>Zihur zaude CD/DVD-ROM gailua ezabatzea nahi duzula?</p><p>Ezingo duzu CD edo ISO irudirik osatu edo Gonbidatu Gehigarririk ezarri bera gabe!</p></translation>
     </message>
     <message>
-        <location line="-330"/>
+        <location line="-339"/>
         <source>&Remove</source>
         <comment>medium</comment>
         <translation>&Kendu</translation>
     </message>
     <message>
-        <location line="+795"/>
+        <location line="+828"/>
         <source><p>VT-x/AMD-V hardware acceleration is not available on your system. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</source>
         <translation><p>VT-x/AMD-V hardware bizkorpena ez dago eskuragarri zure sisteman. Zure 64-biteko gonbidatuak huts egin du 64-bit CPU-a atzematean eta ezingo da abiarazi.</translation>
     </message>
@@ -10401,7 +10449,7 @@
         <translation type="obsolete"><p>VirtualBox Erabiltzaile Eskuliburua ongi jeitsi da hemendik, <nobr><a href="%1">%2</a></nobr>baina ezin da tokian gorde honela <nobr><b>%3</b>.</nobr></p><p>Mesedez hautatu beste kokaleku bat agiriarentzat.</p></translation>
     </message>
     <message>
-        <location line="-1467"/>
+        <location line="-1500"/>
         <source>Failed to open virtual machine located in %1.</source>
         <translation>Hutsegitea %1 kokalekuan dagoen makina birtuala irekitzerakoan.</translation>
     </message>
@@ -10424,12 +10472,12 @@
         <location line="-83"/>
         <location line="+75"/>
         <location line="+317"/>
-        <location line="+454"/>
+        <location line="+463"/>
         <source>Remove</source>
         <translation>Kendu</translation>
     </message>
     <message>
-        <location line="-400"/>
+        <location line="-409"/>
         <source><p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p></source>
         <translation><p>Diska gogor birtual bat gehitzear zaude <b>%1</b> kontrolatzailera.</p><p>Berri bat sortzea, agiri huts bat diskaren edukiari heusteko edo badagoen bat hautatzea nahi duzu?</p></translation>
     </message>
@@ -10459,12 +10507,12 @@
         <translation><p>Diskete gehitzear zaude <b>%1</b> kontrolatzailera.</p><p>Diskete birtual bat hautatzea nahi duzu diskan jartzeko edo oraingoz hutsik uztea nahi duzu?</p></translation>
     </message>
     <message>
-        <location line="+275"/>
+        <location line="+284"/>
         <source>Failed to detach the hard disk (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation>Hutsegitea (<nobr><b>%1</b></nobr>) diska gogorra <b>%3</b> makinaren <i>%2</i> eslotetik deseranstearakoan.</translation>
     </message>
     <message>
-        <location line="+1005"/>
+        <location line="+1029"/>
         <location line="+8"/>
         <source>Failed to install the Extension Pack <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> Hedapen Paketea ezartzerakoan.</translation>
@@ -10481,7 +10529,7 @@
         <translation>&Kendu</translation>
     </message>
     <message>
-        <location line="-1203"/>
+        <location line="-1236"/>
         <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source>
         <translation>Oraingo berbidalketa ataka arauak ez dira baliozkoak. Hostalari edo gonbidatu ataka balioetako bat ere ezin daiteke hutsean ezarri.</translation>
     </message>
@@ -10496,13 +10544,13 @@
         <translation>Hutsegitea (<nobr><b>%1</b></nobr>) diska gogorra <b>%3</b> makinaren <i>%2</i> eslotera eranstearakoan.</translation>
     </message>
     <message>
-        <location line="+164"/>
+        <location line="+173"/>
         <location line="+8"/>
         <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source>
         <translation><p>Ohartu medio honen biltegi unitatea ez dela ezabatuko eta berriro erabili ahal izango dela geroago.</p></translation>
     </message>
     <message>
-        <location line="+700"/>
+        <location line="+724"/>
         <source><p>The virtual machine window will be now switched to <b>Seamless</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 seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source>
         <translation><p>Makina birtualaren leihoa orain <b>Irudizkoa</b> modura aldatuko da. Leihotu modura itzuli zaitezke <b>%1</b> sakatuz.</p><p>Ohartu <i>Host</i> tekla <b>%2</b> bezala zehaztua dagoela.</p><p>Ohartu ere menu barra nagusia ezkutatu egiten dela irudizko moduan. Bertara <b>Host+Home</b> sakatuz sartu zaitezke.</p></translation>
     </message>
@@ -10573,12 +10621,12 @@
         <translation><p>Ezin da makinaren <b>%1</b> agiritegia sortu gaineko <nobr><b>%2</b> agiritegian.</nobr></p><p>Mesedez egiaztatu gainekoa egitan dagoela eta makina agiritegia sortzeko baimena duzula.</p></translation>
     </message>
     <message>
-        <location line="-76"/>
+        <location line="-100"/>
         <source>Failed to register the virtual machine <b>%1</b>.</source>
         <translation><b>%1</b> makina birtutala erregistratzerakoan.</translation>
     </message>
     <message>
-        <location line="-526"/>
+        <location line="-535"/>
         <source><p>The machine settings were changed while you were editing them. You currently have unsaved setting changes.</p><p>Would you like to reload the changed settings or to keep your own changes?</p></source>
         <translation><p>Makinaren ezarpenak aldatu egin dira editatzen zenituen bitartean. Une honetan gordegabeko ezarpen aldaketak dituzu.</p><p>Aldatutako ezarpenak birgertatzea edo zeure aldaketei heustea nahi duzu?</p></translation>
     </message>
@@ -10598,13 +10646,13 @@
         <translation>Aldatzen ari zaren makina birtuala abiarazi egin da. Zenbait ezarpen bakarrik aldatu daitezke makina ekinean dagoela. Beste aldaketa guztiak galdu egingo dira leiho hau orain isten baduzu.</translation>
     </message>
     <message>
-        <location line="+544"/>
+        <location line="+553"/>
         <location line="+8"/>
         <source>Failed to clone the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtuala klonatzerakoan.</translation>
     </message>
     <message>
-        <location line="-738"/>
+        <location line="-747"/>
         <source>Create a snapshot of the current machine state</source>
         <translation>Sortu makinaren oraingo egoeraren berehalako bat</translation>
     </message>
@@ -10613,7 +10661,7 @@
         <translation type="obsolete">Barkatu, zenbati akats generiko gertatu dira.</translation>
     </message>
     <message>
-        <location line="+1801"/>
+        <location line="+1834"/>
         <source>Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might not be installed on the host computer</source>
         <translation>Ezin da Hostalari USB Proxy Zerbitzua gertatu (VERR_FILE_NOT_FOUND). Badaiteke zerbitzua hostalari ordenagailuan ezarrita ez egotea</translation>
     </message>
@@ -10638,7 +10686,7 @@
         <translation>Ezin da Hostalari USB Proxy zerbitzua gertatu</translation>
     </message>
     <message>
-        <location line="-1694"/>
+        <location line="-1727"/>
         <source>Can't find snapshot named <b>%1</b>.</source>
         <translation>Ezin da<b>%1</b> izeneko berehalakoa aurkitu.</translation>
     </message>
@@ -10647,7 +10695,7 @@
         <translation type="obsolete"><p>Hutsegitea jeitsitako agiria gordetzerakoan,<nobr><b>%1</b>.</nobr></p></translation>
     </message>
     <message>
-        <location line="+1222"/>
+        <location line="+1255"/>
         <source><p>You have an old version (%1) of the <b><nobr>%2</nobr></b> installed.</p><p>Do you wish to download latest one from the Internet?</p></source>
         <translation><p><b><nobr>%2</nobr></b>-ren bertsio zahar bat (%1) duzu ezarrita.</p><p>Nahi duzu azkenengoa Internetetik jeistea?</p></translation>
     </message>
@@ -10689,7 +10737,7 @@
         <translation type="obsolete">Ongi</translation>
     </message>
     <message>
-        <location line="-1657"/>
+        <location line="-1690"/>
         <source><p>Failed to initialize COM because the VirtualBox global configuration directory <b><nobr>%1</nobr></b> is not accessible. Please check the permissions of this directory and of its parent directory.</p><p>The application will now terminate.</p></source>
         <translation><p>Hutsegitea COM abiarazterakoan <b><nobr>%1</nobr></b> VirtualBox-en itxurapen orokorraren zuzenbidea ez dagoelako eskuragarri. Mesedez egiaztatu zuzenbide honen eta bere gaineko zuzenbidearen baimenak.</p><p>Aplikazioak orain amaitu egingo du.</p></translation>
     </message>
@@ -10714,12 +10762,12 @@
         <translation><p>Hurrengo makina birtualak kentzear zaude makina zerrendatik:</p><p>%1</p><p>Makina birtuala duten agiriak zure diska gogorretik ere ezabatzea nahi dituzu?</p></translation>
     </message>
     <message>
-        <location line="+1382"/>
+        <location line="+1415"/>
         <source>Do you wish to cancel all current network operations?</source>
         <translation>Une honetako sare eragiketa guztiak ezeztatzea nahi duzu?</translation>
     </message>
     <message>
-        <location line="-1299"/>
+        <location line="-1332"/>
         <source>ACPI Shutdown</source>
         <comment>machine</comment>
         <translation>ACPI Itzalketa</translation>
@@ -10731,7 +10779,7 @@
         <translation>Itzali</translation>
     </message>
     <message>
-        <location line="+864"/>
+        <location line="+897"/>
         <source><p>Cannot remove the machine folder <nobr><b>%1</b>.</nobr></p><p>Please check that this folder really exists and that you have permissions to remove it.</p></source>
         <translation><p>Ezin da <nobr><b>%1</b> makina agiritegia kendu.</nobr></p><p>Mesedez egiaztatu agiritegi hau egitan dagoela eta kentzeko baimena duzula.</p></translation>
     </message>
@@ -10741,7 +10789,7 @@
         <translation><p>Ezin da<b>%1</b> makina agiritegia sortu <nobr><b>%2</b> gaineko agiritegian.</nobr></p><p>Agiritegi hau jadanik badago eta zihurrenik beste makina batena da.</p></translation>
     </message>
     <message>
-        <location line="-911"/>
+        <location line="-944"/>
         <source><p>Are you sure you want to discard the saved state of the following virtual machines?</p><p><b>%1</b></p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown of the guest OS.</p></source>
         <translation><p>Zihur zaude hurrengo makina birtualen gordetako egoera baztertzea nahi duzula?</p><p><b>%1</b></p><p>Eragiketa hau gonbidatu SE-ren itzaltze egoki bat egin gabe makina itzaltzea edo berrezartzearen baliokidea da.</p></translation>
     </message>
@@ -10791,7 +10839,7 @@
         <translation>Hutsegitea <b>%1</b> makina birtualaren taldeak ezartzerakoan.</translation>
     </message>
     <message>
-        <location line="+1315"/>
+        <location line="+1348"/>
         <source><p>Could not start the machine <b>%1</b> because the following physical network interfaces were not found:</p><p><b>%2</b></p><p>You can either change the machine's network settings or stop the machine.</p></source>
         <translation><p>Ezin da <b>%1</b> makina abiarazi hurrengo sare interfaze fisikoak ez direlako aurkitu:</p><p><b>%2</b></p><p>Makinaren sare ezarpenak aldatu edo makina gelditu dezakezu.</p></translation>
     </message>
@@ -10813,7 +10861,7 @@
 <context>
     <name>UIMiniToolBar</name>
     <message>
-        <location filename="../src/widgets/UIMiniToolBar.cpp" line="+296"/>
+        <location filename="../src/widgets/UIMiniToolBar.cpp" line="+297"/>
         <source>Always show the toolbar</source>
         <translation>Betik erakutsi tresnabarra</translation>
     </message>
@@ -10929,7 +10977,7 @@
         <translation type="obsolete">Akatsa: %1.</translation>
     </message>
     <message>
-        <location filename="../src/net/UINetworkRequestWidget.cpp" line="+226"/>
+        <location filename="../src/net/UINetworkRequestWidget.cpp" line="+230"/>
         <source>The network operation failed with the following error: %1.</source>
         <translation>Sare eragiketak huts egin du hurrengo akatsarekin: %1.</translation>
     </message>
@@ -10976,7 +11024,7 @@
 <context>
     <name>UINetworkReplyPrivate</name>
     <message>
-        <location filename="../src/net/UINetworkReply.cpp" line="+956"/>
+        <location filename="../src/net/UINetworkReply.cpp" line="+957"/>
         <source>Host not found</source>
         <translation>Hostalaria ez da aurkitu</translation>
     </message>
@@ -11006,13 +11054,13 @@
         <translation>SSL egiaztapen hutsegitea</translation>
     </message>
     <message>
-        <location line="-31"/>
+        <location line="-32"/>
         <source>%1: %2</source>
         <comment>Context description: Error description</comment>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location line="+26"/>
         <source>Unable to initialize HTTP library</source>
         <translation>Ezinezkoa HTTP liburutegia abiaraztea</translation>
     </message>
@@ -11040,7 +11088,7 @@
 <context>
     <name>UINetworkReplyPrivateThread</name>
     <message>
-        <location line="-578"/>
+        <location line="-579"/>
         <source>During proxy configuration</source>
         <translation>Proxy itxurapenean zehar</translation>
     </message>
@@ -11108,7 +11156,7 @@
 <context>
     <name>UIPortForwardingTable</name>
     <message>
-        <location filename="../src/widgets/UIPortForwardingTable.cpp" line="+661"/>
+        <location filename="../src/widgets/UIPortForwardingTable.cpp" line="+662"/>
         <source>Name</source>
         <translation>Izena</translation>
     </message>
@@ -11211,7 +11259,7 @@
 <context>
     <name>UIScreenshotViewer</name>
     <message>
-        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="-1414"/>
+        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="-1402"/>
         <source>Screenshot of %1 (%2)</source>
         <translation type="unfinished">Ikusleiho-argazkiak %1 (%2)</translation>
     </message>
@@ -11471,7 +11519,7 @@
 <context>
     <name>UISnapshotDetailsWidget</name>
     <message>
-        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+84"/>
+        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+74"/>
         <source>&Attributes</source>
         <translation type="unfinished"></translation>
     </message>
@@ -11561,7 +11609,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+455"/>
+        <location line="+453"/>
         <source>Snapshot name is empty</source>
         <translation type="unfinished"></translation>
     </message>
@@ -11741,7 +11789,7 @@
         <translation><nobr><b>Klikatu</b> adierazle egona aldatzeko.</nobr><br><nobr><b>Arrastatu-eta-&Askatu</b> adierazlearen kokapena aldatzeko.</nobr></translation>
     </message>
     <message>
-        <location line="+367"/>
+        <location line="+370"/>
         <source>Close</source>
         <translation>Itxi</translation>
     </message>
@@ -12318,9 +12366,13 @@
         <translation type="obsolete">Kopiatu Diska Gogor Birtuala</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVD.cpp" line="+119"/>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Kopiatu Diska Gogor Birtuala</translation>
+        <translation type="vanished">Kopiatu Diska Gogor Birtuala</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVD.cpp" line="+117"/>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+1"/>
@@ -12368,30 +12420,46 @@
         <translation type="obsolete"><p>Hautatu dezakezu ere diska gogorra agiri anitzetan <b>banantzea</b> bakoitza bi gigabyte arte. Hau erabilgarria da nagusiki makina birtuala USB gailu kengarri batean edo sistema zaharretan biltegiratzea nahi baduzu, hauetako batzuek ezin dute agiri oso handika kudeatu.</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp" line="+126"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+258"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp" line="+133"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+264"/>
         <source>Storage on physical hard disk</source>
         <translation>Biltegiratu diska gogor fisikoan</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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>Mesedez hautatu diska gogor birtual berria handitu egin behar den erabileraren arabera (dinamikoki esleitua) edo gehienezko neurrian sortu behar den (neurri finkoa).</translation>
+        <translation type="vanished">Mesedez hautatu diska gogor birtual berria handitu egin behar den erabileraren arabera (dinamikoki esleitua) edo gehienezko neurrian sortu behar den (neurri finkoa).</translation>
     </message>
     <message>
-        <location line="+2"/>
         <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><p>A <b>Dinamikoki esleitutako</b> diska gogor agiriak zure diska gogor fisikoan betetze ahala erabiliko du tokia (gehienezkora arte <b>neurri finkoa</b>), baina ez da berriro berezgaitasunez murriztuko toki askea gelditzen denean.</p></translation>
+        <translation type="vanished"><p>A <b>Dinamikoki esleitutako</b> diska gogor agiriak zure diska gogor fisikoan betetze ahala erabiliko du tokia (gehienezkora arte <b>neurri finkoa</b>), baina ez da berriro berezgaitasunez murriztuko toki askea gelditzen denean.</p></translation>
     </message>
     <message>
-        <location line="+3"/>
         <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><p>A <b>neurri finkoa</b> diska gogor agiriak denbora gehiago hartu dezake sortzeko zenbait sistematan baina erabiltzeko azkarragoa da.</p></translation>
+        <translation type="vanished"><p>A <b>neurri finkoa</b> diska gogor agiriak denbora gehiago hartu dezake sortzeko zenbait sistematan baina erabiltzeko azkarragoa da.</p></translation>
     </message>
     <message>
-        <location line="+2"/>
         <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><p>Hautatu dezakezu ere diska gogorra agiri anitzetan <b>banantzea</b> bakoitza bi gigabyte arte. Hau erabilgarria da nagusiki makina birtuala USB gailu kengarri batean edo sistema zaharretan biltegiratzea nahi baduzu, hauetako batzuek ezin dituzte agiri oso handiak kudeatu.</translation>
+        <translation type="vanished"><p>Hautatu dezakezu ere diska gogorra agiri anitzetan <b>banantzea</b> bakoitza bi gigabyte arte. Hau erabilgarria da nagusiki makina birtuala USB gailu kengarri batean edo sistema zaharretan biltegiratzea nahi baduzu, hauetako batzuek ezin dituzte agiri oso handiak kudeatu.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </message>
     <message>
         <location line="+4"/>
@@ -12428,32 +12496,25 @@
         <translation type="obsolete">Hautatu diska gogor birtual agiri berriarentzako kokaleku bat...</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp" line="+87"/>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Mesedez hautatu diska gogor birtual agiri berriarentzako kokaleku bat</translation>
+        <translation type="vanished">Mesedez hautatu diska gogor birtual agiri berriarentzako kokaleku bat</translation>
     </message>
     <message>
-        <location line="+114"/>
         <source>New hard disk to create</source>
-        <translation>Diska gogor berria sortzeko</translation>
+        <translation type="vanished">Diska gogor berria sortzeko</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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>Mesedez idatzi diska gogor birtual berriarentzako izena beheko kutxan edo klikatu agiritegia ikurrean agiria sortzeko beste agiritegi bat hautatzeko.</translation>
+        <translation type="vanished">Mesedez idatzi diska gogor birtual berriarentzako izena beheko kutxan edo klikatu agiritegia ikurrean agiria sortzeko beste agiritegi bat hautatzeko.</translation>
     </message>
     <message>
-        <location line="+2"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-11"/>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Hautatu diska gogor birtual agiri berriarentzako kokaleku bat...</translation>
+        <translation type="vanished">Hautatu diska gogor birtual agiri berriarentzako kokaleku bat...</translation>
     </message>
     <message>
-        <location line="+15"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-60"/>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopia</translation>
+        <translation type="vanished">%1_kopia</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -12468,45 +12529,105 @@
         <translation type="obsolete">Diska gogor agiri &mota</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp" line="+115"/>
         <source>Hard disk to copy</source>
-        <translation>Diska gogorra kopiara</translation>
+        <translation type="vanished">Diska gogorra kopiara</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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><p>Mesedez hautatu kopiatzea nahi duzun diska gogor birtual agiria jadanik hautaturik ez badago. Zerrendatik ere hautatu dezakezu bat edo erabili zerrendaren ondoko agiritegia ikurra bat hautatzeko.</p></translation>
+        <translation type="vanished"><p>Mesedez hautatu kopiatzea nahi duzun diska gogor birtual agiria jadanik hautaturik ez badago. Zerrendatik ere hautatu dezakezu bat edo erabili zerrendaren ondoko agiritegia ikurra bat hautatzeko.</p></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+58"/>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Hautatu diska gogor birtual agiri bat kopiatzeko...</translation>
+        <translation type="vanished">Hautatu diska gogor birtual agiri bat kopiatzeko...</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp" line="+154"/>
         <source>Hard disk file type</source>
-        <translation>Diska gogor agiri mota</translation>
+        <translation type="vanished">Diska gogor agiri mota</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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>Mesedez hautatu diska gogor birtual berrirako erabiltzea nahi duzun agiri mota. Beste birtualizazio software batekin erabili beharrik ez baduzu ezarpen hau aldatu gabe utzi dezakezu.</translation>
+        <translation type="vanished">Mesedez hautatu diska gogor birtual berrirako erabiltzea nahi duzun agiri mota. Beste birtualizazio software batekin erabili beharrik ez baduzu ezarpen hau aldatu gabe utzi dezakezu.</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-1"/>
         <source>Hard disk to &copy</source>
-        <translation>Diska gogorra &kopiara</translation>
+        <translation type="vanished">Diska gogorra &kopiara</translation>
     </message>
     <message>
-        <location line="+2"/>
         <source>&New hard disk to create</source>
-        <translation>Diska gogor &berria sortzeko</translation>
+        <translation type="vanished">Diska gogor &berria sortzeko</translation>
     </message>
     <message>
-        <location line="+2"/>
         <source>Hard disk file &type</source>
-        <translation>Diska gogor agiri &mota</translation>
+        <translation type="vanished">Diska gogor agiri &mota</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp" line="+117"/>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-13"/>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp" line="+160"/>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp" line="+87"/>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+123"/>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+2"/>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-61"/>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_kopia</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+58"/>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -14152,7 +14273,7 @@
         <translation><nobr>Egoera: %1</nobr></translation>
     </message>
     <message>
-        <location filename="../src/medium/UIMedium.cpp" line="+537"/>
+        <location filename="../src/medium/UIMedium.cpp" line="+542"/>
         <source>Checking...</source>
         <comment>medium</comment>
         <translation>Egiaztatzen...</translation>
@@ -14412,13 +14533,13 @@
         <translation>I82078</translation>
     </message>
     <message>
-        <location filename="../src/medium/UIMedium.cpp" line="-382"/>
+        <location filename="../src/medium/UIMedium.cpp" line="-386"/>
         <source>Empty</source>
         <comment>medium</comment>
         <translation>Hutsik</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+55"/>
         <source>Host Drive '%1'</source>
         <comment>medium</comment>
         <translation>Hostalari Gidagailua '%1'</translation>
@@ -14430,7 +14551,7 @@
         <translation>Hostalari Gidagailua %1 (%2)</translation>
     </message>
     <message>
-        <location line="+175"/>
+        <location line="+178"/>
         <source><p style=white-space:pre>Type (Format):  %1 (%2)</p></source>
         <comment>medium</comment>
         <translation><p style=white-space:pre>Mota (Heuskarria):  %1 (%2)</p></translation>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa.ts
index ce2d910..ef52171 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.1" language="fa">
+<TS version="2.1" language="fa_IR">
 <context>
     <name>@@@</name>
     <message>
@@ -77,7 +77,7 @@
     </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>'/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">مدل هسته ويرچوال باکس با این نسخه از ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. اِجرای راه انداز<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>شاید این را درست کند. مطمئن شوید شما نسخه اُ اِس ای و نسخه پی یو ای اِل ویرچوال باکس را میکس نکرده باشید.</translation>
+        <translation type="vanished">مدل هسته ويرچوال باکس با این نسخه از ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. اِجرای راه انداز<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>شاید این را درست کند. مطمئن شوید شما نسخه اُ اِس ای و نسخه پی یو ای اِل ویرچوال باکس را میکس نکرده باشید.</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>
@@ -85,26 +85,26 @@
     </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">درایور هسته لینوکس ويرچوال باکس (vboxdrv) بارگیری نشده است یا مشکلی با سطح دسترسی /dev/vboxdrv دارد. لطفا مدل هسته را با اِجرای راه انداز<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>بعنوان ریشه مجددا نصب نمایید. اگر آن در توزیع شما موجود باشد، شما اول باید بسته دی کی اِم اِس را نصب کنید. این بسته تغییرات هسته لینوکس را ردگیری و ذخیره میکند و مدل هسته  vboxdrv در صورت نیاز مجددا  [...]
+        <translation type="vanished">درایور هسته لینوکس ويرچوال باکس (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.</source>
-        <translation type="unfinished"></translation>
+        <translation>درایور هسته لینوکس ويرچوال باکس (vboxdrv) بارگیری نشده است یا مشکلی با سطح دسترسی /dev/vboxdrv دارد. لطفا مدل هسته را با اِجرای راه انداز<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>بعنوان ریشه مجددا نصب نمایید.</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>
+        <translation>مدل هسته ويرچوال باکس با این نسخه از ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. اِجرای راه انداز<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> شاید این را درست کند. مطمئن شوید شما نسخه اُ اِس ای و نسخه پی یو ای اِل ویرچوال باکس را میکس نکرده باشید.</translation>
     </message>
 </context>
 <context>
     <name>QIArrowButtonPress</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>
@@ -119,11 +119,11 @@
     </message>
     <message>
         <source>&Details</source>
-        <translation type="unfinished">جزئی&ات</translation>
+        <translation>جزئی&ات</translation>
     </message>
     <message>
         <source>&Details (%1 of %2)</source>
-        <translation type="unfinished">جزئیا&ت (%1 از %2)</translation>
+        <translation>جزئیا&ت (%1 از %2)</translation>
     </message>
 </context>
 <context>
@@ -164,7 +164,7 @@
     </message>
     <message>
         <source>Ignore</source>
-        <translation type="obsolete">چشمپوشی</translation>
+        <translation type="vanished">چشمپوشی</translation>
     </message>
     <message>
         <source>&Details</source>
@@ -188,20 +188,20 @@
     <message>
         <source>not complete</source>
         <comment>value state</comment>
-        <translation type="obsolete">کامل نیست</translation>
+        <translation type="vanished">کامل نیست</translation>
     </message>
     <message>
         <source>invalid</source>
         <comment>value state</comment>
-        <translation type="obsolete">نامعتبر</translation>
+        <translation type="vanished">نامعتبر</translation>
     </message>
     <message>
         <source><qt>The value of the <b>%1</b> field on the <b>%2</b> page is %3.</qt></source>
-        <translation type="obsolete"><qt>مقدار فیلد <b>%1</b> در صفحه <b>%2</b>  %3 .</qt> </translation>
+        <translation type="vanished"><qt>مقدار فیلد <b>%1</b> در صفحه <b>%2</b>  %3 .</qt> </translation>
     </message>
     <message>
         <source><qt>One of the values on the <b>%1</b> page is %2.</qt></source>
-        <translation type="obsolete"><qt>یکی از مقادیر در صفحه  <b>%1</b>  %2 .</qt></translation>
+        <translation type="vanished"><qt>یکی از مقادیر در صفحه  <b>%1</b>  %2 .</qt></translation>
     </message>
 </context>
 <context>
@@ -209,27 +209,27 @@
     <message>
         <source>Result&nbsp;Code: </source>
         <comment>error info</comment>
-        <translation type="obsolete">کد&nbsp;نتیجه: </translation>
+        <translation type="vanished">کد&nbsp;نتیجه: </translation>
     </message>
     <message>
         <source>Component: </source>
         <comment>error info</comment>
-        <translation type="obsolete">جزء: </translation>
+        <translation type="vanished">جزء: </translation>
     </message>
     <message>
         <source>Interface: </source>
         <comment>error info</comment>
-        <translation type="obsolete">رابط: </translation>
+        <translation type="vanished">رابط: </translation>
     </message>
     <message>
         <source>Callee: </source>
         <comment>error info</comment>
-        <translation type="obsolete">Callee: </translation>
+        <translation type="vanished">Callee: </translation>
     </message>
     <message>
         <source>Callee&nbsp;RC: </source>
         <comment>error info</comment>
-        <translation type="obsolete">Callee&nbsp;RC: </translation>
+        <translation type="vanished">Callee&nbsp;RC: </translation>
     </message>
 </context>
 <context>
@@ -237,7 +237,7 @@
     <message>
         <source>%1, %2: %3, %4: %5, %6: %7</source>
         <comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text, col.4 name: col.4 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3, %4: %5, %6: %7</translation>
     </message>
 </context>
 <context>
@@ -248,7 +248,7 @@
     </message>
     <message>
         <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source>
-        <translation type="obsolete">تغییر اندازه خودکار صفحه مهمان وقتی پنجره تغییر اندازه داده شد (به افزونه مهمان نیازدارد)</translation>
+        <translation type="vanished">تغییر اندازه خودکار صفحه مهمان وقتی پنجره تغییر اندازه داده شد (به افزونه مهمان نیازدارد)</translation>
     </message>
     <message>
         <source>&Adjust Window Size</source>
@@ -260,23 +260,23 @@
     </message>
     <message>
         <source>Disable &Mouse Integration</source>
-        <translation type="obsolete">غیرفعال سازی یکپارچگ&ی ماوس</translation>
+        <translation type="vanished">غیرفعال سازی یکپارچگ&ی ماوس</translation>
     </message>
     <message>
         <source>Temporarily disable host mouse pointer integration</source>
-        <translation type="obsolete">غیرفعالسازی موقت یکپارچگی نشانگر ماوس میزبان</translation>
+        <translation type="vanished">غیرفعالسازی موقت یکپارچگی نشانگر ماوس میزبان</translation>
     </message>
     <message>
         <source>&Insert Ctrl-Alt-Del</source>
-        <translation type="obsolete">&فشاردادن Ctrl-Alt-Del</translation>
+        <translation type="vanished">&فشاردادن 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>
+        <translation type="vanished">ارسال توالی 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>
+        <translation type="vanished">ارسال توالی Ctrl-Alt-Backspace به ماشین مجازی</translation>
     </message>
     <message>
         <source>Take a snapshot of the virtual machine</source>
@@ -284,7 +284,7 @@
     </message>
     <message>
         <source>Show Session Information Window</source>
-        <translation type="obsolete">نمایش پنجره اطلاعات جلسه</translation>
+        <translation type="vanished">نمایش پنجره اطلاعات جلسه</translation>
     </message>
     <message>
         <source>&Pause</source>
@@ -308,7 +308,7 @@
     </message>
     <message>
         <source>Send the ACPI Power Button press event to the virtual machine</source>
-        <translation type="obsolete">اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی</translation>
+        <translation type="vanished">اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی</translation>
     </message>
     <message>
         <source>&Close...</source>
@@ -328,31 +328,31 @@
     </message>
     <message>
         <source>&CD/DVD Devices</source>
-        <translation type="obsolete">&دستگاه سی دی/دی وی دی</translation>
+        <translation type="vanished">&دستگاه سی دی/دی وی دی</translation>
     </message>
     <message>
         <source>&Floppy Devices</source>
-        <translation type="obsolete">دست&گاه فلاپی</translation>
+        <translation type="vanished">دست&گاه فلاپی</translation>
     </message>
     <message>
         <source>&USB Devices</source>
-        <translation type="obsolete">دستگاه یو& اِس بی</translation>
+        <translation type="vanished">دستگاه یو& اِس بی</translation>
     </message>
     <message>
         <source>&Network Adapters...</source>
-        <translation type="obsolete">&آداپتورهای شبکه...</translation>
+        <translation type="vanished">&آداپتورهای شبکه...</translation>
     </message>
     <message>
         <source>Change the settings of network adapters</source>
-        <translation type="obsolete">تغییر تنظیمات آداپتورهای شبکه</translation>
+        <translation type="vanished">تغییر تنظیمات آداپتورهای شبکه</translation>
     </message>
     <message>
         <source>&Shared Folders...</source>
-        <translation type="obsolete">پوشه ه&ای اشتراکی...</translation>
+        <translation type="vanished">پوشه ه&ای اشتراکی...</translation>
     </message>
     <message>
         <source>Create or modify shared folders</source>
-        <translation type="obsolete">ایجاد یا ویرایش پوشه های اشتراکی</translation>
+        <translation type="vanished">ایجاد یا ویرایش پوشه های اشتراکی</translation>
     </message>
     <message>
         <source>&Insert Guest Additions CD image...</source>
@@ -360,7 +360,7 @@
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual drive</source>
-        <translation type="obsolete">بارگیری ایمیج نصب افزونه مهمان</translation>
+        <translation type="vanished">بارگیری ایمیج نصب افزونه مهمان</translation>
     </message>
     <message>
         <source>De&bug</source>
@@ -394,24 +394,24 @@
     </message>
     <message>
         <source>Enable remote desktop (RDP) connections to this machine</source>
-        <translation type="obsolete">فعالسازی ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
+        <translation type="vanished">فعالسازی ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
     </message>
     <message>
         <source>Enable &Logging...</source>
         <comment>debug action</comment>
-        <translation type="obsolete">فعالسازی &وقایع نگاری...</translation>
+        <translation type="vanished">فعالسازی &وقایع نگاری...</translation>
     </message>
     <message>
         <source>Switch to &Fullscreen</source>
-        <translation type="obsolete">رفتن به حالت تما&م صفحه</translation>
+        <translation type="vanished">رفتن به حالت تما&م صفحه</translation>
     </message>
     <message>
         <source>Switch between normal and fullscreen mode</source>
-        <translation type="obsolete">تعویض بین حالت معمولی و تمام صفحه</translation>
+        <translation type="vanished">تعویض بین حالت معمولی و تمام صفحه</translation>
     </message>
     <message>
         <source>Switch to Seam&less Mode</source>
-        <translation type="obsolete">رفتن &به حالت یکپارچه</translation>
+        <translation type="vanished">رفتن &به حالت یکپارچه</translation>
     </message>
     <message>
         <source>Switch between normal and seamless desktop integration mode</source>
@@ -419,7 +419,7 @@
     </message>
     <message>
         <source>Switch to &Scaled Mode</source>
-        <translation type="obsolete">رفتن به &حالت مقیاس</translation>
+        <translation type="vanished">رفتن به &حالت مقیاس</translation>
     </message>
     <message>
         <source>Switch between normal and scaled mode</source>
@@ -431,7 +431,7 @@
     </message>
     <message>
         <source>Enable R&emote Display</source>
-        <translation type="obsolete">&فعالسازی نمایش ریموت</translation>
+        <translation type="vanished">&فعالسازی نمایش ریموت</translation>
     </message>
     <message>
         <source>&Settings...</source>
@@ -439,7 +439,7 @@
     </message>
     <message>
         <source>Manage the virtual machine settings</source>
-        <translation type="obsolete">مدیریت تنظیمات ماشین مجازی</translation>
+        <translation type="vanished">مدیریت تنظیمات ماشین مجازی</translation>
     </message>
     <message>
         <source>Session I&nformation...</source>
@@ -467,7 +467,7 @@
     </message>
     <message>
         <source>Show Network Operations Manager</source>
-        <translation type="obsolete">مدیر عملکردهای شبکه را نشان میدهد</translation>
+        <translation type="vanished">مدیر عملکردهای شبکه را نشان میدهد</translation>
     </message>
     <message>
         <source>Check for a new VirtualBox version</source>
@@ -479,7 +479,7 @@
     </message>
     <message>
         <source>Show a window with product information</source>
-        <translation type="obsolete">پنجره اطلاعات محصول را نشان میدهد</translation>
+        <translation type="vanished">پنجره اطلاعات محصول را نشان میدهد</translation>
     </message>
     <message>
         <source>Take Sn&apshot...</source>
@@ -491,11 +491,11 @@
     </message>
     <message>
         <source>Take a screenshot of the virtual machine</source>
-        <translation type="obsolete">ایجاد یک ضبط وضعیت ماشین مجازی</translation>
+        <translation type="vanished">ایجاد یک ضبط وضعیت ماشین مجازی</translation>
     </message>
     <message>
         <source>Ins&ert Ctrl-Alt-Backspace</source>
-        <translation type="obsolete">&قراردادن Ctrl-Alt-Backspace</translation>
+        <translation type="vanished">&قراردادن Ctrl-Alt-Backspace</translation>
     </message>
     <message>
         <source>&File</source>
@@ -534,11 +534,11 @@
     <message>
         <source>&Preferences...</source>
         <comment>global settings</comment>
-        <translation type="obsolete">اولو&یت ها...</translation>
+        <translation type="vanished">اولو&یت ها...</translation>
     </message>
     <message>
         <source>Display the global settings window</source>
-        <translation type="obsolete">پنجره تنظیمات سراسری را نشان میدهد</translation>
+        <translation type="vanished">پنجره تنظیمات سراسری را نشان میدهد</translation>
     </message>
     <message>
         <source>E&xit</source>
@@ -554,15 +554,15 @@
     </message>
     <message>
         <source>Create a new virtual machine</source>
-        <translation type="obsolete">ایجاد یک ماشین مجازی جدید</translation>
+        <translation type="vanished">ایجاد یک ماشین مجازی جدید</translation>
     </message>
     <message>
         <source>Add an existing virtual machine</source>
-        <translation type="obsolete">افزودن یک ماشین موجود</translation>
+        <translation type="vanished">افزودن یک ماشین موجود</translation>
     </message>
     <message>
         <source>Rename the selected virtual machine group</source>
-        <translation type="obsolete">ماشین مجازی انتخاب شده را تغییرنام میدهد</translation>
+        <translation type="vanished">ماشین مجازی انتخاب شده را تغییرنام میدهد</translation>
     </message>
     <message>
         <source>S&tart</source>
@@ -574,27 +574,27 @@
     </message>
     <message>
         <source>Re&fresh...</source>
-        <translation type="obsolete">تازه& کردن...</translation>
+        <translation type="vanished">تازه& کردن...</translation>
     </message>
     <message>
         <source>Refresh the accessibility state of the selected virtual machine</source>
-        <translation type="obsolete">تازه کردن وضعیت دسترسی پذیری ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">تازه کردن وضعیت دسترسی پذیری ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Show in Finder</source>
-        <translation type="obsolete">نمایش در یابنده</translation>
+        <translation type="vanished">نمایش در یابنده</translation>
     </message>
     <message>
         <source>Show in Explorer</source>
-        <translation type="obsolete">نمایش در اکسپلورر</translation>
+        <translation type="vanished">نمایش در اکسپلورر</translation>
     </message>
     <message>
         <source>Show in File Manager</source>
-        <translation type="obsolete">نمایش در مدیرفایل</translation>
+        <translation type="vanished">نمایش در مدیرفایل</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition file in the File Manager</source>
-        <translation type="obsolete">ماشین ویرچوال باکس را در مدیرفایل نشان میدهد</translation>
+        <translation type="vanished">ماشین ویرچوال باکس را در مدیرفایل نشان میدهد</translation>
     </message>
     <message>
         <source>&New...</source>
@@ -606,7 +606,7 @@
     </message>
     <message>
         <source>Add a new group based on the items selected</source>
-        <translation type="obsolete">افزودن یک گروه جدید مبتنی بر آیتم انتخاب شده</translation>
+        <translation type="vanished">افزودن یک گروه جدید مبتنی بر آیتم انتخاب شده</translation>
     </message>
     <message>
         <source>Cl&one...</source>
@@ -614,7 +614,7 @@
     </message>
     <message>
         <source>Clone the selected virtual machine</source>
-        <translation type="obsolete">شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>&Remove...</source>
@@ -626,7 +626,7 @@
     </message>
     <message>
         <source>D&iscard saved state...</source>
-        <translation type="obsolete">لغو وضعیت ذخیره& شده...</translation>
+        <translation type="vanished">لغو وضعیت ذخیره& شده...</translation>
     </message>
     <message>
         <source>&Close</source>
@@ -654,67 +654,67 @@
     </message>
     <message>
         <source>Sort the items of the selected virtual machine group alphabetically</source>
-        <translation type="obsolete">مرتبسازی الفبایی آیتم های گروه ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">مرتبسازی الفبایی آیتم های گروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Remove the selected virtual machines</source>
-        <translation type="obsolete">ماشین مجازی انتخاب شده را حذف میکند</translation>
+        <translation type="vanished">ماشین مجازی انتخاب شده را حذف میکند</translation>
     </message>
     <message>
         <source>Start the selected virtual machines</source>
-        <translation type="obsolete">شروع ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">شروع ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Switch to the windows of the selected virtual machines</source>
-        <translation type="obsolete">رفتن به پنجره انتخاب شده ماشین مجازی</translation>
+        <translation type="vanished">رفتن به پنجره انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
         <source>Suspend the execution of the selected virtual machines</source>
-        <translation type="obsolete">تعلیق اِجرای ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">تعلیق اِجرای ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Reset the selected virtual machines</source>
-        <translation type="obsolete">ماشین مجازی انتخاب شده را ریست میکند</translation>
+        <translation type="vanished">ماشین مجازی انتخاب شده را ریست میکند</translation>
     </message>
     <message>
         <source>Discard the saved state of the selected virtual machines</source>
-        <translation type="obsolete">لغو وضعیت ذخیره شده ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">لغو وضعیت ذخیره شده ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition file in Finder</source>
-        <translation type="obsolete">ماشین ویرچوال باکس را در یابنده نشان میدهد</translation>
+        <translation type="vanished">ماشین ویرچوال باکس را در یابنده نشان میدهد</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition file in Explorer</source>
-        <translation type="obsolete">ماشین ویرچوال باکس را در اکسپلورر نشان میدهد</translation>
+        <translation type="vanished">ماشین ویرچوال باکس را در اکسپلورر نشان میدهد</translation>
     </message>
     <message>
         <source>Create Alias on Desktop</source>
-        <translation type="obsolete">ایجاد میانبر روی دسکتاپ</translation>
+        <translation type="vanished">ایجاد میانبر روی دسکتاپ</translation>
     </message>
     <message>
         <source>Creates an alias file to the VirtualBox Machine Definition file on your desktop</source>
-        <translation type="obsolete">ایجاد یک فایل نماد از ماشین مجازی در دسکتاپ شما</translation>
+        <translation type="vanished">ایجاد یک فایل نماد از ماشین مجازی در دسکتاپ شما</translation>
     </message>
     <message>
         <source>Create Shortcut on Desktop</source>
-        <translation type="obsolete">ایجاد میانبر در دسکتاپ</translation>
+        <translation type="vanished">ایجاد میانبر در دسکتاپ</translation>
     </message>
     <message>
         <source>Creates an shortcut file to the VirtualBox Machine Definition file on your desktop</source>
-        <translation type="obsolete">ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
+        <translation type="vanished">ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
     </message>
     <message>
         <source>Save State</source>
-        <translation type="obsolete">ذخیره وضعیت</translation>
+        <translation type="vanished">ذخیره وضعیت</translation>
     </message>
     <message>
         <source>Save the machine state of the selected virtual machines</source>
-        <translation type="obsolete">ذخیره وضعیت ماشین،ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">ذخیره وضعیت ماشین،ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Send the ACPI Power Button press event to the selected virtual machines</source>
-        <translation type="obsolete">اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Po&wer Off</source>
@@ -722,11 +722,11 @@
     </message>
     <message>
         <source>Power off the selected virtual machines</source>
-        <translation type="obsolete">برق ماشین مجازی انتخاب شده را قطع میکند</translation>
+        <translation type="vanished">برق ماشین مجازی انتخاب شده را قطع میکند</translation>
     </message>
     <message>
         <source>Show the log files of the selected virtual machine</source>
-        <translation type="obsolete">نمایش فایل وقایع ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">نمایش فایل وقایع ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>&New Machine...</source>
@@ -738,15 +738,15 @@
     </message>
     <message>
         <source>&Ungroup...</source>
-        <translation type="obsolete">&خروج از گروه...</translation>
+        <translation type="vanished">&خروج از گروه...</translation>
     </message>
     <message>
         <source>Ungroup items of the selected virtual machine group</source>
-        <translation type="obsolete">خروج از گروه آیتم های گروه ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">خروج از گروه آیتم های گروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Sort</source>
-        <translation type="obsolete">مرتبسازی</translation>
+        <translation type="vanished">مرتبسازی</translation>
     </message>
     <message>
         <source>Gro&up</source>
@@ -754,7 +754,7 @@
     </message>
     <message>
         <source>Sort the group of the first selected machine alphabetically</source>
-        <translation type="obsolete">مرتبسازی الفبایی گروه اولین ماشین انتخاب شده</translation>
+        <translation type="vanished">مرتبسازی الفبایی گروه اولین ماشین انتخاب شده</translation>
     </message>
     <message>
         <source>Shared &Clipboard</source>
@@ -762,11 +762,11 @@
     </message>
     <message>
         <source>Drag'n'Drop</source>
-        <translation type="obsolete">کشیدن 'و' رهاکردن</translation>
+        <translation type="vanished">کشیدن 'و' رهاکردن</translation>
     </message>
     <message>
         <source>Save the machine state of the virtual machine</source>
-        <translation type="obsolete">ذخیره وضعیت ماشین ِ،ماشین مجازی</translation>
+        <translation type="vanished">ذخیره وضعیت ماشین ِ،ماشین مجازی</translation>
     </message>
     <message>
         <source>Power off the virtual machine</source>
@@ -786,7 +786,7 @@
     </message>
     <message>
         <source>Toggle remote desktop (RDP) connections to this machine</source>
-        <translation type="obsolete">ضامن ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
+        <translation type="vanished">ضامن ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
     </message>
     <message>
         <source>&Video Capture</source>
@@ -794,7 +794,7 @@
     </message>
     <message>
         <source>Toggle video capture</source>
-        <translation type="obsolete">ضامن ضبط ویدیو</translation>
+        <translation type="vanished">ضامن ضبط ویدیو</translation>
     </message>
     <message>
         <source>&Video Capture Settings...</source>
@@ -802,12 +802,12 @@
     </message>
     <message>
         <source>Configure video capture settings</source>
-        <translation type="obsolete">پیکربندی تنظیمات ضبط ویدئو</translation>
+        <translation type="vanished">پیکربندی تنظیمات ضبط ویدئو</translation>
     </message>
     <message>
         <source>&Logging...</source>
         <comment>debug action</comment>
-        <translation type="obsolete">&وقایع نگاری...</translation>
+        <translation type="vanished">&وقایع نگاری...</translation>
     </message>
     <message>
         <source>Popup Menu</source>
@@ -816,12 +816,12 @@
     <message>
         <source>&Insert Guest Additions CD image...</source>
         <comment>new</comment>
-        <translation type="obsolete">نصب افزون&ه مهمان...</translation>
+        <translation type="vanished">نصب افزون&ه مهمان...</translation>
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual drive</source>
         <comment>new</comment>
-        <translation type="obsolete">بارگیری ایمیج نصب افزونه مهمان</translation>
+        <translation type="vanished">بارگیری ایمیج نصب افزونه مهمان</translation>
     </message>
     <message>
         <source>&Webcams</source>
@@ -829,7 +829,7 @@
     </message>
     <message>
         <source>Network</source>
-        <translation type="obsolete">شبکه</translation>
+        <translation type="vanished">شبکه</translation>
     </message>
     <message>
         <source>&VirtualBox</source>
@@ -1280,131 +1280,131 @@
     </message>
     <message>
         <source>&VirtualBox Bug Tracker...</source>
-        <translation type="unfinished"></translation>
+        <translation>ردیاب مشکل& ویرچوال باکس...</translation>
     </message>
     <message>
         <source>Open the browser and go to the VirtualBox product bug tracker</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مرورگر و رفتن به ردیاب مشکل ویرچوال باکس</translation>
     </message>
     <message>
         <source>&VirtualBox Forums...</source>
-        <translation type="unfinished"></translation>
+        <translation>انجمن ویرچوال باکس&...</translation>
     </message>
     <message>
         <source>Open the browser and go to the VirtualBox product forums</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مرورگر و رفتن به انجمن ویرچوال باکس</translation>
     </message>
     <message>
         <source>&Oracle Web Site...</source>
-        <translation type="unfinished"></translation>
+        <translation>وبسایت اوراکل&...</translation>
     </message>
     <message>
         <source>Open the browser and go to the Oracle web site</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مرورگر و رفتن به وبسایت اوراکل</translation>
     </message>
     <message>
         <source>&Detach GUI</source>
-        <translation type="unfinished"></translation>
+        <translation>&جداکردن رابط</translation>
     </message>
     <message>
         <source>Detach the GUI from headless VM</source>
-        <translation type="unfinished"></translation>
+        <translation>جداکردن رابط کاربر از ماشین مجازی بی سر</translation>
     </message>
     <message>
         <source>Disable Dock Icon Overlay</source>
-        <translation type="unfinished"></translation>
+        <translation>غیرفعالسازی روی هم افتادگی آیکون دوک</translation>
     </message>
     <message>
         <source>&Host Network Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>مدیریت شبکه میزبان&...</translation>
     </message>
     <message>
         <source>Display the Host Network Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>پنجره مدیریت شبکه میزبان را نشان می دهد</translation>
     </message>
     <message>
         <source>&Machine Tools</source>
-        <translation type="unfinished"></translation>
+        <translation>ابزارهای ماشین&</translation>
     </message>
     <message>
         <source>Switch to machine tools</source>
-        <translation type="unfinished"></translation>
+        <translation>رفتن به ابزارهای ماشین</translation>
     </message>
     <message>
         <source>&Machine Tools Menu</source>
-        <translation type="unfinished"></translation>
+        <translation>منوی ابزارهای ماشین&</translation>
     </message>
     <message>
         <source>Open the machine tools menu</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن منوی ابزارهای ماشین</translation>
     </message>
     <message>
         <source>&Details</source>
-        <translation type="unfinished">جزئی&ات</translation>
+        <translation>جزئی&ات</translation>
     </message>
     <message>
         <source>Open the machine details pane</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن نوار جزئیات ماشین</translation>
     </message>
     <message>
         <source>&Snapshots</source>
-        <translation type="unfinished">ضبط وضعیت &ها</translation>
+        <translation>ضبط وضعیت &ها</translation>
     </message>
     <message>
         <source>Open the machine snapshots pane</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن نوار ضبط وضعیت ماشین</translation>
     </message>
     <message>
         <source>&Global Tools</source>
-        <translation type="unfinished"></translation>
+        <translation>&ابزارهای سراسری</translation>
     </message>
     <message>
         <source>Switch to global tools</source>
-        <translation type="unfinished"></translation>
+        <translation>رفتن به ابزارهای سراسری</translation>
     </message>
     <message>
         <source>&Global Tools Menu</source>
-        <translation type="unfinished"></translation>
+        <translation>منوی &ابزارهای سراسری</translation>
     </message>
     <message>
         <source>Open the global tools menu</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن منوی ابزارهای سراسری</translation>
     </message>
     <message>
         <source>&Virtual Media Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>مدیر رسانه مجاز&ی...</translation>
     </message>
     <message>
         <source>Open the Virtual Media Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مدیر رسانه مجاز&ی</translation>
     </message>
     <message>
         <source>&Host Network Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>مدیریت شبکه میزبان&</translation>
     </message>
     <message>
         <source>Open the Host Network Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مدیریت شبکه میزبان</translation>
     </message>
     <message>
         <source>&Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>&صدا</translation>
     </message>
     <message>
         <source>Audio Output</source>
-        <translation type="unfinished"></translation>
+        <translation>صدای خروجی</translation>
     </message>
     <message>
         <source>Enable audio output</source>
-        <translation type="unfinished"></translation>
+        <translation>فعالسازی صدای خروجی</translation>
     </message>
     <message>
         <source>Audio Input</source>
-        <translation type="unfinished"></translation>
+        <translation>صدای ورودی</translation>
     </message>
     <message>
         <source>Enable audio input</source>
-        <translation type="unfinished"></translation>
+        <translation>فعالسازی صدای ورودی</translation>
     </message>
 </context>
 <context>
@@ -1490,15 +1490,15 @@
     </message>
     <message>
         <source>Hard Disk Controller (IDE)</source>
-        <translation type="obsolete">کنترلر هارد دیسک (IDE)</translation>
+        <translation type="vanished">کنترلر هارد دیسک (IDE)</translation>
     </message>
     <message>
         <source>Hard Disk Controller (SATA)</source>
-        <translation type="obsolete">کنترلر هارد دیسک (SATA)</translation>
+        <translation type="vanished">کنترلر هارد دیسک (SATA)</translation>
     </message>
     <message>
         <source>Hard Disk Controller (SCSI)</source>
-        <translation type="obsolete">کنترلر هارد دیسک (SCSI)</translation>
+        <translation type="vanished">کنترلر هارد دیسک (SCSI)</translation>
     </message>
     <message>
         <source>DVD</source>
@@ -1542,7 +1542,7 @@
     </message>
     <message>
         <source>Hard Disk Controller (SAS)</source>
-        <translation type="obsolete">کنترلر هارد دیسک (SAS)</translation>
+        <translation type="vanished">کنترلر هارد دیسک (SAS)</translation>
     </message>
     <message>
         <source>When checked a new unique MAC address will assigned to all configured network cards.</source>
@@ -1570,7 +1570,7 @@
     </message>
     <message>
         <source>Detailed list of all components of all virtual machines of the current appliance</source>
-        <translation type="unfinished"></translation>
+        <translation>لیست همراه با جزئیات همه کامپاننت های ماشین مجازی وسیله فعلی</translation>
     </message>
 </context>
 <context>
@@ -1589,100 +1589,100 @@
     <message>
         <source>%1</source>
         <comment>col.1 text</comment>
-        <translation type="unfinished">%1% {1?}</translation>
+        <translation>%1% {1?}</translation>
     </message>
     <message>
         <source>%1: %2</source>
         <comment>col.1 text: col.2 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: %2</translation>
     </message>
 </context>
 <context>
     <name>UIApplianceUnverifiedCertificateViewer</name>
     <message>
         <source>Unverifiable Certificate! Continue?</source>
-        <translation type="unfinished"></translation>
+        <translation>گواهینامه قابل تایید نیست.ادامه؟</translation>
     </message>
     <message>
         <source><b>The appliance is signed by an unverified self signed certificate issued by '%1'. We recommend to only proceed with the importing if you are sure you should trust this entity.</b></source>
-        <translation type="unfinished"></translation>
+        <translation><b>این وسیله توسط یک گواهینامه خود امضا شده تایید نشده صادر شده برای '%1' امضاء شده است ما توصیه میکنیم آن را وارد کنید اگر به ماهیت آن اطمینان دارید.</b></translation>
     </message>
     <message>
         <source><b>The appliance is signed by an unverified certificate issued to '%1'. We recommend to only proceed with the importing if you are sure you should trust this entity.</b></source>
-        <translation type="unfinished"></translation>
+        <translation><b>این وسیله توسط یک گواهیانه تایید نشده صادر شده برای '%1' امضاء شده است.ما توصیه میکنیم آن را وارد کنید اگر به ماهیت آن اطمینان دارید.</b></translation>
     </message>
     <message>
         <source>True</source>
-        <translation type="unfinished"></translation>
+        <translation>درست</translation>
     </message>
     <message>
         <source>False</source>
-        <translation type="unfinished"></translation>
+        <translation>غلط</translation>
     </message>
     <message>
         <source><tr><td>%1:</td><td>%2</td></tr></source>
         <comment>key: value</comment>
-        <translation type="unfinished"></translation>
+        <translation><tr><td>%1:</td><td>%2</td></tr></translation>
     </message>
     <message>
         <source>Issuer</source>
-        <translation type="unfinished"></translation>
+        <translation>صادر کننده</translation>
     </message>
     <message>
         <source>Subject</source>
-        <translation type="unfinished"></translation>
+        <translation>موضوع</translation>
     </message>
     <message>
         <source>Not Valid Before</source>
-        <translation type="unfinished"></translation>
+        <translation>معتبر نیست قبل از</translation>
     </message>
     <message>
         <source>Not Valid After</source>
-        <translation type="unfinished"></translation>
+        <translation>معتبر نیست بعد از</translation>
     </message>
     <message>
         <source>Serial Number</source>
-        <translation type="unfinished"></translation>
+        <translation>شماره سریال</translation>
     </message>
     <message>
         <source>Self-Signed</source>
-        <translation type="unfinished"></translation>
+        <translation>خود امضاء شده</translation>
     </message>
     <message>
         <source>Authority (CA)</source>
-        <translation type="unfinished"></translation>
+        <translation>مجوز (CA)</translation>
     </message>
     <message>
         <source>Public Algorithm</source>
-        <translation type="unfinished"></translation>
+        <translation>الگوریتم عمومی</translation>
     </message>
     <message>
         <source>%1 (%2)</source>
         <comment>value (clarification)</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 (%2)</translation>
     </message>
     <message>
         <source>Signature Algorithm</source>
-        <translation type="unfinished"></translation>
+        <translation>الگوریتم امضاء</translation>
     </message>
     <message>
         <source>X.509 Version Number</source>
-        <translation type="unfinished"></translation>
+        <translation>X.509 شماره نسخه</translation>
     </message>
 </context>
 <context>
     <name>UIDescriptionPagePrivate</name>
     <message>
         <source>No description. Press the Edit button below to add it.</source>
-        <translation type="obsolete">توضیحی ندارد.دکمه ویرایش در پایین را برای افزودن فشار دهید.</translation>
+        <translation type="vanished">توضیحی ندارد.دکمه ویرایش در پایین را برای افزودن فشار دهید.</translation>
     </message>
     <message>
         <source>Edit</source>
-        <translation type="obsolete">ویرایش</translation>
+        <translation type="vanished">ویرایش</translation>
     </message>
     <message>
         <source>Edit (Ctrl+E)</source>
-        <translation type="obsolete">ویرایش (Ctrl+E)</translation>
+        <translation type="vanished">ویرایش (Ctrl+E)</translation>
     </message>
 </context>
 <context>
@@ -1690,231 +1690,231 @@
     <message>
         <source>Name</source>
         <comment>details report</comment>
-        <translation type="obsolete">نام</translation>
+        <translation type="vanished">نام</translation>
     </message>
     <message>
         <source>OS Type</source>
         <comment>details report</comment>
-        <translation type="obsolete">نوع سیستم عامل</translation>
+        <translation type="vanished">نوع سیستم عامل</translation>
     </message>
     <message>
         <source>Information inaccessible</source>
         <comment>details report</comment>
-        <translation type="obsolete">اطلاعات قابل دسترسی نیست</translation>
+        <translation type="vanished">اطلاعات قابل دسترسی نیست</translation>
     </message>
     <message>
         <source>Base Memory</source>
         <comment>details report</comment>
-        <translation type="obsolete">حافظه پایه</translation>
+        <translation type="vanished">حافظه پایه</translation>
     </message>
     <message>
         <source><nobr>%1 MB</nobr></source>
         <comment>details report</comment>
-        <translation type="obsolete"><nobr>%1 مگابایت</nobr></translation>
+        <translation type="vanished"><nobr>%1 مگابایت</nobr></translation>
     </message>
     <message>
         <source>Processors</source>
         <comment>details report</comment>
-        <translation type="obsolete">پردازنده ها</translation>
+        <translation type="vanished">پردازنده ها</translation>
     </message>
     <message>
         <source><nobr>%1</nobr></source>
         <comment>details report</comment>
-        <translation type="obsolete"><nobr>%1</nobr></translation>
+        <translation type="vanished"><nobr>%1</nobr></translation>
     </message>
     <message>
         <source>Execution Cap</source>
         <comment>details report</comment>
-        <translation type="obsolete">درپوش اِجرا</translation>
+        <translation type="vanished">درپوش اِجرا</translation>
     </message>
     <message>
         <source><nobr>%1%</nobr></source>
         <comment>details report</comment>
-        <translation type="obsolete"><nobr>%1%</nobr></translation>
+        <translation type="vanished"><nobr>%1%</nobr></translation>
     </message>
     <message>
         <source>Boot Order</source>
         <comment>details report</comment>
-        <translation type="obsolete">ترتیب بوت</translation>
+        <translation type="vanished">ترتیب بوت</translation>
     </message>
     <message>
         <source>ACPI</source>
         <comment>details report</comment>
-        <translation type="obsolete">ACPI</translation>
+        <translation type="vanished">ACPI</translation>
     </message>
     <message>
         <source>I/O APIC</source>
         <comment>details report</comment>
-        <translation type="obsolete">I/O APIC</translation>
+        <translation type="vanished">I/O APIC</translation>
     </message>
     <message>
         <source>BIOS</source>
         <comment>details report</comment>
-        <translation type="obsolete">بایوس</translation>
+        <translation type="vanished">بایوس</translation>
     </message>
     <message>
         <source>VT-x/AMD-V</source>
         <comment>details report</comment>
-        <translation type="obsolete">VT-x/AMD-V</translation>
+        <translation type="vanished">VT-x/AMD-V</translation>
     </message>
     <message>
         <source>Nested Paging</source>
         <comment>details report</comment>
-        <translation type="obsolete">صفحه بندی تودرتو</translation>
+        <translation type="vanished">صفحه بندی تودرتو</translation>
     </message>
     <message>
         <source>PAE/NX</source>
         <comment>details report</comment>
-        <translation type="obsolete">PAE/NX</translation>
+        <translation type="vanished">PAE/NX</translation>
     </message>
     <message>
         <source>Acceleration</source>
         <comment>details report</comment>
-        <translation type="obsolete">شتاب دهنده</translation>
+        <translation type="vanished">شتاب دهنده</translation>
     </message>
     <message>
         <source>Video Memory</source>
         <comment>details report</comment>
-        <translation type="obsolete">حافظه ویدیو</translation>
+        <translation type="vanished">حافظه ویدیو</translation>
     </message>
     <message>
         <source>Screens</source>
         <comment>details report</comment>
-        <translation type="obsolete">نمایشگر</translation>
+        <translation type="vanished">نمایشگر</translation>
     </message>
     <message>
         <source>2D Video</source>
         <comment>details report</comment>
-        <translation type="obsolete">ویدیو دو بعدی</translation>
+        <translation type="vanished">ویدیو دو بعدی</translation>
     </message>
     <message>
         <source>3D</source>
         <comment>details report</comment>
-        <translation type="obsolete">سه بعدی</translation>
+        <translation type="vanished">سه بعدی</translation>
     </message>
     <message>
         <source>Remote Desktop Server Port</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="obsolete">پورت سرور ریموت دسکتاپ</translation>
+        <translation type="vanished">پورت سرور ریموت دسکتاپ</translation>
     </message>
     <message>
         <source>Remote Desktop Server</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="obsolete">سرور ریموت دسکتاپ</translation>
+        <translation type="vanished">سرور ریموت دسکتاپ</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>(CD/DVD)</source>
-        <translation type="obsolete">(سی دی/دی وی دی)</translation>
+        <translation type="vanished">(سی دی/دی وی دی)</translation>
     </message>
     <message>
         <source>Not Attached</source>
         <comment>details report (Storage)</comment>
-        <translation type="obsolete">ضمیمه نشده است</translation>
+        <translation type="vanished">ضمیمه نشده است</translation>
     </message>
     <message>
         <source>Host Driver</source>
         <comment>details report (audio)</comment>
-        <translation type="obsolete">درایور میزبان</translation>
+        <translation type="vanished">درایور میزبان</translation>
     </message>
     <message>
         <source>Controller</source>
         <comment>details report (audio)</comment>
-        <translation type="obsolete">کنترلر</translation>
+        <translation type="vanished">کنترلر</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (audio)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Bridged adapter, %1</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">آداپتور پل شده، %1</translation>
+        <translation type="vanished">آداپتور پل شده، %1</translation>
     </message>
     <message>
         <source>Internal network, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">شبه داخلی, '%1'</translation>
+        <translation type="vanished">شبه داخلی, '%1'</translation>
     </message>
     <message>
         <source>Host-only adapter, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">آداپتور فقط-میزبان '%1'</translation>
+        <translation type="vanished">آداپتور فقط-میزبان '%1'</translation>
     </message>
     <message>
         <source>Generic driver, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">درایور کلی، '%1'</translation>
+        <translation type="vanished">درایور کلی، '%1'</translation>
     </message>
     <message>
         <source>Generic driver, '%1' {&nbsp;%2&nbsp;}</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
+        <translation type="vanished">درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
     </message>
     <message>
         <source>Adapter %1</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">آداپتور %1</translation>
+        <translation type="vanished">آداپتور %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (network)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details report (serial ports)</comment>
-        <translation type="obsolete">پورت %1</translation>
+        <translation type="vanished">پورت %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (serial ports)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details report (parallel ports)</comment>
-        <translation type="obsolete">پورت %1</translation>
+        <translation type="vanished">پورت %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (parallel ports)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Device Filters</source>
         <comment>details report (USB)</comment>
-        <translation type="obsolete">فیلترهای دستگاه</translation>
+        <translation type="vanished">فیلترهای دستگاه</translation>
     </message>
     <message>
         <source>%1 (%2 active)</source>
         <comment>details report (USB)</comment>
-        <translation type="obsolete">%1 (%2 فعال)</translation>
+        <translation type="vanished">%1 (%2 فعال)</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (USB)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>details report (shared folders)</comment>
-        <translation type="obsolete">پوشه های اشتراکی</translation>
+        <translation type="vanished">پوشه های اشتراکی</translation>
     </message>
     <message>
         <source>None</source>
         <comment>details report (shared folders)</comment>
-        <translation type="obsolete">ندارد</translation>
+        <translation type="vanished">ندارد</translation>
     </message>
     <message>
         <source>None</source>
         <comment>details report (description)</comment>
-        <translation type="obsolete">هیچیک</translation>
+        <translation type="vanished">هیچیک</translation>
     </message>
 </context>
 <context>
@@ -1926,62 +1926,62 @@
     <message>
         <source>General</source>
         <comment>details report</comment>
-        <translation type="obsolete">عمومی</translation>
+        <translation type="vanished">عمومی</translation>
     </message>
     <message>
         <source>System</source>
         <comment>details report</comment>
-        <translation type="obsolete">سیستم</translation>
+        <translation type="vanished">سیستم</translation>
     </message>
     <message>
         <source>Preview</source>
         <comment>details report</comment>
-        <translation type="obsolete">پیشنمایش</translation>
+        <translation type="vanished">پیشنمایش</translation>
     </message>
     <message>
         <source>Display</source>
         <comment>details report</comment>
-        <translation type="obsolete">نمایش</translation>
+        <translation type="vanished">نمایش</translation>
     </message>
     <message>
         <source>Storage</source>
         <comment>details report</comment>
-        <translation type="obsolete">ذخیره ساز</translation>
+        <translation type="vanished">ذخیره ساز</translation>
     </message>
     <message>
         <source>Audio</source>
         <comment>details report</comment>
-        <translation type="obsolete">صدا</translation>
+        <translation type="vanished">صدا</translation>
     </message>
     <message>
         <source>Network</source>
         <comment>details report</comment>
-        <translation type="obsolete">شبکه</translation>
+        <translation type="vanished">شبکه</translation>
     </message>
     <message>
         <source>Serial Ports</source>
         <comment>details report</comment>
-        <translation type="obsolete">پورت سریال</translation>
+        <translation type="vanished">پورت سریال</translation>
     </message>
     <message>
         <source>Parallel Ports</source>
         <comment>details report</comment>
-        <translation type="obsolete">پورت پارالل</translation>
+        <translation type="vanished">پورت پارالل</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>details report</comment>
-        <translation type="obsolete">یو اِس بی</translation>
+        <translation type="vanished">یو اِس بی</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>details report</comment>
-        <translation type="obsolete">پوشه های اشتراکی</translation>
+        <translation type="vanished">پوشه های اشتراکی</translation>
     </message>
     <message>
         <source>Description</source>
         <comment>details report</comment>
-        <translation type="obsolete">توضیحات</translation>
+        <translation type="vanished">توضیحات</translation>
     </message>
 </context>
 <context>
@@ -1999,7 +1999,7 @@
     <name>UIDnDMimeData</name>
     <message>
         <source>Dropping data ...</source>
-        <translation type="obsolete">رهاکردن داده ...</translation>
+        <translation type="vanished">رهاکردن داده ...</translation>
     </message>
 </context>
 <context>
@@ -2014,7 +2014,7 @@
     </message>
     <message>
         <source>Verifying %1...</source>
-        <translation type="unfinished"></translation>
+        <translation>در حال تایید %1...</translation>
     </message>
 </context>
 <context>
@@ -2054,7 +2054,7 @@
     <name>UIEmptyFilePathSelector</name>
     <message>
         <source>Choose...</source>
-        <translation type="unfinished">انتخاب کنید...</translation>
+        <translation>انتخاب کنید...</translation>
     </message>
 </context>
 <context>
@@ -2090,67 +2090,67 @@
     <message>
         <source>%1, %2: %3, %4</source>
         <comment>col.2 text, col.3 name: col.3 text, col.1 name</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3, %4</translation>
     </message>
     <message>
         <source>%1, %2: %3</source>
         <comment>col.2 text, col.3 name: col.3 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3</translation>
     </message>
 </context>
 <context>
     <name>UIFilePathSelector</name>
     <message>
         <source>&Copy</source>
-        <translation type="unfinished">ک&پی</translation>
+        <translation>ک&پی</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>Displays a window to select a different folder.</source>
-        <translation type="unfinished">پنجره ای برای انتخاب پوشه ای دیگر را نشان میدهد</translation>
+        <translation>پنجره ای برای انتخاب پوشه ای دیگر را نشان میدهد</translation>
     </message>
     <message>
         <source>Resets the folder path to the default value.</source>
-        <translation type="unfinished">ریست مسیر پوشه به مقدار پیش فرض.</translation>
+        <translation>ریست مسیر پوشه به مقدار پیش فرض.</translation>
     </message>
     <message>
         <source>Displays a window to select a different file.</source>
-        <translation type="unfinished">پنجره ای برای انتخاب فایلی دیگر را نشان میدهد</translation>
+        <translation>پنجره ای برای انتخاب فایلی دیگر را نشان میدهد</translation>
     </message>
     <message>
         <source>Resets the file path to the default value.</source>
-        <translation type="unfinished">ریست مسیر فایل به مقدار پیش فرض.</translation>
+        <translation>ریست مسیر فایل به مقدار پیش فرض.</translation>
     </message>
     <message>
         <source><reset to default></source>
-        <translation type="unfinished"><ریست به پیش فرض></translation>
+        <translation><ریست به پیش فرض></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><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">لطفا از آیتم <b>سایر...</b> از لیست کشویی برای انتخاب مسیر استفاده کنید.</translation>
+        <translation>لطفا از آیتم <b>سایر...</b> از لیست کشویی برای انتخاب مسیر استفاده کنید.</translation>
     </message>
     <message>
         <source>Holds the folder path.</source>
-        <translation type="unfinished">نگه داشتن مسیر پوشه</translation>
+        <translation>نگه داشتن مسیر پوشه</translation>
     </message>
     <message>
         <source>Holds the file path.</source>
-        <translation type="unfinished">نگه داشتن مسیر فایل</translation>
+        <translation>نگه داشتن مسیر فایل</translation>
     </message>
 </context>
 <context>
@@ -2164,7 +2164,7 @@
         <source>%n group(s)</source>
         <comment>Group item tool-tip / Group info</comment>
         <translation>
-            <numerusform>%n گروه(ها)</numerusform>
+            <numerusform>%n گروه</numerusform>
         </translation>
     </message>
     <message>
@@ -2176,14 +2176,14 @@
         <source>%n machine(s)</source>
         <comment>Group item tool-tip / Machine info</comment>
         <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>
-            <numerusform>%n درحال اِجرای</numerusform>
+            <numerusform>(%n در حال اِجرای)</numerusform>
         </translation>
     </message>
     <message>
@@ -2214,14 +2214,14 @@
     </message>
     <message>
         <source>Virtual Machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>گروه ماشین مجازی</translation>
     </message>
 </context>
 <context>
     <name>UIGChooserItemMachine</name>
     <message>
         <source>Virtual Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>ماشین مجازی</translation>
     </message>
 </context>
 <context>
@@ -2235,7 +2235,7 @@
     <name>UIGChooserView</name>
     <message>
         <source>Contains a tree of Virtual Machines and their groups</source>
-        <translation type="unfinished"></translation>
+        <translation>حاوی لیست ماشین های مجازی و گروه های آنهاست</translation>
     </message>
 </context>
 <context>
@@ -2303,7 +2303,7 @@
     <message>
         <source>[CD/DVD]</source>
         <comment>details (storage)</comment>
-        <translation type="obsolete">[سی دی/دی وی دی]</translation>
+        <translation type="vanished">[سی دی/دی وی دی]</translation>
     </message>
     <message>
         <source>Controller</source>
@@ -2448,7 +2448,7 @@
     <message>
         <source>Generic Driver, '%1' {&nbsp;%2&nbsp;}</source>
         <comment>details (network)</comment>
-        <translation type="obsolete">درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
+        <translation type="vanished">درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
     </message>
     <message>
         <source>Device Filters</source>
@@ -2597,57 +2597,57 @@
     <message>
         <source>Chipset Type</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>نوع تراشه</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (system/EFI)</comment>
-        <translation type="unfinished">فعال شده</translation>
+        <translation>فعال شده</translation>
     </message>
     <message>
         <source>EFI</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>EFI</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (system/EFI)</comment>
-        <translation type="unfinished">غیرفعال شده</translation>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (display/Unscaled HiDPI Video Output)</comment>
-        <translation type="unfinished">غیرفعال شده</translation>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
         <source>Audio Output</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>صدای خروجی</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (audio/output)</comment>
-        <translation type="unfinished">فعال شده</translation>
+        <translation>فعال شده</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (audio/output)</comment>
-        <translation type="unfinished">غیرفعال شده</translation>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
         <source>Audio Input</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>صدای ورودی</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (audio/input)</comment>
-        <translation type="unfinished">فعال شده</translation>
+        <translation>فعال شده</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (audio/input)</comment>
-        <translation type="unfinished">غیرفعال شده</translation>
+        <translation>غیرفعال شده</translation>
     </message>
 </context>
 <context>
@@ -2655,21 +2655,21 @@
     <message>
         <source>%1 details</source>
         <comment>like 'General details' or 'Storage details'</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 جزئیات</translation>
     </message>
 </context>
 <context>
     <name>UIGDetailsSet</name>
     <message>
         <source>Contains the details of virtual machine '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>حاوی جزئیات ماشین مجازی '%1'</translation>
     </message>
 </context>
 <context>
     <name>UIGDetailsView</name>
     <message>
         <source>Contains a list of Virtual Machine details</source>
-        <translation type="unfinished"></translation>
+        <translation>حاوی یک لیست جزئیات ماشین مجازی</translation>
     </message>
 </context>
 <context>
@@ -2715,7 +2715,7 @@
     </message>
     <message>
         <source>Specifies the maximum width which we would like the guest to use.</source>
-        <translation type="obsolete">حداکثر عرضی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
+        <translation type="vanished">حداکثر عرضی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
     </message>
     <message>
         <source>&Height:</source>
@@ -2723,7 +2723,7 @@
     </message>
     <message>
         <source>Specifies the maximum height which we would like the guest to use.</source>
-        <translation type="obsolete">حداکثر ارتفاعی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
+        <translation type="vanished">حداکثر ارتفاعی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
     </message>
     <message>
         <source>Automatic</source>
@@ -2777,7 +2777,7 @@
     <name>UIGlobalSettingsExtension</name>
     <message>
         <source>&Extension Packages:</source>
-        <translation type="obsolete">&بسته افزونه:</translation>
+        <translation type="vanished">&بسته افزونه:</translation>
     </message>
     <message>
         <source>Lists all installed packages.</source>
@@ -2797,11 +2797,11 @@
     </message>
     <message>
         <source>Add package</source>
-        <translation type="obsolete">افزودن بسته</translation>
+        <translation type="vanished">افزودن بسته</translation>
     </message>
     <message>
         <source>Remove package</source>
-        <translation type="obsolete">حذف بسته</translation>
+        <translation type="vanished">حذف بسته</translation>
     </message>
     <message>
         <source>Select an extension package file</source>
@@ -2856,39 +2856,39 @@
     </message>
     <message>
         <source>When checked, the application will provide an icon with the context menu in the system tray.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده،برنامه یک آیکون با منوی زمینه در کنار ساعت ارائه میکند.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،برنامه یک آیکون با منوی زمینه در کنار ساعت ارائه میکند.</translation>
     </message>
     <message>
         <source>&Show System Tray Icon</source>
-        <translation type="obsolete">نمایش آیکون کنار س&اعت</translation>
+        <translation type="vanished">نمایش آیکون کنار س&اعت</translation>
     </message>
     <message>
         <source>&Auto show Dock and Menubar in fullscreen</source>
-        <translation type="obsolete">نمایش خودکار دوک و &نوارمنو در تمام صفحه</translation>
+        <translation type="vanished">نمایش خودکار دوک و &نوارمنو در تمام صفحه</translation>
     </message>
     <message>
         <source>When checked, the host screen saver will be disabled whenever a virtual machine is running.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده،محافظ صفحه نمایش میزبان هرگاه که ماشین مجازی در اِجرا است غیرفعال میشود.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،محافظ صفحه نمایش میزبان هرگاه که ماشین مجازی در اِجرا است غیرفعال میشود.</translation>
     </message>
     <message>
         <source>Disable Host &ScreenSaver</source>
-        <translation type="obsolete">غیر&فعالسازی محافظ صفحه نمایش میزبان</translation>
+        <translation type="vanished">غیر&فعالسازی محافظ صفحه نمایش میزبان</translation>
     </message>
     <message>
         <source>&Dock and Menubar:</source>
-        <translation type="obsolete">&داک و نوار منو:</translation>
+        <translation type="vanished">&داک و نوار منو:</translation>
     </message>
     <message>
         <source>Auto-Show in Fullscreen</source>
-        <translation type="obsolete">نمایش خودکار در تمام صفحه</translation>
+        <translation type="vanished">نمایش خودکار در تمام صفحه</translation>
     </message>
     <message>
         <source>When checked, the host dock and menu bar will be shown when the virtual machine is in fullscreen mode.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده،داک میزبان و نوار منو وقتیکه ماشین در حالت تمام صفحه است نشان داده خواهد شد.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،داک میزبان و نوار منو وقتیکه ماشین در حالت تمام صفحه است نشان داده خواهد شد.</translation>
     </message>
     <message>
         <source>&Host Screensaver:</source>
-        <translation type="obsolete">محافظ صفحه نمایش میزبان&:</translation>
+        <translation type="vanished">محافظ صفحه نمایش میزبان&:</translation>
     </message>
     <message>
         <source>When checked, the host screensaver will be disabled whenever a virtual machine is running.</source>
@@ -2896,7 +2896,7 @@
     </message>
     <message>
         <source>Disable When Running Virtual Machines</source>
-        <translation type="obsolete">زمانیکه در حال اجرای ماشین های مجازی هست غیرفعال کن</translation>
+        <translation type="vanished">زمانیکه در حال اجرای ماشین های مجازی هست غیرفعال کن</translation>
     </message>
     <message>
         <source>Host Screensaver:</source>
@@ -2911,11 +2911,11 @@
     <name>UIGlobalSettingsInput</name>
     <message>
         <source>Host &Key:</source>
-        <translation type="obsolete">کلید میزب&ان:</translation>
+        <translation type="vanished">کلید میزب&ان:</translation>
     </message>
     <message>
         <source>Holds the key used as a Host Key in the VM window. Activate the entry field and press a new Host Key. Note that alphanumeric, cursor movement and editing keys cannot be used.</source>
-        <translation type="obsolete">کلید بکاررفته بعنوان یک کلیدمیزبان در پنجره ماشین مجازی را نشان میدهد.فیلد ورودی را فعال کرده و کلید میزبان جدید را فشاردهید.توجه کنید که آن الفبایی است،حرکت های نشانگر و کلیدهای ویرایش نمیتواند استفاده شود.</translation>
+        <translation type="vanished">کلید بکاررفته بعنوان یک کلیدمیزبان در پنجره ماشین مجازی را نشان میدهد.فیلد ورودی را فعال کرده و کلید میزبان جدید را فشاردهید.توجه کنید که آن الفبایی است،حرکت های نشانگر و کلیدهای ویرایش نمیتواند استفاده شود.</translation>
     </message>
     <message>
         <source>When checked, the keyboard is automatically captured every time the VM window is activated. When the keyboard is captured, all keystrokes (including system ones like Alt-Tab) are directed to the VM.</source>
@@ -2927,11 +2927,11 @@
     </message>
     <message>
         <source>Reset host combination</source>
-        <translation type="obsolete">ریست میزبان ترکیبی</translation>
+        <translation type="vanished">ریست میزبان ترکیبی</translation>
     </message>
     <message>
         <source>Resets the key combination used as the host combination in the VM window.</source>
-        <translation type="obsolete">ریست کلید ترکیبی بکاررفته بعنوان میزبان ترکیبی در پنجره ماشین مجازی.</translation>
+        <translation type="vanished">ریست کلید ترکیبی بکاررفته بعنوان میزبان ترکیبی در پنجره ماشین مجازی.</translation>
     </message>
     <message>
         <source>Host Key Combination</source>
@@ -2951,11 +2951,11 @@
     </message>
     <message>
         <source>Lists all the available shortcuts which can be configured.</source>
-        <translation type="obsolete">لیست همه میانبرهای موجود که میتواند پیکربندی شود.</translation>
+        <translation type="vanished">لیست همه میانبرهای موجود که میتواند پیکربندی شود.</translation>
     </message>
     <message>
         <source>Enter a sequence to filter the shortcut list.</source>
-        <translation type="obsolete">یک دنباله برای فیلتر لیست میانبر وارد کنید</translation>
+        <translation type="vanished">یک دنباله برای فیلتر لیست میانبر وارد کنید</translation>
     </message>
     <message>
         <source>Lists all available shortcuts which can be configured.</source>
@@ -2994,7 +2994,7 @@
     </message>
     <message>
         <source>&Interface Language:</source>
-        <translation type="obsolete">رابط& زبان:</translation>
+        <translation type="vanished">رابط& زبان:</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>
@@ -3029,31 +3029,31 @@
     <name>UIGlobalSettingsNetwork</name>
     <message>
         <source>host IPv4 address of <b>%1</b> is wrong</source>
-        <translation type="obsolete">میزبان IPv4 آدرس <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">میزبان IPv4 آدرس <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>host IPv4 network mask of <b>%1</b> is wrong</source>
-        <translation type="obsolete">میزبان IPv4 ماسک شبکه <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">میزبان IPv4 ماسک شبکه <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>host IPv6 address of <b>%1</b> is wrong</source>
-        <translation type="obsolete">میزبان IPv6 آدرس <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">میزبان IPv6 آدرس <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>DHCP server address of <b>%1</b> is wrong</source>
-        <translation type="obsolete">آدرس سرور DHCP <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">آدرس سرور DHCP <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>DHCP server network mask of <b>%1</b> is wrong</source>
-        <translation type="obsolete">ماسک شبکه سرور دی اِچ سی پی <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">ماسک شبکه سرور دی اِچ سی پی <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>DHCP lower address bound of <b>%1</b> is wrong</source>
-        <translation type="obsolete">محدوده آدرس پایین تر DHCP <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">محدوده آدرس پایین تر DHCP <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>DHCP upper address bound of <b>%1</b> is wrong</source>
-        <translation type="obsolete">محدوده آدرس بالاتر DHCP <b>%1</b> اشتباه است</translation>
+        <translation type="vanished">محدوده آدرس بالاتر DHCP <b>%1</b> اشتباه است</translation>
     </message>
     <message>
         <source>Adapter</source>
@@ -3137,19 +3137,19 @@
     </message>
     <message>
         <source>&Add host-only network</source>
-        <translation type="obsolete">افزودن فقط-می&زبان شبکه</translation>
+        <translation type="vanished">افزودن فقط-می&زبان شبکه</translation>
     </message>
     <message>
         <source>&Remove host-only network</source>
-        <translation type="obsolete">حذف &شبکه فقط-میزبان</translation>
+        <translation type="vanished">حذف &شبکه فقط-میزبان</translation>
     </message>
     <message>
         <source>&Edit host-only network</source>
-        <translation type="obsolete">ویرایش فقط-م&یزبان شبکه</translation>
+        <translation type="vanished">ویرایش فقط-م&یزبان شبکه</translation>
     </message>
     <message>
         <source>&Host-only Networks:</source>
-        <translation type="obsolete">شبکه های &فقط-میزبان:</translation>
+        <translation type="vanished">شبکه های &فقط-میزبان:</translation>
     </message>
     <message>
         <source>Lists all available host-only networks.</source>
@@ -3278,15 +3278,15 @@
     </message>
     <message>
         <source>&Add NAT network</source>
-        <translation type="obsolete">&افزودن شبکه NAT</translation>
+        <translation type="vanished">&افزودن شبکه NAT</translation>
     </message>
     <message>
         <source>&Remove NAT network</source>
-        <translation type="obsolete">&حذف شبکه NAT</translation>
+        <translation type="vanished">&حذف شبکه NAT</translation>
     </message>
     <message>
         <source>&Edit NAT network</source>
-        <translation type="obsolete">&ویرایش شبکه NAT</translation>
+        <translation type="vanished">&ویرایش شبکه NAT</translation>
     </message>
     <message>
         <source>Add NAT Network</source>
@@ -3341,95 +3341,95 @@
     <name>UIGlobalSettingsNetworkDetails</name>
     <message>
         <source>Host-only Network Details</source>
-        <translation type="obsolete">جزئیات شبکه فقط-میزبان</translation>
+        <translation type="vanished">جزئیات شبکه فقط-میزبان</translation>
     </message>
     <message>
         <source>&Adapter</source>
-        <translation type="obsolete">&آداپتور</translation>
+        <translation type="vanished">&آداپتور</translation>
     </message>
     <message>
         <source>Manual &Configuration</source>
-        <translation type="obsolete">پیکربندی &دستی</translation>
+        <translation type="vanished">پیکربندی &دستی</translation>
     </message>
     <message>
         <source>Use manual configuration for this host-only network adapter.</source>
-        <translation type="obsolete">استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
+        <translation type="vanished">استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
     </message>
     <message>
         <source>&IPv4 Address:</source>
-        <translation type="obsolete">آد&رس IPv4:</translation>
+        <translation type="vanished">آد&رس IPv4:</translation>
     </message>
     <message>
         <source>Holds the host IPv4 address for this adapter.</source>
-        <translation type="obsolete">آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <translation type="vanished">آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
         <source>IPv4 Network &Mask:</source>
-        <translation type="obsolete">ماسک ش&بکه IPv4:</translation>
+        <translation type="vanished">ماسک ش&بکه IPv4:</translation>
     </message>
     <message>
         <source>Holds the host IPv4 network mask for this adapter.</source>
-        <translation type="obsolete">ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <translation type="vanished">ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
         <source>I&Pv6 Address:</source>
-        <translation type="obsolete">آدرس I&Pv6:</translation>
+        <translation type="vanished">آدرس I&Pv6:</translation>
     </message>
     <message>
         <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
-        <translation type="obsolete">آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <translation type="vanished">آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
         <source>IPv6 Prefix &Length:</source>
-        <translation type="obsolete">طول ماسک ش&بکه IPv6:</translation>
+        <translation type="vanished">طول ماسک ش&بکه IPv6:</translation>
     </message>
     <message>
         <source>Holds the host IPv6 prefix length for this adapter if IPv6 is supported.</source>
-        <translation type="obsolete">طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <translation type="vanished">طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
         <source>&DHCP Server</source>
-        <translation type="obsolete">سر&ور DHCP</translation>
+        <translation type="vanished">سر&ور DHCP</translation>
     </message>
     <message>
         <source>&Enable Server</source>
-        <translation type="obsolete">فعالسازی &سرور</translation>
+        <translation type="vanished">فعالسازی &سرور</translation>
     </message>
     <message>
         <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source>
-        <translation type="obsolete">هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
+        <translation type="vanished">هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
     </message>
     <message>
         <source>Server Add&ress:</source>
-        <translation type="obsolete">آدرس سرور&:</translation>
+        <translation type="vanished">آدرس سرور&:</translation>
     </message>
     <message>
         <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="obsolete">آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation type="vanished">آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>Server &Mask:</source>
-        <translation type="obsolete">ماسک &سرور:</translation>
+        <translation type="vanished">ماسک &سرور:</translation>
     </message>
     <message>
         <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="obsolete">ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation type="vanished">ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>&Lower Address Bound:</source>
-        <translation type="obsolete">محدوده آدر&س پایین تر:</translation>
+        <translation type="vanished">محدوده آدر&س پایین تر:</translation>
     </message>
     <message>
         <source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="obsolete">محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation type="vanished">محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>&Upper Address Bound:</source>
-        <translation type="obsolete">محدوده آ&درس بالاتر:</translation>
+        <translation type="vanished">محدوده آ&درس بالاتر:</translation>
     </message>
     <message>
         <source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="obsolete">محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation type="vanished">محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
 </context>
 <context>
@@ -3448,7 +3448,7 @@
     </message>
     <message>
         <source>Use manual configuration for this host-only network adapter.</source>
-        <translation type="obsolete">استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
+        <translation type="vanished">استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
     </message>
     <message>
         <source>&IPv4 Address:</source>
@@ -3492,7 +3492,7 @@
     </message>
     <message>
         <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source>
-        <translation type="obsolete">هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
+        <translation type="vanished">هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
     </message>
     <message>
         <source>Server Add&ress:</source>
@@ -3547,7 +3547,7 @@
     </message>
     <message>
         <source>Enable this NAT network.</source>
-        <translation type="obsolete">فعالسازی این شبکه NAT.</translation>
+        <translation type="vanished">فعالسازی این شبکه NAT.</translation>
     </message>
     <message>
         <source>Network &Name:</source>
@@ -3575,7 +3575,7 @@
     </message>
     <message>
         <source>Determines whether this network supports DHCP.</source>
-        <translation type="obsolete">تعیین اینکه آیا این شبکه از DHCP پشتیبانی میکند.</translation>
+        <translation type="vanished">تعیین اینکه آیا این شبکه از DHCP پشتیبانی میکند.</translation>
     </message>
     <message>
         <source>Supports &IPv6</source>
@@ -3583,7 +3583,7 @@
     </message>
     <message>
         <source>Determines whether this network supports IPv6.</source>
-        <translation type="obsolete">تعیین اینکه آیا این شبکه از IPv6 پشتیبانی میکند.</translation>
+        <translation type="vanished">تعیین اینکه آیا این شبکه از IPv6 پشتیبانی میکند.</translation>
     </message>
     <message>
         <source>Advertise Default IPv6 &Route</source>
@@ -3591,11 +3591,11 @@
     </message>
     <message>
         <source>Determines whether this network should be advertised as the default IPv6 route.</source>
-        <translation type="obsolete">تعیین اینکه آیا شبکه باید مسیر پیش فرض IPv6 را اعلان کند.</translation>
+        <translation type="vanished">تعیین اینکه آیا شبکه باید مسیر پیش فرض IPv6 را اعلان کند.</translation>
     </message>
     <message>
         <source>Opens a window to manage port forwarding rules.</source>
-        <translation type="obsolete">پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
+        <translation type="vanished">پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
     </message>
     <message>
         <source>&Port Forwarding</source>
@@ -3641,11 +3641,11 @@
     <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">وقتیکه انتخاب شده،ویرچوال باکس از تنظیمات پراکسی عرضه شده برای وظایفی مثل دانلود افزونه مهمان از شبکه یا بررسی برای بروزرسانی استفاده خواهد کرد.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،ویرچوال باکس از تنظیمات پراکسی عرضه شده برای وظایفی مثل دانلود افزونه مهمان از شبکه یا بررسی برای بروزرسانی استفاده خواهد کرد.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation type="obsolete">فعال کرد&ن پراکسی</translation>
+        <translation type="vanished">فعال کرد&ن پراکسی</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -3653,7 +3653,7 @@
     </message>
     <message>
         <source>Changes the proxy host.</source>
-        <translation type="obsolete">تغییر پراکسی میزبان.</translation>
+        <translation type="vanished">تغییر پراکسی میزبان.</translation>
     </message>
     <message>
         <source>&Port:</source>
@@ -3661,31 +3661,31 @@
     </message>
     <message>
         <source>Changes the proxy port.</source>
-        <translation type="obsolete">تغییر پورت پراکسی.</translation>
+        <translation type="vanished">تغییر پورت پراکسی.</translation>
     </message>
     <message>
         <source>When checked the authentication supplied will be used with the proxy server.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده تایید اعتبار عرضه شده با پراکسی سرور استفاده خواهد شد.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده تایید اعتبار عرضه شده با پراکسی سرور استفاده خواهد شد.</translation>
     </message>
     <message>
         <source>&Use authentication</source>
-        <translation type="obsolete">&استفاده از تایید اعتبار</translation>
+        <translation type="vanished">&استفاده از تایید اعتبار</translation>
     </message>
     <message>
         <source>User &name:</source>
-        <translation type="obsolete">نا&م کاربر:</translation>
+        <translation type="vanished">نا&م کاربر:</translation>
     </message>
     <message>
         <source>Changes the user name used for authentication.</source>
-        <translation type="obsolete">تغییر نام کاربر بکاررفته برای تایید اعتبار.</translation>
+        <translation type="vanished">تغییر نام کاربر بکاررفته برای تایید اعتبار.</translation>
     </message>
     <message>
         <source>Pass&word:</source>
-        <translation type="obsolete">رمز&عبور:</translation>
+        <translation type="vanished">رمز&عبور:</translation>
     </message>
     <message>
         <source>Changes the password used for authentication.</source>
-        <translation type="obsolete">تغییر رمزعبور بکاررفته برای تایید اعتبار.</translation>
+        <translation type="vanished">تغییر رمزعبور بکاررفته برای تایید اعتبار.</translation>
     </message>
     <message>
         <source>No proxy host is currently specified.</source>
@@ -3705,27 +3705,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>وقتیکه انتخاب شده،ویرچوال باکس از تنظیمات تشخیص خودکار پراکسی میزبان برای وظایفی مانند دانلود افزونه های مهمان از شبکه یا بررسی برای بروز رسانی استفاده می کند.</translation>
     </message>
     <message>
         <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>&تشخیص خودکار تنظیمات پراکسی میزبان</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>وقتیکه انتخاب شده،ویرچوال باکس از ارتباط مستقیم به اینترنت برای وظایفی مانند دانلود افزونه های مهمان از شبکه یا بررسی برای بروز رسانی استفاده می کند.</translation>
     </message>
     <message>
         <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <translation>&ارتباط مستقیم به اینترنت</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>وقتیکه انتخاب شده،ویرچوال باکس از تنظیمات پراکسی تعریف شده برای وظایفی مانند دانلود افزونه های مهمان از شبکه یا بررسی برای بروز رسانی استفاده می کند.</translation>
     </message>
     <message>
         <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>پیکربندی دستی پراکسی&</translation>
     </message>
 </context>
 <context>
@@ -3744,7 +3744,7 @@
     </message>
     <message>
         <source>Specifies 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="obsolete">مشخص میکند هرچند وقت یکبار بررسی نسخه جدید باید اجرا شود.توجه کنید که اگر میخواهید کاملا این بررسی را غیرفعال کنید،گزینه بالایی را غیرفعال کنید.</translation>
+        <translation type="vanished">مشخص میکند هرچند وقت یکبار بررسی نسخه جدید باید اجرا شود.توجه کنید که اگر میخواهید کاملا این بررسی را غیرفعال کنید،گزینه بالایی را غیرفعال کنید.</translation>
     </message>
     <message>
         <source>Next Check:</source>
@@ -3788,7 +3788,7 @@
     <message>
         <source>%1: %2</source>
         <comment>'key: value', like 'Name: MyVM'</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: %2</translation>
     </message>
 </context>
 <context>
@@ -3806,234 +3806,234 @@
     </message>
     <message>
         <source>Left </source>
-        <translation type="vanished">Left </translation>
+        <translation type="vanished">چپ </translation>
     </message>
     <message>
         <source>Right </source>
-        <translation type="vanished">Right </translation>
+        <translation type="vanished">راست</translation>
     </message>
     <message>
         <source>Left Shift</source>
-        <translation>Left Shift</translation>
+        <translation>شیفت چپ</translation>
     </message>
     <message>
         <source>Right Shift</source>
-        <translation>Right Shift</translation>
+        <translation>شیفت راست</translation>
     </message>
     <message>
         <source>Left Ctrl</source>
-        <translation>Left Ctrl</translation>
+        <translation>کنترل چپ</translation>
     </message>
     <message>
         <source>Right Ctrl</source>
-        <translation>Right Ctrl</translation>
+        <translation>کنترل راست</translation>
     </message>
     <message>
         <source>Left Alt</source>
-        <translation>Left Alt</translation>
+        <translation>آلت چپ</translation>
     </message>
     <message>
         <source>Right Alt</source>
-        <translation>Right Alt</translation>
+        <translation>آلت راست</translation>
     </message>
     <message>
         <source>Left WinKey</source>
-        <translation>Left WinKey</translation>
+        <translation>پنجره چپ</translation>
     </message>
     <message>
         <source>Right WinKey</source>
-        <translation>Right WinKey</translation>
+        <translation>پنجره راست</translation>
     </message>
     <message>
         <source>Menu key</source>
-        <translation>Menu key</translation>
+        <translation>منوی کلید</translation>
     </message>
     <message>
         <source>Alt Gr</source>
-        <translation>Alt Gr</translation>
+        <translation>آلت گراف</translation>
     </message>
     <message>
         <source>Caps Lock</source>
-        <translation>Caps Lock</translation>
+        <translation>کپس لاک</translation>
     </message>
     <message>
         <source>Scroll Lock</source>
-        <translation>Scroll Lock</translation>
+        <translation>اسکرول لاک</translation>
     </message>
     <message>
         <source>Host+</source>
-        <translation>Host+</translation>
+        <translation>میزبان+</translation>
     </message>
     <message>
         <source>None</source>
-        <translation>None</translation>
+        <translation>هیچیک</translation>
     </message>
     <message>
         <source>Left %1</source>
-        <translation type="unfinished"></translation>
+        <translation>چپ %1</translation>
     </message>
     <message>
         <source>Right %1</source>
-        <translation type="unfinished"></translation>
+        <translation>راست %1</translation>
     </message>
 </context>
 <context>
     <name>UIHostNetworkDetailsWidget</name>
     <message>
         <source>&Adapter</source>
-        <translation type="unfinished">&آداپتور</translation>
+        <translation>&آداپتور</translation>
     </message>
     <message>
         <source>&DHCP Server</source>
-        <translation type="unfinished">سر&ور DHCP</translation>
+        <translation>سر&ور DHCP</translation>
     </message>
     <message>
         <source>Configure Adapter &Automatically</source>
-        <translation type="unfinished"></translation>
+        <translation>&پیکربندی خودکار آداپتور</translation>
     </message>
     <message>
         <source>Configure Adapter &Manually</source>
-        <translation type="unfinished"></translation>
+        <translation>&پیکربندی دستی آداپتور</translation>
     </message>
     <message>
         <source>&IPv4 Address:</source>
-        <translation type="unfinished">آد&رس IPv4:</translation>
+        <translation>آد&رس IPv4:</translation>
     </message>
     <message>
         <source>Holds the host IPv4 address for this adapter.</source>
-        <translation type="unfinished">آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <translation>آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
         <source>IPv4 Network &Mask:</source>
-        <translation type="unfinished">ماسک ش&بکه IPv4:</translation>
+        <translation>ماسک ش&بکه IPv4:</translation>
     </message>
     <message>
         <source>Holds the host IPv4 network mask for this adapter.</source>
-        <translation type="unfinished">ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <translation>ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
         <source>I&Pv6 Address:</source>
-        <translation type="unfinished">آدرس I&Pv6:</translation>
+        <translation>آدرس I&Pv6:</translation>
     </message>
     <message>
         <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
-        <translation type="unfinished">آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <translation>آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
         <source>IPv6 Prefix &Length:</source>
-        <translation type="unfinished">طول ماسک ش&بکه IPv6:</translation>
+        <translation>طول ماسک ش&بکه IPv6:</translation>
     </message>
     <message>
         <source>Holds the host IPv6 prefix length for this adapter if IPv6 is supported.</source>
-        <translation type="unfinished">طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <translation>طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
         <source>Reset</source>
-        <translation type="unfinished">ریست</translation>
+        <translation>ریست</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال</translation>
     </message>
     <message>
         <source>Reset changes in current interface details</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات در جزئیات رابط فعلی</translation>
     </message>
     <message>
         <source>Apply changes in current interface details</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات در جزئیات رابط فعلی</translation>
     </message>
     <message>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات (%1)</translation>
     </message>
     <message>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات (%1)</translation>
     </message>
     <message>
         <source>&Enable Server</source>
-        <translation type="unfinished">فعالسازی &سرور</translation>
+        <translation>فعالسازی &سرور</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>وقتیکه انتخاب شده،سرور دی اِچ سی پی برای این شبکه در استارت آپ ماشین فعال میشود</translation>
     </message>
     <message>
         <source>Server Add&ress:</source>
-        <translation type="unfinished">آدرس سرور&:</translation>
+        <translation>آدرس سرور&:</translation>
     </message>
     <message>
         <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation>آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>Server &Mask:</source>
-        <translation type="unfinished">ماسک &سرور:</translation>
+        <translation>ماسک &سرور:</translation>
     </message>
     <message>
         <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation>ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>&Lower Address Bound:</source>
-        <translation type="unfinished">محدوده آدر&س پایین تر:</translation>
+        <translation>محدوده آدر&س پایین تر:</translation>
     </message>
     <message>
         <source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>&Upper Address Bound:</source>
-        <translation type="unfinished">محدوده آ&درس بالاتر:</translation>
+        <translation>محدوده آ&درس بالاتر:</translation>
     </message>
     <message>
         <source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <translation>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
         <source>Reset changes in current DHCP server details</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات در جزئیات سرور دی اِچ سی پی فعلی</translation>
     </message>
     <message>
         <source>Apply changes in current DHCP server details</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات در جزئیات سرور دی اِچ سی پی فعلی</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> is set to obtain the address automatically but the corresponding DHCP server is not enabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> تنظیم شده تا آدرس را خودکار بگیرد اما سرور دی اِچ سی پی متناظر فعال نشده است.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv4 address.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون آدرس IPv4 معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv4 network mask.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون ماسک شبکه IPv4 معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv6 address.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون آدرس IPv6 معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv6 prefix length.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون طول پیشوند IPv6 معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server address.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون آدرس سرور دی اِچ سی پی معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server mask.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون سرور ماسک دی اِچ سی پی معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server lower address bound.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> اکنون محدوده آدرس سرور پایین تر دی اِچ سی پی معتبر ندارد.</translation>
     </message>
     <message>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server upper address bound.</source>
-        <translation type="unfinished"></translation>
+        <translation>رابط میزبان <nobr><b>%1</b></nobr> محدوده آدرس بالاتر سرور دی اِچ سی پی معتبر ندارد.</translation>
     </message>
 </context>
 <context>
@@ -4041,198 +4041,198 @@
     <message>
         <source>Enable</source>
         <comment>DHCP Server</comment>
-        <translation type="unfinished">فعالسازی</translation>
+        <translation>فعالسازی</translation>
     </message>
     <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">آدرس IPv4</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">ماسک شبکه IPv4</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">آدرس IPv6</translation>
+        <translation>آدرس IPv6</translation>
     </message>
     <message>
         <source>IPv6 Prefix Length</source>
-        <translation type="unfinished">طول ماسک شبکه IPv6</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">سرور DHCP</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>&Network</source>
-        <translation type="unfinished">شبکه&</translation>
+        <translation>شبکه&</translation>
     </message>
     <message>
         <source>&Create</source>
-        <translation type="unfinished"></translation>
+        <translation>&ایجاد</translation>
     </message>
     <message>
         <source>Create Host-only Network (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ایجاد شبکه فقط-میزبان (%1)</translation>
     </message>
     <message>
         <source>Create new host-only network</source>
-        <translation type="unfinished"></translation>
+        <translation>ایجاد شبکه فقط-میزبان جدید</translation>
     </message>
     <message>
         <source>&Remove...</source>
-        <translation type="unfinished">ح&ذف...</translation>
+        <translation>ح&ذف...</translation>
     </message>
     <message>
         <source>Remove Host-only Network (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>حذف شبکه فقط-میزبان (%1)</translation>
     </message>
     <message>
         <source>Remove selected host-only network</source>
-        <translation type="unfinished"></translation>
+        <translation>حذف شبکه فقط-میزبان منتخب</translation>
     </message>
     <message>
         <source>&Properties...</source>
-        <translation type="unfinished"></translation>
+        <translation>&مشخصات...</translation>
     </message>
     <message>
         <source>Open Host-only Network Properties (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مشخصات شبکه فقط-میزبان (%1)</translation>
     </message>
     <message>
         <source>Open pane with selected host-only network properties</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن نوار با مشخصات شبکه فقط-میزبان منتخب</translation>
     </message>
     <message>
         <source>&Refresh...</source>
-        <translation type="unfinished"></translation>
+        <translation>&تازه سازی...</translation>
     </message>
     <message>
         <source>Refresh Host-only Networks (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>تازه سازی شبکه های فقط-میزبان (%1)</translation>
     </message>
     <message>
         <source>Refresh the list of host-only networks</source>
-        <translation type="unfinished"></translation>
+        <translation>تازه سازی لیست شبکه های فقط-میزبان</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">نام</translation>
+        <translation>نام</translation>
     </message>
     <message>
         <source>IPv4 Address/Mask</source>
-        <translation type="unfinished"></translation>
+        <translation>آی پی آدرس نـ4 /ماسک</translation>
     </message>
     <message>
         <source>IPv6 Address/Mask</source>
-        <translation type="unfinished"></translation>
+        <translation>آی پی آدرس نـ6 /ماسک</translation>
     </message>
     <message>
         <source>Host Network Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>مدیر شبکه میزبان</translation>
     </message>
     <message>
         <source>Reset</source>
-        <translation type="unfinished">ریست</translation>
+        <translation>ریست</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">بستن</translation>
+        <translation>بستن</translation>
     </message>
     <message>
         <source>Reset changes in current host network details</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات در جزئیات شبکه میزبان فعلی</translation>
     </message>
     <message>
         <source>Apply changes in current host network details</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات در جزئیات شبکه میزبان فعلی</translation>
     </message>
     <message>
         <source>Close dialog without saving</source>
-        <translation type="unfinished"></translation>
+        <translation>بستن پنجره بدون ذخیره سازی</translation>
     </message>
     <message>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات (%1)</translation>
     </message>
     <message>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات (%1)</translation>
     </message>
     <message>
         <source>Close Window (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>بستن پنجره (%1)</translation>
     </message>
 </context>
 <context>
     <name>UIHostNetworkManagerWidget</name>
     <message>
         <source>Networking</source>
-        <translation type="obsolete">شبکه سازی</translation>
+        <translation type="vanished">شبکه سازی</translation>
     </message>
     <message>
         <source>Adding network...</source>
@@ -4247,67 +4247,67 @@
     <name>UIHotKeyEditor</name>
     <message>
         <source>Left </source>
-        <translation type="obsolete">Left </translation>
+        <translation type="vanished">Left </translation>
     </message>
     <message>
         <source>Right </source>
-        <translation type="obsolete">Right </translation>
+        <translation type="vanished">Right </translation>
     </message>
     <message>
         <source>Right Alt</source>
-        <translation type="obsolete">Right Alt</translation>
+        <translation type="vanished">Right Alt</translation>
     </message>
     <message>
         <source>Left WinKey</source>
-        <translation type="obsolete">Left WinKey</translation>
+        <translation type="vanished">Left WinKey</translation>
     </message>
     <message>
         <source>Right WinKey</source>
-        <translation type="obsolete">Right WinKey</translation>
+        <translation type="vanished">Right WinKey</translation>
     </message>
     <message>
         <source>Menu key</source>
-        <translation type="obsolete">Menu key</translation>
+        <translation type="vanished">Menu key</translation>
     </message>
     <message>
         <source>Alt Gr</source>
-        <translation type="obsolete">Alt Gr</translation>
+        <translation type="vanished">Alt Gr</translation>
     </message>
     <message>
         <source>Caps Lock</source>
-        <translation type="obsolete">Caps Lock</translation>
+        <translation type="vanished">Caps Lock</translation>
     </message>
     <message>
         <source>Scroll Lock</source>
-        <translation type="obsolete">Scroll Lock</translation>
+        <translation type="vanished">Scroll Lock</translation>
     </message>
     <message>
         <source><key_%1></source>
-        <translation type="obsolete"><key_%1></translation>
+        <translation type="vanished"><key_%1></translation>
     </message>
     <message>
         <source>None</source>
-        <translation type="obsolete">None</translation>
+        <translation type="vanished">هیچکدام</translation>
     </message>
     <message>
         <source>Left Shift</source>
-        <translation type="obsolete">Left Shift</translation>
+        <translation type="vanished">Left Shift</translation>
     </message>
     <message>
         <source>Right Shift</source>
-        <translation type="obsolete">Right Shift</translation>
+        <translation type="vanished">Right Shift</translation>
     </message>
     <message>
         <source>Left Ctrl</source>
-        <translation type="obsolete">Left Ctrl</translation>
+        <translation type="vanished">Left Ctrl</translation>
     </message>
     <message>
         <source>Right Ctrl</source>
-        <translation type="obsolete">Right Ctrl</translation>
+        <translation type="vanished">Right Ctrl</translation>
     </message>
     <message>
         <source>Left Alt</source>
-        <translation type="obsolete">Left Alt</translation>
+        <translation type="vanished">Left Alt</translation>
     </message>
     <message>
         <source>Reset shortcut to default</source>
@@ -4369,17 +4369,17 @@
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p></source>
         <comment>HDD tooltip</comment>
-        <translation type="obsolete"><p style='white-space:pre'><nobr>فعالیت دیسک سخت مجازی را نشان میدهد:</nobr>%1</p></translation>
+        <translation type="vanished"><p style='white-space:pre'><nobr>فعالیت دیسک سخت مجازی را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p></source>
         <comment>CD/DVD tooltip</comment>
-        <translation type="obsolete"><p style='white-space:pre'><nobr>فعالیت های دستگاه سی دی/دی وی دی را نشان میدهد:</nobr>%1</p></translation>
+        <translation type="vanished"><p style='white-space:pre'><nobr>فعالیت های دستگاه سی دی/دی وی دی را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy devices:</nobr>%1</p></source>
         <comment>FD tooltip</comment>
-        <translation type="obsolete"><p style='white-space:pre'><nobr>فعالیت دستگاه فلاپی را نشان میدهد:</nobr>%1</p></translation>
+        <translation type="vanished"><p style='white-space:pre'><nobr>فعالیت دستگاه فلاپی را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source>
@@ -4419,7 +4419,7 @@
     <message>
         <source><br><nobr><b>USB Controller is disabled</b></nobr></source>
         <comment>USB device tooltip</comment>
-        <translation type="obsolete"><br><nobr><b>کنترلر یو اِس بی غیرفعال شده است</b></nobr></translation>
+        <translation type="vanished"><br><nobr><b>کنترلر یو اِس بی غیرفعال شده است</b></nobr></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p></source>
@@ -4442,20 +4442,20 @@
     </message>
     <message>
         <source>Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>).</source>
-        <translation type="obsolete">هرگاه صفحه کلید توسط سیستم عامل مهمان ضیط شده باشد (<img src=:/hostkey_captured_16px.png/>) یا نه،را نشان میدهد (<img src=:/hostkey_16px.png/>).</translation>
+        <translation type="vanished">هرگاه صفحه کلید توسط سیستم عامل مهمان ضیط شده باشد (<img src=:/hostkey_captured_16px.png/>) یا نه،را نشان میدهد (<img src=:/hostkey_16px.png/>).</translation>
     </message>
     <message>
         <source>Indicates whether the Remote Desktop Server is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>).</source>
-        <translation type="obsolete">هرگاه سرور ریموت دسکتاپ فعال شده باشد یا نه را (<img src=:/vrdp_16px.png/>) نشان میدهد (<img src=:/vrdp_disabled_16px.png/>).</translation>
+        <translation type="vanished">هرگاه سرور ریموت دسکتاپ فعال شده باشد یا نه را (<img src=:/vrdp_16px.png/>) نشان میدهد (<img src=:/vrdp_disabled_16px.png/>).</translation>
     </message>
     <message>
         <source><hr>The Remote Desktop Server is listening on port %1</source>
-        <translation type="obsolete"><hr>سرور ریموت دسکتاپ گوش میکند به پورت %1</translation>
+        <translation type="vanished"><hr>سرور ریموت دسکتاپ گوش میکند به پورت %1</translation>
     </message>
     <message>
         <source>Additional feature status:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr><br><nobr><b>%5:</b>&nbsp;%6%</nobr></source>
         <comment>Virtualization Stuff LED</comment>
-        <translation type="obsolete">وضعیت ویزگی های مختلف بکاررفته در این ماشین مجازی را نشان میدهد:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr><br><nobr><b>%5:</b>&nbsp;%6%</nobr></translation>
+        <translation type="vanished">وضعیت ویزگی های مختلف بکاررفته در این ماشین مجازی را نشان میدهد:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr><br><nobr><b>%5:</b>&nbsp;%6%</nobr></translation>
     </message>
     <message>
         <source><nobr>Indicates video capturing activity:</nobr><br>%1</source>
@@ -4498,131 +4498,181 @@
         <translation type="vanished">اگر صفحه کلید میزبان توسط سیستم عامل مهمان ضبط شده باشد را نشان میدهد:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;صفحه کلید ضبط نشده است</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;صفحه کلید ضبط شده است</nobr></translation>
     </message>
     <message>
+        <source><nobr>Indicates the activity of the hard disks:</nobr>%1</source>
+        <comment>HD tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت دیسک سخت را نشان می دهد:</nobr>%1</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the optical drives:</nobr>%1</source>
+        <comment>CD tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت درایوهای نوری را نشان می دهد:</nobr>%1</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the floppy drives:</nobr>%1</source>
+        <comment>FD tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت درایو فلاپی را نشان می دهد:</nobr>%1</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the network interfaces:</nobr>%1</source>
+        <comment>Network tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت رابط های شبکه را نشان می دهد:</nobr>%1</translation>
+    </message>
+    <message>
         <source>Adapter %1 (%2)</source>
         <comment>Network tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>آداپتور %1 (%2)</translation>
     </message>
     <message>
         <source>IP</source>
         <comment>Network tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>آی پی</translation>
     </message>
     <message>
         <source>Cable</source>
         <comment>Network tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>کابل</translation>
     </message>
     <message>
         <source>Connected</source>
         <comment>cable (Network tooltip)</comment>
-        <translation type="unfinished"></translation>
+        <translation>متصل شده</translation>
     </message>
     <message>
         <source>Disconnected</source>
         <comment>cable (Network tooltip)</comment>
-        <translation type="unfinished">قطع شده است</translation>
+        <translation>قطع شده است</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the attached USB devices:</nobr>%1</source>
+        <comment>USB tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت دستگاه یو اِس بی متصل شده را نشان می دهد:</nobr>%1</translation>
     </message>
     <message>
         <source>No USB devices attached</source>
         <comment>USB tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>دستگه یو اِس بی ضمیمه نشده است</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</source>
+        <comment>Shared folders tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت پوشه های اشتراکی ماشین را نشان می دهد:</nobr>%1</translation>
     </message>
     <message>
         <source>No shared folders</source>
         <comment>Shared folders tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>پوشه های اشتراکی ندارد</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the display:</nobr>%1</source>
+        <comment>Display tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت نمایشگر را نشان میدهد:</nobr>%1</translation>
     </message>
     <message>
         <source>Video memory</source>
         <comment>Display tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>حافظه ویدیو</translation>
     </message>
     <message>
         <source>Screens</source>
         <comment>Display tooltip</comment>
-        <translation type="unfinished">نمایشگر</translation>
+        <translation>نمایشگر</translation>
     </message>
     <message>
         <source>3D acceleration</source>
         <comment>Display tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>شتاب دهنده 3 بعدی</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates video capturing activity:</nobr>%1</source>
+        <comment>Video capture tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت ضبط ویدیو را نشان می دهد:</nobr>%1</translation>
     </message>
     <message>
         <source>Video capture disabled</source>
         <comment>Video capture tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>ضبط ویدیو غیرفعال شده است</translation>
     </message>
     <message>
         <source>Video capture file</source>
         <comment>Video capture tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>فایل ضبط ویدیو</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the additional features:</nobr>%1</source>
+        <comment>Virtualization Stuff LED</comment>
+        <translation type="vanished"><nobr>فعالیت ویژگی های اضافه را نشان می دهد:</nobr>%1</translation>
     </message>
     <message>
         <source>Indicates whether the host mouse pointer is captured by the guest OS:%1</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>نشان میدهد که نشانگر ماوس میزبان توسط سیستم عامل مهمان ضبط شده است:%1</translation>
     </message>
     <message>
         <source>pointer is not captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>نشانگر ضبط نشده است</translation>
     </message>
     <message>
         <source>pointer is captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>نشانگر ضبط شده است</translation>
     </message>
     <message>
         <source>mouse integration (MI) is On</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>یکپارچه سازی ماوس (اِم آی) روشن است</translation>
     </message>
     <message>
         <source>MI is Off, pointer is captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>یکپارچه سازی ماوس خاموش است،نشانگر ضبط شده است</translation>
     </message>
     <message>
         <source>MI is Off, pointer is not captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>یکپارچه سازی ماوس خاموش است،نشانگر ضبط نشده است</translation>
     </message>
     <message>
         <source>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>توجه کنید که ویژگی یکپارچه سازی ماوس نیاز به افزونه مهمان در سیستم عامل مهمان دارد.</translation>
     </message>
     <message>
         <source>Indicates whether the host keyboard is captured by the guest OS:%1</source>
         <comment>Keyboard tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>نشان میدهد که صفحه کلید میزبان توسط سیستم عامل مهمان ضبط شده است:%1</translation>
     </message>
     <message>
         <source>keyboard is not captured</source>
         <comment>Keyboard tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>صفحه کلید ضبط نشده است</translation>
     </message>
     <message>
         <source>keyboard is captured</source>
         <comment>Keyboard tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>صفحه کلید ضبط شده است</translation>
+    </message>
+    <message>
+        <source><nobr>Indicates the activity of the audio device:</nobr>%1</source>
+        <comment>Audio tooltip</comment>
+        <translation type="vanished"><nobr>فعالیت دستگاه صوتی را نشان می دهد:</nobr>%1</translation>
     </message>
 </context>
 <context>
     <name>UIInformationDataAudio</name>
     <message>
         <source>Audio</source>
-        <translation type="obsolete">صدا</translation>
+        <translation type="vanished">صدا</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>
 </context>
 <context>
@@ -4630,62 +4680,62 @@
     <message>
         <source>Display</source>
         <comment>details report</comment>
-        <translation type="obsolete">نمایش</translation>
+        <translation type="vanished">نمایش</translation>
     </message>
     <message>
         <source>Video Memory</source>
         <comment>details report</comment>
-        <translation type="unfinished">حافظه ویدیو</translation>
+        <translation>حافظه ویدیو</translation>
     </message>
     <message>
         <source>Screens</source>
         <comment>details report</comment>
-        <translation type="unfinished">نمایشگر</translation>
+        <translation>نمایشگر</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>3D Acceleration</source>
         <comment>details report</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>شتاب دهنده ویدیو دو بعدی</translation>
     </message>
     <message>
         <source>Remote Desktop Server Port</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished">پورت سرور ریموت دسکتاپ</translation>
+        <translation>پورت سرور ریموت دسکتاپ</translation>
     </message>
     <message>
         <source>Remote Desktop Server</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished">سرور ریموت دسکتاپ</translation>
+        <translation>سرور ریموت دسکتاپ</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished">غیرفعال شده</translation>
+        <translation>غیرفعال شده</translation>
     </message>
 </context>
 <context>
@@ -4693,70 +4743,70 @@
     <message>
         <source>General</source>
         <comment>details report</comment>
-        <translation type="obsolete">عمومی</translation>
+        <translation type="vanished">عمومی</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>
 </context>
 <context>
     <name>UIInformationDataNetwork</name>
     <message>
         <source>Network</source>
-        <translation type="obsolete">شبکه</translation>
+        <translation type="vanished">شبکه</translation>
     </message>
     <message>
         <source>Bridged adapter, %1</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished">آداپتور پل شده، %1</translation>
+        <translation>آداپتور پل شده، %1</translation>
     </message>
     <message>
         <source>Internal network, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished">شبه داخلی, '%1'</translation>
+        <translation>شبه داخلی, '%1'</translation>
     </message>
     <message>
         <source>Host-only adapter, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished">آداپتور فقط-میزبان '%1'</translation>
+        <translation>آداپتور فقط-میزبان '%1'</translation>
     </message>
     <message>
         <source>Generic, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished">کلی، '%1'</translation>
+        <translation>کلی، '%1'</translation>
     </message>
     <message>
         <source>NAT network, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished">شبکه NAT، '%1'</translation>
+        <translation>شبکه NAT، '%1'</translation>
     </message>
     <message>
         <source>Adapter %1</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished">آداپتور %1</translation>
+        <translation>آداپتور %1</translation>
     </message>
 </context>
 <context>
     <name>UIInformationDataNetworkStatistics</name>
     <message>
         <source>Data Transmitted</source>
-        <translation type="unfinished">داده اِرسال شده</translation>
+        <translation>داده اِرسال شده</translation>
     </message>
     <message>
         <source>Data Received</source>
-        <translation type="unfinished">داده دریافتی</translation>
+        <translation>داده دریافتی</translation>
     </message>
     <message>
         <source>Network Statistics</source>
         <comment>details report</comment>
-        <translation type="obsolete">آمار شبکه</translation>
+        <translation type="vanished">آمار شبکه</translation>
     </message>
 </context>
 <context>
@@ -4764,17 +4814,17 @@
     <message>
         <source>Parallel Ports</source>
         <comment>details report</comment>
-        <translation type="obsolete">پورت پارالل</translation>
+        <translation type="vanished">پورت پارالل</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details report (parallel ports)</comment>
-        <translation type="obsolete">پورت %1</translation>
+        <translation type="vanished">پورت %1</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (parallel ports)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
 </context>
 <context>
@@ -4782,84 +4832,84 @@
     <message>
         <source>Runtime Attributes</source>
         <comment>details report</comment>
-        <translation type="obsolete">صفات زمان اِجرا</translation>
+        <translation type="vanished">صفات زمان اِجرا</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
-        <translation type="unfinished">تشخیص داده نشده است</translation>
+        <translation>تشخیص داده نشده است</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest os type</comment>
-        <translation type="unfinished">تشخیص داده نشده است</translation>
+        <translation>تشخیص داده نشده است</translation>
     </message>
     <message>
         <source>Not Available</source>
         <comment>details report (VRDE server port)</comment>
-        <translation type="unfinished">موجود نیست</translation>
+        <translation>موجود نیست</translation>
     </message>
     <message>
         <source>Screen Resolution</source>
-        <translation type="unfinished">وضوح صفحه</translation>
+        <translation>وضوح صفحه</translation>
     </message>
     <message>
         <source>VM Uptime</source>
-        <translation type="unfinished">مدت فعالیت ماشین مجازی</translation>
+        <translation>مدت فعالیت ماشین مجازی</translation>
     </message>
     <message>
         <source>Clipboard Mode</source>
-        <translation type="unfinished">حالت کلیپ برد</translation>
+        <translation>حالت کلیپ برد</translation>
     </message>
     <message>
         <source>Drag and Drop Mode</source>
-        <translation type="unfinished">حالت کشیدن و رها کردن</translation>
+        <translation>حالت کشیدن و رها کردن</translation>
     </message>
     <message>
         <source>VT-x/AMD-V</source>
         <comment>details report</comment>
-        <translation type="unfinished">VT-x/AMD-V</translation>
+        <translation>VT-x/AMD-V</translation>
     </message>
     <message>
         <source>Nested Paging</source>
         <comment>details report</comment>
-        <translation type="unfinished">صفحه بندی تودرتو</translation>
+        <translation>صفحه بندی تودرتو</translation>
     </message>
     <message>
         <source>Unrestricted Execution</source>
         <comment>details report</comment>
-        <translation type="unfinished">اِجرای بدون محدودیت</translation>
+        <translation>اِجرای بدون محدودیت</translation>
     </message>
     <message>
         <source>Paravirtualization Interface</source>
         <comment>details report</comment>
-        <translation type="unfinished">رابط پارا مجازی سازی</translation>
+        <translation>رابط پارا مجازی سازی</translation>
     </message>
     <message>
         <source>Guest Additions</source>
-        <translation type="unfinished">افزونه مهمان</translation>
+        <translation>افزونه مهمان</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
         <comment>details report</comment>
-        <translation type="unfinished">نوع سیستم عامل مهمان</translation>
+        <translation>نوع سیستم عامل مهمان</translation>
     </message>
     <message>
         <source>Remote Desktop Server Port</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished">پورت سرور ریموت دسکتاپ</translation>
+        <translation>پورت سرور ریموت دسکتاپ</translation>
     </message>
 </context>
 <context>
     <name>UIInformationDataSerialPorts</name>
     <message>
         <source>Serial Ports</source>
-        <translation type="obsolete">پورت سریال</translation>
+        <translation type="vanished">پورت سریال</translation>
     </message>
     <message>
         <source>Port %1</source>
         <comment>details report (serial ports)</comment>
-        <translation type="unfinished">پورت %1</translation>
+        <translation>پورت %1</translation>
     </message>
 </context>
 <context>
@@ -4867,51 +4917,51 @@
     <message>
         <source>Shared Folders</source>
         <comment>details report</comment>
-        <translation type="obsolete">پوشه های اشتراکی</translation>
+        <translation type="vanished">پوشه های اشتراکی</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>details report (shared folders)</comment>
-        <translation type="unfinished">پوشه های اشتراکی</translation>
+        <translation>پوشه های اشتراکی</translation>
     </message>
 </context>
 <context>
     <name>UIInformationDataStorage</name>
     <message>
         <source>Storage</source>
-        <translation type="obsolete">ذخیره ساز</translation>
+        <translation type="vanished">ذخیره ساز</translation>
     </message>
     <message>
         <source>(Optical Drive)</source>
-        <translation type="unfinished">(درایو نوری)</translation>
+        <translation>(درایو نوری)</translation>
     </message>
 </context>
 <context>
     <name>UIInformationDataStorageStatistics</name>
     <message>
         <source>DMA Transfers</source>
-        <translation type="unfinished">انتقالات DMA</translation>
+        <translation>انتقالات DMA</translation>
     </message>
     <message>
         <source>PIO Transfers</source>
-        <translation type="unfinished">انتقالات PIO</translation>
+        <translation>انتقالات PIO</translation>
     </message>
     <message>
         <source>Data Read</source>
-        <translation type="unfinished">خواندن داده</translation>
+        <translation>خواندن داده</translation>
     </message>
     <message>
         <source>Data Written</source>
-        <translation type="unfinished">نوشتن داده</translation>
+        <translation>نوشتن داده</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
         <comment>details report</comment>
-        <translation type="obsolete">آمار ذخیره ساز</translation>
+        <translation type="vanished">آمار ذخیره ساز</translation>
     </message>
     <message>
         <source>Requests</source>
-        <translation type="unfinished"></translation>
+        <translation>درخواست</translation>
     </message>
 </context>
 <context>
@@ -4919,107 +4969,107 @@
     <message>
         <source>System</source>
         <comment>details report</comment>
-        <translation type="obsolete">سیستم</translation>
+        <translation type="vanished">سیستم</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>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>Base Memory</source>
         <comment>details report</comment>
-        <translation type="unfinished">حافظه پایه</translation>
+        <translation>حافظه پایه</translation>
     </message>
     <message>
         <source>Processor(s)</source>
         <comment>details report</comment>
-        <translation type="unfinished">پردازشگر(ها)</translation>
+        <translation>پردازشگر(ها)</translation>
     </message>
     <message>
         <source>Execution Cap</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">ACPI</translation>
+        <translation>ACPI</translation>
     </message>
     <message>
         <source>I/O APIC</source>
         <comment>details report</comment>
-        <translation type="unfinished">I/O APIC</translation>
+        <translation>I/O APIC</translation>
     </message>
     <message>
         <source>PAE/NX</source>
         <comment>details report</comment>
-        <translation type="unfinished">PAE/NX</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>VT-x/AMD-V</source>
         <comment>details report</comment>
-        <translation type="unfinished">VT-x/AMD-V</translation>
+        <translation>VT-x/AMD-V</translation>
     </message>
     <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>Nested Paging</source>
         <comment>details report</comment>
-        <translation type="unfinished">صفحه بندی تودرتو</translation>
+        <translation>صفحه بندی تودرتو</translation>
     </message>
     <message>
         <source>Paravirtualization Interface</source>
         <comment>details report</comment>
-        <translation type="unfinished">رابط پارا مجازی سازی</translation>
+        <translation>رابط پارا مجازی سازی</translation>
     </message>
 </context>
 <context>
@@ -5027,22 +5077,22 @@
     <message>
         <source>USB</source>
         <comment>details report</comment>
-        <translation type="obsolete">یو اِس بی</translation>
+        <translation type="vanished">یو اِس بی</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (USB)</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">%1 (%2 فعال)</translation>
+        <translation>%1 (%2 فعال)</translation>
     </message>
 </context>
 <context>
@@ -5050,12 +5100,12 @@
     <message>
         <source>%1, %2</source>
         <comment>col.2 text, col.1 name</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2</translation>
     </message>
     <message>
         <source>%1</source>
         <comment>col.2 text</comment>
-        <translation type="unfinished">%1% {1?}</translation>
+        <translation>%1% {1?}</translation>
     </message>
 </context>
 <context>
@@ -5069,35 +5119,35 @@
     <name>UIMachineLogic</name>
     <message>
         <source>Preview Monitor %1</source>
-        <translation type="obsolete">پیشنمایش مانیتور %1</translation>
+        <translation type="vanished">پیشنمایش مانیتور %1</translation>
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="obsolete">ضبط وضعیت %1</translation>
+        <translation type="vanished">ضبط وضعیت %1</translation>
     </message>
     <message>
         <source>No CD/DVD Devices Attached</source>
-        <translation type="obsolete">دستگاه سی دی/دی وی دی ضمیمه نشده است</translation>
+        <translation type="vanished">دستگاه سی دی/دی وی دی ضمیمه نشده است</translation>
     </message>
     <message>
         <source>No CD/DVD devices attached to that VM</source>
-        <translation type="obsolete">دستگاه سی دی/دی وی دی به ماشین مجازی ضمیمه نشده است</translation>
+        <translation type="vanished">دستگاه سی دی/دی وی دی به ماشین مجازی ضمیمه نشده است</translation>
     </message>
     <message>
         <source>No Floppy Devices Attached</source>
-        <translation type="obsolete">دستگاه فلاپی ضمیمه نشده است</translation>
+        <translation type="vanished">دستگاه فلاپی ضمیمه نشده است</translation>
     </message>
     <message>
         <source>No floppy devices attached to that VM</source>
-        <translation type="obsolete">دستگاه فلاپی به ماشین مجازی متصل نشده است</translation>
+        <translation type="vanished">دستگاه فلاپی به ماشین مجازی متصل نشده است</translation>
     </message>
     <message>
         <source>No USB Devices Connected</source>
-        <translation type="obsolete">دستگاه یو اِس بی متصل نشده است</translation>
+        <translation type="vanished">دستگاه یو اِس بی متصل نشده است</translation>
     </message>
     <message>
         <source>No supported devices connected to the host PC</source>
-        <translation type="obsolete">دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <translation type="vanished">دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
     <message>
         <source>Select a filename for the screenshot ...</source>
@@ -5105,19 +5155,19 @@
     </message>
     <message>
         <source>No Webcams Connected</source>
-        <translation type="obsolete">وب کمی متصل نشده است</translation>
+        <translation type="vanished">وب کمی متصل نشده است</translation>
     </message>
     <message>
         <source>No supported webcams connected to the host PC</source>
-        <translation type="obsolete">وب کم پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <translation type="vanished">وب کم پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
     <message>
         <source>Connect Network Adapter</source>
-        <translation type="obsolete">اتصال به آداپتور شبکه</translation>
+        <translation type="vanished">اتصال به آداپتور شبکه</translation>
     </message>
     <message>
         <source>Connect Network Adapter %1</source>
-        <translation type="obsolete">اتصال به آداپتور شبکه %1</translation>
+        <translation type="vanished">اتصال به آداپتور شبکه %1</translation>
     </message>
 </context>
 <context>
@@ -5136,7 +5186,7 @@
     </message>
     <message>
         <source>Controls 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="obsolete">درایور خروجی صدا را کنترل میکند. گزینه <b>درایور صوتی تهی</b> باعث میشود که مهمان کارت صوتی را مشاهده کند، هر چند هر دسترسی به آن چشمپوشی میشود.</translation>
+        <translation type="vanished">درایور خروجی صدا را کنترل میکند. گزینه <b>درایور صوتی تهی</b> باعث میشود که مهمان کارت صوتی را مشاهده کند، هر چند هر دسترسی به آن چشمپوشی میشود.</translation>
     </message>
     <message>
         <source>Audio &Controller:</source>
@@ -5152,38 +5202,38 @@
     </message>
     <message>
         <source>Extended Features:</source>
-        <translation type="unfinished">ویژگی تمدید یافته:</translation>
+        <translation>ویژگی تمدید یافته:</translation>
     </message>
     <message>
         <source>When checked, output to the virtual audio device will reach the host. Otherwise the guest is muted.</source>
-        <translation type="unfinished"></translation>
+        <translation>وقتیکه انتخاب شده،خروجی به دستگاه صدای مجازی میزبان خواهد رسید.در غیر اینصورت مهمان بی صدا خواهد بود.</translation>
     </message>
     <message>
         <source>Enable Audio &Output</source>
-        <translation type="unfinished"></translation>
+        <translation>فعالسازی صدای خروجی&</translation>
     </message>
     <message>
         <source>When checked, the guest will be able to capture audio input from the host. Otherwise the guest will capture only silence.</source>
-        <translation type="unfinished"></translation>
+        <translation>وقتیکه انتخاب شده، مهمان قادر به ضبط صدای ورودی از میزبان خواهد بود.در غیر اینصورت مهمان فقط سکوت را ضبط می کند.</translation>
     </message>
     <message>
         <source>Enable Audio &Input</source>
-        <translation type="unfinished"></translation>
+        <translation>فعالسازی صدای ورودی&</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsDisplay</name>
     <message>
         <source>you have assigned less than <b>%1</b> of video memory which is the minimum amount required to switch the virtual machine to fullscreen or seamless mode.</source>
-        <translation type="obsolete">شما کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده اید،که آن کمترین مقدار موردنیاز برای رفتن به حالت تمام صفحه یا حالت یکپارچه هست.</translation>
+        <translation type="vanished">شما کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده اید،که آن کمترین مقدار موردنیاز برای رفتن به حالت تمام صفحه یا حالت یکپارچه هست.</translation>
     </message>
     <message>
         <source><qt>%1&nbsp;MB</qt></source>
-        <translation type="obsolete"><qt>%1&nbsp;مگابایت</qt></translation>
+        <translation type="vanished"><qt>%1&nbsp;مگابایت</qt></translation>
     </message>
     <message>
         <source>&Video</source>
-        <translation type="obsolete">وید&یو</translation>
+        <translation type="vanished">وید&یو</translation>
     </message>
     <message>
         <source>Video &Memory:</source>
@@ -5231,7 +5281,7 @@
     </message>
     <message>
         <source>Defines the VRDP authentication method.</source>
-        <translation type="obsolete">روش تایید اعتبار VRDP را تعریف میکند.</translation>
+        <translation type="vanished">روش تایید اعتبار VRDP را تعریف میکند.</translation>
     </message>
     <message>
         <source>Authentication &Timeout:</source>
@@ -5239,11 +5289,11 @@
     </message>
     <message>
         <source>Specifies the timeout for guest authentication, in milliseconds.</source>
-        <translation type="obsolete">مدت زمان را برای تایید اعتبار مهمان مشخص میکند،در هزارم ثانیه.</translation>
+        <translation type="vanished">مدت زمان را برای تایید اعتبار مهمان مشخص میکند،در هزارم ثانیه.</translation>
     </message>
     <message>
         <source>you have assigned less than <b>%1</b> of video memory which is the minimum amount required for HD Video to be played efficiently.</source>
-        <translation type="obsolete">شما کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده اید که آن کمترین مقدار موردنیاز برای ویدیو اِچ دی برای پخش موثر هست.</translation>
+        <translation type="vanished">شما کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده اید که آن کمترین مقدار موردنیاز برای ویدیو اِچ دی برای پخش موثر هست.</translation>
     </message>
     <message>
         <source>When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host.</source>
@@ -5255,7 +5305,7 @@
     </message>
     <message>
         <source>The VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
-        <translation type="obsolete">شماره پورت سرور VRDP. میتوانید <tt>0</tt> (صفر) را انتخاب کنید، برای انتخاب پورت 3389، پورت استاندارد برای RDP.</translation>
+        <translation type="vanished">شماره پورت سرور VRDP. میتوانید <tt>0</tt> (صفر) را انتخاب کنید، برای انتخاب پورت 3389، پورت استاندارد برای RDP.</translation>
     </message>
     <message>
         <source>Mo&nitor Count:</source>
@@ -5267,11 +5317,11 @@
     </message>
     <message>
         <source><qt>%1</qt></source>
-        <translation type="obsolete"><qt>%1</qt></translation>
+        <translation type="vanished"><qt>%1</qt></translation>
     </message>
     <message>
         <source>Specifies whether multiple simultaneous connections to the VM are permitted.</source>
-        <translation type="obsolete">تعیین اینکه چه موقع اتصالات چندگانه همزمان به ماشین مجازی را اجازه میدهد.</translation>
+        <translation type="vanished">تعیین اینکه چه موقع اتصالات چندگانه همزمان به ماشین مجازی را اجازه میدهد.</translation>
     </message>
     <message>
         <source>&Allow Multiple Connections</source>
@@ -5279,15 +5329,15 @@
     </message>
     <message>
         <source>you have 3D Acceleration enabled for a operation system which uses the WDDM video driver. For maximal performance set the guest VRAM to at least <b>%1</b>.</source>
-        <translation type="obsolete">شما شتاب دهنده سه بعدی را برای یک عملکرد سیستم که از درایو ویدیو WDDM استفاده میکند فعال کرده اید. برای حداکثر کارایی VRAM مهمان را حداقل روی <b>%1</b> تنظیم کنید.</translation>
+        <translation type="vanished">شما شتاب دهنده سه بعدی را برای یک عملکرد سیستم که از درایو ویدیو WDDM استفاده میکند فعال کرده اید. برای حداکثر کارایی VRAM مهمان را حداقل روی <b>%1</b> تنظیم کنید.</translation>
     </message>
     <message>
         <source>you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled.</source>
-        <translation type="obsolete">شما شتاب دهنده ویدیو دو بعدی را فعال کرده اید.چنانکه شتاب دهنده ویدیو دو بعدی فقط برای ویندوز مهمان ها پشتیبانی شده است،این ویزگی غیرفعال خواهد شد.</translation>
+        <translation type="vanished">شما شتاب دهنده ویدیو دو بعدی را فعال کرده اید.چنانکه شتاب دهنده ویدیو دو بعدی فقط برای ویندوز مهمان ها پشتیبانی شده است،این ویزگی غیرفعال خواهد شد.</translation>
     </message>
     <message>
         <source>you enabled 3D acceleration. However, 3D acceleration is not working on the current host setup so you will not be able to start the VM.</source>
-        <translation type="obsolete">شما شتاب دهنده سه بعدی را فعال کرده اید. هرچند، شتاب دهنده سه بعدی در راه اندازی میزبان فعلی کار نخواهد کرد بنابراین شما قادر به شروع ماشین مجازی نیستید.</translation>
+        <translation type="vanished">شما شتاب دهنده سه بعدی را فعال کرده اید. هرچند، شتاب دهنده سه بعدی در راه اندازی میزبان فعلی کار نخواهد کرد بنابراین شما قادر به شروع ماشین مجازی نیستید.</translation>
     </message>
     <message>
         <source>Video &Capture</source>
@@ -5307,7 +5357,7 @@
     </message>
     <message>
         <source>This setting determines the filename VirtualBox uses to save the recorded content.</source>
-        <translation type="obsolete">این گزینه نام فایلی را که ویرچوال باکس برای محتوای ضبط شده استفاده میکند را تعیین میکند.</translation>
+        <translation type="vanished">این گزینه نام فایلی را که ویرچوال باکس برای محتوای ضبط شده استفاده میکند را تعیین میکند.</translation>
     </message>
     <message>
         <source>Frame &Size:</source>
@@ -5315,15 +5365,15 @@
     </message>
     <message>
         <source>This setting determines the resolution (frame size) of the recorded video.</source>
-        <translation type="obsolete">این تنظیم نسبت دید (اندازه فریم) ویدیو ضبط شده را تعیین میکند.</translation>
+        <translation type="vanished">این تنظیم نسبت دید (اندازه فریم) ویدیو ضبط شده را تعیین میکند.</translation>
     </message>
     <message>
         <source>This setting determines the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-        <translation type="obsolete">این تنظیم نسبت دید <b>اُفقی</b> (عرض فریم) ویدیو ضبط شده را تعیین میکند.</translation>
+        <translation type="vanished">این تنظیم نسبت دید <b>اُفقی</b> (عرض فریم) ویدیو ضبط شده را تعیین میکند.</translation>
     </message>
     <message>
         <source>This setting determines the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-        <translation type="obsolete">این تنظیم نسبت دید <b>عمودی</b> (ارتفاع فریم) ویدیو ضبط شده را تعیین میکند.</translation>
+        <translation type="vanished">این تنظیم نسبت دید <b>عمودی</b> (ارتفاع فریم) ویدیو ضبط شده را تعیین میکند.</translation>
     </message>
     <message>
         <source>&Frame Rate:</source>
@@ -5331,7 +5381,7 @@
     </message>
     <message>
         <source>This setting determines 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="obsolete">این تنظیم حداکثر تعداد<b>فریم بر ثانیه</b> تعیین میکند. فریم های اضافی رد خواهد شد. کاهش این مقدار باعث افزایش تعداد فریم های رد شده میشود درنهایت حجم فایل کم میشود.</translation>
+        <translation type="vanished">این تنظیم حداکثر تعداد<b>فریم بر ثانیه</b> تعیین میکند. فریم های اضافی رد خواهد شد. کاهش این مقدار باعث افزایش تعداد فریم های رد شده میشود درنهایت حجم فایل کم میشود.</translation>
     </message>
     <message>
         <source>&Quality:</source>
@@ -5339,11 +5389,11 @@
     </message>
     <message>
         <source>This setting determines the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="obsolete">این تنظیم <b>کیفیت</b> را تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
+        <translation type="vanished">این تنظیم <b>کیفیت</b> را تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
     </message>
     <message>
         <source>This setting determines 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="obsolete">این تنظیم نرخ بیت را در <b>کیلوبیت بر ثانیه</b> تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
+        <translation type="vanished">این تنظیم نرخ بیت را در <b>کیلوبیت بر ثانیه</b> تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
     </message>
     <message>
         <source>&Screens:</source>
@@ -5355,7 +5405,7 @@
     </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 fullscreen or seamless mode.</source>
-        <translation type="obsolete">اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن کمترین مقدار موردنیاز برای رفتن به حالت تمام صفحه یا حالت یکپارچه هست.</translation>
+        <translation type="vanished">اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن کمترین مقدار موردنیاز برای رفتن به حالت تمام صفحه یا حالت یکپارچه هست.</translation>
     </message>
     <message>
         <source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required for High Definition Video to be played efficiently.</source>
@@ -5363,7 +5413,7 @@
     </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="obsolete">ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند و سیستم عامل اشارع دارد که آن به ویندوز ویستا به بعد تنظیم شده است. برای بهترین کارایی باید حافظه ویدیویی ماشین را حداقل به b>%1</b> تنظیم کنید.</translation>
+        <translation type="vanished">ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند و سیستم عامل اشارع دارد که آن به ویندوز ویستا به بعد تنظیم شده است. برای بهترین کارایی باید حافظه ویدیویی ماشین را حداقل به b>%1</b> تنظیم کنید.</translation>
     </message>
     <message>
         <source>The virtual machine is set up to use Video Stream Acceleration. As this feature only works with Windows guest systems it will be disabled.</source>
@@ -5414,11 +5464,11 @@
     </message>
     <message>
         <source>Enable video recording for screen %1.</source>
-        <translation type="obsolete">ضبط ویدیو برای صفحه نمایش %1 فعال شود.</translation>
+        <translation type="vanished">ضبط ویدیو برای صفحه نمایش %1 فعال شود.</translation>
     </message>
     <message>
         <source>Remote Display is currently enabled for this virtual machine. However, this requires the <b>%1</b> 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="obsolete">نمایش ریموت اکنون برای این ماشین مجازی فعال شده است. هرچند، نیاز دارد که <b>%1</b> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود نمایید،درغیر اینصورت ماشین مجازی با نمایش ریموت غیرفعال شده اِجرا خواهد شد</translation>
+        <translation type="vanished">نمایش ریموت اکنون برای این ماشین مجازی فعال شده است. هرچند، نیاز دارد که <b>%1</b> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود نمایید،درغیر اینصورت ماشین مجازی با نمایش ریموت غیرفعال شده اِجرا خواهد شد</translation>
     </message>
     <message>
         <source>&Screen</source>
@@ -5537,15 +5587,15 @@
     <name>UIMachineSettingsGeneral</name>
     <message>
         <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space.</source>
-        <translation type="obsolete">مسیری که ضبط وضعیت ماشین مجازی در آن ذخیره شده را نشان میدهد.آگاه باشید که ضبط وضعیت فضای دیسک بسیاری استفاده می کند.</translation>
+        <translation type="vanished">مسیری که ضبط وضعیت ماشین مجازی در آن ذخیره شده را نشان میدهد.آگاه باشید که ضبط وضعیت فضای دیسک بسیاری استفاده می کند.</translation>
     </message>
     <message>
         <source>&Basic</source>
-        <translation type="obsolete">&پایه ای</translation>
+        <translation type="vanished">&پایه ای</translation>
     </message>
     <message>
         <source>&Advanced</source>
-        <translation type="obsolete">پی&شرفته</translation>
+        <translation type="vanished">پی&شرفته</translation>
     </message>
     <message>
         <source>&Shared Clipboard:</source>
@@ -5561,7 +5611,7 @@
     </message>
     <message>
         <source>&Description</source>
-        <translation type="obsolete">تو&ضیحات</translation>
+        <translation type="vanished">تو&ضیحات</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>
@@ -5569,43 +5619,43 @@
     </message>
     <message>
         <source>If checked, any CD/DVD or floppy disks inserted into or removed from the virtual drives while the machine is running will be remembered.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده،هرگونه تغییر اجرا شده در سی دی/دی وی دی بارگیری شده یا رسانه فلاپی حین اِجرای ماشین در فایل تنظیمات بمنظور حفظ پیکربندی رسانه بارگیری شده بین اِجراها ذخیره خواهد شد.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،هرگونه تغییر اجرا شده در سی دی/دی وی دی بارگیری شده یا رسانه فلاپی حین اِجرای ماشین در فایل تنظیمات بمنظور حفظ پیکربندی رسانه بارگیری شده بین اِجراها ذخیره خواهد شد.</translation>
     </message>
     <message>
         <source>Removable Media:</source>
-        <translation type="obsolete">رسانه قابل حمل:</translation>
+        <translation type="vanished">رسانه قابل حمل:</translation>
     </message>
     <message>
         <source>&Remember Runtime Changes</source>
-        <translation type="obsolete">&حفظ تغییرات زمان اِجرا</translation>
+        <translation type="vanished">&حفظ تغییرات زمان اِجرا</translation>
     </message>
     <message>
         <source>Mini ToolBar:</source>
-        <translation type="obsolete">نوارابزار کوچک:</translation>
+        <translation type="vanished">نوارابزار کوچک:</translation>
     </message>
     <message>
         <source>If checked, show the Mini ToolBar in Fullscreen and Seamless modes.</source>
-        <translation type="obsolete">اگر انتخاب شده،نوار ابزار کوچک را در حالت تمام صفحه یا یکپارچه نشان میدهد.</translation>
+        <translation type="vanished">اگر انتخاب شده،نوار ابزار کوچک را در حالت تمام صفحه یا یکپارچه نشان میدهد.</translation>
     </message>
     <message>
         <source>Show in &Fullscreen/Seamless</source>
-        <translation type="obsolete">نمایش &در تمام صفحه/یکپارچه</translation>
+        <translation type="vanished">نمایش &در تمام صفحه/یکپارچه</translation>
     </message>
     <message>
         <source>If 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="obsolete">اگر انتخاب شده، نوارابزار کوچک را در بالای صفحه نشان میدهد،بجای موقعیت پیش فرض آن در پایین صفحه.</translation>
+        <translation type="vanished">اگر انتخاب شده، نوارابزار کوچک را در بالای صفحه نشان میدهد،بجای موقعیت پیش فرض آن در پایین صفحه.</translation>
     </message>
     <message>
         <source>Show at &Top of Screen</source>
-        <translation type="obsolete">نمایش در &بالای صفحه</translation>
+        <translation type="vanished">نمایش در &بالای صفحه</translation>
     </message>
     <message>
         <source>you have selected a 64-bit guest OS type for this VM. As such guests require hardware virtualization (VT-x/AMD-V), this feature will be enabled automatically.</source>
-        <translation type="obsolete">شما سیستم عامل 64 بیتی مهمان برای این ماشین مجازی انتخاب کرده اید. همینطور مهمان به سخت افزار مجازی سازی نیاز دارد (VT-x/AMD-V)، این ویزگی خودکار فعال خواهد شد.</translation>
+        <translation type="vanished">شما سیستم عامل 64 بیتی مهمان برای این ماشین مجازی انتخاب کرده اید. همینطور مهمان به سخت افزار مجازی سازی نیاز دارد (VT-x/AMD-V)، این ویزگی خودکار فعال خواهد شد.</translation>
     </message>
     <message>
         <source>&Drag'n'Drop:</source>
-        <translation type="obsolete">&کشیدن 'و' رهاکردن:</translation>
+        <translation type="vanished">&کشیدن 'و' رهاکردن:</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>
@@ -5748,7 +5798,7 @@
     </message>
     <message>
         <source>Controls how this virtual adapter is attached to the real network of the Host OS.</source>
-        <translation type="obsolete">کنترل اینکه چگونه این آداپتور مجازی به شبکه واقعی سیستم عامل میزبان ضمیمه شده است.</translation>
+        <translation type="vanished">کنترل اینکه چگونه این آداپتور مجازی به شبکه واقعی سیستم عامل میزبان ضمیمه شده است.</translation>
     </message>
     <message>
         <source>Adapter &Type:</source>
@@ -5756,15 +5806,15 @@
     </message>
     <message>
         <source>no bridged network adapter is selected</source>
-        <translation type="obsolete">هیچ آداپتور شبکه پل شده ای انتخاب نشده است</translation>
+        <translation type="vanished">هیچ آداپتور شبکه پل شده ای انتخاب نشده است</translation>
     </message>
     <message>
         <source>no internal network name is specified</source>
-        <translation type="obsolete">هیچ نام شبکه داخلی مشخص نشده است</translation>
+        <translation type="vanished">هیچ نام شبکه داخلی مشخص نشده است</translation>
     </message>
     <message>
         <source>no host-only network adapter is selected</source>
-        <translation type="obsolete">هیچ آداپتور فقط-میزبان انتخاب نشده است</translation>
+        <translation type="vanished">هیچ آداپتور فقط-میزبان انتخاب نشده است</translation>
     </message>
     <message>
         <source>Not selected</source>
@@ -5781,7 +5831,7 @@
     </message>
     <message>
         <source>Shows or hides additional network adapter options.</source>
-        <translation type="obsolete">نمایش یا عدم نمایش گزینه های اضافی آداپتور شبکه.</translation>
+        <translation type="vanished">نمایش یا عدم نمایش گزینه های اضافی آداپتور شبکه.</translation>
     </message>
     <message>
         <source>Holds the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</source>
@@ -5793,7 +5843,7 @@
     </message>
     <message>
         <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source>
-        <translation type="obsolete">هرگاه کابل شبکه مجازی در اِستارت آپ ماشین متصل شده است یا نه،را نشان میدهد.</translation>
+        <translation type="vanished">هرگاه کابل شبکه مجازی در اِستارت آپ ماشین متصل شده است یا نه،را نشان میدهد.</translation>
     </message>
     <message>
         <source>&Cable Connected</source>
@@ -5801,7 +5851,7 @@
     </message>
     <message>
         <source>Opens a window to manage port forwarding rules.</source>
-        <translation type="obsolete">پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
+        <translation type="vanished">پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
     </message>
     <message>
         <source>&Port Forwarding</source>
@@ -5821,11 +5871,11 @@
     </message>
     <message>
         <source>Enter any configuration settings here for the network attachment driver you will be using. 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="obsolete">هرگونه پیکربندی تنظیمات برای درایور پیوست شبکه را که استفاده خواهید کرد را اینجا وارد کنید. تنظیمات باید به شکل <b>نام=مقدار</b> باشد و به درایور آن بستگی خواهد داشت. از <b>shift-enter</b> برای افزودن ورودی جدید استفاده کنید.</translation>
+        <translation type="vanished">هرگونه پیکربندی تنظیمات برای درایور پیوست شبکه را که استفاده خواهید کرد را اینجا وارد کنید. تنظیمات باید به شکل <b>نام=مقدار</b> باشد و به درایور آن بستگی خواهد داشت. از <b>shift-enter</b> برای افزودن ورودی جدید استفاده کنید.</translation>
     </message>
     <message>
         <source>no generic driver is selected</source>
-        <translation type="obsolete">درایور کلی انتخاب نشده است</translation>
+        <translation type="vanished">درایور کلی انتخاب نشده است</translation>
     </message>
     <message>
         <source>Selects the network adapter on the host system that traffic to and from this network card will go through.</source>
@@ -5849,11 +5899,11 @@
     </message>
     <message>
         <source>the MAC address must be 12 hexadecimal digits long.</source>
-        <translation type="obsolete">آدرس مَک باید 12 رقم هگزادسیمال بلند باشد.</translation>
+        <translation type="vanished">آدرس مَک باید 12 رقم هگزادسیمال بلند باشد.</translation>
     </message>
     <message>
         <source>the second digit in the MAC address may not be odd as only unicast addresses are allowed.</source>
-        <translation type="obsolete">عدد دوم آدرس مَک نباسد فرد باشد طوریکه فقط آدرس های یونیکست اجازه داده شده اند.</translation>
+        <translation type="vanished">عدد دوم آدرس مَک نباسد فرد باشد طوریکه فقط آدرس های یونیکست اجازه داده شده اند.</translation>
     </message>
     <message>
         <source>No bridged network adapter is currently selected.</source>
@@ -5980,35 +6030,35 @@
     <name>UIMachineSettingsParallelPage</name>
     <message>
         <source>Duplicate port number selected </source>
-        <translation type="obsolete">شماره پورت تکراری انتخاب شده است </translation>
+        <translation type="vanished">شماره پورت تکراری انتخاب شده است </translation>
     </message>
     <message>
         <source>Port path not specified </source>
-        <translation type="obsolete">مسیر پورت مشخص نشده است </translation>
+        <translation type="vanished">مسیر پورت مشخص نشده است </translation>
     </message>
     <message>
         <source>Duplicate port path entered </source>
-        <translation type="obsolete">مسیر تکراری پورت وارد شده است </translation>
+        <translation type="vanished">مسیر تکراری پورت وارد شده است </translation>
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="obsolete">اکنون IRQ تعیین نشده است.</translation>
+        <translation type="vanished">اکنون IRQ تعیین نشده است.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="obsolete">اکنون پورت I/O تعیین نشده است.</translation>
+        <translation type="vanished">اکنون پورت I/O تعیین نشده است.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="obsolete">دو یا چند پورت تنظیمات مشابه دارند.</translation>
+        <translation type="vanished">دو یا چند پورت تنظیمات مشابه دارند.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="obsolete">اکنون مسیر پورتی تعیین نشده است.</translation>
+        <translation type="vanished">اکنون مسیر پورتی تعیین نشده است.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="obsolete">اکنون مسیر پورت های تکراری تعیین شده است.</translation>
+        <translation type="vanished">اکنون مسیر پورت های تکراری تعیین شده است.</translation>
     </message>
 </context>
 <context>
@@ -6019,42 +6069,42 @@
     </message>
     <message>
         <source>This table contains a list of port forwarding rules.</source>
-        <translation type="obsolete">این جدول شامل یک لیست از دستورات اِرسال پورت است.</translation>
+        <translation type="vanished">این جدول شامل یک لیست از دستورات اِرسال پورت است.</translation>
     </message>
     <message>
         <source>Insert new rule</source>
-        <translation type="obsolete">افزودن دستور جدید</translation>
+        <translation type="vanished">افزودن دستور جدید</translation>
     </message>
     <message>
         <source>Copy selected rule</source>
-        <translation type="obsolete">کپی دستور انتخاب شده</translation>
+        <translation type="vanished">کپی دستور انتخاب شده</translation>
     </message>
     <message>
         <source>Delete selected rule</source>
-        <translation type="obsolete">حذف دستور انتخاب شده</translation>
+        <translation type="vanished">حذف دستور انتخاب شده</translation>
     </message>
     <message>
         <source>This button adds new port forwarding rule.</source>
-        <translation type="obsolete">این دکمه دستور اِرسال پورت جدید اضافه میکند.</translation>
+        <translation type="vanished">این دکمه دستور اِرسال پورت جدید اضافه میکند.</translation>
     </message>
     <message>
         <source>This button deletes selected port forwarding rule.</source>
-        <translation type="obsolete">این دکمه دستور اِرسال پورت انتخاب شده را حذف میکند.</translation>
+        <translation type="vanished">این دکمه دستور اِرسال پورت انتخاب شده را حذف میکند.</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsSF</name>
     <message>
         <source>Adds a new shared folder definition.</source>
-        <translation type="obsolete">پوشه تعریف جدید اشتراکی را اضافه میکند.</translation>
+        <translation type="vanished">پوشه تعریف جدید اشتراکی را اضافه میکند.</translation>
     </message>
     <message>
         <source>Edits the selected shared folder definition.</source>
-        <translation type="obsolete">پوشه تعریف اشتراکی انتخاب شده را ویرایش میکند.</translation>
+        <translation type="vanished">پوشه تعریف اشتراکی انتخاب شده را ویرایش میکند.</translation>
     </message>
     <message>
         <source>Removes the selected shared folder definition.</source>
-        <translation type="obsolete">پوشه تعریف اشتراکی انتخاب شده را حذف میکند.</translation>
+        <translation type="vanished">پوشه تعریف اشتراکی انتخاب شده را حذف میکند.</translation>
     </message>
     <message>
         <source> Machine Folders</source>
@@ -6090,15 +6140,15 @@
     </message>
     <message>
         <source>&Add Shared Folder</source>
-        <translation type="obsolete">&افزودن پوشه اشتراکی</translation>
+        <translation type="vanished">&افزودن پوشه اشتراکی</translation>
     </message>
     <message>
         <source>&Edit Shared Folder</source>
-        <translation type="obsolete">&ویرایش پوشه اشتراکی</translation>
+        <translation type="vanished">&ویرایش پوشه اشتراکی</translation>
     </message>
     <message>
         <source>&Remove Shared Folder</source>
-        <translation type="obsolete">&حذف پوشه اشتراکی</translation>
+        <translation type="vanished">&حذف پوشه اشتراکی</translation>
     </message>
     <message>
         <source>&Folders List</source>
@@ -6138,7 +6188,7 @@
     </message>
     <message>
         <source>Shared &Folders</source>
-        <translation type="unfinished"></translation>
+        <translation>پوشه های اشتراکی&</translation>
     </message>
 </context>
 <context>
@@ -6153,7 +6203,7 @@
     </message>
     <message>
         <source>Dialog</source>
-        <translation type="obsolete">پنجره</translation>
+        <translation type="vanished">پنجره</translation>
     </message>
     <message>
         <source>Folder Path:</source>
@@ -6189,11 +6239,11 @@
     </message>
     <message>
         <source>If checked, this shared folder will be permanent.</source>
-        <translation type="obsolete">اگر انتخاب شده باشد،این پوشه اشتراکی دائمی خواهد بود.</translation>
+        <translation type="vanished">اگر انتخاب شده باشد،این پوشه اشتراکی دائمی خواهد بود.</translation>
     </message>
     <message>
         <source>Window</source>
-        <translation type="obsolete">پنجره</translation>
+        <translation type="vanished">پنجره</translation>
     </message>
     <message>
         <source>When checked, this shared folder will be permanent.</source>
@@ -6237,23 +6287,23 @@
     </message>
     <message>
         <source>Controls 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="obsolete">حالت کاری این پورت سریال را کنترل میکند. اگر شما <b>قطع شده است</b> را انتخاب کنید، سیستم عامل مهمان پورت سریال را تشخیص خواهد داد اما قادر به استفاده از آن نیست.</translation>
+        <translation type="vanished">حالت کاری این پورت سریال را کنترل میکند. اگر شما <b>قطع شده است</b> را انتخاب کنید، سیستم عامل مهمان پورت سریال را تشخیص خواهد داد اما قادر به استفاده از آن نیست.</translation>
     </message>
     <message>
         <source>If checked, the pipe specified in the <b>Port Path</b> field will be created by the virtual machine when it starts. Otherwise, the virtual machine will assume that the pipe exists and try to use it.</source>
-        <translation type="obsolete">اگر انتخاب شده، میله مشخص شده در فیلد <b>مسیر پورت</b> توسط ماشین مجازی حین شروع آن ایجاد خواهد شد. در غیراینصورت، ماشین مجازی فرض میکند که میله موجود است و سعی میکند که از آن استفاده کند.</translation>
+        <translation type="vanished">اگر انتخاب شده، میله مشخص شده در فیلد <b>مسیر پورت</b> توسط ماشین مجازی حین شروع آن ایجاد خواهد شد. در غیراینصورت، ماشین مجازی فرض میکند که میله موجود است و سعی میکند که از آن استفاده کند.</translation>
     </message>
     <message>
         <source>&Create Pipe</source>
-        <translation type="obsolete">ایجاد &میله</translation>
+        <translation type="vanished">ایجاد &میله</translation>
     </message>
     <message>
         <source>Holds the path to the serial port's pipe on the host when the port is working in <b>Host Pipe</b> mode, or the host serial device name when the port is working in <b>Host Device</b> mode.</source>
-        <translation type="obsolete">مسیر را به میله پورت سریال در میزبان را وقتیکه پورت در حالت <b>میله میزبان</b> کار میکند را نشان میدهد، یا نام دستگاه سریال میزبان را وقتیکه پورت در حالت <b>دستگاه میزبان</b> در حال کار است را نشان میدهد.</translation>
+        <translation type="vanished">مسیر را به میله پورت سریال در میزبان را وقتیکه پورت در حالت <b>میله میزبان</b> کار میکند را نشان میدهد، یا نام دستگاه سریال میزبان را وقتیکه پورت در حالت <b>دستگاه میزبان</b> در حال کار است را نشان میدهد.</translation>
     </message>
     <message>
         <source>Port/File &Path:</source>
-        <translation type="obsolete">مسیر پور&ت/فایل:</translation>
+        <translation type="vanished">مسیر پور&ت/فایل:</translation>
     </message>
     <message>
         <source>Holds the IRQ number of this serial port. This should be a whole number between <tt>0</tt> and <tt>255</tt>. Values greater than <tt>15</tt> may only be used if the <b>I/O APIC</b> setting is enabled for this virtual machine.</source>
@@ -6308,35 +6358,35 @@
     <name>UIMachineSettingsSerialPage</name>
     <message>
         <source>Duplicate port number selected </source>
-        <translation type="obsolete">شماره پورت تکراری انتخاب شده است </translation>
+        <translation type="vanished">شماره پورت تکراری انتخاب شده است </translation>
     </message>
     <message>
         <source>Port path not specified </source>
-        <translation type="obsolete">مسیر پورت مشخص نشده است </translation>
+        <translation type="vanished">مسیر پورت مشخص نشده است </translation>
     </message>
     <message>
         <source>Duplicate port path entered </source>
-        <translation type="obsolete">مسیر تکراری پورت وارد شده است </translation>
+        <translation type="vanished">مسیر تکراری پورت وارد شده است </translation>
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="obsolete">اکنون IRQ تعیین نشده است.</translation>
+        <translation type="vanished">اکنون IRQ تعیین نشده است.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="obsolete">اکنون پورت I/O تعیین نشده است.</translation>
+        <translation type="vanished">اکنون پورت I/O تعیین نشده است.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="obsolete">دو یا چند پورت تنظیمات مشابه دارند.</translation>
+        <translation type="vanished">دو یا چند پورت تنظیمات مشابه دارند.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="obsolete">اکنون مسیر پورتی تعیین نشده است.</translation>
+        <translation type="vanished">اکنون مسیر پورتی تعیین نشده است.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="obsolete">اکنون مسیر پورت های تکراری تعیین شده است.</translation>
+        <translation type="vanished">اکنون مسیر پورت های تکراری تعیین شده است.</translation>
     </message>
 </context>
 <context>
@@ -6347,23 +6397,23 @@
     </message>
     <message>
         <source><nobr>Expand/Collapse&nbsp;Item</nobr></source>
-        <translation type="obsolete"><nobr>بازکردن/بستن&nbsp;آیتم</nobr></translation>
+        <translation type="vanished"><nobr>بازکردن/بستن&nbsp;آیتم</nobr></translation>
     </message>
     <message>
         <source><nobr>Add&nbsp;Hard&nbsp;Disk</nobr></source>
-        <translation type="obsolete"><nobr>افزودن&nbsp;دیسک&nbsp;سخت</nobr></translation>
+        <translation type="vanished"><nobr>افزودن&nbsp;دیسک&nbsp;سخت</nobr></translation>
     </message>
     <message>
         <source><nobr>Add&nbsp;CD/DVD&nbsp;Device</nobr></source>
-        <translation type="obsolete"><nobr>افزودن&nbsp;دستگاه&nbsp;سی دی/دی وی دی</nobr></translation>
+        <translation type="vanished"><nobr>افزودن&nbsp;دستگاه&nbsp;سی دی/دی وی دی</nobr></translation>
     </message>
     <message>
         <source><nobr>Add&nbsp;Floppy&nbsp;Device</nobr></source>
-        <translation type="obsolete"><nobr>افزودن&nbsp;دستگاه&nbsp;فلاپی</nobr></translation>
+        <translation type="vanished"><nobr>افزودن&nbsp;دستگاه&nbsp;فلاپی</nobr></translation>
     </message>
     <message>
         <source><i>%1</i> uses a medium that is already attached to <i>%2</i>.</source>
-        <translation type="obsolete"><i>%1</i> از رسانه که از قبل به <i>%2</i> متصل شده است استفاده میکند.</translation>
+        <translation type="vanished"><i>%1</i> از رسانه که از قبل به <i>%2</i> متصل شده است استفاده میکند.</translation>
     </message>
     <message>
         <source>Add Controller</source>
@@ -6399,11 +6449,11 @@
     </message>
     <message>
         <source>Add CD/DVD Device</source>
-        <translation type="obsolete">افزودن دستگاه سی دی/دی وی دی</translation>
+        <translation type="vanished">افزودن دستگاه سی دی/دی وی دی</translation>
     </message>
     <message>
         <source>Add Floppy Device</source>
-        <translation type="obsolete">افزودن دستگاه فلاپی</translation>
+        <translation type="vanished">افزودن دستگاه فلاپی</translation>
     </message>
     <message>
         <source>Remove Attachment</source>
@@ -6411,35 +6461,35 @@
     </message>
     <message>
         <source>Adds a new controller to the end of the Storage Tree.</source>
-        <translation type="obsolete">یک کنترلر جدید به انتهای درخت ذخیره ساز اضافه میکند.</translation>
+        <translation type="vanished">یک کنترلر جدید به انتهای درخت ذخیره ساز اضافه میکند.</translation>
     </message>
     <message>
         <source>Removes the controller highlighted in the Storage Tree.</source>
-        <translation type="obsolete">کنترلر پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
+        <translation type="vanished">کنترلر پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
     </message>
     <message>
         <source>Adds a new attachment to the Storage Tree using currently selected controller as parent.</source>
-        <translation type="obsolete">یک ضمیمه جدید به درخت ذخیره ساز توسط کنترلر انتخاب شده فعلی بعنوان منشاء اضافه میکند.</translation>
+        <translation type="vanished">یک ضمیمه جدید به درخت ذخیره ساز توسط کنترلر انتخاب شده فعلی بعنوان منشاء اضافه میکند.</translation>
     </message>
     <message>
         <source>Removes the attachment highlighted in the Storage Tree.</source>
-        <translation type="obsolete">ضمیمه پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
+        <translation type="vanished">ضمیمه پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
     </message>
     <message>
         <source>IDE Controller</source>
-        <translation type="obsolete">کنترلر IDE</translation>
+        <translation type="vanished">کنترلر IDE</translation>
     </message>
     <message>
         <source>SATA Controller</source>
-        <translation type="obsolete">کنترلر SATA</translation>
+        <translation type="vanished">کنترلر SATA</translation>
     </message>
     <message>
         <source>SCSI Controller</source>
-        <translation type="obsolete">کنترلر SCSI</translation>
+        <translation type="vanished">کنترلر SCSI</translation>
     </message>
     <message>
         <source>Floppy Controller</source>
-        <translation type="obsolete">کنترلر فلاپی</translation>
+        <translation type="vanished">کنترلر فلاپی</translation>
     </message>
     <message>
         <source>Hard &Disk:</source>
@@ -6451,7 +6501,7 @@
     </message>
     <message>
         <source>Contains all storage controllers for this machine and the virtual images and host drives attached to them.</source>
-        <translation type="obsolete">شامل همه کنترلر های ذخیره ساز برای این ماشین و ماشین مجازی و درایوهای میزبان ضمیمه شده به آنها هست.</translation>
+        <translation type="vanished">شامل همه کنترلر های ذخیره ساز برای این ماشین و ماشین مجازی و درایوهای میزبان ضمیمه شده به آنها هست.</translation>
     </message>
     <message>
         <source>Information</source>
@@ -6471,7 +6521,7 @@
     </message>
     <message>
         <source>Changes the name of the storage controller currently selected in the Storage Tree.</source>
-        <translation type="obsolete">نام کنترلر ذخیره ساز فعلی انتخاب شده را در درخت ذخیره ساز تغییر میدهد.</translation>
+        <translation type="vanished">نام کنترلر ذخیره ساز فعلی انتخاب شده را در درخت ذخیره ساز تغییر میدهد.</translation>
     </message>
     <message>
         <source>&Type:</source>
@@ -6519,7 +6569,7 @@
     </message>
     <message>
         <source>Allows to use host I/O caching capabilities.</source>
-        <translation type="obsolete">اجازه استفاده از قابلیت کَش ورودی/خروجی میزبان را میدهد.</translation>
+        <translation type="vanished">اجازه استفاده از قابلیت کَش ورودی/خروجی میزبان را میدهد.</translation>
     </message>
     <message>
         <source>Use Host I/O Cache</source>
@@ -6531,7 +6581,7 @@
     </message>
     <message>
         <source>SAS Controller</source>
-        <translation type="obsolete">کنترلر SAS</translation>
+        <translation type="vanished">کنترلر SAS</translation>
     </message>
     <message>
         <source>Type:</source>
@@ -6543,7 +6593,7 @@
     </message>
     <message>
         <source>Image</source>
-        <translation type="obsolete">ایمیج</translation>
+        <translation type="vanished">ایمیج</translation>
     </message>
     <message>
         <source>Choose or create a virtual hard disk file. The virtual machine will see the data in the file as the contents of the virtual hard disk.</source>
@@ -6551,19 +6601,19 @@
     </message>
     <message>
         <source>Set up the virtual hard disk</source>
-        <translation type="obsolete">تنظیم دیسک سخت مجازی</translation>
+        <translation type="vanished">تنظیم دیسک سخت مجازی</translation>
     </message>
     <message>
         <source>CD/DVD &Drive:</source>
-        <translation type="obsolete">درایو سی دی/دی &وی دی:</translation>
+        <translation type="vanished">درایو سی دی/دی &وی دی:</translation>
     </message>
     <message>
         <source>Choose a virtual CD/DVD 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="obsolete">یک دیسک مجازی سی دی/دی وی دی یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک میبیند.</translation>
+        <translation type="vanished">یک دیسک مجازی سی دی/دی وی دی یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک میبیند.</translation>
     </message>
     <message>
         <source>Set up the virtual CD/DVD drive</source>
-        <translation type="obsolete">تنظیم درایو مجازی سی دی/دی وی دی</translation>
+        <translation type="vanished">تنظیم درایو مجازی سی دی/دی وی دی</translation>
     </message>
     <message>
         <source>Floppy &Drive:</source>
@@ -6575,19 +6625,19 @@
     </message>
     <message>
         <source>Set up the virtual floppy drive</source>
-        <translation type="obsolete">تنظیم درایو فلاپی مجازی</translation>
+        <translation type="vanished">تنظیم درایو فلاپی مجازی</translation>
     </message>
     <message>
         <source>Create a new hard disk...</source>
-        <translation type="obsolete">ایجاد یک دیسک سخت جدید...</translation>
+        <translation type="vanished">ایجاد یک دیسک سخت جدید...</translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file...</source>
-        <translation type="obsolete">یک فایل ديسک سخت مجازی انتخاب کنید...</translation>
+        <translation type="vanished">یک فایل ديسک سخت مجازی انتخاب کنید...</translation>
     </message>
     <message>
         <source>Choose a virtual CD/DVD disk file...</source>
-        <translation type="obsolete">یک فایل دیسک سی دی/دی وی دی مجازی انتخاب کنید...</translation>
+        <translation type="vanished">یک فایل دیسک سی دی/دی وی دی مجازی انتخاب کنید...</translation>
     </message>
     <message>
         <source>Remove disk from virtual drive</source>
@@ -6595,11 +6645,11 @@
     </message>
     <message>
         <source>Choose a virtual floppy disk file...</source>
-        <translation type="obsolete">یک فایل دیسک فلاپی مجازی انتخاب کنید...</translation>
+        <translation type="vanished">یک فایل دیسک فلاپی مجازی انتخاب کنید...</translation>
     </message>
     <message>
         <source>When checked the virtual disk will not be removed when the guest system ejects it.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده،دیسک مجازی حذف نخواهد شد زمانیکه سیستم مهمان آن را ایجکت میکند.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،دیسک مجازی حذف نخواهد شد زمانیکه سیستم مهمان آن را ایجکت میکند.</translation>
     </message>
     <message>
         <source>&Live CD/DVD</source>
@@ -6607,7 +6657,7 @@
     </message>
     <message>
         <source>When checked the guest system will see the virtual disk as a solid state device.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده،سیستم مهمان دیسک مجازی را بعنوان یک دستگاه حالت جامد خواهد دید.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده،سیستم مهمان دیسک مجازی را بعنوان یک دستگاه حالت جامد خواهد دید.</translation>
     </message>
     <message>
         <source>&Solid-state Drive</source>
@@ -6619,15 +6669,15 @@
     </message>
     <message>
         <source>no name specified for controller at position <b>%1</b>.</source>
-        <translation type="obsolete">نامی برای کنترلر در موقعیت <b>%1</b> مشخص نشده است.</translation>
+        <translation type="vanished">نامی برای کنترلر در موقعیت <b>%1</b> مشخص نشده است.</translation>
     </message>
     <message>
         <source>controller at position <b>%1</b> uses the name that is already used by controller at position <b>%2</b>.</source>
-        <translation type="obsolete">کنترلر در موقعیت <b>%1</b> از نامی که از قبل توسط کنترلری در موقعیت <b>%2</b> استفاده شده،بکار میبرد.</translation>
+        <translation type="vanished">کنترلر در موقعیت <b>%1</b> از نامی که از قبل توسط کنترلری در موقعیت <b>%2</b> استفاده شده،بکار میبرد.</translation>
     </message>
     <message>
         <source>no hard disk is selected for <i>%1</i>.</source>
-        <translation type="obsolete">هیچ دیسک سختی برای <i>%1</i>انتخاب نشده است.</translation>
+        <translation type="vanished">هیچ دیسک سختی برای <i>%1</i>انتخاب نشده است.</translation>
     </message>
     <message>
         <source>at most one supported</source>
@@ -6641,7 +6691,7 @@
     </message>
     <message>
         <source>you are currently using more storage controllers than a %1 chipset supports. Please change the chipset type on the System settings page or reduce the number of the following storage controllers on the Storage settings page: %2.</source>
-        <translation type="obsolete">شما اکنون درحال استفاده کنترلرهای ذخیره ساز بیشتر از %1 تراشه پشتیبانی شده هستید. لطفا نوع تراشه را در صفحه تنظیمات سیستم تغییر دهید یا تعداد کنترلرهای ذخیره ساز زیرین را در صفحه تنظیمات ذخیره ساز کاهش دهید: %2.</translation>
+        <translation type="vanished">شما اکنون درحال استفاده کنترلرهای ذخیره ساز بیشتر از %1 تراشه پشتیبانی شده هستید. لطفا نوع تراشه را در صفحه تنظیمات سیستم تغییر دهید یا تعداد کنترلرهای ذخیره ساز زیرین را در صفحه تنظیمات ذخیره ساز کاهش دهید: %2.</translation>
     </message>
     <message>
         <source>&Port Count:</source>
@@ -6791,47 +6841,47 @@
     </message>
     <message>
         <source>Add NVMe Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>افزودن کنترلر NVMe</translation>
     </message>
     <message>
         <source>&Storage Devices</source>
-        <translation type="unfinished"></translation>
+        <translation>&دستگاه ذخیره ساز</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsSystem</name>
     <message>
         <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. Not enough memory is left for your host operating system. Please select a smaller amount.</source>
-        <translation type="obsolete">شما بیشتر از <b>%1%</b> از حافظه رایانه را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل میزبان باقی نمانده است. لطفا مقدار کمتری انتخاب کنید.</translation>
+        <translation type="vanished">شما بیشتر از <b>%1%</b> از حافظه رایانه را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل میزبان باقی نمانده است. لطفا مقدار کمتری انتخاب کنید.</translation>
     </message>
     <message>
         <source>you have assigned more than <b>%1%</b> of your computer's memory (<b>%2</b>) to the virtual machine. There might not be enough memory left for your host operating system. Continue at your own risk.</source>
-        <translation type="obsolete">شما بیشتر از <b>%1%</b> از حافظه رایانه را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل میزبان باقی نمانده است. با ریسک پذیری خود ادامه دهید.</translation>
+        <translation type="vanished">شما بیشتر از <b>%1%</b> از حافظه رایانه را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل میزبان باقی نمانده است. با ریسک پذیری خود ادامه دهید.</translation>
     </message>
     <message>
         <source>for performance reasons, the number of virtual CPUs attached to the virtual machine may not be more than twice the number of physical CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.</source>
-        <translation type="obsolete">به دلیل کارایی، تعداد پردازنده مجازی ضمیمه شده به ماشین مجازی نبابید بیشتر از دوبرابر پردازنده فیزیکی در میزبان (<b>%1</b>) باشد. لطفا تعداد پردازنده مجازی را کاهش دهید.</translation>
+        <translation type="vanished">به دلیل کارایی، تعداد پردازنده مجازی ضمیمه شده به ماشین مجازی نبابید بیشتر از دوبرابر پردازنده فیزیکی در میزبان (<b>%1</b>) باشد. لطفا تعداد پردازنده مجازی را کاهش دهید.</translation>
     </message>
     <message>
         <source>you have assigned more virtual CPUs to the virtual machine than the number of physical CPUs on your host system (<b>%1</b>). This is likely to degrade the performance of your virtual machine. Please consider reducing the number of virtual CPUs.</source>
-        <translation type="obsolete">شما پردازنده مجازی بیشتری نسبت به تعداد پردازنده فیزیکی سیستم میزبان (<b>%1</b>) به ماشین مجازی اختصاص داده اید. این بیشتر باعث تنزل کارایی ماشین مجازی میشود. لطفا به کاهش پردازنده مجازی توجه کنید.</translation>
+        <translation type="vanished">شما پردازنده مجازی بیشتری نسبت به تعداد پردازنده فیزیکی سیستم میزبان (<b>%1</b>) به ماشین مجازی اختصاص داده اید. این بیشتر باعث تنزل کارایی ماشین مجازی میشود. لطفا به کاهش پردازنده مجازی توجه کنید.</translation>
     </message>
     <message>
         <source>you have assigned more than one virtual CPU to this VM. This will not work unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source>
-        <translation type="obsolete">شما بیشتر از یک پردازنده مجازی به ماشین مجازی اختصاص داده اید. آن کار نخواهد کرد مگر اینکه ویژگی IO-APIC نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <translation type="vanished">شما بیشتر از یک پردازنده مجازی به ماشین مجازی اختصاص داده اید. آن کار نخواهد کرد مگر اینکه ویژگی IO-APIC نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
     </message>
     <message>
         <source>you have assigned more than one virtual CPU to this VM. This will not work unless hardware virtualization (VT-x/AMD-V) is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source>
-        <translation type="obsolete">شما بیشتر از یک پردازنده مجازی به ماشین اختصاص داده اید. آن کار نخواهد کرد مگر اینکه مجازی سازی سخت افزار (VT-x/AMD-V) نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <translation type="vanished">شما بیشتر از یک پردازنده مجازی به ماشین اختصاص داده اید. آن کار نخواهد کرد مگر اینکه مجازی سازی سخت افزار (VT-x/AMD-V) نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
     </message>
     <message>
         <source><qt>%1&nbsp;MB</qt></source>
-        <translation type="obsolete"><qt>%1&nbsp;مگابایت</qt></translation>
+        <translation type="vanished"><qt>%1&nbsp;مگابایت</qt></translation>
     </message>
     <message>
         <source><qt>%1&nbsp;CPU</qt></source>
         <comment>%1 is 1 for now</comment>
-        <translation type="obsolete"><qt>%1&nbsp;پردازنده</qt></translation>
+        <translation type="vanished"><qt>%1&nbsp;پردازنده</qt></translation>
     </message>
     <message>
         <source>&Motherboard</source>
@@ -6859,7 +6909,7 @@
     </message>
     <message>
         <source>Move Down (Ctrl-Down)</source>
-        <translation type="obsolete">به پایین (Ctrl-Down)</translation>
+        <translation type="vanished">به پایین (Ctrl-Down)</translation>
     </message>
     <message>
         <source>Moves the selected boot device down.</source>
@@ -6867,7 +6917,7 @@
     </message>
     <message>
         <source>Move Up (Ctrl-Up)</source>
-        <translation type="obsolete">به بالا (Ctrl-Up)</translation>
+        <translation type="vanished">به بالا (Ctrl-Up)</translation>
     </message>
     <message>
         <source>Moves the selected boot device up.</source>
@@ -6928,7 +6978,7 @@
     <message>
         <source><qt>%1&nbsp;CPUs</qt></source>
         <comment>%1 is host cpu count * 2 for now</comment>
-        <translation type="obsolete"><qt>%1&nbsp;پردازنده</qt></translation>
+        <translation type="vanished"><qt>%1&nbsp;پردازنده</qt></translation>
     </message>
     <message>
         <source>When checked, the guest will support the Extended Firmware Interface (EFI), which is required to boot certain guest OSes. Non-EFI aware OSes will not be able to boot if this option is activated.</source>
@@ -6940,7 +6990,7 @@
     </message>
     <message>
         <source>If 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="obsolete">اگر انتخاب شده، دستگاه RTC زمان را در یو تی سی گزارش میدهد، در غیراینصورت دز زمان (میزبان) محلی گزارش میدهد. یونیکس معمولا انتظار دارد ساعت سخت افزاری در یو تی سی تنظیم شده باشد.</translation>
+        <translation type="vanished">اگر انتخاب شده، دستگاه RTC زمان را در یو تی سی گزارش میدهد، در غیراینصورت دز زمان (میزبان) محلی گزارش میدهد. یونیکس معمولا انتظار دارد ساعت سخت افزاری در یو تی سی تنظیم شده باشد.</translation>
     </message>
     <message>
         <source>Hardware Clock in &UTC Time</source>
@@ -6952,11 +7002,11 @@
     </message>
     <message>
         <source>If checked, an absolute pointing device (a USB tablet) will be supported. Otherwise, only a standard PS/2 mouse will be emulated.</source>
-        <translation type="obsolete">اگر انتخاب شده،یک دستگاه اشاره گر حقیقی (یک تبلت یو اِس بی) پشتیبانی خواهد شد. درغیراینصورت، فقط یک ماوس استاندارد PS/2 شبیه سازی خواهد شد.</translation>
+        <translation type="vanished">اگر انتخاب شده،یک دستگاه اشاره گر حقیقی (یک تبلت یو اِس بی) پشتیبانی خواهد شد. درغیراینصورت، فقط یک ماوس استاندارد PS/2 شبیه سازی خواهد شد.</translation>
     </message>
     <message>
         <source>Enable &absolute pointing device</source>
-        <translation type="obsolete">فعال &سازی دستگاه اشاره گر حقیقی</translation>
+        <translation type="vanished">فعال &سازی دستگاه اشاره گر حقیقی</translation>
     </message>
     <message>
         <source>&Chipset:</source>
@@ -6976,25 +7026,25 @@
     </message>
     <message>
         <source>you have set the processor execution cap to a low value. This can make the machine feel slow to respond.</source>
-        <translation type="obsolete">شما درپوش اِجرای پردازنده را در مقدار کم تنظیم کرده اید. این موجب میشود که ماشین آهسته واکنش دهد.</translation>
+        <translation type="vanished">شما درپوش اِجرای پردازنده را در مقدار کم تنظیم کرده اید. این موجب میشود که ماشین آهسته واکنش دهد.</translation>
     </message>
     <message>
         <source>you have enabled a USB HID (Human Interface Device). This will not work unless USB emulation is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source>
-        <translation type="obsolete">شما یک USB HID (Human Interface Device) را فعال کرده اید. این کار نخواهد کرد مگراینکه شبیه سازی یو اِس بی نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <translation type="vanished">شما یک USB HID (Human Interface Device) را فعال کرده اید. این کار نخواهد کرد مگراینکه شبیه سازی یو اِس بی نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
     </message>
     <message>
         <source><qt>%1%</qt></source>
         <comment>Min CPU execution cap in %</comment>
-        <translation type="obsolete"><qt>%1%</qt></translation>
+        <translation type="vanished"><qt>%1%</qt></translation>
     </message>
     <message>
         <source><qt>%1%</qt></source>
         <comment>Max CPU execution cap in %</comment>
-        <translation type="obsolete"><qt>%1%</qt></translation>
+        <translation type="vanished"><qt>%1%</qt></translation>
     </message>
     <message>
         <source>you have assigned ICH9 chipset type to this VM. It will not work properly unless the IO-APIC feature is also enabled. This will be done automatically when you accept the VM Settings by pressing the OK button.</source>
-        <translation type="obsolete">شما نوع تراشه ICH9 به ماشین مجازی اختصاص داده اید. آن بدرستی کار نمیکند مگراینکه شما گزینه IO-APIC را فعال کرده باشید. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <translation type="vanished">شما نوع تراشه ICH9 به ماشین مجازی اختصاص داده اید. آن بدرستی کار نمیکند مگراینکه شما گزینه IO-APIC را فعال کرده باشید. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
     </message>
     <message>
         <source>&Pointing Device:</source>
@@ -7014,11 +7064,11 @@
     </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. It will be done automatically if you confirm your changes.</source>
-        <translation type="obsolete">ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از نوع تراشه ICH9 ضروری هست. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <translation type="vanished">ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از نوع تراشه ICH9 ضروری هست. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</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. It will be done automatically if you confirm your changes.</source>
-        <translation type="obsolete">شبیه ساز کنترلر یو اِس بی اکنون در صفحه یو اِس بی فعال نشده است. بمنظور پشتیبانی از دستگاه ورودی یو اِس بی به آن نیاز است. اگر تغییرات را تایید کنید آن خودکار انجام خواهد شد..</translation>
+        <translation type="vanished">شبیه ساز کنترلر یو اِس بی اکنون در صفحه یو اِس بی فعال نشده است. بمنظور پشتیبانی از دستگاه ورودی یو اِس بی به آن نیاز است. اگر تغییرات را تایید کنید آن خودکار انجام خواهد شد..</translation>
     </message>
     <message>
         <source>For performance reasons, the number of virtual CPUs attached to the virtual machine may not be more than twice the number of physical CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.</source>
@@ -7030,11 +7080,11 @@
     </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. It will be done automatically if you confirm your changes.</source>
-        <translation type="obsolete">ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از بیشتر از یک پردازنده مجازی نیاز است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <translation type="vanished">ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از بیشتر از یک پردازنده مجازی نیاز است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</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. It will be done automatically if you confirm your changes.</source>
-        <translation type="obsolete">مجازی سازی سخت افزار اکنون در بخش شتاب دهنده صفحه سیستم فعال نشده است. برای پشتیبانی از بیشتر از یک پردازنده مجازی این ضروری است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <translation type="vanished">مجازی سازی سخت افزار اکنون در بخش شتاب دهنده صفحه سیستم فعال نشده است. برای پشتیبانی از بیشتر از یک پردازنده مجازی این ضروری است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
     </message>
     <message>
         <source>The processor execution cap is set to a low value. This may make the machine feel slow to respond.</source>
@@ -7092,70 +7142,70 @@
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed to support a chipset of type ICH9. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از نوع تراشه ICH9 ضروری هست. اگر تغییرات را اعمال کنید آن خودکار فعال خواهد شد.</translation>
     </message>
     <message>
         <source>The USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB pointing device. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>شبیه ساز کنترلر یو اِس بی اکنون در صفحه یو اِس بی فعال نشده است. بمنظور پشتیبانی از دستگاه اشاره گر ورودی یو اِس بی به آن نیاز است. اگر تغییرات را تایید کنید آن خودکار فعال خواهد شد.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed to support more than one virtual processor. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از بیشتر از یک پردازنده مجازی نیاز است. اگر تغییرات اعمال کنید آن خودکار فعال خواهد شد.</translation>
     </message>
     <message>
         <source>The hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed to support more than one virtual processor. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>مجازی سازی سخت افزار اکنون در بخش شتاب دهنده صفحه سیستم فعال نشده است. برای پشتیبانی از بیشتر از یک پردازنده مجازی ضروری است. اگر تغییرات را اعمال کنید آن خودکار فعال خواهد شد.</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsUSB</name>
     <message>
         <source>&Add Empty Filter</source>
-        <translation type="obsolete">افزود&ن فیلتر خالی</translation>
+        <translation type="vanished">افزود&ن فیلتر خالی</translation>
     </message>
     <message>
         <source>A&dd Filter From Device</source>
-        <translation type="obsolete">افزودن فیلت&ر از دستگاه</translation>
+        <translation type="vanished">افزودن فیلت&ر از دستگاه</translation>
     </message>
     <message>
         <source>&Edit Filter</source>
-        <translation type="obsolete">ویرایش &فیلتر</translation>
+        <translation type="vanished">ویرایش &فیلتر</translation>
     </message>
     <message>
         <source>&Remove Filter</source>
-        <translation type="obsolete">حذ&ف فیلتر</translation>
+        <translation type="vanished">حذ&ف فیلتر</translation>
     </message>
     <message>
         <source>&Move Filter Up</source>
-        <translation type="obsolete">&انتقال فیلتر به بالا</translation>
+        <translation type="vanished">&انتقال فیلتر به بالا</translation>
     </message>
     <message>
         <source>M&ove Filter Down</source>
-        <translation type="obsolete">&انتقال فیلتر به پایین</translation>
+        <translation type="vanished">&انتقال فیلتر به پایین</translation>
     </message>
     <message>
         <source>Adds a 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="obsolete">یک فیلتر یو اِس بی جدید با همه فیلدهای آغازی تنظیم شده به استرینگ خالی اضافه میکند.توجه کنید که چنین فیلتری با هرگونه دستگاه یو اِس بی ضمیمه شده ای تطبیق پیدا میکند.</translation>
+        <translation type="vanished">یک فیلتر یو اِس بی جدید با همه فیلدهای آغازی تنظیم شده به استرینگ خالی اضافه میکند.توجه کنید که چنین فیلتری با هرگونه دستگاه یو اِس بی ضمیمه شده ای تطبیق پیدا میکند.</translation>
     </message>
     <message>
         <source>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
-        <translation type="obsolete">یک فیلتر یو اِس بی جدید با همه فیلدهای تنظیم شده به مقادیر دستگاه یو اِس بی انتخاب شده ضمیمه شده به رایانه میزبان اضافه میکند.</translation>
+        <translation type="vanished">یک فیلتر یو اِس بی جدید با همه فیلدهای تنظیم شده به مقادیر دستگاه یو اِس بی انتخاب شده ضمیمه شده به رایانه میزبان اضافه میکند.</translation>
     </message>
     <message>
         <source>Edits the selected USB filter.</source>
-        <translation type="obsolete">ویرایش فیلتر یو اِس بی انتخاب شده.</translation>
+        <translation type="vanished">ویرایش فیلتر یو اِس بی انتخاب شده.</translation>
     </message>
     <message>
         <source>Removes the selected USB filter.</source>
-        <translation type="obsolete">فیلتر یو اِس بی انتخاب شده را حذف میکند.</translation>
+        <translation type="vanished">فیلتر یو اِس بی انتخاب شده را حذف میکند.</translation>
     </message>
     <message>
         <source>Moves the selected USB filter up.</source>
-        <translation type="obsolete">فیلتر یو اِس بی انتخاب شده را به بالا انتقال میدهد.</translation>
+        <translation type="vanished">فیلتر یو اِس بی انتخاب شده را به بالا انتقال میدهد.</translation>
     </message>
     <message>
         <source>Moves the selected USB filter down.</source>
-        <translation type="obsolete">فیلتر یو اِس بی انتخاب شده را به پایین انتقال میدهد.</translation>
+        <translation type="vanished">فیلتر یو اِس بی انتخاب شده را به پایین انتقال میدهد.</translation>
     </message>
     <message>
         <source>New Filter %1</source>
@@ -7172,11 +7222,11 @@
     </message>
     <message>
         <source>When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
-        <translation type="obsolete">وقتیکه انتخاب شده، کنترلر یو اِس بی EHCI این ماشین را فعال میکند. کنترلر یو اِس بی EHCI پشتیبانی از یو اِس بی 2.0 را فراهم میکند.</translation>
+        <translation type="vanished">وقتیکه انتخاب شده، کنترلر یو اِس بی EHCI این ماشین را فعال میکند. کنترلر یو اِس بی EHCI پشتیبانی از یو اِس بی 2.0 را فراهم میکند.</translation>
     </message>
     <message>
         <source>Enable USB 2.0 (E&HCI) Controller</source>
-        <translation type="obsolete">فعالسازی کنترلر یو اِس بی 2.0 (E&HCI)</translation>
+        <translation type="vanished">فعالسازی کنترلر یو اِس بی 2.0 (E&HCI)</translation>
     </message>
     <message>
         <source>USB Device &Filters</source>
@@ -7232,11 +7282,11 @@
     </message>
     <message>
         <source>USB 2.0 is currently enabled for this virtual machine. However, this requires the <b>%1</b> to be installed. Please install the Extension Pack from the VirtualBox download site. After this you will be able to re-enable USB 2.0. It will be disabled in the meantime unless you cancel the current settings changes.</source>
-        <translation type="obsolete">اکنون یو اِس بی 2.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید. بعداز این شما قادر به فعال کردن مجدد یو اِس بی 2.0 هستید. آن در این فاصله غیرفعال شده است بجز اینکه شما تغییرات تنظیمات فعلی را لغو کنید.</translation>
+        <translation type="vanished">اکنون یو اِس بی 2.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید. بعداز این شما قادر به فعال کردن مجدد یو اِس بی 2.0 هستید. آن در این فاصله غیرفعال شده است بجز اینکه شما تغییرات تنظیمات فعلی را لغو کنید.</translation>
     </message>
     <message>
         <source>USB 2.0 is currently enabled for this virtual machine. However, this requires the <b>%1</b> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0 to be able to start the machine.</source>
-        <translation type="obsolete">اکنون یو اِس بی 2.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید، یا یو اِس بی 2.0 را غیرفعال کنید تا بتوانید آن را اِجرا کنید.</translation>
+        <translation type="vanished">اکنون یو اِس بی 2.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید، یا یو اِس بی 2.0 را غیرفعال کنید تا بتوانید آن را اِجرا کنید.</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>
@@ -7346,7 +7396,7 @@
     </message>
     <message>
         <source>Defines 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="obsolete">فیلتر شناسه فروشنده را تعریف میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر شناسه فروشنده را تعریف میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>&Product ID:</source>
@@ -7354,7 +7404,7 @@
     </message>
     <message>
         <source>Defines 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="obsolete">فیلتر شناسه محصول را تعریف میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده است. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر شناسه محصول را تعریف میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده است. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>&Revision:</source>
@@ -7362,7 +7412,7 @@
     </message>
     <message>
         <source>Defines 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="obsolete">فیلتر شماره بازبینی را تعیین میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>IIFF</tt> جایی که <tt>I</tt> یک رقم دهدهی بخش صحیح و <tt>F</tt> یک رقم دهدهی بخش کسری هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر شماره بازبینی را تعیین میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>IIFF</tt> جایی که <tt>I</tt> یک رقم دهدهی بخش صحیح و <tt>F</tt> یک رقم دهدهی بخش کسری هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>&Manufacturer:</source>
@@ -7370,7 +7420,7 @@
     </message>
     <message>
         <source>Defines the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="obsolete">فیلتر سازنده را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر سازنده را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>Pro&duct:</source>
@@ -7378,7 +7428,7 @@
     </message>
     <message>
         <source>Defines the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="obsolete">فیلتر نام محصول را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر نام محصول را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>&Serial No.:</source>
@@ -7386,7 +7436,7 @@
     </message>
     <message>
         <source>Defines the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="obsolete">فیلتر شماره سریال را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر شماره سریال را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>Por&t:</source>
@@ -7394,7 +7444,7 @@
     </message>
     <message>
         <source>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="obsolete">فیلتر پورت یو اِس بی میزبان را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <translation type="vanished">فیلتر پورت یو اِس بی میزبان را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
         <source>R&emote:</source>
@@ -7402,15 +7452,15 @@
     </message>
     <message>
         <source>Defines 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="obsolete">هرگاه این فیلتر اعمال شده به دستگاه یو اِس بی به رایانه میزبان محلی ضمیمه شده است (<i>خیر</i>)، به یک کلاینت رایانه VRDP (<i>بله</i>)، یا هر دو (<i>هر</i>) را تعریف میکند.</translation>
+        <translation type="vanished">هرگاه این فیلتر اعمال شده به دستگاه یو اِس بی به رایانه میزبان محلی ضمیمه شده است (<i>خیر</i>)، به یک کلاینت رایانه VRDP (<i>بله</i>)، یا هر دو (<i>هر</i>) را تعریف میکند.</translation>
     </message>
     <message>
         <source>&Action:</source>
-        <translation type="obsolete">اق&دام:</translation>
+        <translation type="vanished">اق&دام:</translation>
     </message>
     <message>
         <source>Defines an action performed by the host computer when a matching device is attached: give it up to the host OS (<i>Ignore</i>) or grab it for later usage by virtual machines (<i>Hold</i>).</source>
-        <translation type="obsolete">یک اقدام اجرا شده رایانه میزبان را وقتیکه یک دستگاه مطابق ضمیمه شده است را تعریف میکند: سپرده شده به سیستم عامل میزبان (<i>چشمپوشی</i>) یا قاپیدن آن برای استفاده در زمان دیگر با ماشین مجازی (<i>نگه داشتن</i>).</translation>
+        <translation type="vanished">یک اقدام اجرا شده رایانه میزبان را وقتیکه یک دستگاه مطابق ضمیمه شده است را تعریف میکند: سپرده شده به سیستم عامل میزبان (<i>چشمپوشی</i>) یا قاپیدن آن برای استفاده در زمان دیگر با ماشین مجازی (<i>نگه داشتن</i>).</translation>
     </message>
     <message>
         <source>USB Filter Details</source>
@@ -7467,78 +7517,110 @@
     <name>UIMediumDetailsWidget</name>
     <message>
         <source>&Attributes</source>
-        <translation type="unfinished"></translation>
+        <translation>&صفات</translation>
     </message>
     <message>
         <source>&Information</source>
-        <translation type="unfinished"></translation>
+        <translation>&اطلاعات</translation>
     </message>
     <message>
         <source>&Type:</source>
-        <translation type="unfinished">نو&ع:</translation>
+        <translation>نو&ع:</translation>
     </message>
     <message>
         <source>&Location:</source>
-        <translation type="unfinished"></translation>
+        <translation>&مکان:</translation>
     </message>
     <message>
         <source>&Description:</source>
-        <translation type="unfinished">توضی&حات:</translation>
+        <translation>توضی&حات:</translation>
     </message>
     <message>
         <source>&Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>&اندازه:</translation>
     </message>
     <message>
         <source>Holds the type of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ نوع این رسانه.</translation>
     </message>
     <message>
         <source>Holds the location of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ مکان این رسانه.</translation>
     </message>
     <message>
         <source>Holds the description of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ توضیحات این رسانه.</translation>
     </message>
     <message>
         <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ حجم این رسانه.</translation>
     </message>
     <message>
         <source>Reset</source>
-        <translation type="unfinished">ریست</translation>
+        <translation>ریست</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال</translation>
     </message>
     <message>
         <source>Reset changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات در جزئیات رسانه فعلی</translation>
     </message>
     <message>
         <source>Apply changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات در جزئیات رسانه فعلی</translation>
     </message>
     <message>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات (%1)</translation>
     </message>
     <message>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات (%1)</translation>
     </message>
     <message>
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
+        <translation>نمیتوان حجم رسانه را از <b>%1</b> به <b>%2</b> تغییر داد چون اکنون کوچک کردن ذخیره ساز اکنون آماده نشده است.</translation>
+    </message>
+    <message>
+        <source>Choose Medium Location</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">این نوع رسانه مستقیم یا غیر مستقیم ضمیمه شده است،حین گرفتن ضبط وضعیت حفظ می شود.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">این نوع رسانه غیر مستقیم ضمیمه شده است،تغیرات زمان بعدی شروع ماشین مجازی پاک خواهد شد.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">این نوع رسانه مستقیم ضمیمه شده است،حین گرفتن ضبط وضعیت چشم پوشی شده است.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">این نوع رسانه مستقیم ضمیمه شده است،اجازه استفاده همزمان در چندین ماشین را دارد.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">این نوع رسانه مستقیم ضمیمه شده است،و میتواند در چندین ماشین مورد استفاده قرار گیرد.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">این نوع رسانه غیر مستقیم ضمیمه شده است،بنابراین یک رسانه پایه میتواند برای چندین ماشین مجازی که هر کدام آنها رسانه متفاوتی برای ذخیره تغییرات شان دارند مورد استفاده قرار گیرد.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
     <message>
         <source>&Hard drives</source>
-        <translation type="obsolete">درایو س&خت</translation>
+        <translation type="vanished">درایو س&خت</translation>
     </message>
     <message>
         <source>&Optical disks</source>
@@ -7550,11 +7632,11 @@
     </message>
     <message>
         <source>&Select</source>
-        <translation type="obsolete">&انتخاب</translation>
+        <translation type="vanished">&انتخاب</translation>
     </message>
     <message>
         <source>C&lose</source>
-        <translation type="obsolete">&بستن</translation>
+        <translation type="vanished">&بستن</translation>
     </message>
     <message>
         <source>Removing medium...</source>
@@ -7567,218 +7649,261 @@
     <message>
         <source>%1, %2: %3, %4: %5</source>
         <comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3, %4: %5</translation>
     </message>
     <message>
         <source>Format:</source>
-        <translation type="unfinished">فرمت:</translation>
+        <translation>فرمت:</translation>
     </message>
     <message>
         <source>Storage details:</source>
-        <translation type="unfinished">جزئیات ذخیره ساز:</translation>
+        <translation>جزئیات ذخیره ساز:</translation>
     </message>
     <message>
         <source>Attached to:</source>
-        <translation type="unfinished">ضمیمه شده به:</translation>
+        <translation>ضمیمه شده به:</translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished">رمزگذاری شده با کلید:</translation>
+        <translation>رمزگذاری شده با کلید:</translation>
     </message>
     <message>
         <source>UUID:</source>
-        <translation type="unfinished">UUID:</translation>
+        <translation>UUID:</translation>
     </message>
     <message>
         <source><i>Not&nbsp;Attached</i></source>
-        <translation type="unfinished"><i>ضمیمه&nbsp;نشده است</i></translation>
+        <translation><i>ضمیمه&nbsp;نشده است</i></translation>
     </message>
     <message>
         <source><i>Not&nbsp;Encrypted</i></source>
-        <translation type="unfinished"><i>رمزگذاری نشده&</i></translation>
+        <translation><i>رمزگذاری نشده&</i></translation>
     </message>
     <message>
         <source>--</source>
         <comment>no info</comment>
-        <translation type="unfinished"></translation>
+        <translation>--</translation>
     </message>
     <message>
         <source>&Medium</source>
-        <translation type="unfinished"></translation>
+        <translation>&رسانه</translation>
     </message>
     <message>
         <source>&Copy...</source>
-        <translation type="unfinished">کپ&ی...</translation>
+        <translation>کپ&ی...</translation>
     </message>
     <message>
         <source>Copy selected disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>کپی فایل دیسک ایمیج منتخب</translation>
     </message>
     <message>
         <source>&Remove...</source>
-        <translation type="unfinished">ح&ذف...</translation>
+        <translation>ح&ذف...</translation>
     </message>
     <message>
         <source>Remove selected disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>حذف فایل ایمیج دیسک منتخب</translation>
     </message>
     <message>
         <source>Re&lease...</source>
-        <translation type="unfinished"></translation>
+        <translation>&ترخیص...</translation>
     </message>
     <message>
         <source>Release selected disk image file by detaching it from machines</source>
-        <translation type="unfinished"></translation>
+        <translation>ترخیص فایل ایمیج دیسک منتخب با جداسازی آن از ماشین ها</translation>
     </message>
     <message>
         <source>&Properties...</source>
-        <translation type="unfinished"></translation>
+        <translation>&مشخصات...</translation>
     </message>
     <message>
         <source>Open pane with selected disk image file properties</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن نوار با مشخصات فایل ایمیج دیسک منتخب</translation>
     </message>
     <message>
         <source>Re&fresh</source>
-        <translation type="unfinished">تازه& کردن</translation>
+        <translation>تازه& کردن</translation>
     </message>
     <message>
         <source>Refresh the list of disk image files</source>
-        <translation type="unfinished">تازه کردن لیست رسانه</translation>
+        <translation>تازه کردن لیست رسانه</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">نام</translation>
+        <translation>نام</translation>
     </message>
     <message>
         <source>Virtual Size</source>
-        <translation type="unfinished">حجم مجازی</translation>
+        <translation>حجم مجازی</translation>
     </message>
     <message>
         <source>Actual Size</source>
-        <translation type="unfinished">حجم واقعی</translation>
+        <translation>حجم واقعی</translation>
     </message>
     <message>
         <source>Size</source>
-        <translation type="unfinished">حجم</translation>
+        <translation>حجم</translation>
     </message>
     <message>
         <source>Checking accessibility</source>
-        <translation type="unfinished">بررسی دسترسی پذیری</translation>
+        <translation>بررسی دسترسی پذیری</translation>
     </message>
     <message>
         <source>Moving medium...</source>
-        <translation type="unfinished"></translation>
+        <translation>انتقال رسانه...</translation>
     </message>
     <message>
         <source>Virtual Media Manager</source>
-        <translation type="unfinished">مدیر رسانه مجازی</translation>
+        <translation>مدیر رسانه مجازی</translation>
     </message>
     <message>
         <source>Reset</source>
-        <translation type="unfinished">ریست</translation>
+        <translation>ریست</translation>
     </message>
     <message>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">بستن</translation>
+        <translation>بستن</translation>
     </message>
     <message>
         <source>Reset changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات در جزئیات رسانه فعلی</translation>
     </message>
     <message>
         <source>Apply changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات در جزئیات رسانه فعلی</translation>
     </message>
     <message>
         <source>Close dialog without saving</source>
-        <translation type="unfinished"></translation>
+        <translation>بستن پنجره بدون ذخیره سازی</translation>
     </message>
     <message>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات (%1)</translation>
     </message>
     <message>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات (%1)</translation>
     </message>
     <message>
         <source>Close Window (%1)</source>
+        <translation>بستن پنجره (%1)</translation>
+    </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <source>Copy Disk Image File (%1)</source>
+        <translation type="unfinished">کپی فایل دیسک ایمیج (%1)</translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Remove Disk Image File (%1)</source>
+        <translation type="unfinished">حذف فایل دیسک ایمیج (%1)</translation>
+    </message>
+    <message>
+        <source>Release Disk Image File (%1)</source>
+        <translation type="unfinished">ترخیص فایل ایمیج دیسک (%1)</translation>
+    </message>
+    <message>
+        <source>Open Disk Image File Properties (%1)</source>
+        <translation type="unfinished">بازکردن مشخصات فایل ایمیج دیسک (%1)</translation>
+    </message>
+    <message>
+        <source>Refresh Disk Image Files (%1)</source>
+        <translation type="unfinished">تازه سازی فایل های ایمیج دیسک (%1)</translation>
+    </message>
+</context>
+<context>
+    <name>UIMediumManagerWidget</name>
+    <message>
+        <source>Copy Disk Image File (%1)</source>
+        <translation type="vanished">کپی فایل دیسک ایمیج (%1)</translation>
+    </message>
+    <message>
         <source>Remove Disk Image File (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">حذف فایل دیسک ایمیج (%1)</translation>
     </message>
     <message>
         <source>Release Disk Image File (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">ترخیص فایل ایمیج دیسک (%1)</translation>
     </message>
     <message>
         <source>Open Disk Image File Properties (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">بازکردن مشخصات فایل ایمیج دیسک (%1)</translation>
     </message>
     <message>
         <source>Refresh Disk Image Files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">تازه سازی فایل های ایمیج دیسک (%1)</translation>
     </message>
 </context>
 <context>
     <name>UIMediumSizeEditor</name>
     <message>
         <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ حجم این رسانه.</translation>
     </message>
     <message>
         <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 بایت)</nobr></translation>
+        <translation><nobr>%1 (%2 بایت)</nobr></translation>
     </message>
 </context>
 <context>
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>ویرایش صفات رسانه</translation>
+        <translation type="vanished">ویرایش صفات رسانه</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>شما درصدد تغییر صفات دیسک مجازی قرار گرفته در زیر هستید. <b>%1</b> .</p><p>لطفا یکی از رسانه های زیر را انتخاب کنید و <b>%2</b> فشار دهید تا پیشرفت کند یا <b>%3</b> را فشار دهید.</p></translation>
+        <translation type="vanished"><p>شما درصدد تغییر صفات دیسک مجازی قرار گرفته در زیر هستید. <b>%1</b> .</p><p>لطفا یکی از رسانه های زیر را انتخاب کنید و <b>%2</b> فشار دهید تا پیشرفت کند یا <b>%3</b> را فشار دهید.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>نوع رسانه را انتخاب کنید:</translation>
+        <translation type="vanished">نوع رسانه را انتخاب کنید:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">این نوع رسانه مستقیم یا غیر مستقیم ضمیمه شده است،حین گرفتن ضبط وضعیت حفظ می شود.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">این نوع رسانه غیر مستقیم ضمیمه شده است،تغیرات زمان بعدی شروع ماشین مجازی پاک خواهد شد.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">این نوع رسانه مستقیم ضمیمه شده است،حین گرفتن ضبط وضعیت چشم پوشی شده است.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">این نوع رسانه مستقیم ضمیمه شده است،اجازه استفاده همزمان در چندین ماشین را دارد.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">این نوع رسانه مستقیم ضمیمه شده است،و میتواند در چندین ماشین مورد استفاده قرار گیرد.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">این نوع رسانه غیر مستقیم ضمیمه شده است،بنابراین یک رسانه پایه میتواند برای چندین ماشین مجازی که هر کدام آنها رسانه متفاوتی برای ذخیره تغییرات شان دارند مورد استفاده قرار گیرد.</translation>
     </message>
 </context>
 <context>
@@ -7805,11 +7930,11 @@
     </message>
     <message>
         <source>Toggle menu %1</source>
-        <translation type="unfinished"></translation>
+        <translation>ضامن منوی %1</translation>
     </message>
     <message>
         <source>Popup menu %1</source>
-        <translation type="unfinished"></translation>
+        <translation>پاپ آپ منوی %1</translation>
     </message>
 </context>
 <context>
@@ -7854,7 +7979,7 @@
     </message>
     <message>
         <source><p>Failed to create the VirtualBox COM object.</p><p>The application will now terminate.</p></source>
-        <translation type="obsolete"><p>موفق به ایجاد شی کام ویرچوال باکس نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <translation type="vanished"><p>موفق به ایجاد شی کام ویرچوال باکس نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </message>
     <message>
         <source>Failed to set global VirtualBox properties.</source>
@@ -7870,11 +7995,11 @@
     </message>
     <message>
         <source>Failed to create a new virtual machine <b>%1</b>.</source>
-        <translation type="obsolete">موفق به ایجاد ماشین مجازی جدید <b>%1</b> نشد.</translation>
+        <translation type="vanished">موفق به ایجاد ماشین مجازی جدید <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to apply the settings to the virtual machine <b>%1</b>.</source>
-        <translation type="obsolete">موفق به اِعمال تغییرات در ماشین مجازی <b>%1</b> نشد.</translation>
+        <translation type="vanished">موفق به اِعمال تغییرات در ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to start the virtual machine <b>%1</b>.</source>
@@ -7938,7 +8063,7 @@
     </message>
     <message>
         <source>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</source>
-        <translation type="obsolete">موفق به حذف پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) از ماشین مجازی <b>%3</b> نشد.</translation>
+        <translation type="vanished">موفق به حذف پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) از ماشین مجازی <b>%3</b> نشد.</translation>
     </message>
     <message>
         <source><p>The Virtual Machine reports that the guest OS does not support <b>mouse pointer integration</b> in the current video mode. You need to capture the mouse (by clicking over the VM display or pressing the host key) in order to use the mouse inside the guest OS.</p></source>
@@ -7950,7 +8075,7 @@
     </message>
     <message>
         <source><p>Cannot run VirtualBox in <i>VM Selector</i> mode due to local restrictions.</p><p>The application will now terminate.</p></source>
-        <translation type="obsolete"><p>به علت محدودیت های محلی قادر به اِجرای ویرچوال باکس در حالت <i>گزینشگر مجازی</i> نیست.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <translation type="vanished"><p>به علت محدودیت های محلی قادر به اِجرای ویرچوال باکس در حالت <i>گزینشگر مجازی</i> نیست.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </message>
     <message>
         <source><nobr>Fatal Error</nobr></source>
@@ -8016,11 +8141,11 @@
     </message>
     <message>
         <source><p>Could not find a language file for the language <b>%1</b> in the directory <b><nobr>%2</nobr></b>.</p><p>The language will be temporarily reset to the system default language. Please go to the <b>Preferences</b> window which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source>
-        <translation type="obsolete"><p>قادر به یافتن فایل زبان برای زبان <b>%1</b> در دایرکتوری زیر نیست:<b><nobr>%2</nobr></b> </p><p> زبان موقتا به زبان پیش فرض سیستم ریست خواهد شد. لطفا به پنجره <b>اولویت ها</b> بروید که آن را میتوان از منوی <b>فایل</b> در پنجره اصلی برنامه یافت، و یکی از زبان های موجود در صفحه <b>زبان</b> را انتخاب کنید.</p></translation>
+        <translation type="vanished"><p>قادر به یافتن فایل زبان برای زبان <b>%1</b> در دایرکتوری زیر نیست:<b><nobr>%2</nobr></b> </p><p> زبان موقتا به زبان پیش فرض سیستم ریست خواهد شد. لطفا به پنجره <b>اولویت ها</b> بروید که آن را میتوان از منوی <b>فایل</b> در پنجره اصلی برنامه یافت، و یکی از زبان های موجود در صفحه <b>زبان</b> را انتخاب کنید.</p></translation>
     </message>
     <message>
         <source><p>Could not load the language file <b><nobr>%1</nobr></b>. <p>The language will be temporarily reset to English (built-in). Please go to the <b>Preferences</b> window which you can open from the <b>File</b> menu of the main VirtualBox window, and select one of the existing languages on the <b>Language</b> page.</p></source>
-        <translation type="obsolete"><p>قادر به بارگیری فایل زبان <b><nobr>%1</nobr></b> نیست. <p>زبان موقتا به زبان توکار برنامه یعنی انگلیسی ریست میشود. لطفا به پنجره <b>اولویت ها</b> بروید که میتوانید آن را از منوی <b>فایل</b> از پنجره اصلی برنامه باز کنید، و یکی از زبان های موجود را از صفحه <b>زبان</b> انتخاب کنید.</p></translation>
+        <translation type="vanished"><p>قادر به بارگیری فایل زبان <b><nobr>%1</nobr></b> نیست. <p>زبان موقتا به زبان توکار برنامه یعنی انگلیسی ریست میشود. لطفا به پنجره <b>اولویت ها</b> بروید که میتوانید آن را از منوی <b>فایل</b> از پنجره اصلی برنامه باز کنید، و یکی از زبان های موجود را از صفحه <b>زبان</b> انتخاب کنید.</p></translation>
     </message>
     <message>
         <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source>
@@ -8028,19 +8153,19 @@
     </message>
     <message>
         <source><p>Are you sure you want to download the VirtualBox Guest Additions disk image file from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source>
-        <translation type="obsolete"><p>آیا میخواهید ایمیج سی دی افزونه مهمان ویرچوال باکس را از <nobr><a href="%1">%2</a></nobr> (حجم %3 بایت) دانلود کنید؟</p></translation>
+        <translation type="vanished"><p>آیا میخواهید ایمیج سی دی افزونه مهمان ویرچوال باکس را از <nobr><a href="%1">%2</a></nobr> (حجم %3 بایت) دانلود کنید؟</p></translation>
     </message>
     <message>
         <source><p>The VirtualBox Guest Additions disk image file has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual CD/DVD drive?</p></source>
-        <translation type="obsolete"><p>ایمیج سی دی افزونه مهمان ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p><p>آیا میخواهید این ایمیج سی دی را ثبت کرده و آن را در درایو سی دی/دی وی دی مجازی بارگیری کنید؟</p></translation>
+        <translation type="vanished"><p>ایمیج سی دی افزونه مهمان ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p><p>آیا میخواهید این ایمیج سی دی را ثبت کرده و آن را در درایو سی دی/دی وی دی مجازی بارگیری کنید؟</p></translation>
     </message>
     <message>
         <source><p>The virtual machine window is optimized to work in <b>%1&nbsp;bit</b> color mode but the virtual display is currently set to <b>%2&nbsp;bit</b>.</p><p>Please open the display properties dialog of the guest OS and select a <b>%3&nbsp;bit</b> color mode, if it is available, for best possible performance of the virtual video subsystem.</p><p><b>Note</b>. Some operating systems, like  [...]
-        <translation type="obsolete"><p>پنجره ماشین مجازی برای کار در حالت رنگی <b>%1&nbsp;بیت</b> بهسازی شده است اما نمایشگر مجازی اکنون روی <b>%2&nbsp;بیت</b> تنظیم شده است.</p><p>لطفا پنجره مشخصات نمایش سیستم عامل مهمان را باز کنید و حالت رنگی <b>%3&nbsp;بیت</b> را انتخاب کنید، اگر آن موجود است، آن بهترین کارایی ممکن را برای ویدیو مجازی سیستم فرعی دارد.</p><p><b>توجه</b>. برخی سیستم عامل ها، مانن [...]
+        <translation type="vanished"><p>پنجره ماشین مجازی برای کار در حالت رنگی <b>%1&nbsp;بیت</b> بهسازی شده است اما نمایشگر مجازی اکنون روی <b>%2&nbsp;بیت</b> تنظیم شده است.</p><p>لطفا پنجره مشخصات نمایش سیستم عامل مهمان را باز کنید و حالت رنگی <b>%3&nbsp;بیت</b> را انتخاب کنید، اگر آن موجود است، آن بهترین کارایی ممکن را برای ویدیو مجازی سیستم فرعی دارد.</p><p><b>توجه</b>. برخی سیستم عامل ها، مانن [...]
     </message>
     <message>
         <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source>
-        <translation type="obsolete">موفق به یافتن فایل مجوز در <nobr><b>%1</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به یافتن فایل مجوز در <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source>
@@ -8052,7 +8177,7 @@
     </message>
     <message>
         <source><p>Congratulations! You have been successfully registered as a user of VirtualBox.</p><p>Thank you for finding time to fill out the registration form!</p></source>
-        <translation type="obsolete"><p>تبریک میگم! شما بعنوان کاربر ویرچوال باکس باموفقیت ثبت نام کردید.</p><p>از شما برای گذاشتن زمان و پرکردن این فرم تشکر میکنیم!</p></translation>
+        <translation type="vanished"><p>تبریک میگم! شما بعنوان کاربر ویرچوال باکس باموفقیت ثبت نام کردید.</p><p>از شما برای گذاشتن زمان و پرکردن این فرم تشکر میکنیم!</p></translation>
     </message>
     <message>
         <source><p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source>
@@ -8068,7 +8193,7 @@
     </message>
     <message>
         <source>Failed to load the settings of the virtual machine <b>%1</b> from <b><nobr>%2</nobr></b>.</source>
-        <translation type="obsolete">موفق به بارگیری تنظیمات ماشین مجازی <b>%1</b> از <b><nobr>%2</nobr></b> نشد.</translation>
+        <translation type="vanished">موفق به بارگیری تنظیمات ماشین مجازی <b>%1</b> از <b><nobr>%2</nobr></b> نشد.</translation>
     </message>
     <message>
         <source>Discard</source>
@@ -8078,7 +8203,7 @@
     <message>
         <source>Download</source>
         <comment>additions</comment>
-        <translation type="obsolete">دانلود</translation>
+        <translation type="vanished">دانلود</translation>
     </message>
     <message>
         <source>Insert</source>
@@ -8103,12 +8228,12 @@
     <message>
         <source>Switch</source>
         <comment>fullscreen</comment>
-        <translation type="obsolete">تعویض</translation>
+        <translation type="vanished">تعویض</translation>
     </message>
     <message>
         <source>Switch</source>
         <comment>seamless</comment>
-        <translation type="obsolete">تعویض</translation>
+        <translation type="vanished">تعویض</translation>
     </message>
     <message>
         <source>Reset</source>
@@ -8131,7 +8256,7 @@
     </message>
     <message>
         <source><p>Could not switch the guest display to fullscreen 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 fullscreen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
-        <translation type="obsolete"><p>به علت حافظه ویدیویی ناکافی قادر به تعویض صفحه مهمان به حالت تمام صفحه نیست.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p><p>دکمه <b>چشمپوشی</b> را برای رفتن به حالت تمام صفحه درهر صورت فشار دهید یا دکمه <b>لغو</b> را برای لغو عملکرد فشار دهید.</p></translation>
+        <translation type="vanished"><p>به علت حافظه ویدیویی ناکافی قادر به تعویض صفحه مهمان به حالت تمام صفحه نیست.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p><p>دکمه <b>چشمپوشی</b> را برای رفتن به حالت تمام صفحه درهر صورت فشار دهید یا دکمه <b>لغو</b> را برای لغو عملکرد فشار دهید.</p></translation>
     </message>
     <message>
         <source>You are already running the most recent version of VirtualBox.</source>
@@ -8155,7 +8280,7 @@
     </message>
     <message>
         <source><p>Are you sure you want to release the %1 <nobr><b>%2</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%3</b>.</p></source>
-        <translation type="obsolete"><p>آیا میخواهید که %1 زیر را ترخیص کنید؟ <nobr><b>%2</b></nobr> </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%3</b>.</p></translation>
+        <translation type="vanished"><p>آیا میخواهید که %1 زیر را ترخیص کنید؟ <nobr><b>%2</b></nobr> </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%3</b>.</p></translation>
     </message>
     <message>
         <source>Release</source>
@@ -8164,15 +8289,15 @@
     </message>
     <message>
         <source><p>Are you sure you want to remove the %1 <nobr><b>%2</b></nobr> from the list of known disk image files?</p></source>
-        <translation type="obsolete"><p>آیا میخواهید %1 <nobr><b>%2</b></nobr> را از لیست رسانه شناخته شده حذف کنید؟</p></translation>
+        <translation type="vanished"><p>آیا میخواهید %1 <nobr><b>%2</b></nobr> را از لیست رسانه شناخته شده حذف کنید؟</p></translation>
     </message>
     <message>
         <source>As this hard disk is inaccessible its image file can not be deleted.</source>
-        <translation type="obsolete">توجه کنید که این دیسک سخت غیرقابل دسترسی میباشد،واحد ذخیره ساز آن درحال حاضر قابل حذف نمیباشد.</translation>
+        <translation type="vanished">توجه کنید که این دیسک سخت غیرقابل دسترسی میباشد،واحد ذخیره ساز آن درحال حاضر قابل حذف نمیباشد.</translation>
     </message>
     <message>
         <source>The next dialog will let you choose whether you also want to delete the storage unit of this hard disk or keep it for later usage.</source>
-        <translation type="obsolete">پنجره بعدی به شما اجازه حذف واحد ذخیره ساز این دیسک سخت یا حفظ آن را برای استفاده در آینده را میدهد.</translation>
+        <translation type="vanished">پنجره بعدی به شما اجازه حذف واحد ذخیره ساز این دیسک سخت یا حفظ آن را برای استفاده در آینده را میدهد.</translation>
     </message>
     <message>
         <source>Remove</source>
@@ -8185,7 +8310,7 @@
     </message>
     <message>
         <source><p>Do you want to delete the storage unit of the 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 makes it po [...]
-        <translation type="obsolete"><p>آیا میخواهید واحد ذخیره ساز دیسک سخت <nobr><b>%1</b></nobr> را حذف کنید؟</p><p>اگر شما <b>حذف</b> را انتخاب کنید سپس واحد ذخیره ساز مشخص شده همیشگی حذف خواهد شد. این عملکرد <b>قابل آندوکردن</b>نیست.</p><p>اگر شما <b>حفظ</b> را انتخاب کنید،سپس دیسک سخت فقط از لیست دیسک سخت های شناخته شده حذف خواهد شد، اما واحد ذخیره ساز دست نخورده باقی میماند که آن موجب میشود ب [...]
+        <translation type="vanished"><p>آیا میخواهید واحد ذخیره ساز دیسک سخت <nobr><b>%1</b></nobr> را حذف کنید؟</p><p>اگر شما <b>حذف</b> را انتخاب کنید سپس واحد ذخیره ساز مشخص شده همیشگی حذف خواهد شد. این عملکرد <b>قابل آندوکردن</b>نیست.</p><p>اگر شما <b>حفظ</b> را انتخاب کنید،سپس دیسک سخت فقط از لیست دیسک سخت های شناخته شده حذف خواهد شد، اما واحد ذخیره ساز دست نخورده باقی میماند که آن موجب میشود ب [...]
     </message>
     <message>
         <source>Delete</source>
@@ -8207,11 +8332,11 @@
     </message>
     <message>
         <source>Failed to open the %1 <nobr><b>%2</b></nobr>.</source>
-        <translation type="obsolete">موفق به بازکردن %1 <nobr><b>%2</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بازکردن %1 <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to close the %1 <nobr><b>%2</b></nobr>.</source>
-        <translation type="obsolete">موفق به بستن %1 <nobr><b>%2</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بستن %1 <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to access the disk image file <nobr><b>%1</b></nobr>.</source>
@@ -8219,11 +8344,11 @@
     </message>
     <message>
         <source><p>Failed to connect to the VirtualBox online registration service due to the following error:</p><p><b>%1</b></p></source>
-        <translation type="obsolete"><p>به علت خطای زیر موفق به اتصال به سرویس ثبت نام آنلاین ویرچوال باکس نشد:</p><p><b>%1</b></p></translation>
+        <translation type="vanished"><p>به علت خطای زیر موفق به اتصال به سرویس ثبت نام آنلاین ویرچوال باکس نشد:</p><p><b>%1</b></p></translation>
     </message>
     <message>
         <source><p>One or more virtual hard disks, CD/DVD or floppy 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="obsolete"><p>یک یا تعداد بیشتری دیسک سخت مجازی، سی دی/دی وی دی یا رسانه فلاپی اکنون قابل دسترسی نیستند. درنتیجه، تا زمانیکه این رسانه ها قابل دسترسی نباشد شما قادر به استفاده از ماشین مجازی نیستید.</p><p>دکمه <b>بررسی</b> را برای بازکردن پنجره مدیر رسانه مجازی فشار دهید و مشاهده کنید کدام رسانه ها قابل دسترسی نیستند، یا دکمه <b>چشمپوشی</b> را برای نادیده گرفتن این پیام فشار دهید.</p></translation>
+        <translation type="vanished"><p>یک یا تعداد بیشتری دیسک سخت مجازی، سی دی/دی وی دی یا رسانه فلاپی اکنون قابل دسترسی نیستند. درنتیجه، تا زمانیکه این رسانه ها قابل دسترسی نباشد شما قادر به استفاده از ماشین مجازی نیستید.</p><p>دکمه <b>بررسی</b> را برای بازکردن پنجره مدیر رسانه مجازی فشار دهید و مشاهده کنید کدام رسانه ها قابل دسترسی نیستند، یا دکمه <b>چشمپوشی</b> را برای نادیده گرفتن این پیام فشار دهید.</p></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 [...]
@@ -8259,15 +8384,15 @@
     </message>
     <message>
         <source>Failed to create the host-only network interface.</source>
-        <translation type="obsolete">موفق به ایجاد رابط شبکه فقط-میزبان نشد.</translation>
+        <translation type="vanished">موفق به ایجاد رابط شبکه فقط-میزبان نشد.</translation>
     </message>
     <message>
         <source><p>Your existing VirtualBox settings files will be automatically converted from the old format to a new format required by the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>Exit</b> if you want to terminate the VirtualBox application without any further actions.</p></source>
-        <translation type="obsolete"><p>فایل تنظیمات موجود ویرچوال باکس خودکار از فرمت قدیمی به فرمت جدید موردنیاز با نسخه جدید ویرچوال باکس تبدیل خواهد شد.</p><p>دکمه <b>تأیید</b> را برای اِجرای ویرچوال باکس فشار دهید یا دکمه <b>خروج</b> را اگر میخواهید برنامه ویرچوال باکس بدون هیچ اقدامی بعدی بسته شود را فشار دهید.</p></translation>
+        <translation type="vanished"><p>فایل تنظیمات موجود ویرچوال باکس خودکار از فرمت قدیمی به فرمت جدید موردنیاز با نسخه جدید ویرچوال باکس تبدیل خواهد شد.</p><p>دکمه <b>تأیید</b> را برای اِجرای ویرچوال باکس فشار دهید یا دکمه <b>خروج</b> را اگر میخواهید برنامه ویرچوال باکس بدون هیچ اقدامی بعدی بسته شود را فشار دهید.</p></translation>
     </message>
     <message>
         <source>Failed to open appliance.</source>
-        <translation type="obsolete">موفق به بازکردن وسیله نشد.</translation>
+        <translation type="vanished">موفق به بازکردن وسیله نشد.</translation>
     </message>
     <message>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
@@ -8279,7 +8404,7 @@
     </message>
     <message>
         <source>Failed to create appliance.</source>
-        <translation type="obsolete">موفق به ایجاد وسیله نشد.</translation>
+        <translation type="vanished">موفق به ایجاد وسیله نشد.</translation>
     </message>
     <message>
         <source>Failed to prepare the export of the appliance <b>%1</b>.</source>
@@ -8287,7 +8412,7 @@
     </message>
     <message>
         <source>Failed to create an appliance.</source>
-        <translation type="obsolete">موفق به ایجاد یک وسیله نشد.</translation>
+        <translation type="vanished">موفق به ایجاد یک وسیله نشد.</translation>
     </message>
     <message>
         <source>Failed to export appliance <b>%1</b>.</source>
@@ -8307,11 +8432,11 @@
     </message>
     <message>
         <source><p>Invalid e-mail address or password specified.</p></source>
-        <translation type="obsolete"><p>آدرس ایمیل یا رمزعبور نامعتبر تعیین شده است.</p></translation>
+        <translation type="vanished"><p>آدرس ایمیل یا رمزعبور نامعتبر تعیین شده است.</p></translation>
     </message>
     <message>
         <source><p>Failed to register the VirtualBox product.</p><p>%1</p></source>
-        <translation type="obsolete"><p>موفق به ثبت نام محصول ویرچوال باکس نشد.</p><p>%1</p></translation>
+        <translation type="vanished"><p>موفق به ثبت نام محصول ویرچوال باکس نشد.</p><p>%1</p></translation>
     </message>
     <message>
         <source>Failed to check files.</source>
@@ -8335,7 +8460,7 @@
     </message>
     <message>
         <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and disk 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="obsolete"><p>حذف ضبط وضعیت موجب میشود که اطلاعات ذخیره شده در آن از دست برود، و داده دیسک که در سطح چندین ایمیج گسترش یافته با اضافه ضبط وضعیت داخل یک فایل ادغام شوند. این میتواند یک فرآیند طولانی باشد، و اطلاعات ضبط وضعیت قابل بازگردانی نیست.</p></p>آیا میخواهید ضبط وضعیت انتخاب شده <b>%1</b> را حذف کنید؟</p></translation>
+        <translation type="vanished"><p>حذف ضبط وضعیت موجب میشود که اطلاعات ذخیره شده در آن از دست برود، و داده دیسک که در سطح چندین ایمیج گسترش یافته با اضافه ضبط وضعیت داخل یک فایل ادغام شوند. این میتواند یک فرآیند طولانی باشد، و اطلاعات ضبط وضعیت قابل بازگردانی نیست.</p></p>آیا میخواهید ضبط وضعیت انتخاب شده <b>%1</b> را حذف کنید؟</p></translation>
     </message>
     <message>
         <source>Delete</source>
@@ -8351,19 +8476,19 @@
     </message>
     <message>
         <source>Unable to insert the %1 <nobr><b>%2</b></nobr> into the machine <b>%3</b>.</source>
-        <translation type="obsolete">قادر به بارگیری %1 <nobr><b>%2</b></nobr> در ماشین <b>%3</b> نیست.</translation>
+        <translation type="vanished">قادر به بارگیری %1 <nobr><b>%2</b></nobr> در ماشین <b>%3</b> نیست.</translation>
     </message>
     <message>
         <source> Would you like to force mounting of this medium?</source>
-        <translation type="obsolete"> آیا میخواهید این رسانه را اجباری بارگیری کنید؟</translation>
+        <translation type="vanished"> آیا میخواهید این رسانه را اجباری بارگیری کنید؟</translation>
     </message>
     <message>
         <source>Unable to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>.</source>
-        <translation type="obsolete">قادر به تخلیه %1 <nobr><b>%2</b></nobr> از ماشین <b>%3</b> نیست.</translation>
+        <translation type="vanished">قادر به تخلیه %1 <nobr><b>%2</b></nobr> از ماشین <b>%3</b> نیست.</translation>
     </message>
     <message>
         <source> Would you like to force unmounting of this medium?</source>
-        <translation type="obsolete"> آیا میخواهید این رسانه را اجباری تخلیه کنید؟</translation>
+        <translation type="vanished"> آیا میخواهید این رسانه را اجباری تخلیه کنید؟</translation>
     </message>
     <message>
         <source>Force Unmount</source>
@@ -8371,45 +8496,45 @@
     </message>
     <message>
         <source><p>Could not insert the VirtualBox Guest Additions installer disk image file into the virtual machine <b>%1</b>, as the machine has no CD/DVD drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
-        <translation type="obsolete"><p>نمیتوان ایمیج سی دی نصب کننده افزونه مهمان ویرچوال باکس را داخل ماشین مجازی <b>%1</b>قرار داد، چونکه ماشین درایو سی دی/دی وی دی ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
+        <translation type="vanished"><p>نمیتوان ایمیج سی دی نصب کننده افزونه مهمان ویرچوال باکس را داخل ماشین مجازی <b>%1</b>قرار داد، چونکه ماشین درایو سی دی/دی وی دی ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
     </message>
     <message>
         <source>E&xit</source>
         <comment>warnAboutSettingsAutoConversion message box</comment>
-        <translation type="obsolete">خر&وج</translation>
+        <translation type="vanished">خر&وج</translation>
     </message>
     <message>
         <source><p>The following VirtualBox settings files will be automatically converted from the old format to a new format required by the new version of VirtualBox.</p><p>Press <b>OK</b> to start VirtualBox now or press <b>Exit</b> if you want to terminate the VirtualBox application without any further actions.</p></source>
-        <translation type="obsolete"><p>فایل تنظیمات زیرین ویرچوال باکس خودکار از فرمت قدیمی به فرمت جدید که موردنیاز نسخه جدید است تبدیل خواهد شد.</p><p>دکمه <b>تأیید</b> را برای شروع ویرچوال باکس فشار دهید یا دکمه <b>خروج</b> را اگر میخواهید برنامه ویرچوال باکس بدون هیچ اقدامی بعدی بسته شود را فشار دهید.</p></translation>
+        <translation type="vanished"><p>فایل تنظیمات زیرین ویرچوال باکس خودکار از فرمت قدیمی به فرمت جدید که موردنیاز نسخه جدید است تبدیل خواهد شد.</p><p>دکمه <b>تأیید</b> را برای شروع ویرچوال باکس فشار دهید یا دکمه <b>خروج</b> را اگر میخواهید برنامه ویرچوال باکس بدون هیچ اقدامی بعدی بسته شود را فشار دهید.</p></translation>
     </message>
     <message>
         <source>hard disk</source>
         <comment>failed to mount ...</comment>
-        <translation type="obsolete">دیسک سخت</translation>
+        <translation type="vanished">دیسک سخت</translation>
     </message>
     <message>
         <source>CD/DVD</source>
         <comment>failed to mount ... host-drive</comment>
-        <translation type="obsolete">سی دی/دی وی دی</translation>
+        <translation type="vanished">سی دی/دی وی دی</translation>
     </message>
     <message>
         <source>CD/DVD image</source>
         <comment>failed to mount ...</comment>
-        <translation type="obsolete">ایمیج سی دی/دی وی دی</translation>
+        <translation type="vanished">ایمیج سی دی/دی وی دی</translation>
     </message>
     <message>
         <source>floppy</source>
         <comment>failed to mount ... host-drive</comment>
-        <translation type="obsolete">فلاپی</translation>
+        <translation type="vanished">فلاپی</translation>
     </message>
     <message>
         <source>floppy image</source>
         <comment>failed to mount ...</comment>
-        <translation type="obsolete">ایمیج فلاپی</translation>
+        <translation type="vanished">ایمیج فلاپی</translation>
     </message>
     <message>
         <source><p>Are you sure you want to delete the CD/DVD device?</p><p>You will not be able to insert any CDs or ISO images or install the Guest Additions without it!</p></source>
-        <translation type="obsolete"><p>آیا میخواهید دستگاه سی دی/دی وی دی رام را حذف کنید؟</p><p>شما قادر به بارگیری سی دی یا ایمیج ایزو یا نصب افزونه مهمان بدون آن نیستید!</p></translation>
+        <translation type="vanished"><p>آیا میخواهید دستگاه سی دی/دی وی دی رام را حذف کنید؟</p><p>شما قادر به بارگیری سی دی یا ایمیج ایزو یا نصب افزونه مهمان بدون آن نیستید!</p></translation>
     </message>
     <message>
         <source>&Remove</source>
@@ -8426,7 +8551,7 @@
     </message>
     <message>
         <source><p>Deleting the snapshot %1 will temporarily need more disk 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 disk 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="obsolete"><p>حذف ضبط وضعیت %1 موقتا فضای دیسک بیشتری را نیاز دارد. در بدترین حالت حجم ایمیج %2 توسط %3افزایش خواهد یافت، هرچند در این فایل سیستم آنجا فقط %4 آزاد است.</p><p>خارج شدن از فضای دیسک حین عملکرد ادغام میتواند موجب خرابی ایمیج و پیکربندی ماشین مجازی شود، مثل از دست دادن ماشین مجازی و داده های آن.</p><p>شما میتوانید با ریسک خود ضبط وضعیت را حذف کنید.</p></translation>
+        <translation type="vanished"><p>حذف ضبط وضعیت %1 موقتا فضای دیسک بیشتری را نیاز دارد. در بدترین حالت حجم ایمیج %2 توسط %3افزایش خواهد یافت، هرچند در این فایل سیستم آنجا فقط %4 آزاد است.</p><p>خارج شدن از فضای دیسک حین عملکرد ادغام میتواند موجب خرابی ایمیج و پیکربندی ماشین مجازی شود، مثل از دست دادن ماشین مجازی و داده های آن.</p><p>شما میتوانید با ریسک خود ضبط وضعیت را حذف کنید.</p></translation>
     </message>
     <message>
         <source><p>Could not change the guest screen to this host screen 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></source>
@@ -8438,27 +8563,27 @@
     </message>
     <message>
         <source><p>Can not switch the guest display to fullscreen mode. You have more virtual screens configured than physical screens are attached to your host.</p><p>Please either lower the virtual screens in your VM configuration or attach additional screens to your host.</p></source>
-        <translation type="obsolete"><p>نمیتوان صفحه مهمان را به حالت تمام صفحه برد. شما نمایشگر مجازی بیشتری نسبت به نمایشگر فیزیکی ضمیمه شده به میزبان پیکربندی کرده اید.</p><p>لطفا یا صفحه مجازی را در پیکربندی ماشین مجازی کمتر کنید یا نمایشگر بیشتری به میزبان اضافه کنید.</p></translation>
+        <translation type="vanished"><p>نمیتوان صفحه مهمان را به حالت تمام صفحه برد. شما نمایشگر مجازی بیشتری نسبت به نمایشگر فیزیکی ضمیمه شده به میزبان پیکربندی کرده اید.</p><p>لطفا یا صفحه مجازی را در پیکربندی ماشین مجازی کمتر کنید یا نمایشگر بیشتری به میزبان اضافه کنید.</p></translation>
     </message>
     <message>
         <source><p>Can not switch the guest display to seamless mode. You have more virtual screens configured than physical screens are attached to your host.</p><p>Please either lower the virtual screens in your VM configuration or attach additional screens to your host.</p></source>
-        <translation type="obsolete"><p>نمیتوان صفحه مهمان را به حالت یکپارچه برد. شما نمایشگر مجازی بیشتر از نمایشگر فیزیکی به میزبان ضمیمه کرده اید.</p><p>لطفا نمایشگر مجازی کمتری در پیکربندی ماشین مجازی انتخاب کنید یا نمایشگر بیشتری به میزبان خود ضمیمه کنید.</p></translation>
+        <translation type="vanished"><p>نمیتوان صفحه مهمان را به حالت یکپارچه برد. شما نمایشگر مجازی بیشتر از نمایشگر فیزیکی به میزبان ضمیمه کرده اید.</p><p>لطفا نمایشگر مجازی کمتری در پیکربندی ماشین مجازی انتخاب کنید یا نمایشگر بیشتری به میزبان خود ضمیمه کنید.</p></translation>
     </message>
     <message>
         <source><p>Could not find the VirtualBox User Manual <nobr><b>%1</b>.</nobr></p><p>Do you wish to download this file from the Internet?</p></source>
-        <translation type="obsolete"><p>قادر به یافتنراهنمای کاربر ویرچوال باکس <nobr><b>%1</b> نیست.</nobr></p><p>آیا میخواهید این فایل را از اینترنت دانلود کنید؟</p></translation>
+        <translation type="vanished"><p>قادر به یافتنراهنمای کاربر ویرچوال باکس <nobr><b>%1</b> نیست.</nobr></p><p>آیا میخواهید این فایل را از اینترنت دانلود کنید؟</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to download the VirtualBox User Manual from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source>
-        <translation type="obsolete"><p>آیا میخواهید راهنمای کاربر ویرچوال باکس را از <nobr><a href="%1">%2</a></nobr> (حجم %3 بایت) دانلود کنید؟</p></translation>
+        <translation type="vanished"><p>آیا میخواهید راهنمای کاربر ویرچوال باکس را از <nobr><a href="%1">%2</a></nobr> (حجم %3 بایت) دانلود کنید؟</p></translation>
     </message>
     <message>
         <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p></source>
-        <translation type="obsolete"><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p></translation>
+        <translation type="vanished"><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p></translation>
     </message>
     <message>
         <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> but can't be saved locally as <nobr><b>%3</b>.</nobr></p><p>Please choose another location for that file.</p></source>
-        <translation type="obsolete"><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد اما نمیتواند بطور محلی بعنوان <nobr><b>%3</b> ذخیره شود.</nobr></p><p>لطفا برای آن فایل محل دیگری را انتخاب کنید.</p></translation>
+        <translation type="vanished"><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد اما نمیتواند بطور محلی بعنوان <nobr><b>%3</b> ذخیره شود.</nobr></p><p>لطفا برای آن فایل محل دیگری را انتخاب کنید.</p></translation>
     </message>
     <message>
         <source>Failed to open virtual machine located in %1.</source>
@@ -8487,26 +8612,26 @@
     <message>
         <source>Create &new disk</source>
         <comment>add attachment routine</comment>
-        <translation type="obsolete">ایجاد دیسک &جدید</translation>
+        <translation type="vanished">ایجاد دیسک &جدید</translation>
     </message>
     <message>
         <source>&Choose existing disk</source>
         <comment>add attachment routine</comment>
-        <translation type="obsolete">انتخاب دی&سک موجود</translation>
+        <translation type="vanished">انتخاب دی&سک موجود</translation>
     </message>
     <message>
         <source><p>You are about to add a new CD/DVD drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual CD/DVD disk to put in the drive or to leave it empty for now?</p></source>
-        <translation type="obsolete"><p>شما درصدد افزودن درایو سی دی/دی وی دی به کنترلر <b>%1</b> هستید؟</p><p>آیا میخواهید دیسک مجازی سی دی/دی وی دی برای قراردادن در درایو انتخاب کنید یا آن را خالی بگذارید؟</p></translation>
+        <translation type="vanished"><p>شما درصدد افزودن درایو سی دی/دی وی دی به کنترلر <b>%1</b> هستید؟</p><p>آیا میخواهید دیسک مجازی سی دی/دی وی دی برای قراردادن در درایو انتخاب کنید یا آن را خالی بگذارید؟</p></translation>
     </message>
     <message>
         <source>&Choose disk</source>
         <comment>add attachment routine</comment>
-        <translation type="obsolete">انتخاب د&یسک</translation>
+        <translation type="vanished">انتخاب د&یسک</translation>
     </message>
     <message>
         <source>Leave &empty</source>
         <comment>add attachment routine</comment>
-        <translation type="obsolete">خالی &بگذار</translation>
+        <translation type="vanished">خالی &بگذار</translation>
     </message>
     <message>
         <source><p>You are about to add a new floppy drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual floppy disk to put in the drive or to leave it empty for now?</p></source>
@@ -8518,11 +8643,11 @@
     </message>
     <message>
         <source>Failed to detach the CD/DVD device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="obsolete">موفق به جداکردن دستگاه سی دی/دی وی دی (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <translation type="vanished">موفق به جداکردن دستگاه سی دی/دی وی دی (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to detach the floppy device (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="obsolete">موفق به جداکردن دستگاه فلاپی (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <translation type="vanished">موفق به جداکردن دستگاه فلاپی (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to update Guest Additions. The Guest Additions disk image file will be inserted for user installation.</source>
@@ -8554,11 +8679,11 @@
     </message>
     <message>
         <source>Failed to attach the CD/DVD device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="obsolete">موفق به ضمیمه دستگاه سی دی/دی وی دی (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <translation type="vanished">موفق به ضمیمه دستگاه سی دی/دی وی دی (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to attach the floppy device (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="obsolete">موفق به ضمیمه دستگاه (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <translation type="vanished">موفق به ضمیمه دستگاه (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
     </message>
     <message>
         <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source>
@@ -8570,7 +8695,7 @@
     </message>
     <message>
         <source><p>The virtual machine window will be now switched to <b>fullscreen</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 fullscreen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
-        <translation type="obsolete"><p>پنجره ماشین مجازی حالا به حالت <b>تمام صفحه</b> میرود. با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت یکپارچه پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
+        <translation type="vanished"><p>پنجره ماشین مجازی حالا به حالت <b>تمام صفحه</b> میرود. با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت یکپارچه پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
     </message>
     <message>
         <source><p>The virtual machine window will be now switched to <b>Seamless</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 seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source>
@@ -8583,7 +8708,7 @@
     <message>
         <source>Switch</source>
         <comment>scale</comment>
-        <translation type="obsolete">تعویض</translation>
+        <translation type="vanished">تعویض</translation>
     </message>
     <message>
         <source>Failed to open the Extension Pack <b>%1</b>.</source>
@@ -8595,7 +8720,7 @@
     </message>
     <message>
         <source>&Install</source>
-        <translation type="obsolete">ن&صب</translation>
+        <translation type="vanished">ن&صب</translation>
     </message>
     <message>
         <source>Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</source>
@@ -8671,11 +8796,11 @@
     </message>
     <message>
         <source>Sorry, some generic error happens.</source>
-        <translation type="obsolete">متاسفیم، تعدادی خطای کلی رخ داده است.</translation>
+        <translation type="vanished">متاسفیم، تعدادی خطای کلی رخ داده است.</translation>
     </message>
     <message>
         <source><p>USB 2.0 is currently enabled for this virtual machine. However, this requires the <b><nobr>%1</nobr></b> to be installed.</p><p>Please install the Extension Pack from the VirtualBox download site. After this you will be able to re-enable USB 2.0. It will be disabled in the meantime unless you cancel the current settings changes.</p></source>
-        <translation type="obsolete"><p>یو اِس بی 2.0 اکنون برای این ماشین مجازی فعال شده است. خهرچند، این نیاز دارد که <b><nobr>%1</nobr></b> نصب شده باشد.</p><p>لطفا بسته افزونه را از سایت برنامه دانلود و نصب کنید. بعداز این شما قادر به فعالسازی مجدد یو اِس بی 2.0 هستید. ان در این فاصله غیرفعال خواهد شد بجز اینکه شما تغییرات تنظیمات فعلی را لغو کنید.</p></translation>
+        <translation type="vanished"><p>یو اِس بی 2.0 اکنون برای این ماشین مجازی فعال شده است. خهرچند، این نیاز دارد که <b><nobr>%1</nobr></b> نصب شده باشد.</p><p>لطفا بسته افزونه را از سایت برنامه دانلود و نصب کنید. بعداز این شما قادر به فعالسازی مجدد یو اِس بی 2.0 هستید. ان در این فاصله غیرفعال خواهد شد بجز اینکه شما تغییرات تنظیمات فعلی را لغو کنید.</p></translation>
     </message>
     <message>
         <source>Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might not be installed on the host computer</source>
@@ -8703,7 +8828,7 @@
     </message>
     <message>
         <source><p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p></source>
-        <translation type="obsolete"><p>موفق به ذخیره فایل دانلود شده بعنوان <nobr><b>%1</b> نشد. </nobr></p></translation>
+        <translation type="vanished"><p>موفق به ذخیره فایل دانلود شده بعنوان <nobr><b>%1</b> نشد. </nobr></p></translation>
     </message>
     <message>
         <source><p>You have an old version (%1) of the <b><nobr>%2</nobr></b> installed.</p><p>Do you wish to download latest one from the Internet?</p></source>
@@ -8712,7 +8837,7 @@
     <message>
         <source>Download</source>
         <comment>extension pack</comment>
-        <translation type="obsolete">دانلود</translation>
+        <translation type="vanished">دانلود</translation>
     </message>
     <message>
         <source><p>Are you sure you want to download the <b><nobr>%1</nobr></b> from <nobr><a href="%2">%2</a></nobr> (size %3 bytes)?</p></source>
@@ -8738,7 +8863,7 @@
     <message>
         <source>Ok</source>
         <comment>extension pack</comment>
-        <translation type="obsolete">تأیید</translation>
+        <translation type="vanished">تأیید</translation>
     </message>
     <message>
         <source><p>Failed to initialize COM because the VirtualBox global configuration directory <b><nobr>%1</nobr></b> is not accessible. Please check the permissions of this directory and of its parent directory.</p><p>The application will now terminate.</p></source>
@@ -8747,7 +8872,7 @@
     <message numerus="yes">
         <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 type="obsolete">
+        <translation type="vanished">
             <numerusform>p>این %n ماشین مجازی زیر اکنون در وضعیت ذخیره شده هستند: <b>%1</b></p><p>اگر ادامه دهید وضعیت زمان اِجرای ماشین خروجیگیری شده لغو خواهد شد. سایر ماشین ها تغییر نخواهد کرد.</p</numerusform>
         </translation>
     </message>
@@ -8791,15 +8916,15 @@
     </message>
     <message>
         <source>You are about to create a new virtual machine without a hard drive. 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="obsolete">شما درصدد ایجاد یک ماشین مجازی جدید بدون درایو سخت هستید؟. تا زمانیکه یکی اضافه نکنید قادر به نصب سیستم عامل نیستید. در این زمان شما فقط قادر به شروع ماشین توسط دیسک نوری مجازی یا از شبکه هستید؟.</translation>
+        <translation type="vanished">شما درصدد ایجاد یک ماشین مجازی جدید بدون درایو سخت هستید؟. تا زمانیکه یکی اضافه نکنید قادر به نصب سیستم عامل نیستید. در این زمان شما فقط قادر به شروع ماشین توسط دیسک نوری مجازی یا از شبکه هستید؟.</translation>
     </message>
     <message>
         <source>Failed to drop data.</source>
-        <translation type="obsolete">موفق به رها کردن داده نشد.</translation>
+        <translation type="vanished">موفق به رها کردن داده نشد.</translation>
     </message>
     <message>
         <source><p>Could not find the VirtualBox Guest Additions disk image file file.</nobr></p><p>Do you wish to download this disk image file from the Internet?</p></source>
-        <translation type="obsolete"><p>قادر به یافتن فایل ایمیج سی دی افزونه مهمان ویرچوال باکس نیست.</nobr></p><p>آیا میخواهید ایمیج سی دی را از اینترنت دانلود کنید؟</p></translation>
+        <translation type="vanished"><p>قادر به یافتن فایل ایمیج سی دی افزونه مهمان ویرچوال باکس نیست.</nobr></p><p>آیا میخواهید ایمیج سی دی را از اینترنت دانلود کنید؟</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to discard the saved state of the following virtual machines?</p><p><b>%1</b></p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown of the guest OS.</p></source>
@@ -8851,7 +8976,7 @@
     </message>
     <message>
         <source>Close Virtual Machine</source>
-        <translation type="obsolete">بستن ماشین مجازی</translation>
+        <translation type="vanished">بستن ماشین مجازی</translation>
     </message>
     <message>
         <source><p>Cannot start the VirtualBox Manager due to local restrictions.</p><p>The application will now terminate.</p></source>
@@ -8915,15 +9040,15 @@
     </message>
     <message>
         <source><p>Are you sure you want to release the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-        <translation type="obsolete"><p>آیا میخواهید دیسک سخت مجازی <nobr><b>%1</b></nobr> ترخیص شود؟ </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <translation type="vanished"><p>آیا میخواهید دیسک سخت مجازی <nobr><b>%1</b></nobr> ترخیص شود؟ </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to release the virtual optical disk <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-        <translation type="obsolete"><p>آیا میخواهید دیسک نوری مجازی <nobr><b>%1</b></nobr> را ترخیص کنید؟ </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <translation type="vanished"><p>آیا میخواهید دیسک نوری مجازی <nobr><b>%1</b></nobr> را ترخیص کنید؟ </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to release the virtual floppy disk <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-        <translation type="obsolete"><p>آیا میخواهید دیسک فلاپی مجازی <nobr><b>%1</b></nobr> را ترخیص کنید؟</p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <translation type="vanished"><p>آیا میخواهید دیسک فلاپی مجازی <nobr><b>%1</b></nobr> را ترخیص کنید؟</p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to remove the virtual hard disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
@@ -8967,27 +9092,27 @@
     </message>
     <message>
         <source>Failed to open the hard disk file <nobr><b>%1</b></nobr>.</source>
-        <translation type="obsolete">موفق به بازکردن فایل دیسک سخت <nobr><b>%1</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بازکردن فایل دیسک سخت <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to open the optical disk file <nobr><b>%1</b></nobr>.</source>
-        <translation type="obsolete">موفق به بازکردن فایل دیسک نوری <nobr><b>%1</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بازکردن فایل دیسک نوری <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to open the floppy disk file <nobr><b>%1</b></nobr>.</source>
-        <translation type="obsolete">موفق به بازکردن فایل فلاپی دیسک <nobr><b>%1</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بازکردن فایل فلاپی دیسک <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to close the hard disk file <nobr><b>%2</b></nobr>.</source>
-        <translation type="obsolete">موفق به بستن فایل دیسک سخت <nobr><b>%2</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بستن فایل دیسک سخت <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to close the optical disk file <nobr><b>%2</b></nobr>.</source>
-        <translation type="obsolete">موفق به بستن فایل دیسک نوری <nobr><b>%2</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بستن فایل دیسک نوری <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
         <source>Failed to close the floppy disk file <nobr><b>%2</b></nobr>.</source>
-        <translation type="obsolete">موفق به بستن فایل فلاپی دیسک <nobr><b>%2</b></nobr> نشد.</translation>
+        <translation type="vanished">موفق به بستن فایل فلاپی دیسک <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message numerus="yes">
         <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>
@@ -9034,11 +9159,11 @@
     </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 CD/DVD drive?</p></source>
-        <translation type="obsolete"><p>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت از <nobr><a href="%1">%1</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%2</b> ذخیره شد.</nobr></p><p>آیا میخواهید این فایل دیسک ایمیج را ثبت کرده و در درایو سی دی/دی وی دی بارگیری کنید؟</p></translation>
+        <translation type="vanished"><p>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت از <nobr><a href="%1">%1</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%2</b> ذخیره شد.</nobr></p><p>آیا میخواهید این فایل دیسک ایمیج را ثبت کرده و در درایو سی دی/دی وی دی بارگیری کنید؟</p></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 CD/DVD drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
-        <translation type="obsolete"><p>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را در ماشین مجازی <b>%1</b>قرارداد،زیرا ماشین درایو سی دی یا دی وی دی ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
+        <translation type="vanished"><p>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را در ماشین مجازی <b>%1</b>قرارداد،زیرا ماشین درایو سی دی یا دی وی دی ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
     </message>
     <message>
         <source><p>Could not find the <b>VirtualBox User Manual</b> <nobr><b>%1</b>.</nobr></p><p>Do you wish to download this file from the Internet?</p></source>
@@ -9071,12 +9196,12 @@
     <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 [...]
         <comment>new</comment>
-        <translation type="obsolete"><p>افزونه مهمان ویرچوال باکس در ماشین مجازی دردسترس ظاهر نشده است، و پوشه اشتراکی بدون آن قابل استفاده نیست. برای استفاده از پوشه اشتراکی در داخل ماشین مجازی، لطفا افزونه مهمان را نصب کنید اگر آنها نصب نشده است. یا اگر بدرستی کار نمیکند مجددا نصب کنید، گزینه <b>نصب افزونه مهمان</b> را از منوی <b>دستگاه</b> انتخاب کنید. اگر آنها نصب شده اند اما ماشین هنوز بطورکامل شروع نشده است سپس پوشه اشتراکی یک بار در آن دردسترس است.&lt [...]
+        <translation type="vanished"><p>افزونه مهمان ویرچوال باکس در ماشین مجازی دردسترس ظاهر نشده است، و پوشه اشتراکی بدون آن قابل استفاده نیست. برای استفاده از پوشه اشتراکی در داخل ماشین مجازی، لطفا افزونه مهمان را نصب کنید اگر آنها نصب نشده است. یا اگر بدرستی کار نمیکند مجددا نصب کنید، گزینه <b>نصب افزونه مهمان</b> را از منوی <b>دستگاه</b> انتخاب کنید. اگر آنها نصب شده اند اما ماشین هنوز بطورکامل شروع نشده است سپس پوشه اشتراکی یک بار در آن دردسترس است.&lt [...]
     </message>
     <message>
         <source>Insert</source>
         <comment>additions-new</comment>
-        <translation type="obsolete">بارگیری</translation>
+        <translation type="vanished">بارگیری</translation>
     </message>
     <message>
         <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
@@ -9220,131 +9345,139 @@
     </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>
     <message>
         <source><p>Failed to acquire the VirtualBox COM object.</p><p>The application will now terminate.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>موفق به گرفتن شیء کام ویرچوال باکس نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </message>
     <message>
         <source>Delete</source>
         <comment>extension pack</comment>
-        <translation type="unfinished">حذف</translation>
+        <translation>حذف</translation>
     </message>
     <message>
         <source>Do you want to delete the downloaded file <nobr><b>%1</b></nobr>?</source>
-        <translation type="unfinished"></translation>
+        <translation>آیا میخواهید فایل دانلود شده <nobr><b>%1</b></nobr> را حذف کنید؟</translation>
     </message>
     <message>
         <source>Do you want to delete following list of files <nobr><b>%1</b></nobr>?</source>
-        <translation type="unfinished"></translation>
+        <translation>آیا میخواید فایل های لیست شده زیر را <nobr><b>%1</b></nobr> حذف کنید؟</translation>
     </message>
     <message>
         <source><p>The reason for this error are most likely wrong permissions of the IPC daemon socket due to an installation problem. Please check the permissions of <font color=blue>'/tmp'</font> and <font color=blue>'/tmp/.vbox-*-ipc/'</font></p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>علت برای این خطا بیشتر بنظر سطح دسترسی اشتباه سوکت روح آی پی سی به علت مشکل در نصب است. لطفا سطح دسترسی <font color=blue>'/tmp'</font> و <font color=blue>'/tmp/.vbox-*-ipc/'</font></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>but the SHA-256 checksum verification failed.</p><p>Please do the download, installation and verification manually.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت دانلود شد از from <nobr><a href="%1">%1</a></nobr>و بصورت محلی ذخیره شد بعنوان <nobr><b>%2</b>، </nobr>اما صحت مجموع مقابله ای اِس اِچ اِی 256 موفق نشد.</p><p>لطفا دانلود و نصب و بررسی صحت را دستی انجام دهید.</p></translation>
     </message>
     <message>
         <source><p>The <b><nobr>%1</nobr></b> has been successfully downloaded from <nobr><a href="%2">%2</a></nobr> and saved locally as <nobr><b>%3</b>, </nobr>but the SHA-256 checksum verification failed.</p><p>Please do the download, installation and verification manually.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>فایل <b><nobr>%1</nobr></b> با موفقیت دانلود شد از <nobr><a href="%2">%2</a></nobr> و بصورت محلی ذخیره شد بعنوان <nobr><b>%3</b>, </nobr>اما صحت مجموع مقابله ای اِس اِچ اِی 256 موفق نشد.</p><p>لطفا دانلود و نصب و بررسی صحت را دستی انجام دهید.</p></translation>
     </message>
     <message>
         <source><p>You are about to start all of the following virtual machines:</p><p><b>%1</b></p><p>This could take some time and consume a lot of host system resources. Do you wish to proceed?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>شما در صدد شروع همه ماشین های مجازی زیر هستید:</p><p><b>%1</b></p><p>این ممکن است مدتی طول بکشد و منابع سیستمی زیادی مصرف کند. آیا میخواهید ادامه دهید؟</p></translation>
     </message>
     <message>
         <source>Can't find snapshot with ID=<b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>نمیتوان ضبط وضعیت با این شناسه را یافت=<b>%1</b>.</translation>
     </message>
     <message>
         <source>Can't acquire snapshot attributes.</source>
-        <translation type="unfinished"></translation>
+        <translation>نمیتوان صفات ضبط وضعیت را گرفت</translation>
     </message>
     <message>
         <source>Failed to move the storage unit of the disk image <b>%1</b> to <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به انتقال واحد ذخیره ساز ایمیج دیسک <b>%1</b> به <b>%2</b> نشد.</translation>
     </message>
     <message>
         <source><p>Error changing the description of the disk image <b>%1</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>خطای تغییر توضیحات ایمیج دیسک <b>%1</b>.</p></translation>
     </message>
     <message>
         <source>Failed to resize the storage unit of the hard disk <b>%1</b> from <b>%2</b> to <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به تغییر اندازه واحد ذخیره ساز دیسک سخت <b>%1</b> از <b>%2</b> به <b>%3</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to acquire host network interfaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به گرفتن رابط های شبکه میزبان نشد.</translation>
     </message>
     <message>
         <source>Unable to find the host network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>قادر به یافتن رابط شبکه میزبان <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to create a host network interface.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به ایجاد رابط شبکه میزبان نشد.</translation>
     </message>
     <message>
         <source>Failed to acquire host network interface parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به گرفتن پارامتر رابط شبکه میزبان نشد.</translation>
     </message>
     <message>
         <source>Failed to save host network interface parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به ذخیره پارامتر رابط شبکه میزبان نشد.</translation>
     </message>
     <message>
         <source>Failed to create a DHCP server for the network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به ایجاد سرور دی اِچ سی پی برای رابط شبکه <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to remove the DHCP server for the network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به حذف سرور دی اِچ سی پی برای رابط شبکه <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to acquire DHCP server parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به گرفتن پارامتر سرور دی اِچ سی پی نشد.</translation>
     </message>
     <message>
         <source>Failed to save DHCP server parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به ذخیره پارامتر سرور دی اِچ سی پی نشد.</translation>
     </message>
     <message>
         <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1< [...]
-        <translation type="unfinished"><p>شما درصدد نصب بسته افزونه ویرچوال باکس هستید. بسته افزونه مکمل عاملیت ویرچوال باکس هست و محتوی نرم افزار سطح سیستمی هست که میتواند برای سیستم شما مضر باشد. لطفا توضیحات زیر را بازبینی کنید و فقط اگر بسته افزونه را از منبع قابل اطمینان دانلود کرده اید ادامه دهید.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr>< [...]
+        <translation><p>شما درصدد نصب بسته افزونه ویرچوال باکس هستید. بسته افزونه مکمل عاملیت ویرچوال باکس هست و محتوی نرم افزار سطح سیستمی هست که میتواند برای سیستم شما مضر باشد. لطفا توضیحات زیر را بازبینی کنید و فقط اگر بسته افزونه را از منبع قابل اطمینان دانلود کرده اید ادامه دهید.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>نسخ [...]
     </message>
     <message>
         <source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td& [...]
-        <translation type="unfinished"><p>یک نسخه قدیمی بسته افزونه از قبل نصب شده است، آیا میخواهید ارتقاء دهید؟ <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>نسخه جدید:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>نسخه فعلی:&nbsp;&nbsp;</b></td&gt [...]
+        <translation><p>یک نسخه قدیمی بسته افزونه از قبل نصب شده است، آیا میخواهید ارتقاء دهید؟ <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>نسخه جدید:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>نسخه فعلی:&nbsp;&nbsp;</b></td><td>%4</ [...]
     </message>
     <message>
         <source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></t [...]
-        <translation type="unfinished"><p>یک نسخه جدیدتر بسته افزونه از قبل نصب شده است. آیا میخواهید تنزیل دهید؟ <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>نسخه جدید:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>نسخه فعلی:&nbsp;&nbsp;</b></td&g [...]
+        <translation><p>یک نسخه جدیدتر بسته افزونه از قبل نصب شده است. آیا میخواهید تنزیل دهید؟ <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>نسخه جدید:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>نسخه فعلی:&nbsp;&nbsp;</b></td><td>%4< [...]
     </message>
     <message>
         <source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td>& [...]
-        <translation type="unfinished"><p>بسته افزونه توسط همین نسخه از قبل نصب شده است،میخواهید ان را مجددا نصب کنید؟ <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>نسخه:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>توضیحات:&nbsp;&nbsp;</b></td>& [...]
+        <translation><p>بسته افزونه توسط همین نسخه از قبل نصب شده است،میخواهید ان را مجددا نصب کنید؟ <p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>نسخه:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>توضیحات:&nbsp;&nbsp;</b></td><td>%4</td [...]
     </message>
     <message>
         <source>Failed to enable the audio adapter output for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به فعالسازی آداپتور صدای خروجی برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to disable the audio adapter output for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به غیرفعالسازی آداپتور صدای خروجی برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to enable the audio adapter input for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>موفق به فعالسازی آداپتور صدای ورودی برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
         <source>Failed to disable the audio adapter input for the virtual machine <b>%1</b>.</source>
+        <translation>موفق به غیرفعالسازی آداپتور صدای ورودی برای ماشین مجازی <b>%1</b> نشد.</translation>
+    </message>
+    <message>
+        <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -9352,7 +9485,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
@@ -9390,7 +9523,7 @@
     <name>UINameAndSystemEditor</name>
     <message>
         <source>&Name:</source>
-        <translation type="obsolete">نا&م:</translation>
+        <translation type="vanished">نا&م:</translation>
     </message>
     <message>
         <source>Holds the name of the virtual machine.</source>
@@ -9418,7 +9551,7 @@
     </message>
     <message>
         <source>Holds the location of the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ مکان ماشین مجازی.</translation>
     </message>
 </context>
 <context>
@@ -9441,7 +9574,7 @@
     </message>
     <message>
         <source>Error: %1.</source>
-        <translation type="obsolete">خطا: %1.</translation>
+        <translation type="vanished">خطا: %1.</translation>
     </message>
     <message>
         <source>Network Operation</source>
@@ -9509,42 +9642,42 @@
     <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>موفق به مقدار دهی اولیه کتابخانه اِچ تی تی پی نشد</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 type="unfinished"></translation>
+        <translation>پراکسی یافت نشد</translation>
     </message>
     <message>
         <source>Url not found on the server</source>
-        <translation type="unfinished"></translation>
+        <translation>آدرس در این سرور یافت نشد</translation>
     </message>
 </context>
 <context>
     <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>
@@ -9558,38 +9691,38 @@
     <name>UIPopupPane</name>
     <message>
         <source><p><b>Details:</b></source>
-        <translation type="unfinished"></translation>
+        <translation><p><b>جزئیات:</b></translation>
     </message>
     <message>
         <source><p><b>Details:</b> (%1 of %2)</source>
-        <translation type="unfinished"></translation>
+        <translation><p><b>جزئیات:</b> (%1 از %2)</translation>
     </message>
 </context>
 <context>
     <name>UIPortForwardingModel</name>
     <message>
         <source>Name</source>
-        <translation type="obsolete">نام</translation>
+        <translation type="vanished">نام</translation>
     </message>
     <message>
         <source>Protocol</source>
-        <translation type="obsolete">پروتکل</translation>
+        <translation type="vanished">پروتکل</translation>
     </message>
     <message>
         <source>Host IP</source>
-        <translation type="obsolete">آی پی میزبان</translation>
+        <translation type="vanished">آی پی میزبان</translation>
     </message>
     <message>
         <source>Host Port</source>
-        <translation type="obsolete">پورت میزبان</translation>
+        <translation type="vanished">پورت میزبان</translation>
     </message>
     <message>
         <source>Guest IP</source>
-        <translation type="obsolete">آی پی مهمان</translation>
+        <translation type="vanished">آی پی مهمان</translation>
     </message>
     <message>
         <source>Guest Port</source>
-        <translation type="obsolete">پورت مهمان</translation>
+        <translation type="vanished">پورت مهمان</translation>
     </message>
 </context>
 <context>
@@ -9680,15 +9813,15 @@
     <name>UIScreenshotViewer</name>
     <message>
         <source>Screenshot of %1 (%2)</source>
-        <translation type="unfinished">اِسکرین شات %1 (%2)</translation>
+        <translation>اِسکرین شات %1 (%2)</translation>
     </message>
     <message>
         <source>Click to view non-scaled screenshot.</source>
-        <translation type="unfinished">برای مشاهده اِسکرین شات غیر-مقیاس شده کلیک کنید.</translation>
+        <translation>برای مشاهده اِسکرین شات غیر-مقیاس شده کلیک کنید.</translation>
     </message>
     <message>
         <source>Click to view scaled screenshot.</source>
-        <translation type="unfinished">برای مشاهده اِسکرین شات مقیاس شده کلیک کنید.</translation>
+        <translation>برای مشاهده اِسکرین شات مقیاس شده کلیک کنید.</translation>
     </message>
 </context>
 <context>
@@ -9720,7 +9853,7 @@
     </message>
     <message>
         <source>Show Toolbar Text</source>
-        <translation type="unfinished"></translation>
+        <translation>نمایش متن نوار ابزار</translation>
     </message>
 </context>
 <context>
@@ -9735,7 +9868,7 @@
     <message>
         <source>%1 status-bar indicator</source>
         <comment>like 'hard-disk status-bar indicator'</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 نشانگر نوار-وضعیت</translation>
     </message>
 </context>
 <context>
@@ -9746,7 +9879,7 @@
     </message>
     <message>
         <source>On the <b>%1</b> page, %2</source>
-        <translation type="obsolete">در <b>%1</b> صفحه، %2</translation>
+        <translation type="vanished">در <b>%1</b> صفحه، %2</translation>
     </message>
     <message>
         <source>Invalid settings detected</source>
@@ -9754,11 +9887,11 @@
     </message>
     <message>
         <source>Non-optimal settings detected</source>
-        <translation type="obsolete">تنظیمات غیرمطلوب تشخیص داده است</translation>
+        <translation type="vanished">تنظیمات غیرمطلوب تشخیص داده است</translation>
     </message>
     <message>
         <source>Settings</source>
-        <translation type="obsolete">تنظیمات</translation>
+        <translation type="vanished">تنظیمات</translation>
     </message>
     <message>
         <source><b>%1</b> page:</source>
@@ -9789,7 +9922,7 @@
     </message>
     <message>
         <source>USB</source>
-        <translation type="obsolete">یو اِس بی</translation>
+        <translation type="vanished">یو اِس بی</translation>
     </message>
     <message>
         <source>Network</source>
@@ -9817,7 +9950,7 @@
     </message>
     <message>
         <source>Allows to navigate through Global Property categories</source>
-        <translation type="unfinished"></translation>
+        <translation>اجازه حرکت از طریق ویژگی دسته بندی های سراسری</translation>
     </message>
 </context>
 <context>
@@ -9880,7 +10013,7 @@
     </message>
     <message>
         <source>Allows to navigate through VM Settings categories</source>
-        <translation type="unfinished"></translation>
+        <translation>اجازه حرکت از طریق دسته بندی های تنظیمات ماشین مجازی</translation>
     </message>
 </context>
 <context>
@@ -9897,60 +10030,64 @@
 <context>
     <name>UISnapshotDetailsWidget</name>
     <message>
+        <source><p>You have the <b>Current State</b> item selected.<br>Press the <b>Take</b> button if you wish to take a new snapshot.</p></source>
+        <translation type="vanished"><p>شما <b>وضعیت فعلی</b> مورد منتخب را دارید.<br>دکمه <b>ایجاد</b> را اگر میخواهید ضبط وضعیت جدید بگیرید فشار دهید.</p></translation>
+    </message>
+    <message>
         <source>&Attributes</source>
-        <translation type="unfinished"></translation>
+        <translation>&صفات</translation>
     </message>
     <message>
         <source>&Information</source>
-        <translation type="unfinished"></translation>
+        <translation>&اطلاعات</translation>
     </message>
     <message>
         <source>&Name:</source>
-        <translation type="unfinished">نا&م:</translation>
+        <translation>نا&م:</translation>
     </message>
     <message>
         <source>&Description:</source>
-        <translation type="unfinished">توضی&حات:</translation>
+        <translation>توضی&حات:</translation>
     </message>
     <message>
         <source>Holds the snapshot name.</source>
-        <translation type="unfinished"></translation>
+        <translation>حفظ نام ضبط وضعیت</translation>
     </message>
     <message>
         <source>Holds the snapshot description.</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>Apply changes in current snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات در جزئیات ضبط وضعیت فعلی</translation>
     </message>
     <message>
         <source>Reset changes in current snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات در جزئیات ضبط وضعیت فعلی</translation>
     </message>
     <message>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>اِعمال تغییرات (%1)</translation>
     </message>
     <message>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ریست تغییرات (%1)</translation>
     </message>
     <message>
         <source>Click to enlarge the screenshot.</source>
-        <translation type="unfinished">برای بزرگ کردن اِسکرین شات کلیک کنید.</translation>
+        <translation>برای بزرگ کردن اِسکرین شات کلیک کنید.</translation>
     </message>
     <message>
         <source>Snapshot name is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>نام ضبط وضعیت خالی است</translation>
     </message>
     <message>
         <source>Enter a name for the new snapshot...</source>
@@ -9970,7 +10107,7 @@
     </message>
     <message>
         <source>Take Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">ایجاد ضبط وضعیت (%1)</translation>
     </message>
 </context>
 <context>
@@ -9978,133 +10115,133 @@
     <message>
         <source>Current State (changed)</source>
         <comment>Current State (Modified)</comment>
-        <translation type="unfinished">وضعیت فعلی (تغییر کرده است)</translation>
+        <translation>وضعیت فعلی (تغییر کرده است)</translation>
     </message>
     <message>
         <source>Current State</source>
         <comment>Current State (Unmodified)</comment>
-        <translation type="unfinished">وضعیت فعلی</translation>
+        <translation>وضعیت فعلی</translation>
     </message>
     <message>
         <source>The current state differs from the state stored in the current snapshot</source>
-        <translation type="unfinished">وضعیت فعلی متفاوت از وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
+        <translation>وضعیت فعلی متفاوت از وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
     </message>
     <message>
         <source>The current state is identical to the state stored in the current snapshot</source>
-        <translation type="unfinished">وضعیت فعلی برابر است با وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
+        <translation>وضعیت فعلی برابر است با وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
     </message>
     <message>
         <source>%1 (%2 ago)</source>
         <comment>date time (how long ago)</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 (%2 پیش)</translation>
     </message>
     <message>
         <source>%1 since %2</source>
         <comment>Current State (time or date + time)</comment>
-        <translation type="unfinished">%1 از %2</translation>
+        <translation>%1 از %2</translation>
     </message>
     <message>
         <source>current</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>فعلی</translation>
     </message>
     <message>
         <source>online</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>آنلاین</translation>
     </message>
     <message>
         <source>offline</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>آفلاین</translation>
     </message>
     <message>
         <source>Taken at %1</source>
         <comment>Snapshot (time)</comment>
-        <translation type="unfinished">ایجاد شده در %1</translation>
+        <translation>ایجاد شده در %1</translation>
     </message>
     <message>
         <source>Taken on %1</source>
         <comment>Snapshot (date + time)</comment>
-        <translation type="unfinished">ایجاد شده در %1</translation>
+        <translation>ایجاد شده در %1</translation>
     </message>
     <message>
         <source>Contains the snapshot tree of the current virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>حاوی لیست ضبط وضعیت ماشین مجازی فعلی</translation>
     </message>
     <message>
         <source>&Take...</source>
-        <translation type="unfinished"></translation>
+        <translation>&ایجاد...</translation>
     </message>
     <message>
         <source>&Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>&حذف</translation>
     </message>
     <message>
         <source>&Restore</source>
-        <translation type="unfinished"></translation>
+        <translation>&بازگردانی</translation>
     </message>
     <message>
         <source>&Properties...</source>
-        <translation type="unfinished"></translation>
+        <translation>&مشخصات...</translation>
     </message>
     <message>
         <source>&Clone...</source>
-        <translation type="unfinished">شبیه &سازی...</translation>
+        <translation>شبیه &سازی...</translation>
     </message>
     <message>
         <source>Take Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>ایجاد ضبط وضعیت (%1)</translation>
     </message>
     <message>
         <source>Delete Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>حذف ضبط وضعیت (%1)</translation>
     </message>
     <message>
         <source>Restore Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>بازگردانی ضبط وضعیت (%1)</translation>
     </message>
     <message>
         <source>Open Snapshot Properties (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن مشخصات ضبط وضعیت (%1)</translation>
     </message>
     <message>
         <source>Clone Virtual Machine (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>شبیه سازی ماشین مجازی (%1)</translation>
     </message>
     <message>
         <source>Take a snapshot of the current virtual machine state</source>
-        <translation type="unfinished">ایجاد یک ضبط وضعیت از وضعیت فعلی ماشین مجازی</translation>
+        <translation>ایجاد یک ضبط وضعیت از وضعیت فعلی ماشین مجازی</translation>
     </message>
     <message>
         <source>Delete selected snapshot of the virtual machine</source>
-        <translation type="unfinished">ضبط وضعیت ماشین مجازی انتخاب شده را حذف میکند</translation>
+        <translation>ضبط وضعیت ماشین مجازی انتخاب شده را حذف میکند</translation>
     </message>
     <message>
         <source>Restore selected snapshot of the virtual machine</source>
-        <translation type="unfinished">بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
+        <translation>بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
         <source>Open pane with the selected snapshot properties</source>
-        <translation type="unfinished"></translation>
+        <translation>بازکردن نوار با مشخصات ضبط وضعیت منتخب</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished">شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Name</source>
         <comment>snapshot</comment>
-        <translation type="unfinished">نام</translation>
+        <translation>نام</translation>
     </message>
     <message>
         <source>Taken</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>ایجاد شده</translation>
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished">ضبط وضعیت %1</translation>
+        <translation>ضبط وضعیت %1</translation>
     </message>
 </context>
 <context>
@@ -10126,25 +10263,25 @@
     <name>UITakeSnapshotDialog</name>
     <message>
         <source>Take Snapshot of Virtual Machine</source>
-        <translation type="unfinished">ایجاد ضبط وضعیت از ماشین مجازی</translation>
+        <translation>ایجاد ضبط وضعیت از ماشین مجازی</translation>
     </message>
     <message>
         <source>Snapshot &Name</source>
-        <translation type="unfinished">نام ضب&ط وضعیت</translation>
+        <translation>نام ضب&ط وضعیت</translation>
     </message>
     <message>
         <source>Snapshot &Description</source>
-        <translation type="unfinished">توضیحات &ضبط وضعیت</translation>
+        <translation>توضیحات &ضبط وضعیت</translation>
     </message>
     <message numerus="yes">
         <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">
+        <translation>
             <numerusform>هشدار: شما درحال ایجاد یک ضبط وضعیت از ماشین درحال اجرا هستید که %n ایمیج تغییرناپذیر به آن ضمیمه شده است. تا زمانیکه شما روی این ضبط وضعیت کار میکنید ایمیج تغییرناپذیر برای جلوگیری از از بین رفتن داده ریست نخواهد شد.</numerusform>
         </translation>
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished">ضبط وضعیت %1</translation>
+        <translation>ضبط وضعیت %1</translation>
     </message>
 </context>
 <context>
@@ -10174,34 +10311,34 @@
     <name>UIToolsPaneGlobal</name>
     <message>
         <source><h3>Welcome to VirtualBox!</h3><p>This window represents a set of global tools which are currently opened (or can be opened). They are not related to any particular machine but to the complete VM collection. For a list of currently available tools check the corresponding menu at the right side of the main tool bar located at the top of the window. This list will be extended with new tools in future releases.</p><p>You can press the <b>% [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>به ویرچوال باکس خوش آمدید!</h3><p>این پنجره مجموعه ای از ابزارهای سراسری که اکنون باز است (یا میتواند باز شود) را نشان میدهد. آنها به ماشین خاصی مرتبط نیستند،بلکه به مجموعه ماشین های مجازی تعلق دارند. برای لیست ابزارهای موجود که اکنون موجود اند منو متناظر در سمت راست نوار ابزار اصلی در بالای پنجره را نگاه کنید. این لیست با انتشارات جدیدتر بیشتر خواهد شد.</p><p>برای دریافت راهنمای فوری میتواند کلید <b>%1</b> را فشار دهید،  [...]
     </message>
     <message>
         <source>Tool to observe virtual storage media. Reflects all the chains of <u>virtual disks</u> you have registered (per each storage type) within your virtual machines and allows for media operations like <u>copy</u>, <u>remove</u>, <u>release</u> (detach it from VMs where it is currently attached to) and observe their properties. Allows to <u>edit</u> medium attributes like <u>type</u>, <u>location/nam [...]
-        <translation type="unfinished"></translation>
+        <translation>ابزاری برای مشاهده رسانه ذخیره ساز مجازی. نشانگر همه زنجیرهای <u>دیسک های مجازی</u> که شما (بر هر نوع ذخیره ساز) داخل ماشین مجازی خودتان ثبت کرده اید است واجاازه عملیات رسانه ای مانند <u>کپی</u>, <u>جذف</u>, <u>ترخیص</u> (جدا کردن آن از ماشین مجازی از جایی که اکنون به آن وصل است) و مشاهده مشخصات آنها را میدهد. اجازه <u>ویرایش</u> صفات رسانه مانند <u>نوع</u>, <u>مکان/نام</u>, <u> [...]
     </message>
     <message>
         <source>Tool to control host-only network interfaces. Reflects <u>host-only networks</u>, their DHCP servers and allows for operations on the networks like possibility to <u>create</u>, <u>remove</u> and observe their properties. Allows to <u>edit</u> various <u>attributes</u> for host-only interface and corresponding DHCP server.</source>
-        <translation type="unfinished"></translation>
+        <translation>ابزاری برای کنترل رابط شبکه فقط-میزبان. نشانگر <u>شبکه های فقط-میزبان</u>, سرورهای دی اِچ سی پی آنها و اجازه عملیات در شبکه ها مانند امکان <u>ایجاد</u>, <u>حذف</u> و مشاهده مشخصات آنها را میدهد. اجازه <u>ویرایش</u> <u>صفات</u> گوناگون برای رابط فقط میزبان و سرور دی اِچ سی پی متناظر را میدهد.</translation>
     </message>
 </context>
 <context>
     <name>UIToolsPaneMachine</name>
     <message>
         <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window lists all virtual machines and virtual machine groups on your computer. The list is empty now because you haven't created any virtual machines yet.</p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or v [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>به ویرچوال باکس خوش آمدید!</h3><p>بخش راست این پنجره همه ماشین های مجازی و گروه های ماشین مجازی در رایانه شما را لیست می کند. این لیست اکنون خالی است چون هنوز ماشین مجازی ایجاد نکرده اید.</p><p>بمنظور ایجاد ماشین مجازی جدید، دکمه the <b>جدید</b> را که در نوار ابزار اصلی در بالای پنجره قرار گرفته است را فشار دهید.</p><p>برای دریافت راهنمای فوری میتوانید کلید <b>%1</b> را فشار دهید، یا از <a href= [...]
     </message>
     <message>
         <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window lists all virtual machines and virtual machine groups on your computer.</p><p>The right part of this window represents a set of tools which are currently opened (or can be opened) for the currently chosen machine. For a list of currently available tools check the corresponding menu at the right side of the main tool bar located at the top of the window. This list will be extended  [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>به ویرچوال باکس خوش آمدید!</h3><p>بخش راست این پنجره همه ماشین های مجازی و گروه های ماشین مجازی در رایانه شما را لیست می کند.</p><p>بخش چپ این پنجره نشان دهنده مجموعه ابزار هایی است که اکنون برای (یا میتواند باز شود) ماشین منتخب فعلی باز شده است. برای لیست ابزارهای موجود که اکنون موجود اند منو متناظر در سمت چپ نوار ابزار اصلی در بالای پنجره را نگاه کنید. این لیست با انتشارات جدیدتر بیشتر خواهد شد.</p><p>برای دریافت راهنما [...]
     </message>
     <message>
         <source>Tool to observe virtual machine (VM) details. Reflects groups of <u>properties</u> for the currently chosen VM and allows basic operations on certain properties (like the machine storage devices).</source>
-        <translation type="unfinished"></translation>
+        <translation>ابزاری برای مشاهده جزئیات ماشین مجازی. نشانگر گروهی از <u>مشخصات</u> برای ماشین مجازی منتخب فعلی است و اجازه عملکردهای پایه در مشخصات معین (مانند دستگاه ذخیره ساز ماشین) را میدهد.</translation>
     </message>
     <message>
         <source>Tool to control virtual machine (VM) snapshots. Reflects <u>snapshots</u> created for the currently selected VM and allows snapshot operations like <u>create</u>, <u>remove</u>, <u>restore</u> (make current) and observe their properties. Allows to <u>edit</u> snapshot attributes like <u>name</u> and <u>description</u>.</source>
-        <translation type="unfinished"></translation>
+        <translation>ابزاری برای کنترل ضبط وضعیت های ماشین مجازی. نشانگر <u>ضبط وضعیت</u> ایجاد شده برای ماشین مجازی منتخب فعلی است و اجازه عملیات های ضبط وضعیت مثل <u>ایجاد</u>, <u>حذف</u>, <u>بازگردانی</u> (ایجاد فعلی) و مشاهده مشخصات آنها را میدهد. اجازه <u>ویرایش</u> صفات ضبط وضعیت مثل <u>نام</u> و <u>توضیحات</u> را می دهد.</translation>
     </message>
 </context>
 <context>
@@ -10209,12 +10346,12 @@
     <message>
         <source>%1, Active</source>
         <comment>col.1 text, col.1 state</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, فعال</translation>
     </message>
     <message>
         <source>%1</source>
         <comment>col.1 text</comment>
-        <translation type="unfinished">%1% {1?}</translation>
+        <translation>%1% {1?}</translation>
     </message>
 </context>
 <context>
@@ -10439,15 +10576,15 @@
     <name>UIVMInformationDialog</name>
     <message>
         <source>%1 - Session Information</source>
-        <translation type="unfinished">%1 - اطلاعات جلسه</translation>
+        <translation>%1 - اطلاعات جلسه</translation>
     </message>
     <message>
         <source>Configuration &Details</source>
-        <translation type="unfinished">جزئیات &پیکربندی</translation>
+        <translation>جزئیات &پیکربندی</translation>
     </message>
     <message>
         <source>&Runtime Information</source>
-        <translation type="unfinished">&اطلاعات زمان اِجرا</translation>
+        <translation>&اطلاعات زمان اِجرا</translation>
     </message>
 </context>
 <context>
@@ -10535,57 +10672,57 @@
     </message>
     <message>
         <source>Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>فیلتر</translation>
     </message>
     <message>
         <source>Enter filtering string here</source>
-        <translation type="unfinished"></translation>
+        <translation>رشته فیلترینگ را اینجا وارد کنید</translation>
     </message>
     <message>
         <source>Fil&ter</source>
-        <translation type="unfinished"></translation>
+        <translation>&فیلتر</translation>
     </message>
 </context>
 <context>
     <name>UIVMPreviewWindow</name>
     <message>
         <source>Update Disabled</source>
-        <translation type="obsolete">بروزرسانی غیرفعال شده</translation>
+        <translation type="vanished">بروزرسانی غیرفعال شده</translation>
     </message>
     <message>
         <source>Every 0.5 s</source>
-        <translation type="obsolete">هر 0.5 ثانیه</translation>
+        <translation type="vanished">هر 0.5 ثانیه</translation>
     </message>
     <message>
         <source>Every 1 s</source>
-        <translation type="obsolete">هر 1 ثانیه</translation>
+        <translation type="vanished">هر 1 ثانیه</translation>
     </message>
     <message>
         <source>Every 2 s</source>
-        <translation type="obsolete">هر 2 ثانیه</translation>
+        <translation type="vanished">هر 2 ثانیه</translation>
     </message>
     <message>
         <source>Every 5 s</source>
-        <translation type="obsolete">هر 5 ثانیه</translation>
+        <translation type="vanished">هر 5 ثانیه</translation>
     </message>
     <message>
         <source>Every 10 s</source>
-        <translation type="obsolete">هر 10 ثانیه</translation>
+        <translation type="vanished">هر 10 ثانیه</translation>
     </message>
     <message>
         <source>No Preview</source>
-        <translation type="obsolete">پیشنمایش ندارد</translation>
+        <translation type="vanished">پیشنمایش ندارد</translation>
     </message>
 </context>
 <context>
     <name>UIWizard</name>
     <message>
         <source>Hide Description</source>
-        <translation type="obsolete">عدم نمایش توضیحات</translation>
+        <translation type="vanished">عدم نمایش توضیحات</translation>
     </message>
     <message>
         <source>Show Description</source>
-        <translation type="obsolete">نمایش توضیحات</translation>
+        <translation type="vanished">نمایش توضیحات</translation>
     </message>
     <message>
         <source>&Expert Mode</source>
@@ -10608,7 +10745,7 @@
     <name>UIWizardCloneVD</name>
     <message>
         <source>Copy Virtual Hard Drive</source>
-        <translation type="obsolete">کپی درایو سخت مجازی</translation>
+        <translation type="vanished">کپی درایو سخت مجازی</translation>
     </message>
     <message>
         <source>Copy</source>
@@ -10616,43 +10753,43 @@
     </message>
     <message>
         <source>Hard drive to copy</source>
-        <translation type="obsolete">درایو سخت برای کپی</translation>
+        <translation type="vanished">درایو سخت برای کپی</translation>
     </message>
     <message>
         <source><p>Please select the virtual hard drive 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="obsolete"><p>لطفا یک فایل درایو سخت مجازی که میخواهید کپی کنید را اگر انتخاب نشده انتخاب کنید. میتوانید یکی از لیست انتخاب کنید یا از آیکون پوشه درکنار لیست یکی انتخاب کنید.</p></translation>
+        <translation type="vanished"><p>لطفا یک فایل درایو سخت مجازی که میخواهید کپی کنید را اگر انتخاب نشده انتخاب کنید. میتوانید یکی از لیست انتخاب کنید یا از آیکون پوشه درکنار لیست یکی انتخاب کنید.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard drive file to copy...</source>
-        <translation type="obsolete">یک فایل درایو سخت مجازی برای کپی انتخاب کنید...</translation>
+        <translation type="vanished">یک فایل درایو سخت مجازی برای کپی انتخاب کنید...</translation>
     </message>
     <message>
         <source>Hard drive file type</source>
-        <translation type="obsolete">نوع فایل درایو سخت</translation>
+        <translation type="vanished">نوع فایل درایو سخت</translation>
     </message>
     <message>
         <source>Please choose the type of file that you would like to use for the new virtual hard drive. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
-        <translation type="obsolete">لطفا نوع فایلی را که میخواهید برای درایو سخت مجازی جدید استفاده کنید،انتخاب کنید. اگر نمیخواهید آن را با سایر برنامه های مجازی سازی استفاده کنید،میتوانید تنظیمات را تغییر ندهید.</translation>
+        <translation type="vanished">لطفا نوع فایلی را که میخواهید برای درایو سخت مجازی جدید استفاده کنید،انتخاب کنید. اگر نمیخواهید آن را با سایر برنامه های مجازی سازی استفاده کنید،میتوانید تنظیمات را تغییر ندهید.</translation>
     </message>
     <message>
         <source>Storage on physical hard drive</source>
-        <translation type="obsolete">ذخیره ساز در درایو سخت فیزیکی</translation>
+        <translation type="vanished">ذخیره ساز در درایو سخت فیزیکی</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard drive file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="obsolete">لطفا انتخاب کنید چه موقع فایل درایو سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم ایجاد شود (حجم ثابت شده).</translation>
+        <translation type="vanished">لطفا انتخاب کنید چه موقع فایل درایو سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم ایجاد شود (حجم ثابت شده).</translation>
     </message>
     <message>
         <source><p>A <b>dynamically allocated</b> hard drive file will only use space on your physical hard drive 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="obsolete"><p>یک فایل درایو سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا تا <b>حجم ثابت شده</b>)، هرچند آن دوباره خودکار وقتیکه فضای آن خالی شد کوچک نمیشود.</p></translation>
+        <translation type="vanished"><p>یک فایل درایو سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا تا <b>حجم ثابت شده</b>)، هرچند آن دوباره خودکار وقتیکه فضای آن خالی شد کوچک نمیشود.</p></translation>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard drive file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="obsolete"><p>یک فایل درایو سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
+        <translation type="vanished"><p>یک فایل درایو سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
     </message>
     <message>
         <source><p>You can also choose to <b>split</b> the hard drive 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="obsolete"><p>شما میتوانید <b>تقسیم</b> فایل درایو سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
+        <translation type="vanished"><p>شما میتوانید <b>تقسیم</b> فایل درایو سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
     </message>
     <message>
         <source>&Dynamically allocated</source>
@@ -10668,60 +10805,60 @@
     </message>
     <message>
         <source>Please choose a location for new virtual hard drive file</source>
-        <translation type="obsolete">لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
+        <translation type="vanished">لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
     </message>
     <message>
         <source>New hard drive to create</source>
-        <translation type="obsolete">درایو سخت جدید برای ایجاد</translation>
+        <translation type="vanished">درایو سخت جدید برای ایجاد</translation>
     </message>
     <message>
         <source>Please type the name of the new virtual hard drive file into the box below or click on the folder icon to select a different folder to create the file in.</source>
-        <translation type="obsolete">لطفا نام درایو سخت مجازی جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
+        <translation type="vanished">لطفا نام درایو سخت مجازی جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard drive file...</source>
-        <translation type="obsolete">یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
+        <translation type="vanished">یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
     </message>
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_کپی</translation>
+        <translation type="vanished">%1_کپی</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
-        <translation type="obsolete">درایو سخت برای &کپی</translation>
+        <translation type="vanished">درایو سخت برای &کپی</translation>
     </message>
     <message>
         <source>&New hard drive to create</source>
-        <translation type="obsolete">&درایو سخت جدید برای ایجاد</translation>
+        <translation type="vanished">&درایو سخت جدید برای ایجاد</translation>
     </message>
     <message>
         <source>Hard drive file &type</source>
-        <translation type="obsolete">نوع فایل &درایو سخت</translation>
+        <translation type="vanished">نوع فایل &درایو سخت</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>کپی دیسک سخت مجازی</translation>
+        <translation type="vanished">کپی دیسک سخت مجازی</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>دیسک سخت برای کپی</translation>
+        <translation type="vanished">دیسک سخت برای کپی</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><p>لطفا یک فایل دیسک سخت مجازی که میخواهید کپی کنید را،اگر انتخاب نشده،انتخاب کنید. میتوانید یکی از لیست انتخاب کنید یا از آیکون پوشه درکنار لیست یکی انتخاب کنید.</p></translation>
+        <translation type="vanished"><p>لطفا یک فایل دیسک سخت مجازی که میخواهید کپی کنید را،اگر انتخاب نشده،انتخاب کنید. میتوانید یکی از لیست انتخاب کنید یا از آیکون پوشه درکنار لیست یکی انتخاب کنید.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>یک فایل دیسک سخت مجازی برای کپی انتخاب کنید...</translation>
+        <translation type="vanished">یک فایل دیسک سخت مجازی برای کپی انتخاب کنید...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>نوع فایل دیسک سخت</translation>
+        <translation type="vanished">نوع فایل دیسک سخت</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>لطفا نوع فایلی که میخواهید برای دیسک سخت مجازی جدید استفاده کنید را انتخاب کنید.اگر نمیخواهید آن را در برنامه دیگری استفاده کنید،تنظیمات را تغییر ندهید</translation>
+        <translation type="vanished">لطفا نوع فایلی که میخواهید برای دیسک سخت مجازی جدید استفاده کنید را انتخاب کنید.اگر نمیخواهید آن را در برنامه دیگری استفاده کنید،تنظیمات را تغییر ندهید</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -10729,47 +10866,120 @@
     </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>لطفا انتخاب کنید چه موقع فایل دیسک سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم انتخابی ایجاد شود (حجم ثابت شده).</translation>
+        <translation type="vanished">لطفا انتخاب کنید چه موقع فایل دیسک سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم انتخابی ایجاد شود (حجم ثابت شده).</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><p>یک فایل دیسک سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا <b>حجم ثابت شده</b>)، هرچند آن وقتیکه فضای آن خالی شد،دوباره خودکار کوچک نمیشود.</p></translation>
+        <translation type="vanished"><p>یک فایل دیسک سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا <b>حجم ثابت شده</b>)، هرچند آن وقتیکه فضای آن خالی شد،دوباره خودکار کوچک نمیشود.</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><p>یک فایل دیسک سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
+        <translation type="vanished"><p>یک فایل دیسک سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</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><p>شما میتوانید <b>تقسیم</b> فایل دیسک سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
+        <translation type="vanished"><p>شما میتوانید <b>تقسیم</b> فایل دیسک سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>لطفا مکان فایل دیسک سخت مجازی جدید را انتخاب کنید</translation>
+        <translation type="vanished">لطفا مکان فایل دیسک سخت مجازی جدید را انتخاب کنید</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>دیسک سخت جدید برای ایجاد</translation>
+        <translation type="vanished">دیسک سخت جدید برای ایجاد</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>لطفا نام فایل دیسک سخت جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
+        <translation type="vanished">لطفا نام فایل دیسک سخت جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>یک مکان برای فایل دیسک سخت مجازی جدید انتخاب کنید...</translation>
+        <translation type="vanished">یک مکان برای فایل دیسک سخت مجازی جدید انتخاب کنید...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>دیسک سخت برای کپی&</translation>
+        <translation type="vanished">دیسک سخت برای کپی&</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>دیسک سخت جدید برای ایجاد&</translation>
+        <translation type="vanished">دیسک سخت جدید برای ایجاد&</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>نوع فایل دیسک سخت&</translation>
+        <translation type="vanished">نوع فایل دیسک سخت&</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_کپی</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -10812,7 +11022,7 @@
     </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 drive 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 drive files will be tied to the virtual hard drive files of original machine and you will not be able to move the new virtual machi [...]
-        <translation type="obsolete"><p>لطفا نوع شبیه سازی را که میخواهید برای ایجاد انتخاب کنید.</p><p>اگر شما <b>شبیه سازی کامل </b> را انتخاب کنید، یک کپی دقیق (شامل همه فایل های درایو سخت مجازی) از ماشین مجازی اصلی ایجاد خواهد شد.</p><p>اگر شما <b>شبیه سازی لینک شده</b> را انتخاب کنید، یک ماشین جدید ایجاد خواهد شد، اما فایل های درایو سخت مجازی به فایل های درایو سخت مجازی ماشین اصلی گره خورده است و شما قادر به انتقال ماشین مجازی جد [...]
+        <translation type="vanished"><p>لطفا نوع شبیه سازی را که میخواهید برای ایجاد انتخاب کنید.</p><p>اگر شما <b>شبیه سازی کامل </b> را انتخاب کنید، یک کپی دقیق (شامل همه فایل های درایو سخت مجازی) از ماشین مجازی اصلی ایجاد خواهد شد.</p><p>اگر شما <b>شبیه سازی لینک شده</b> را انتخاب کنید، یک ماشین جدید ایجاد خواهد شد، اما فایل های درایو سخت مجازی به فایل های درایو سخت مجازی ماشین اصلی گره خورده است و شما قادر به انتقال ماشین مجازی جد [...]
     </message>
     <message>
         <source><p>If you create a <b>Linked clone</b> then a new snapshot will be created in the original virtual machine as part of the cloning process.</p></source>
@@ -10959,7 +11169,7 @@
     </message>
     <message>
         <source>Please choose a virtual appliance file</source>
-        <translation type="obsolete">لطفا یک فایل وسیله مجازی انتخاب کنید</translation>
+        <translation type="vanished">لطفا یک فایل وسیله مجازی انتخاب کنید</translation>
     </message>
     <message>
         <source>Open Virtualization Format Archive (%1)</source>
@@ -10975,7 +11185,7 @@
     </message>
     <message>
         <source>&Write legacy OVF 0.9</source>
-        <translation type="obsolete">&نوشتن کاربردی OVF 0.9</translation>
+        <translation type="vanished">&نوشتن کاربردی OVF 0.9</translation>
     </message>
     <message>
         <source>Create a Manifest file for automatic data integrity checks on import.</source>
@@ -11043,31 +11253,31 @@
     </message>
     <message>
         <source>Oracle Public Cloud Format Archive (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>آرشیو فرمت اوراکل ابری عمومی (%1)</translation>
     </message>
     <message>
         <source>Open Virtualization Format 0.9</source>
-        <translation type="unfinished"></translation>
+        <translation>فرمت مجازی سازی باز 0.9</translation>
     </message>
     <message>
         <source>Open Virtualization Format 1.0</source>
-        <translation type="unfinished"></translation>
+        <translation>فرمت مجازی سازی باز 1.0</translation>
     </message>
     <message>
         <source>Open Virtualization Format 2.0</source>
-        <translation type="unfinished"></translation>
+        <translation>فرمت مجازی سازی باز 2.0</translation>
     </message>
     <message>
         <source>Oracle Public Cloud Format 1.0</source>
-        <translation type="unfinished"></translation>
+        <translation>فرمت اوراکل ابری عمومی 1.0</translation>
     </message>
     <message>
         <source>Write in new OVF 2.0 format.</source>
-        <translation type="unfinished"></translation>
+        <translation>نوشتن در فرمت OVF 2.0 .</translation>
     </message>
     <message>
         <source>Write in Oracle Public Cloud 1.0 format.</source>
-        <translation type="unfinished"></translation>
+        <translation>نوشتن در فرمت اوراکل ابری عمومی 1.0.</translation>
     </message>
 </context>
 <context>
@@ -11090,7 +11300,7 @@
     </message>
     <message>
         <source><p>Please choose a filename to export the virtual appliance to.</p><p>The <b>Open Virtualization Format</b> supports only <b>ovf</b> or <b>ova</b> extensions. <br>If you use the <b>ovf</b> extension, several files will be written separately.<br>If you use the <b>ova</b> extension, all the files will be combined into one Open Virtualization Format archive.</p><p>The <b& [...]
-        <translation type="unfinished"></translation>
+        <translation><p>لطفا نام فایل را برای خروجیگیری وسیله انتخاب کنید.</p><p>The <b>فرمت مجازی سازی باز</b> فقط از پسوند <b>ovf</b> یا <b>ova</b> پشتیبانی می کند. <br>اگر از پسوند <b>ovf</b> استفاده می کنید، چندین فایل جداگنه نوشته می شوند.<br>اگر از پسوند <b>ova</b> استفاده می کنید، همه فایل ها در یک آرشیو فرمت مجازی سازی باز ادغام می شوند.</p><p>نوع <b>فرمت اوراکل ابری عمومی& [...]
     </message>
 </context>
 <context>
@@ -11127,7 +11337,7 @@
     <name>UIWizardImportApp</name>
     <message>
         <source>Import Virtual Applicance</source>
-        <translation type="obsolete">واردکردن وسیله مجازی</translation>
+        <translation type="vanished">واردکردن وسیله مجازی</translation>
     </message>
     <message>
         <source>Restore Defaults</source>
@@ -11147,11 +11357,11 @@
     </message>
     <message>
         <source>Open appliance...</source>
-        <translation type="obsolete">بازکردن وسیله...</translation>
+        <translation type="vanished">بازکردن وسیله...</translation>
     </message>
     <message>
         <source>Select an appliance to import</source>
-        <translation type="obsolete">یک وسیله برای واردکردن انتخاب کنید</translation>
+        <translation type="vanished">یک وسیله برای واردکردن انتخاب کنید</translation>
     </message>
     <message>
         <source>Open Virtualization Format (%1)</source>
@@ -11179,38 +11389,38 @@
     </message>
     <message>
         <source>Appliance is not signed</source>
-        <translation type="unfinished"></translation>
+        <translation>وسیله امضاء نشده است</translation>
     </message>
     <message>
         <source>Appliance signed by %1 (trusted)</source>
-        <translation type="unfinished"></translation>
+        <translation>وسیله امضاء شده توسط %1 (مورد اعتماد)</translation>
     </message>
     <message>
         <source>Appliance signed by %1 (expired!)</source>
-        <translation type="unfinished"></translation>
+        <translation>وسیله توسط %1 امضاء شده است(منقضی شده است!)</translation>
     </message>
     <message>
         <source>Unverified signature by %1!</source>
-        <translation type="unfinished"></translation>
+        <translation>امضای دیجیتالی تأیید نشده توسط %1!</translation>
     </message>
     <message>
         <source>Self signed by %1 (trusted)</source>
-        <translation type="unfinished"></translation>
+        <translation>امضای شخصی شده توسط %1 (مورد اعتماد)</translation>
     </message>
     <message>
         <source>Self signed by %1 (expired!)</source>
-        <translation type="unfinished"></translation>
+        <translation>امضای شخصی شده توسط %1 (منقضی شده است!)</translation>
     </message>
     <message>
         <source>Unverified self signed signature by %1!</source>
-        <translation type="unfinished"></translation>
+        <translation>امضای دیجیتالی خود امضاء شده تأیید نشده توسط %1!</translation>
     </message>
 </context>
 <context>
     <name>UIWizardNewVD</name>
     <message>
         <source>Create Virtual Hard Drive</source>
-        <translation type="obsolete">ایجاد یک درایو سخت مجازی</translation>
+        <translation type="vanished">ایجاد یک درایو سخت مجازی</translation>
     </message>
     <message>
         <source>Create</source>
@@ -11218,31 +11428,31 @@
     </message>
     <message>
         <source>Hard drive file type</source>
-        <translation type="obsolete">نوع فایل درایو سخت</translation>
+        <translation type="vanished">نوع فایل درایو سخت</translation>
     </message>
     <message>
         <source>Please choose the type of file that you would like to use for the new virtual hard drive. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
-        <translation type="obsolete">لطفا نوع فایلی را که میخواهید برای درایو سخت مجازی جدید استفاده کنید،انتخاب کنید. اگر نمیخواهید آن را با سایر برنامه های مجازی سازی استفاده کنید،میتوانید تنظیمات را تغییر ندهید.</translation>
+        <translation type="vanished">لطفا نوع فایلی را که میخواهید برای درایو سخت مجازی جدید استفاده کنید،انتخاب کنید. اگر نمیخواهید آن را با سایر برنامه های مجازی سازی استفاده کنید،میتوانید تنظیمات را تغییر ندهید.</translation>
     </message>
     <message>
         <source>Storage on physical hard drive</source>
-        <translation type="obsolete">ذخیره ساز در درایو سخت فیزیکی</translation>
+        <translation type="vanished">ذخیره ساز در درایو سخت فیزیکی</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard drive file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="obsolete">لطفا انتخاب کنید چه موقع فایل درایو سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم ایجاد شود (حجم ثابت شده).</translation>
+        <translation type="vanished">لطفا انتخاب کنید چه موقع فایل درایو سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم ایجاد شود (حجم ثابت شده).</translation>
     </message>
     <message>
         <source><p>A <b>dynamically allocated</b> hard drive file will only use space on your physical hard drive 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="obsolete"><p>یک فایل درایو سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا تا <b>حجم ثابت شده</b>)، هرچند آن دوباره خودکار وقتیکه فضای آن خالی شد کوچک نمیشود.</p></translation>
+        <translation type="vanished"><p>یک فایل درایو سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا تا <b>حجم ثابت شده</b>)، هرچند آن دوباره خودکار وقتیکه فضای آن خالی شد کوچک نمیشود.</p></translation>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard drive file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="obsolete"><p>یک فایل درایو سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
+        <translation type="vanished"><p>یک فایل درایو سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
     </message>
     <message>
         <source><p>You can also choose to <b>split</b> the hard drive 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="obsolete"><p>شما میتوانید <b>تقسیم</b> فایل درایو سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
+        <translation type="vanished"><p>شما میتوانید <b>تقسیم</b> فایل درایو سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
     </message>
     <message>
         <source>&Dynamically allocated</source>
@@ -11266,15 +11476,15 @@
     </message>
     <message>
         <source>Please type the name of the new virtual hard drive file into the box below or click on the folder icon to select a different folder to create the file in.</source>
-        <translation type="obsolete">لطفا نام درایو سخت مجازی جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
+        <translation type="vanished">لطفا نام درایو سخت مجازی جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard drive file...</source>
-        <translation type="obsolete">یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
+        <translation type="vanished">یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
     </message>
     <message>
         <source>Select the size of the virtual hard drive 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 drive.</source>
-        <translation type="obsolete">حجم درایو سخت مجازی را در مگابایت انتخاب کنید.این حجم محدودیتی در مقدار فایل داده هست که ماشین مجازی قادر به ذخیره آن در درایو سخت فیزیکی هست.</translation>
+        <translation type="vanished">حجم درایو سخت مجازی را در مگابایت انتخاب کنید.این حجم محدودیتی در مقدار فایل داده هست که ماشین مجازی قادر به ذخیره آن در درایو سخت فیزیکی هست.</translation>
     </message>
     <message>
         <source>File &location</source>
@@ -11286,7 +11496,7 @@
     </message>
     <message>
         <source>Hard drive file &type</source>
-        <translation type="obsolete">نوع فایل &درایو سخت</translation>
+        <translation type="vanished">نوع فایل &درایو سخت</translation>
     </message>
     <message>
         <source>Create Virtual Hard Disk</source>
@@ -11349,23 +11559,23 @@
     </message>
     <message>
         <source>IDE Controller</source>
-        <translation type="obsolete">کنترلر IDE</translation>
+        <translation type="vanished">کنترلر IDE</translation>
     </message>
     <message>
         <source>SATA Controller</source>
-        <translation type="obsolete">کنترلر SATA</translation>
+        <translation type="vanished">کنترلر SATA</translation>
     </message>
     <message>
         <source>SCSI Controller</source>
-        <translation type="obsolete">کنترلر SCSI</translation>
+        <translation type="vanished">کنترلر SCSI</translation>
     </message>
     <message>
         <source>Floppy Controller</source>
-        <translation type="obsolete">کنترلر فلاپی</translation>
+        <translation type="vanished">کنترلر فلاپی</translation>
     </message>
     <message>
         <source>SAS Controller</source>
-        <translation type="obsolete">کنترلر SAS</translation>
+        <translation type="vanished">کنترلر SAS</translation>
     </message>
     <message>
         <source>Name and operating system</source>
@@ -11385,15 +11595,15 @@
     </message>
     <message>
         <source>Hard drive</source>
-        <translation type="obsolete">درایو سخت</translation>
+        <translation type="vanished">درایو سخت</translation>
     </message>
     <message>
         <source><p>If you wish you can add a virtual hard drive to the new machine. You can either create a new hard drive 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 drive is <b>%1</b>.</p></source>
-        <translation type="obsolete"><p>اگر میخواهید درایو سخت مجازی به ماشین جدید اضافه کنید. میتوانید یک فایل درایو سخت جدید ایجاد کنید یا یکی از لیست انتخاب کنید یا توسط آیکون پوشه از مکان دیگری انتخاب کنید.</p><p>اگر نیاز به راه اندازی تنظیمات بیشتر ذخیره ساز دارید میتوانید این مرحله را رد کرده و تغییرات را در تنظیمات ماشین وقتی ایجاد شد انجام دهید.</p><p>حجم توصیه شده درایو سخت <b>%1</b> است.</p></translation>
+        <translation type="vanished"><p>اگر میخواهید درایو سخت مجازی به ماشین جدید اضافه کنید. میتوانید یک فایل درایو سخت جدید ایجاد کنید یا یکی از لیست انتخاب کنید یا توسط آیکون پوشه از مکان دیگری انتخاب کنید.</p><p>اگر نیاز به راه اندازی تنظیمات بیشتر ذخیره ساز دارید میتوانید این مرحله را رد کرده و تغییرات را در تنظیمات ماشین وقتی ایجاد شد انجام دهید.</p><p>حجم توصیه شده درایو سخت <b>%1</b> است.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard drive file...</source>
-        <translation type="obsolete">یک فایل درایو سخت مجازی انتخاب کنید...</translation>
+        <translation type="vanished">یک فایل درایو سخت مجازی انتخاب کنید...</translation>
     </message>
     <message>
         <source>&Memory size</source>
@@ -11401,15 +11611,15 @@
     </message>
     <message>
         <source>&Do not add a virtual hard drive</source>
-        <translation type="obsolete">یک درایو سخت مجازی اضافه نک&ن</translation>
+        <translation type="vanished">یک درایو سخت مجازی اضافه نک&ن</translation>
     </message>
     <message>
         <source>&Create a virtual hard drive now</source>
-        <translation type="obsolete">یک درایو سخت مجازی حالا ایجاد &کن</translation>
+        <translation type="vanished">یک درایو سخت مجازی حالا ایجاد &کن</translation>
     </message>
     <message>
         <source>&Use an existing virtual hard drive file</source>
-        <translation type="obsolete">از یک فایل درایو سخت مجازی &استفاده کنید</translation>
+        <translation type="vanished">از یک فایل درایو سخت مجازی &استفاده کنید</translation>
     </message>
     <message>
         <source>Hard disk</source>
@@ -11455,7 +11665,7 @@
     <name>VBoxEmptyFileSelector</name>
     <message>
         <source>&Choose...</source>
-        <translation type="obsolete">انتخا&ب...</translation>
+        <translation type="vanished">انتخا&ب...</translation>
     </message>
     <message>
         <source>Choose...</source>
@@ -11490,7 +11700,7 @@
     </message>
     <message>
         <source>Opens a window to select a different folder.</source>
-        <translation type="obsolete">بازکردن یک پنجره برای انتخاب پوشه متفاوت.</translation>
+        <translation type="vanished">بازکردن یک پنجره برای انتخاب پوشه متفاوت.</translation>
     </message>
     <message>
         <source>Resets the folder path to the default value.</source>
@@ -11498,7 +11708,7 @@
     </message>
     <message>
         <source>Opens a window to select a different file.</source>
-        <translation type="obsolete">بازکردن یک پنجره برای انتخاب فایل متفاوت.</translation>
+        <translation type="vanished">بازکردن یک پنجره برای انتخاب فایل متفاوت.</translation>
     </message>
     <message>
         <source>Resets the file path to the default value.</source>
@@ -11510,16 +11720,16 @@
     </message>
     <message>
         <source>Please type the folder path here.</source>
-        <translation type="obsolete">لطفا مسیر پوشه را اینجا وارد کنید.</translation>
+        <translation type="vanished">لطفا مسیر پوشه را اینجا وارد کنید.</translation>
     </message>
     <message>
         <source>Please type the file path here.</source>
-        <translation type="obsolete">لطفا مسیر فایل را اینجا وارد کنید.</translation>
+        <translation type="vanished">لطفا مسیر فایل را اینجا وارد کنید.</translation>
     </message>
     <message>
         <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
         <comment>new</comment>
-        <translation type="obsolete">مقدار مسیر پیش فرض واقعی بعداز پذیرفتن تغییرات و بازکردن دوباره این پنجره نمایش داده میشود.</translation>
+        <translation type="vanished">مقدار مسیر پیش فرض واقعی بعداز پذیرفتن تغییرات و بازکردن دوباره این پنجره نمایش داده میشود.</translation>
     </message>
     <message>
         <source>Displays a window to select a different folder.</source>
@@ -11723,7 +11933,7 @@
     <message>
         <source>CD/DVD</source>
         <comment>DeviceType</comment>
-        <translation type="obsolete">سی دی/دی وی دی-رام</translation>
+        <translation type="vanished">سی دی/دی وی دی-رام</translation>
     </message>
     <message>
         <source>Hard Disk</source>
@@ -12213,7 +12423,7 @@
     <message>
         <source>Teleported</source>
         <comment>MachineState</comment>
-        <translation>Teleported</translation>
+        <translation>تِلِپورت شده</translation>
     </message>
     <message>
         <source>Guru Meditation</source>
@@ -12223,7 +12433,7 @@
     <message>
         <source>Teleporting</source>
         <comment>MachineState</comment>
-        <translation>Teleporting</translation>
+        <translation>درحال تِلِپورت</translation>
     </message>
     <message>
         <source>Taking Live Snapshot</source>
@@ -12233,7 +12443,7 @@
     <message>
         <source>Teleporting Paused VM</source>
         <comment>MachineState</comment>
-        <translation>Teleporting Paused VM</translation>
+        <translation>تِلِپورت ماشین مجازی را متوقف کرده</translation>
     </message>
     <message>
         <source>Restoring Snapshot</source>
@@ -12316,7 +12526,7 @@
     </message>
     <message>
         <source>You can create disk image files using the virtual media manager.</source>
-        <translation type="obsolete">میتوانید ایمیج رسانه را توسط مدیر رسانه مجازی ایجاد کنید.</translation>
+        <translation type="vanished">میتوانید ایمیج رسانه را توسط مدیر رسانه مجازی ایجاد کنید.</translation>
     </message>
     <message>
         <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
@@ -12326,7 +12536,7 @@
     <message>
         <source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Media Manager in <b>Show Differencing Hard Disks</b> mode to inspect these files.</source>
         <comment>medium</comment>
-        <translation type="obsolete">برخی از رسانه ها در این زنجیره دیسک سخت غیرقابل دسترسی است. لطفا از مدیر رسانه مجازی در حالت <b>نمایش دیسک سخت متفاوت </b> برای بررسی این رسانه ها استفاده کنید.</translation>
+        <translation type="vanished">برخی از رسانه ها در این زنجیره دیسک سخت غیرقابل دسترسی است. لطفا از مدیر رسانه مجازی در حالت <b>نمایش دیسک سخت متفاوت </b> برای بررسی این رسانه ها استفاده کنید.</translation>
     </message>
     <message>
         <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
@@ -12371,7 +12581,7 @@
     </message>
     <message>
         <source>(CD/DVD)</source>
-        <translation type="obsolete">(سی دی/دی وی دی)</translation>
+        <translation type="vanished">(سی دی/دی وی دی)</translation>
     </message>
     <message>
         <source>Screens</source>
@@ -12421,12 +12631,12 @@
     <message>
         <source>Enabled</source>
         <comment>nested paging</comment>
-        <translation type="obsolete">فعال شده</translation>
+        <translation type="vanished">فعال شده</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>nested paging</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Nested Paging</source>
@@ -12767,11 +12977,11 @@
     </message>
     <message>
         <source>Please choose a virtual hard drive file</source>
-        <translation type="obsolete">لطفا یک فایل درایو سخت مجازی انتخاب کنید</translation>
+        <translation type="vanished">لطفا یک فایل درایو سخت مجازی انتخاب کنید</translation>
     </message>
     <message>
         <source>All virtual hard drive files (%1)</source>
-        <translation type="obsolete">همه فایل های درایو سخت مجازی (%1)</translation>
+        <translation type="vanished">همه فایل های درایو سخت مجازی (%1)</translation>
     </message>
     <message>
         <source>Please choose a virtual optical disk file</source>
@@ -12815,17 +13025,17 @@
     </message>
     <message>
         <source>Please choose a location for new virtual hard drive file</source>
-        <translation type="obsolete">لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
+        <translation type="vanished">لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="obsolete">فعال شده</translation>
+        <translation type="vanished">فعال شده</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Unrestricted Execution</source>
@@ -12874,12 +13084,12 @@
     <message>
         <source>Enabled</source>
         <comment>unrestricted execution</comment>
-        <translation type="obsolete">فعال شده</translation>
+        <translation type="vanished">فعال شده</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>unrestricted execution</comment>
-        <translation type="obsolete">غیرفعال شده</translation>
+        <translation type="vanished">غیرفعال شده</translation>
     </message>
     <message>
         <source>Unrestricted Execution</source>
@@ -13039,167 +13249,167 @@
     <message>
         <source>USB</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished">یو اِس بی</translation>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
         <source>PCIe</source>
         <comment>StorageBus</comment>
-        <translation type="unfinished"></translation>
+        <translation>PCIe</translation>
     </message>
     <message>
         <source>NVMe</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>NVMe</translation>
     </message>
     <message>
         <source>NVMe Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>NVMe پورت %1</translation>
     </message>
     <message>
         <source>General</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">عمومی</translation>
+        <translation>عمومی</translation>
     </message>
     <message>
         <source>Preview</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">پیشنمایش</translation>
+        <translation>پیشنمایش</translation>
     </message>
     <message>
         <source>System</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">سیستم</translation>
+        <translation>سیستم</translation>
     </message>
     <message>
         <source>Display</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">نمایش</translation>
+        <translation>نمایش</translation>
     </message>
     <message>
         <source>Storage</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">ذخیره ساز</translation>
+        <translation>ذخیره ساز</translation>
     </message>
     <message>
         <source>Audio</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">صدا</translation>
+        <translation>صدا</translation>
     </message>
     <message>
         <source>Network</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">شبکه</translation>
+        <translation>شبکه</translation>
     </message>
     <message>
         <source>Serial ports</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">پورت سریال</translation>
+        <translation>پورت سریال</translation>
     </message>
     <message>
         <source>Parallel ports</source>
         <comment>InformationElementType</comment>
-        <translation type="obsolete">پورت پارالل</translation>
+        <translation type="vanished">پورت پارالل</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">یو اِس بی</translation>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
         <source>Shared folders</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">پوشه های اشتراکی</translation>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
         <source>User interface</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">رابط کاربری</translation>
+        <translation>رابط کاربری</translation>
     </message>
     <message>
         <source>Description</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished">توضیحات</translation>
+        <translation>توضیحات</translation>
     </message>
     <message>
         <source>Runtime attributes</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>صفات زمان اِجرا</translation>
     </message>
     <message>
         <source>Storage statistics</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>آمار ذخیره ساز</translation>
     </message>
     <message>
         <source>Network statistics</source>
         <comment>InformationElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>آمار شبکه</translation>
     </message>
     <message>
         <source>Hard Disks</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>دیسک سخت</translation>
     </message>
     <message>
         <source>Optical Disks</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>ذیسک نوری</translation>
     </message>
     <message>
         <source>Floppy Disks</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>دیسک فلاپی</translation>
     </message>
     <message>
         <source>Network</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">شبکه</translation>
+        <translation>شبکه</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">یو اِس بی</translation>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
         <source>Shared Folders</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">پوشه های اشتراکی</translation>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
         <source>Display</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">نمایش</translation>
+        <translation>نمایش</translation>
     </message>
     <message>
         <source>Video Capture</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">ضبط ویدیو</translation>
+        <translation>ضبط ویدیو</translation>
     </message>
     <message>
         <source>Features</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>ویژگی ها</translation>
     </message>
     <message>
         <source>Mouse</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>ماوس</translation>
     </message>
     <message>
         <source>Keyboard</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>صفحه کلید</translation>
     </message>
     <message>
         <source>Differencing</source>
         <comment>MediumType</comment>
-        <translation type="unfinished">متفاوت</translation>
+        <translation>متفاوت</translation>
     </message>
     <message>
         <source>Audio</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">صدا</translation>
+        <translation>صدا</translation>
     </message>
 </context>
 <context>
@@ -13240,11 +13450,11 @@
     </message>
     <message>
         <source>&New...</source>
-        <translation type="obsolete">جد&ید...</translation>
+        <translation type="vanished">جد&ید...</translation>
     </message>
     <message>
         <source>&Add...</source>
-        <translation type="obsolete">&افزودن...</translation>
+        <translation type="vanished">&افزودن...</translation>
     </message>
     <message>
         <source>R&emove</source>
@@ -13260,7 +13470,7 @@
     </message>
     <message>
         <source>Add an existing disk image file</source>
-        <translation type="obsolete">افزودن یک رسانه موجود</translation>
+        <translation type="vanished">افزودن یک رسانه موجود</translation>
     </message>
     <message>
         <source>Remove the selected disk image file</source>
@@ -13280,7 +13490,7 @@
     </message>
     <message>
         <source>All files (*)</source>
-        <translation type="obsolete">همه فایل ها (*)</translation>
+        <translation type="vanished">همه فایل ها (*)</translation>
     </message>
     <message>
         <source><i>Not&nbsp;Attached</i></source>
@@ -13349,7 +13559,7 @@
     </message>
     <message>
         <source>Create a new virtual hard drive</source>
-        <translation type="obsolete">ایجاد یک درایو سخت مجازی جدید</translation>
+        <translation type="vanished">ایجاد یک درایو سخت مجازی جدید</translation>
     </message>
     <message>
         <source><i>Not&nbsp;Encrypted</i></source>
@@ -13368,19 +13578,19 @@
     <name>VBoxMiniToolBar</name>
     <message>
         <source>Always show the toolbar</source>
-        <translation type="obsolete">همیشه نمایش نوارابزار</translation>
+        <translation type="vanished">همیشه نمایش نوارابزار</translation>
     </message>
     <message>
         <source>Exit Full Screen or Seamless Mode</source>
-        <translation type="obsolete">خروج ازحالت تمام صفحه یا حالت یکپارچه</translation>
+        <translation type="vanished">خروج ازحالت تمام صفحه یا حالت یکپارچه</translation>
     </message>
     <message>
         <source>Close VM</source>
-        <translation type="obsolete">بستن ماشین مجازی</translation>
+        <translation type="vanished">بستن ماشین مجازی</translation>
     </message>
     <message>
         <source>Minimize Window</source>
-        <translation type="obsolete">کمینه پنجره</translation>
+        <translation type="vanished">کمینه پنجره</translation>
     </message>
 </context>
 <context>
@@ -13414,7 +13624,7 @@
     </message>
     <message>
         <source>Taken:</source>
-        <translation type="vanished">گرفته شده:</translation>
+        <translation type="vanished">ایجاد شده:</translation>
     </message>
     <message>
         <source>&Description:</source>
@@ -13497,7 +13707,7 @@
     </message>
     <message>
         <source>Show the details of the selected snapshot</source>
-        <translation type="obsolete">نمایش جزئیات ضبط وضعیت انتخاب شده</translation>
+        <translation type="vanished">نمایش جزئیات ضبط وضعیت انتخاب شده</translation>
     </message>
     <message>
         <source> (%1)</source>
@@ -13513,11 +13723,11 @@
     </message>
     <message>
         <source>Restore the selected snapshot of the virtual machine</source>
-        <translation type="obsolete">بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
+        <translation type="vanished">بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
         <source>Delete the selected snapshot of the virtual machine</source>
-        <translation type="obsolete">حذف ضبط وضعیت انتخاب شده ماشین مجازی</translation>
+        <translation type="vanished">حذف ضبط وضعیت انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
         <source> (%1 ago)</source>
@@ -13529,7 +13739,7 @@
     </message>
     <message>
         <source>Clone the selected virtual machine</source>
-        <translation type="obsolete">شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <translation type="vanished">شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
         <source>Restore selected snapshot of the virtual machine</source>
@@ -13590,106 +13800,106 @@
     <name>VBoxVMInformationDlg</name>
     <message>
         <source>%1 - Session Information</source>
-        <translation type="obsolete">%1 - اطلاعات جلسه</translation>
+        <translation type="vanished">%1 - اطلاعات جلسه</translation>
     </message>
     <message>
         <source>&Details</source>
-        <translation type="obsolete">جزئی&ات</translation>
+        <translation type="vanished">جزئی&ات</translation>
     </message>
     <message>
         <source>&Runtime</source>
-        <translation type="obsolete">زمان اِ&جرا</translation>
+        <translation type="vanished">زمان اِ&جرا</translation>
     </message>
     <message>
         <source>DMA Transfers</source>
-        <translation type="obsolete">انتقالات DMA</translation>
+        <translation type="vanished">انتقالات DMA</translation>
     </message>
     <message>
         <source>PIO Transfers</source>
-        <translation type="obsolete">انتقالات PIO</translation>
+        <translation type="vanished">انتقالات PIO</translation>
     </message>
     <message>
         <source>Data Read</source>
-        <translation type="obsolete">خواندن داده</translation>
+        <translation type="vanished">خواندن داده</translation>
     </message>
     <message>
         <source>Data Written</source>
-        <translation type="obsolete">نوشتن داده</translation>
+        <translation type="vanished">نوشتن داده</translation>
     </message>
     <message>
         <source>Data Transmitted</source>
-        <translation type="obsolete">داده اِرسال شده</translation>
+        <translation type="vanished">داده اِرسال شده</translation>
     </message>
     <message>
         <source>Data Received</source>
-        <translation type="obsolete">داده دریافتی</translation>
+        <translation type="vanished">داده دریافتی</translation>
     </message>
     <message>
         <source>Runtime Attributes</source>
-        <translation type="obsolete">صفات زمان اِجرا</translation>
+        <translation type="vanished">صفات زمان اِجرا</translation>
     </message>
     <message>
         <source>Screen Resolution</source>
-        <translation type="obsolete">وضوح صفحه</translation>
+        <translation type="vanished">وضوح صفحه</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
-        <translation type="obsolete">تشخیص داده نشده است</translation>
+        <translation type="vanished">تشخیص داده نشده است</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest os type</comment>
-        <translation type="obsolete">تشخیص داده نشده است</translation>
+        <translation type="vanished">تشخیص داده نشده است</translation>
     </message>
     <message>
         <source>Guest Additions</source>
-        <translation type="obsolete">افزونه مهمان</translation>
+        <translation type="vanished">افزونه مهمان</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
-        <translation type="obsolete">نوع سیستم عامل مهمان</translation>
+        <translation type="vanished">نوع سیستم عامل مهمان</translation>
     </message>
     <message>
         <source>No Network Adapters</source>
-        <translation type="obsolete">هیچ آداپتور شبکه ندارد</translation>
+        <translation type="vanished">هیچ آداپتور شبکه ندارد</translation>
     </message>
     <message>
         <source>VBoxVMInformationDlg</source>
-        <translation type="obsolete">VBoxVMInformationDlg</translation>
+        <translation type="vanished">VBoxVMInformationDlg</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
-        <translation type="obsolete">آمار ذخیره ساز</translation>
+        <translation type="vanished">آمار ذخیره ساز</translation>
     </message>
     <message>
         <source>No Storage Devices</source>
-        <translation type="obsolete">دستگاه ذخیره ساز ندارد</translation>
+        <translation type="vanished">دستگاه ذخیره ساز ندارد</translation>
     </message>
     <message>
         <source>Network Statistics</source>
-        <translation type="obsolete">آمار شبکه</translation>
+        <translation type="vanished">آمار شبکه</translation>
     </message>
     <message>
         <source>Not Available</source>
         <comment>details report (VRDE server port)</comment>
-        <translation type="obsolete">موجود نیست</translation>
+        <translation type="vanished">موجود نیست</translation>
     </message>
     <message>
         <source>Clipboard Mode</source>
-        <translation type="obsolete">حالت کلیپ برد</translation>
+        <translation type="vanished">حالت کلیپ برد</translation>
     </message>
     <message>
         <source>Drag'n'Drop Mode</source>
-        <translation type="obsolete">حالت کشیدن 'و' رهاکردن</translation>
+        <translation type="vanished">حالت کشیدن 'و' رهاکردن</translation>
     </message>
     <message>
         <source>Configuration &Details</source>
-        <translation type="obsolete">جزئیات &پیکربندی</translation>
+        <translation type="vanished">جزئیات &پیکربندی</translation>
     </message>
     <message>
         <source>&Runtime Information</source>
-        <translation type="obsolete">&اطلاعات زمان اِجرا</translation>
+        <translation type="vanished">&اطلاعات زمان اِجرا</translation>
     </message>
 </context>
 </TS>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
index 199ebbd..e7e3b3e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
@@ -7887,6 +7887,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8076,54 +8108,35 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <source><nobr>%1 (%2 B)</nobr></source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -9777,6 +9790,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -11606,80 +11627,80 @@ Kaikki VirtualBoxin komponentit käyttävät sitä koneen tunnistukseen.</p&g
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
index dd17ff3..502623d 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
@@ -8797,6 +8797,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8994,55 +9026,51 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 octets)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Modifier les attributs du média</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Vous êtes sur le point de modifier les attributs du disque virtuel correspondant au fichier <b>%1</b>.</p><p>Choisissez un des types de média suivants et utilisez le bouton <b>%2</b> pour continuer ou bien <b>%3</b> pour annuler.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Choisissez le type de média :</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 octets)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Modifier les attributs du média</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Vous êtes sur le point de modifier les attributs du disque virtuel correspondant au fichier <b>%1</b>.</p><p>Choisissez un des types de média suivants et utilisez le bouton <b>%2</b> pour continuer ou bien <b>%3</b> pour annuler.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Choisissez le type de média :</translation>
     </message>
 </context>
 <context>
@@ -10868,6 +10896,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -12812,7 +12848,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_copie</translation>
+        <translation type="vanished">%1_copie</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -12828,27 +12864,27 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Copier le disque dur virtuel</translation>
+        <translation type="vanished">Copier le disque dur virtuel</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Disque dur à copier</translation>
+        <translation type="vanished">Disque dur à copier</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><p>Veuillez choisir le fichier de disque dur virtuel que vous souhaitez copier s'il n'est pas déjà sélectionné. Vous pouvez soit en choisir un de la liste ou utiliser l'icône dossier en dessous de la liste pour en choisir un.</p></translation>
+        <translation type="vanished"><p>Veuillez choisir le fichier de disque dur virtuel que vous souhaitez copier s'il n'est pas déjà sélectionné. Vous pouvez soit en choisir un de la liste ou utiliser l'icône dossier en dessous de la liste pour en choisir un.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Choisissez un fichier de disque dur virtuel à copier...</translation>
+        <translation type="vanished">Choisissez un fichier de disque dur virtuel à copier...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Type de fichier de disque dur</translation>
+        <translation type="vanished">Type de fichier de disque dur</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>Choisissez le type de fichier que vous désirez utiliser pour le nouveau disque virtuel. Si vous n'avez pas besoin de l'utiliser avec d'autres logiciels de virtualisation vous pouvez laisser ce paramètre inchangé.</translation>
+        <translation type="vanished">Choisissez le type de fichier que vous désirez utiliser pour le nouveau disque virtuel. Si vous n'avez pas besoin de l'utiliser avec d'autres logiciels de virtualisation vous pouvez laisser ce paramètre inchangé.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -12856,47 +12892,120 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </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>Veuilez choisir si le nouveau fichier de disque dur virtuel doit croître au fur et à mesure (allocation dynamique) ou bien s'il doit être crée à sa taille maximale (taille fixe).</translation>
+        <translation type="vanished">Veuilez choisir si le nouveau fichier de disque dur virtuel doit croître au fur et à mesure (allocation dynamique) ou bien s'il doit être crée à sa taille maximale (taille fixe).</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><p>Un fichier de disque dur <b>alloué dynamiquement</b> n'utilisera d'espace sur votre disque dur physique qu'au fur et à mesure qu'il se remplira (jusqu'à une <b>taille fixe</> maximale), cependant il ne se réduira pas lorsque de l'espace sur celui-ci sera libéré.</p></translation>
+        <translation type="vanished"><p>Un fichier de disque dur <b>alloué dynamiquement</b> n'utilisera d'espace sur votre disque dur physique qu'au fur et à mesure qu'il se remplira (jusqu'à une <b>taille fixe</> maximale), cependant il ne se réduira pas lorsque de l'espace sur celui-ci sera libéré.</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><p>Un fichier de disque dur à <b>taille fixe</b> sera plus long à créer sur certains systèmes mais sera souvent plus rapide à utiliser.</p></translation>
+        <translation type="vanished"><p>Un fichier de disque dur à <b>taille fixe</b> sera plus long à créer sur certains systèmes mais sera souvent plus rapide à utiliser.</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><p>Vous pouvez choisir de <b>diviser</b> le disque virtuel dans plusieurs fichiers de jusqu'à deux gigaoctets chacun. Ceci est surtout utile si vous désirez stocker la machine virtuelle sur des clés USB ou sur d'anciens systèmes qui ne peuvent pas gérer de très grands fichiers.</translation>
+        <translation type="vanished"><p>Vous pouvez choisir de <b>diviser</b> le disque virtuel dans plusieurs fichiers de jusqu'à deux gigaoctets chacun. Ceci est surtout utile si vous désirez stocker la machine virtuelle sur des clés USB ou sur d'anciens systèmes qui ne peuvent pas gérer de très grands fichiers.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Choisissez un emplacement pour le nouveau fichier de disque dur virtuel</translation>
+        <translation type="vanished">Choisissez un emplacement pour le nouveau fichier de disque dur virtuel</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Nouveau disque dur à créer</translation>
+        <translation type="vanished">Nouveau disque dur à créer</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>Veuillez saisir un nom pour le nouveau fichier de disque dur virtuel dans la boîte si dessous ou cliquez sur l'icône dossier pour choisir un autre dossier dans lequel le créer.</translation>
+        <translation type="vanished">Veuillez saisir un nom pour le nouveau fichier de disque dur virtuel dans la boîte si dessous ou cliquez sur l'icône dossier pour choisir un autre dossier dans lequel le créer.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Choisissez un emplacement pour le nouveau fichier de disque dur virtuel...</translation>
+        <translation type="vanished">Choisissez un emplacement pour le nouveau fichier de disque dur virtuel...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Disque dur à &copier</translation>
+        <translation type="vanished">Disque dur à &copier</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Nouveau disque dur à créer</translation>
+        <translation type="vanished">&Nouveau disque dur à créer</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&type de fichier de disque dur</translation>
+        <translation type="vanished">&type de fichier de disque dur</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_copie</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl.ts
index 46637d5..232048d 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl.ts
@@ -7834,6 +7834,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8023,54 +8055,35 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <source><nobr>%1 (%2 B)</nobr></source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -9674,6 +9687,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -11414,80 +11435,80 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_he.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_he.ts
index 73d5b4e..71d6eea 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_he.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_he.ts
@@ -5784,6 +5784,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5977,55 +6009,47 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 ב)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>אתה עומד לשנות את ההגדרות של קובץ תמונת דיסק <b>%1</b>.</p><p>אנא בחר באחד מן המצבים הבאים ולחץ <b>%2</b> כדי להמשיך או <b>%3</b> אם לא.</p></translation>
-    </message>
-    <message>
-        <source>Choose mode:</source>
-        <translation>בחר מצב:</translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 ב)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>אתה עומד לשנות את ההגדרות של קובץ תמונת דיסק <b>%1</b>.</p><p>אנא בחר באחד מן המצבים הבאים ולחץ <b>%2</b> כדי להמשיך או <b>%3</b> אם לא.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">בחר מצב:</translation>
     </message>
 </context>
 <context>
@@ -7164,6 +7188,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -8362,7 +8394,7 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_עותק</translation>
+        <translation type="vanished">%1_עותק</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -8377,75 +8409,80 @@
         <translation type="vanished">&טיפוס קובץ כונן קשיח</translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></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>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></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>
+        <source>Disk image file type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></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>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></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>
+        <source>Please type the name of the new virtual disk image 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>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_עותק</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
index 2445ed3..34df62d 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
@@ -9704,6 +9704,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9901,55 +9933,51 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Médium attribútumainak módosítása</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Módosítani akarod a virtuális lemez attribútumát, ami itt van: <b>%1</b>.</p><p>Válassz egyet a következő típusok közül, majd <b>%2</b> gomb a folytatáshoz. Egyébként <b>%3</b>.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Válassz médium típust:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Médium attribútumainak módosítása</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Módosítani akarod a virtuális lemez attribútumát, ami itt van: <b>%1</b>.</p><p>Válassz egyet a következő típusok közül, majd <b>%2</b> gomb a folytatáshoz. Egyébként <b>%3</b>.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Válassz médium típust:</translation>
     </message>
 </context>
 <context>
@@ -11924,6 +11952,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14327,7 +14363,7 @@ esetleg a <b>Létező</b> gombbal a Virtuális lemezkezelőből.<
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_másolat</translation>
+        <translation type="vanished">%1_másolat</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14343,27 +14379,27 @@ esetleg a <b>Létező</b> gombbal a Virtuális lemezkezelőből.<
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Virtuális merevlemez másolása</translation>
+        <translation type="vanished">Virtuális merevlemez másolása</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Másolandó merevlemez</translation>
+        <translation type="vanished">Másolandó merevlemez</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><p>Válaszd ki a virtuális lemezt, amelyiket másolni szeretnél, ha még nincs kiválasztva. Választhatsz másikat is a listából vagy a mappa ikonnal kiválaszthatsz egy virtuális lemezfájlt.</p></translation>
+        <translation type="vanished"><p>Válaszd ki a virtuális lemezt, amelyiket másolni szeretnél, ha még nincs kiválasztva. Választhatsz másikat is a listából vagy a mappa ikonnal kiválaszthatsz egy virtuális lemezfájlt.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Másolandó virtuális merevlemez választása...</translation>
+        <translation type="vanished">Másolandó virtuális merevlemez választása...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Merevlemez típusa</translation>
+        <translation type="vanished">Merevlemez típusa</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>Válassz egy fájltípust, amit az új virtuális lemezhez szeretnél használni. Ha nem szeretnéd másik virtualizációs szoftverhez használni, nem kell a beállításokat módosítanod.</translation>
+        <translation type="vanished">Válassz egy fájltípust, amit az új virtuális lemezhez szeretnél használni. Ha nem szeretnéd másik virtualizációs szoftverhez használni, nem kell a beállításokat módosítanod.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14371,47 +14407,120 @@ esetleg a <b>Létező</b> gombbal a Virtuális lemezkezelőből.<
     </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>Válaszd ki, hogy az új virtuális lemez mérete folyamatosan növekedjen (dinamikusan növekvő) vagy lefoglalja-e a teljes területét (fix méretű).</translation>
+        <translation type="vanished">Válaszd ki, hogy az új virtuális lemez mérete folyamatosan növekedjen (dinamikusan növekvő) vagy lefoglalja-e a teljes területét (fix méretű).</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><p>A <b>dinamikus növekvő</b> virtuális lemezfájl a benne levő adatokhoz mérten foglal helyet a fizikai merevlemezen (a maximális <b>fix méretig</b>), bár a felszabaduló hellyel nem fog automatikusan csökkenni a mérete.</p></translation>
+        <translation type="vanished"><p>A <b>dinamikus növekvő</b> virtuális lemezfájl a benne levő adatokhoz mérten foglal helyet a fizikai merevlemezen (a maximális <b>fix méretig</b>), bár a felszabaduló hellyel nem fog automatikusan csökkenni a mérete.</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><p>A <b>fix méretű</b> merevlemezfájl létrehozása egyes rendszereken lassú lehet, de gyakran gyorsabb a használata.</p></translation>
+        <translation type="vanished"><p>A <b>fix méretű</b> merevlemezfájl létrehozása egyes rendszereken lassú lehet, de gyakran gyorsabb a használata.</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><p><b>Feldarabol</b>hatod a virtuális lemezeket, maximum 2GB-os fájlokra. Leginkább akkor hasznos, ha a virtuális gépet USB eszközön vagy régi fájlrendszeren tárolod, melyek nem tudják a nagy fájlokat kezelni.</translation>
+        <translation type="vanished"><p><b>Feldarabol</b>hatod a virtuális lemezeket, maximum 2GB-os fájlokra. Leginkább akkor hasznos, ha a virtuális gépet USB eszközön vagy régi fájlrendszeren tárolod, melyek nem tudják a nagy fájlokat kezelni.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Válaszd ki az új virtuális merevlemez fájl helyét</translation>
+        <translation type="vanished">Válaszd ki az új virtuális merevlemez fájl helyét</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Új  merevlemez létrehozása</translation>
+        <translation type="vanished">Új  merevlemez létrehozása</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>Kérlek add meg a lenti mezőben az új virtuális merevlemez nevét, vagy kattints a mappa ikonra a mappa kiválasztásához, ahol létrejöjjön a fájl.</translation>
+        <translation type="vanished">Kérlek add meg a lenti mezőben az új virtuális merevlemez nevét, vagy kattints a mappa ikonra a mappa kiválasztásához, ahol létrejöjjön a fájl.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Az új merevlemez helyének kiválasztása...</translation>
+        <translation type="vanished">Az új merevlemez helyének kiválasztása...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>&Másolandó merevlemez</translation>
+        <translation type="vanished">&Másolandó merevlemez</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>Új  &merevlemez létrehozása</translation>
+        <translation type="vanished">Új  &merevlemez létrehozása</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Merevlemez &típusa</translation>
+        <translation type="vanished">Merevlemez &típusa</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_másolat</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
index 9ffc1b1..4f68a7b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
@@ -8979,6 +8979,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Tidak bisa mengubah ukuran medium dari <b>%1</b> menjadi <b>%2</b> karena penyusutan penyimpanan saat in belum diimplementasi.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">Tipe medium ini dicantol secara langsung atau tak langsung, dilestarikan ketika mengambil snapshot.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">Tipe medium ini dicantol secara tak langsung, perubahan disapu habis saat mesin virtual dijalankan berikutnya.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">Tipe medium ini dicantol secara langsung, diabaikan ketika mengambil snapshot.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">Tipe medium ini dicantol secara langsung, diijinkan untuk dipakai bersamaan oleh beberapa mesin.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">Tipe medium ini dicantol secara langsung, dan dapat dipakai oleh beberapa mesin.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">Tipe medium ini dicantol secara tak langsung, sehingga satu medium basis dapat dipakai bagi beberapa VM yang memiliki medium pembeda masing-masing untuk menyimpan perubahan mereka.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9176,6 +9208,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">Segarkan Berkas Image Disk (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -9215,39 +9267,39 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Ubah atribut medium</translation>
+        <translation type="vanished">Ubah atribut medium</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><b>Anda akan mengubah pengaturan berkas image disk <b>%1</b>.</p><p>Harap pilih satu dari mode berikut dan tekan <b>%2</b> untuk melanjutkan atau <b>%3</b> bila tidak.</p></translation>
+        <translation type="vanished"><b>Anda akan mengubah pengaturan berkas image disk <b>%1</b>.</p><p>Harap pilih satu dari mode berikut dan tekan <b>%2</b> untuk melanjutkan atau <b>%3</b> bila tidak.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Pilih mode:</translation>
+        <translation type="vanished">Pilih mode:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Tipe medium ini dicantol secara langsung atau tak langsung, dilestarikan ketika mengambil snapshot.</translation>
+        <translation type="vanished">Tipe medium ini dicantol secara langsung atau tak langsung, dilestarikan ketika mengambil snapshot.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Tipe medium ini dicantol secara tak langsung, perubahan disapu habis saat mesin virtual dijalankan berikutnya.</translation>
+        <translation type="vanished">Tipe medium ini dicantol secara tak langsung, perubahan disapu habis saat mesin virtual dijalankan berikutnya.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Tipe medium ini dicantol secara langsung, diabaikan ketika mengambil snapshot.</translation>
+        <translation type="vanished">Tipe medium ini dicantol secara langsung, diabaikan ketika mengambil snapshot.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Tipe medium ini dicantol secara langsung, diijinkan untuk dipakai bersamaan oleh beberapa mesin.</translation>
+        <translation type="vanished">Tipe medium ini dicantol secara langsung, diijinkan untuk dipakai bersamaan oleh beberapa mesin.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Tipe medium ini dicantol secara langsung, dan dapat dipakai oleh beberapa mesin.</translation>
+        <translation type="vanished">Tipe medium ini dicantol secara langsung, dan dapat dipakai oleh beberapa mesin.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Tipe medium ini dicantol secara tak langsung, sehingga satu medium basis dapat dipakai bagi beberapa VM yang memiliki medium pembeda masing-masing untuk menyimpan perubahan mereka.</translation>
+        <translation type="vanished">Tipe medium ini dicantol secara tak langsung, sehingga satu medium basis dapat dipakai bagi beberapa VM yang memiliki medium pembeda masing-masing untuk menyimpan perubahan mereka.</translation>
     </message>
 </context>
 <context>
@@ -11205,6 +11257,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -13338,7 +13398,7 @@ langkah ini dan memasang hard disk pada waktu lain menggunakan dialog Setting Me
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>salinan_%1</translation>
+        <translation type="vanished">salinan_%1</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -13354,27 +13414,27 @@ langkah ini dan memasang hard disk pada waktu lain menggunakan dialog Setting Me
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Salin Hard Disk Virtual</translation>
+        <translation type="vanished">Salin Hard Disk Virtual</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Hard disk yang akan disalin</translation>
+        <translation type="vanished">Hard disk yang akan disalin</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><p>Silakan pilih berkas hard disk virtual yang ingin Anda salin bila belum dipilih. Anda dapat memilih dari daftar atau memakai ikon folder di samping daftar untuk memilih salah satu.</p></translation>
+        <translation type="vanished"><p>Silakan pilih berkas hard disk virtual yang ingin Anda salin bila belum dipilih. Anda dapat memilih dari daftar atau memakai ikon folder di samping daftar untuk memilih salah satu.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Pilih berkas hard disk virtual yang akan disalin...</translation>
+        <translation type="vanished">Pilih berkas hard disk virtual yang akan disalin...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Tipe berkas hard disk</translation>
+        <translation type="vanished">Tipe berkas hard disk</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>Silakan pilih tipe berkas yang ingin Anda pakai untuk hard disk virtual baru. Bila Anda tak perlu memakainya dengan perangkat lunak virtualisasi lain Anda dapat membiarkan pengaturan ini tak diubah.</translation>
+        <translation type="vanished">Silakan pilih tipe berkas yang ingin Anda pakai untuk hard disk virtual baru. Bila Anda tak perlu memakainya dengan perangkat lunak virtualisasi lain Anda dapat membiarkan pengaturan ini tak diubah.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -13382,47 +13442,120 @@ langkah ini dan memasang hard disk pada waktu lain menggunakan dialog Setting Me
     </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>Silakan pilih apakah berkas hard disk virtual baru mesti tumbuh ketika dipakai (dialokasikan secara dinamik) atau mesti diciptakan pada ukuran maksimumnya (ukuran tetap).</translation>
+        <translation type="vanished">Silakan pilih apakah berkas hard disk virtual baru mesti tumbuh ketika dipakai (dialokasikan secara dinamik) atau mesti diciptakan pada ukuran maksimumnya (ukuran tetap).</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><p>Berkas hard disk virtual <b>yang dialokasikan secara dinamik</b> hanya akan memakai ruang pada hard disk fisik Anda ketika terisi (sampai dengan suatu <b>ukuran tetap</b> maksimum), walaupun mereka tak akan mengecil lagi secara otomatis ketika ruang di dalamnya dibebaskan.</p></translation>
+        <translation type="vanished"><p>Berkas hard disk virtual <b>yang dialokasikan secara dinamik</b> hanya akan memakai ruang pada hard disk fisik Anda ketika terisi (sampai dengan suatu <b>ukuran tetap</b> maksimum), walaupun mereka tak akan mengecil lagi secara otomatis ketika ruang di dalamnya dibebaskan.</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><p>Berkas hard disk virtual <b>ukuran tetap</b> mungkin makan waktu lebih lama untuk diciptakan pada beberapa sistem tapi seringkali lebih cepat dipakainya.</p></translation>
+        <translation type="vanished"><p>Berkas hard disk virtual <b>ukuran tetap</b> mungkin makan waktu lebih lama untuk diciptakan pada beberapa sistem tapi seringkali lebih cepat dipakainya.</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><p>Anda juga dapat memilih untuk <b>memecah</b> disk virtual ke dalam beberapa berkas yang masing-masing berukuran sampai dengan dua giga byte. Ini terutama berguna bila Anda hendak menyimpan mesin virtual pada peranti USB lepas pasang atau sistem lama, yang mungkin tak bisa menangani berkas sangat besar.</translation>
+        <translation type="vanished"><p>Anda juga dapat memilih untuk <b>memecah</b> disk virtual ke dalam beberapa berkas yang masing-masing berukuran sampai dengan dua giga byte. Ini terutama berguna bila Anda hendak menyimpan mesin virtual pada peranti USB lepas pasang atau sistem lama, yang mungkin tak bisa menangani berkas sangat besar.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Harap pilih lokasi untuk berkas hard disk virtual baru</translation>
+        <translation type="vanished">Harap pilih lokasi untuk berkas hard disk virtual baru</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Hard disk baru yang akan dibuat</translation>
+        <translation type="vanished">Hard disk baru yang akan dibuat</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>Silakan ketik nama berkas hard disk virtual baru ke kotak di bawah atau klik pada ikon folder untuk memilih folder lain tempat mencipta berkas.</translation>
+        <translation type="vanished">Silakan ketik nama berkas hard disk virtual baru ke kotak di bawah atau klik pada ikon folder untuk memilih folder lain tempat mencipta berkas.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Pilih lokasi untuk berkas hard disk virtual baru...</translation>
+        <translation type="vanished">Pilih lokasi untuk berkas hard disk virtual baru...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Hard disk yang akan di&salin</translation>
+        <translation type="vanished">Hard disk yang akan di&salin</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>Hard disk baru yang aka&n dibuat</translation>
+        <translation type="vanished">Hard disk baru yang aka&n dibuat</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Tipe berkas hard disk</translation>
+        <translation type="vanished">&Tipe berkas hard disk</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">salinan_%1</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
index 46dff76..a9dfb32 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
@@ -6798,7 +6798,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>Indicates whether the host mouse pointer is captured by the guest OS:%1</source>
         <comment>Mouse tooltip</comment>
-        <translation>Indica se il punatore del mouse dell'host a è acquisito dal sistema operativo del Guest: %1</translation>
+        <translation>Indica se il puntatore del mouse dell'host a è acquisito dal sistema operativo del Guest: %1</translation>
     </message>
     <message>
         <source>pointer is not captured</source>
@@ -9041,7 +9041,7 @@ p, li { white-space: pre-wrap; }
     </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><p>Nella modalità <b>Pipe host</b>: contiene il percorso della pipe della porta seriale sull'host. Esempi: "\\.\pipe\myvbox" o "/tmp/myvbox", rispettivamente per Windows e sistemi di tipo UNIX.</p><p>Nella modalità <b>Dispositivo host</b>: contiene il nomde del dispositivo seriale dell'host. Esempi: "COM1" o "/dev/ttyS0".</p><p>Nella modalità <b>File raw</ [...]
+        <translation><p>Nella modalità <b>Pipe host</b>: contiene il percorso della pipe della porta seriale sull'host. Esempi: "\\.\pipe\myvbox" o "/tmp/myvbox", rispettivamente per Windows e sistemi di tipo UNIX.</p><p>Nella modalità <b>Dispositivo host</b>: contiene il nome del dispositivo seriale dell'host. Esempi: "COM1" o "/dev/ttyS0".</p><p>Nella modalità <b>File raw</b [...]
     </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>
@@ -9872,7 +9872,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Limits the amount of time that each virtual CPU is allowed to run for. Each virtual CPU will be allowed to use up to this percentage of the processing time available on one physical CPU. The execution cap can be disabled by setting it to 100%. Setting the cap too low can make the machine feel slow to respond.</source>
-        <translation>Limita la quantità di tempo destinata all'esecuzione di ogni CPU virtuale. Ogni CPU virtual potrà utilizzare fino a questa percentuale del tempo di elaborazione disponibile in una CPU fisica. Execution cap può essere disabilitato impostandolo al 100%. L'impostazione di un limite troppo basso può rendere lenta la risposta della macchina.</translation>
+        <translation>Limita la quantità di tempo destinata all'esecuzione di ogni CPU virtuale. Ogni CPU virtuale potrà utilizzare fino a questa percentuale del tempo di elaborazione disponibile in una CPU fisica. Execution cap può essere disabilitato impostandolo al 100%. L'impostazione di un limite troppo basso può rendere lenta la risposta della macchina.</translation>
     </message>
     <message>
         <source>you have set the processor execution cap to a low value. This can make the machine feel slow to respond.</source>
@@ -10470,6 +10470,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Impossibile modificare la dimensione del supporto da <b>%1</b> a <b>%2</b> poiché il restringimento non è attualmente implementato.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation>Scegli posizione supporto</translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation>La posizione non può essere vuota.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>Questo tipo di supporto è collegato direttamente o indirettamente, preservato quando si creano istantanee.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>Questo tipo di supporto è collegato indirettamente, le modifiche saranno perse al prossimo avvio della macchina virtuale.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>Questo tipo di supporto è collegato direttamente, ignorato quando si creano istantanee.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>Questo tipo di supporto è collegato direttamente, consentito l'uso concomitante da parte di diverse macchine.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>Questo tipo di supporto è collegato direttamente, e può essere utilizzato da diverse macchine.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>Questo tipo di supporto è collegato indirettamente, in modo che il supporto di base possa essere utilizzato da diverse MV che hanno supporti differenziati per archiviare le proprie modifiche.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -10667,6 +10699,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation>Aggiorna i file immagine dei dischi (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation>Estensione attuale(*.%1) </translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation>Scegli la posizione del supporto</translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation>&Sposta...</translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation>Sposta file immagine disco (%1)</translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation>Sposta file dell'immagine disco selezionato</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -10706,39 +10758,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Modifica gli attributi del supporto</translation>
+        <translation type="vanished">Modifica gli attributi del supporto</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Stai per cambiare gli attributi del disco virtuale posizionato in <b>%1</b>.</p><p>Scegli uno dei seguenti tipi di supporto e premi <b>%2</b> per procedere o <b>%3</b> altrimenti.</p></translation>
+        <translation type="vanished"><p>Stai per cambiare gli attributi del disco virtuale posizionato in <b>%1</b>.</p><p>Scegli uno dei seguenti tipi di supporto e premi <b>%2</b> per procedere o <b>%3</b> altrimenti.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Scegli il tipo di supporto:</translation>
+        <translation type="vanished">Scegli il tipo di supporto:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Questo tipo di supporto è collegato direttamente o indirettamente utilizzando il seguente disco differenziale.</translation>
+        <translation type="vanished">Questo tipo di supporto è collegato direttamente o indirettamente utilizzando il seguente disco differenziale.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Questo tipo di supporto è collegato indirettamente, le modifiche saranno perse al prossimo avvio della macchina virtuale.</translation>
+        <translation type="vanished">Questo tipo di supporto è collegato indirettamente, le modifiche saranno perse al prossimo avvio della macchina virtuale.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Questo tipo di supporto è collegato direttamente, ignorato quando si creano istantanee.</translation>
+        <translation type="vanished">Questo tipo di supporto è collegato direttamente, ignorato quando si creano istantanee.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Questo tipo di supporto è collegato direttamente, consentito l'uso concomitante da parte di diverse macchine.</translation>
+        <translation type="vanished">Questo tipo di supporto è collegato direttamente, consentito l'uso concomitante da parte di diverse macchine.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Questo tipo di supporto è collegato direttamente, e può essere utilizzato da diverse macchine.</translation>
+        <translation type="vanished">Questo tipo di supporto è collegato direttamente, e può essere utilizzato da diverse macchine.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Questo tipo di supporto è collegato indirettamente, in modo che il supporto di base possa essere utilizzato da diverse MV che hanno diversi supporti per archiviare le proprie modifiche.</translation>
+        <translation type="vanished">Questo tipo di supporto è collegato indirettamente, in modo che il supporto di base possa essere utilizzato da diverse MV che hanno diversi supporti per archiviare le proprie modifiche.</translation>
     </message>
 </context>
 <context>
@@ -12279,7 +12331,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>Failed to initialize COM because the VirtualBox global configuration directory <b><nobr>%1</nobr></b> is not accessible. Please check the permissions of this directory and of its parent directory.</p><p>The application will now terminate.</p></source>
-        <translation><p>Inizializzazione COM non riuscita poiché la cartella di configurazione globale di VirtualBox <b><nobr>%1</nobr></b> non è accessibile. Controlla i permessi della cartella e delle cartelle superiori..</p><p>L'applicazione sarà terminata subito</p></translation>
+        <translation><p>Inizializzazione COM non riuscita poiché la cartella di configurazione globale di VirtualBox <b><nobr>%1</nobr></b> non è accessibile. Controlla i permessi della cartella e delle cartelle superiori.</p><p>L'applicazione sarà terminata subito</p></translation>
     </message>
     <message numerus="yes">
         <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>
@@ -12685,11 +12737,11 @@ p, li { white-space: pre-wrap; }
     </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 [...]
-        <translation><p>Si è verificato un errore critico durante il funzionamento della macchina virtuale e l'esecuzione della macchina è stata fermata.</p><p>Per ottenere aiuto, vedi la sezione Community su <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> o il contratto di supporto. Fornisci il contenuto del file di log <tt>VBox.log</tt> e il file immagine <tt>VBox.png</tt>, che puoi trovare nella cartella < [...]
+        <translation><p>Si è verificato un errore critico durante il funzionamento della macchina virtuale e l'esecuzione della macchina è stata fermata.</p><p>Per ottenere aiuto, vedi la sezione Community su <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> o il contratto di supporto. Fornisci il contenuto del file di log <tt>VBox.log</tt> e il file immagine <tt>VBox.png</tt>, che puoi trovare nella cartella < [...]
     </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><p>Si è verificato un errore critico durante il funzionamento della macchina virtuale e l'esecuzione della macchinadovrebbe essere fermata.</p><p>Per ottenere aiuto, vedi la sezione Community su <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> o il contratto di supporto. Fornisci il contenuto del file di log <tt>VBox.log</tt> che puoi trovare nella cartella dei log della macchina virtuale, così come una  [...]
+        <translation><p>Si è verificato un errore critico durante il funzionamento della macchina virtuale e l'esecuzione della macchina dovrebbe essere fermata.</p><p>Per ottenere aiuto, vedi la sezione Community su <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> o il contratto di supporto. Fornisci il contenuto del file di log <tt>VBox.log</tt> che puoi trovare nella cartella dei log della macchina virtuale, così come una [...]
     </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>
@@ -12697,11 +12749,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation>Collegamento del cavo di rete della macchina virtuale<b>%1</b> non riucito.</translation>
+        <translation>Collegamento del cavo di rete della macchina virtuale<b>%1</b> non riuscito.</translation>
     </message>
     <message>
         <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation>Disconnessione del cavo di rete della macchina virtuale<b>%1</b> non riucito.</translation>
+        <translation>Disconnessione del cavo di rete della macchina virtuale<b>%1</b> non riuscito.</translation>
     </message>
     <message>
         <source>Drag and drop operation from host to guest failed.</source>
@@ -12786,7 +12838,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>The reason for this error are most likely wrong permissions of the IPC daemon socket due to an installation problem. Please check the permissions of <font color=blue>'/tmp'</font> and <font color=blue>'/tmp/.vbox-*-ipc/'</font></p></source>
-        <translation><p>Questo errore è causato nella maggior parte dei casi da permessi errati sul socket del demone IPC, derivanti da un problema di installazione. Controlla i permessi di <font color=blue>'/tmp'</font> and <font color=blue>'/tmp/.vbox-*-ipc/'</font></p></translation>
+        <translation><p>Questo errore è causato nella maggior parte dei casi da permessi errati sul socket del demone IPC, derivanti da un problema di installazione. Controlla i permessi di <font color=blue>'/tmp'</font> e <font color=blue>'/tmp/.vbox-*-ipc/'</font></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>but the SHA-256 checksum verification failed.</p><p>Please do the download, installation and verification manually.</p></source>
@@ -12896,6 +12948,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>Modifica dell'istantanea <b>%1</b> della macchina virtuale <b>%2</b> non riuscita.</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation>Creazione dell'archiviazione dell'immagine disco virtuale <nobr><b>%1</b> non riuscita.</nobr></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -15400,7 +15460,7 @@ questo passo e collegare hard disk più tardi tramite Impostazioni della MV.<
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_copia</translation>
+        <translation type="vanished">%1_copia</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -15416,27 +15476,27 @@ questo passo e collegare hard disk più tardi tramite Impostazioni della MV.<
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Copia disco fisso virtuale</translation>
+        <translation type="vanished">Copia disco fisso virtuale</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Disco fisso da copiare</translation>
+        <translation type="vanished">Disco fisso da copiare</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><p>Seleziona il file di disco virtuale che desideri copiare se non è ancora selezionato. Puoi sceglierne uno dall'elenco o utilizzare l'icona della cartella accanto all'elenco per selezionarlo.</p></translation>
+        <translation type="vanished"><p>Seleziona il file di disco virtuale che desideri copiare se non è ancora selezionato. Puoi sceglierne uno dall'elenco o utilizzare l'icona della cartella accanto all'elenco per selezionarlo.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Scegli un file di disco fisso virtuale da copiare...</translation>
+        <translation type="vanished">Scegli un file di disco fisso virtuale da copiare...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Tipo di file del disco fisso</translation>
+        <translation type="vanished">Tipo di file del disco fisso</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>Scegli il tipo del file che desideri utilizzare per il nuovo disco fisso virtuale. Se non hai bisogno di utilizzarlo con altri programmi di virtualizzazione, puoi lasciare inalterata questa opzione.</translation>
+        <translation type="vanished">Scegli il tipo del file che desideri utilizzare per il nuovo disco fisso virtuale. Se non hai bisogno di utilizzarlo con altri programmi di virtualizzazione, puoi lasciare inalterata questa opzione.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -15444,47 +15504,120 @@ questo passo e collegare hard disk più tardi tramite Impostazioni della MV.<
     </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>Scegli se il nuovo disco fisso virtuale deve crescere in base all'utilizzo (allocato dinamicamente) o se deve essere creato alla dimensione massima (dimensione specificata).</translation>
+        <translation type="vanished">Scegli se il nuovo disco fisso virtuale deve crescere in base all'utilizzo (allocato dinamicamente) o se deve essere creato alla dimensione massima (dimensione specificata).</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><p>Un disco fisso virtuale <b>allocato dinamicamente</b> utilizzerà solo lo spazio del disco fisico che si riempe (fino alla massima <b>dimensione specificata</b>), ma non si ridurrà automaticamente se lo spazio viene liberato.</p></translation>
+        <translation type="vanished"><p>Un disco fisso virtuale <b>allocato dinamicamente</b> utilizzerà solo lo spazio del disco fisico che si riempe (fino alla massima <b>dimensione specificata</b>), ma non si ridurrà automaticamente se lo spazio viene liberato.</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><p>Un file di disco fisso a <b>dimensione specificata</b> richiede normalmente più tempo per la creazione su alcuni sistemi, ma è spesso più veloce nell'utilizzo.</p></translation>
+        <translation type="vanished"><p>Un file di disco fisso a <b>dimensione specificata</b> richiede normalmente più tempo per la creazione su alcuni sistemi, ma è spesso più veloce nell'utilizzo.</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><p>Puoi scegliere anche di <b>dividere</b> il file del disco fisso in diversi file, ognuno della dimensione massima di due gygabyte. È utile principalmente se desideri archiviare la macchina virtuale su dispositivi USB o sistemi datati, alcuni dei quali non sono in grado di gestire file molto grandi.</translation>
+        <translation type="vanished"><p>Puoi scegliere anche di <b>dividere</b> il file del disco fisso in diversi file, ognuno della dimensione massima di due gigabyte. È utile principalmente se desideri archiviare la macchina virtuale su dispositivi USB o sistemi datati, alcuni dei quali non sono in grado di gestire file molto grandi.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Scegli una posizione per il nuovo file di disco fisso virtuale</translation>
+        <translation type="vanished">Scegli una posizione per il nuovo file di disco fisso virtuale</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Nuovo disco fisso da creare</translation>
+        <translation type="vanished">Nuovo disco fisso da creare</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>Digita il nome del nuovo disco fisso virtuale nella casella seguente o fai clic sull'icona della cartella per selezionare una cartella di destinazione diversa.</translation>
+        <translation type="vanished">Digita il nome del nuovo disco fisso virtuale nella casella seguente o fai clic sull'icona della cartella per selezionare una cartella di destinazione diversa.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Scegli una posizione per il nuovo file di disco fisso virtuale...</translation>
+        <translation type="vanished">Scegli una posizione per il nuovo file di disco fisso virtuale...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Disco fisso da &copiare</translation>
+        <translation type="vanished">Disco fisso da &copiare</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Nuovo disco fisso da creare</translation>
+        <translation type="vanished">&Nuovo disco fisso da creare</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Tipo di file del disco fisso</translation>
+        <translation type="vanished">&Tipo di file del disco fisso</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation>Copia immagine disco virtuale</translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation>Immagine disco da copiare</translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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><p>Seleziona il file di immagine disco virtuale che desideri copiare se non è ancora selezionato. Puoi sceglierne uno dall'elenco o utilizzare l'icona della cartella accanto all'elenco per selezionarne uno.</p></translation>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>Scegli il file di un'immagine disco virtuale da copiare...</translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation>Tipo di file dell'immagine disco</translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>Scegli il tipo di file che desideri utilizzare per la nuova immagine disco virtuale. Se non devi utilizzarla con altri software di virtualizzazione, puoi evitare di modificare questa impostazione.</translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>Scegli se il file della nuova immagine disco virtuale dovrebbe crescere con l'uso (allocato automaticamente) o se dovrebbe essere creata alla sua dimensione massima (dimensione specificata).</translation>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p>Un file di immagine disco <b>allocato dinamicamente</b> utilizzerà solo lo spazio del disco fisico che si riempe (fino alla massima <b>dimensione specificata</b>), ma non si ridurrà automaticamente se lo spazio viene liberato.</p></translation>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p>Un file di immagine disco a <b>dimensione specificata</b> richiede normalmente più tempo per la creazione su alcuni sistemi, ma è spesso più veloce nell'utilizzo.</p></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>Puoi scegliere anche di <b>dividere</b> il file di immagine disco in diversi file, ognuno della dimensione massima di due gigabyte. È utile principalmente se desideri archiviare la macchina virtuale su dispositivi USB o sistemi datati, alcuni dei quali non sono in grado di gestire file molto grandi.</translation>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>Scegli una posizione per il file della nuova immagine disco virtuale</translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation>Nuova immagine disco da creare</translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>Digita il nome del file immagine disco virtuale nella casella sotto o fai clic sull'icona della cartella per selezionare una cartella diversa in cui creare il file.</translation>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>Scegli una posizione per il file della nuova immagine disco virtuale...</translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_copia</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation>Immagine disco da &copiare</translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation>&Nuova immagine disco da creare</translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation>&Tipo file immagine disco</translation>
     </message>
 </context>
 <context>
@@ -15758,7 +15891,7 @@ questo passo e collegare hard disk più tardi tramite Impostazioni della MV.<
     </message>
     <message>
         <source>Oracle Public Cloud Format Archive (%1)</source>
-        <translation>Archvio nel formato Oracle Public Cloud (%1)</translation>
+        <translation>Archivio nel formato Oracle Public Cloud (%1)</translation>
     </message>
     <message>
         <source>Open Virtualization Format 0.9</source>
@@ -15805,7 +15938,7 @@ questo passo e collegare hard disk più tardi tramite Impostazioni della MV.<
     </message>
     <message>
         <source><p>Please choose a filename to export the virtual appliance to.</p><p>The <b>Open Virtualization Format</b> supports only <b>ovf</b> or <b>ova</b> extensions. <br>If you use the <b>ovf</b> extension, several files will be written separately.<br>If you use the <b>ova</b> extension, all the files will be combined into one Open Virtualization Format archive.</p><p>The <b& [...]
-        <translation><p>Scegli un nome del file con cui esportare l'applicazione virtuale.</p><p>Il formato <b>Open Virtualization</b> supporta solo le estensioni <b>ovf</b> o <b>ova</b>.<br>Se utilizzi l'estensione <b>ovf</b>, saranno scritti diversi file separatamente.<br>Se utilizza l'estensione <b>ova</b>, tutti i file saranno combinati in un archivio in formato Open Virtualizatio [...]
+        <translation><p>Scegli un nome del file con cui esportare l'applicazione virtuale.</p><p>Il formato <b>Open Virtualization</b> supporta solo le estensioni <b>ovf</b> o <b>ova</b>.<br>Se utilizzi l'estensione <b>ovf</b>, saranno scritti diversi file separatamente.<br>Se utilizzi l'estensione <b>ova</b>, tutti i file saranno combinati in un archivio in formato Open Virtualizatio [...]
     </message>
 </context>
 <context>
@@ -16033,7 +16166,7 @@ questo passo e collegare hard disk più tardi tramite Impostazioni della MV.<
     </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><p>Puoi scegliere anche di <b>dividere</b> il file del disco fisso in diversi file, ognuno della dimensione massima di due gygabyte. È utile principalmente se desideri archiviare la macchina virtuale su dispositivi USB o sistemi datati, alcuni dei quali non sono in grado di gestire file molto grandi.</translation>
+        <translation><p>Puoi scegliere anche di <b>dividere</b> il file del disco fisso in diversi file, ognuno della dimensione massima di due gigabyte. È utile principalmente se desideri archiviare la macchina virtuale su dispositivi USB o sistemi datati, alcuni dei quali non sono in grado di gestire file molto grandi.</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>
@@ -18121,7 +18254,7 @@ Versione %1</translation>
     <message>
         <source>Lsilogic</source>
         <comment>StorageControllerType</comment>
-        <translation>Lsilogic</translation>
+        <translation>LsiLogic</translation>
     </message>
     <message>
         <source>BusLogic</source>
@@ -19292,7 +19425,7 @@ Versione %1</translation>
     <message>
         <source>Unrestricted Execution</source>
         <comment>details report</comment>
-        <translation type="vanished">Esecuzione senza restizioni</translation>
+        <translation type="vanished">Esecuzione senza restrizioni</translation>
     </message>
     <message>
         <source>PS/2 Mouse</source>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
index 1850970..50bbac1 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
@@ -9915,6 +9915,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">このタイプのメディアは直接あるいは間接的に割り当てられます。スナップショットでは保持されます。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">このタイプのメディアは間接的に割り当てられます。変更は次に仮想マシンが起動するときには消去しています。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">このタイプのメディアは直接割り当てられます。スナップショットでは無視されます。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">このタイプのメディアは直接割り当てられます。いくつかのマシンから同時利用できます。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">このタイプのメディアは直接割り当てられます。いくつかのマシンから使用されることもあります。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">このタイプのメディアは間接的に割り当てられます。一つのベースとなるメディアを元に独自の変更を加えた上で、いくつかのVMから使用されています。</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -10112,6 +10144,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumSizeEditor</name>
@@ -10128,39 +10180,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>メディアの属性を変更</translation>
+        <translation type="vanished">メディアの属性を変更</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p><b>%1</b> にある仮想ディスクの属性を変更しようとしています。</p><p>メディアタイプを選択し <b>%2</b> を押して開始するか、それ以外の <b>%3</b> を行なってください。</p></translation>
+        <translation type="vanished"><p><b>%1</b> にある仮想ディスクの属性を変更しようとしています。</p><p>メディアタイプを選択し <b>%2</b> を押して開始するか、それ以外の <b>%3</b> を行なってください。</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>メディアタイプを選択:</translation>
+        <translation type="vanished">メディアタイプを選択:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>このタイプのメディアは直接あるいは間接的に割り当てられます。スナップショットでは保持されます。</translation>
+        <translation type="vanished">このタイプのメディアは直接あるいは間接的に割り当てられます。スナップショットでは保持されます。</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>このタイプのメディアは間接的に割り当てられます。変更は次に仮想マシンが起動するときには消去しています。</translation>
+        <translation type="vanished">このタイプのメディアは間接的に割り当てられます。変更は次に仮想マシンが起動するときには消去しています。</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>このタイプのメディアは直接割り当てられます。スナップショットでは無視されます。</translation>
+        <translation type="vanished">このタイプのメディアは直接割り当てられます。スナップショットでは無視されます。</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>このタイプのメディアは直接割り当てられます。いくつかのマシンから同時利用できます。</translation>
+        <translation type="vanished">このタイプのメディアは直接割り当てられます。いくつかのマシンから同時利用できます。</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>このタイプのメディアは直接割り当てられます。いくつかのマシンから使用されることもあります。</translation>
+        <translation type="vanished">このタイプのメディアは直接割り当てられます。いくつかのマシンから使用されることもあります。</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>このタイプのメディアは間接的に割り当てられます。一つのベースとなるメディアを元に独自の変更を加えた上で、いくつかのVMから使用されています。</translation>
+        <translation type="vanished">このタイプのメディアは間接的に割り当てられます。一つのベースとなるメディアを元に独自の変更を加えた上で、いくつかのVMから使用されています。</translation>
     </message>
 </context>
 <context>
@@ -12244,6 +12296,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14566,7 +14626,7 @@ step and attach hard disks later using the VM Settings dialog.</p></source
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_コピー</translation>
+        <translation type="vanished">%1_コピー</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14582,27 +14642,27 @@ step and attach hard disks later using the VM Settings dialog.</p></source
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>仮想ハードディスクをコピー</translation>
+        <translation type="vanished">仮想ハードディスクをコピー</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>コピーするハードディスク</translation>
+        <translation type="vanished">コピーするハードディスク</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><p>選択していない場合、コピーしたい仮想ハードディスクのファイルを選択してください。リストから選択するか、リストの横にあるフォルダーアイコンからも選択できます。</p></translation>
+        <translation type="vanished"><p>選択していない場合、コピーしたい仮想ハードディスクのファイルを選択してください。リストから選択するか、リストの横にあるフォルダーアイコンからも選択できます。</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>コピーする仮想ハードドディスクのファイルを選択...</translation>
+        <translation type="vanished">コピーする仮想ハードドディスクのファイルを選択...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>ハードディスクのファイルタイプ</translation>
+        <translation type="vanished">ハードディスクのファイルタイプ</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>新しい仮想ハードディスクで使用したいファイルのタイプを選択してください。もしほかの仮想ソフトウェアで使用する必要がなければ、設定はそのままにしておいてください。</translation>
+        <translation type="vanished">新しい仮想ハードディスクで使用したいファイルのタイプを選択してください。もしほかの仮想ソフトウェアで使用する必要がなければ、設定はそのままにしておいてください。</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14610,47 +14670,120 @@ step and attach hard disks later using the VM Settings dialog.</p></source
     </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>新しい仮想ハードディスクファイルは使用したぶんだけ大きくなるか(可変サイズ)、または最大サイズで作成するか(固定サイズ)を選択してください。</translation>
+        <translation type="vanished">新しい仮想ハードディスクファイルは使用したぶんだけ大きくなるか(可変サイズ)、または最大サイズで作成するか(固定サイズ)を選択してください。</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><p><b>可変サイズ</b>のハードディスクファイルは使用した分だけ(<b>固定サイズ</b>を上限として)物理ハードディスクの領域を消費しますが、スペースを開放しても自動的に縮小はしません。</p></translation>
+        <translation type="vanished"><p><b>可変サイズ</b>のハードディスクファイルは使用した分だけ(<b>固定サイズ</b>を上限として)物理ハードディスクの領域を消費しますが、スペースを開放しても自動的に縮小はしません。</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><p><b>固定サイズ</b>のハードディスクファイルはシステムによっては作成に時間がかかるかもしれませんが、使用すると高速です</p></translation>
+        <translation type="vanished"><p><b>固定サイズ</b>のハードディスクファイルはシステムによっては作成に時間がかかるかもしれませんが、使用すると高速です</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><p>ハードディスクファイルを2GBごとに<b>分割</b>することもできます。仮想マシンをリムーバブルUSBデバイスに作成したい場合や、非常に大きなファイルを扱うことができない古いシステムで便利でしょう。</translation>
+        <translation type="vanished"><p>ハードディスクファイルを2GBごとに<b>分割</b>することもできます。仮想マシンをリムーバブルUSBデバイスに作成したい場合や、非常に大きなファイルを扱うことができない古いシステムで便利でしょう。</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>新しい仮想ハードディスクファイルの場所を選択</translation>
+        <translation type="vanished">新しい仮想ハードディスクファイルの場所を選択</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>作成する新しいハードディスク</translation>
+        <translation type="vanished">作成する新しいハードディスク</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>新しい仮想ハードディスクファイルの名前を下のボックスに入力するか、フォルダーアイコンをクリックしてファイルを作成する別のフォルダーを選択してください。</translation>
+        <translation type="vanished">新しい仮想ハードディスクファイルの名前を下のボックスに入力するか、フォルダーアイコンをクリックしてファイルを作成する別のフォルダーを選択してください。</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>新しい仮想ハードディスクファイルの場所を選択...</translation>
+        <translation type="vanished">新しい仮想ハードディスクファイルの場所を選択...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>コピーするハードディスク(&C)</translation>
+        <translation type="vanished">コピーするハードディスク(&C)</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>作成する新しいハードディスク(&N)</translation>
+        <translation type="vanished">作成する新しいハードディスク(&N)</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>ハードディスクドライブのファイルタイプ(&T)</translation>
+        <translation type="vanished">ハードディスクドライブのファイルタイプ(&T)</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_コピー</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
index f37defc..2a6edcf 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
@@ -7764,6 +7764,38 @@ network adapter name</comment>
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -7953,54 +7985,35 @@ network adapter name</comment>
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <source><nobr>%1 (%2 B)</nobr></source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -9709,6 +9722,14 @@ medium</comment>
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -11447,80 +11468,80 @@ You may wish to translate this more like "Time remaining: %1"</comment
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
index 08790a9..f889fe9 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
@@ -9916,6 +9916,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>저장소 축소가 현재 구현되어 있지 않아서 미디어 크기를 <b>%1</b>에서 <b>%2</b>(으)로 축소할 수 없습니다.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">이 형식의 미디어는 직접 및 간접적으로 연결되며 스냅샷을 찍을 때 보존됩니다.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">이 형식의 미디어는 간접적으로 연결되며 가상 머신을 다음에 다시 시작할 때 변경 사항이 삭제됩니다.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">이 형식의 미디어는 직접적으로 연결되며 스냅샷을 찍을 때 무시합니다.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">이 형식의 미디어는 직접적으로 연결되며 여러 가상 머신에서 동시에 사용할 수 있습니다.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">이 형식의 미디어는 직접적으로 연결되며 여러 가상 머신에서 사용할 수 있습니다.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">이 형식의 미디어는 간접적으로 연결되며 한 기반 미디어를 여러 VM에서 사용할 때 가상 머신별 차이를 별도의 미디어에 기록합니다.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -10113,6 +10145,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">디스크 이미지 파일 새로 고침(%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -10152,39 +10204,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>미디어 속성 수정</translation>
+        <translation type="vanished">미디어 속성 수정</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p><b>%1</b>의 가상 디스크 속성을 수정할 것입니다.</p><p>미디어 종류 중 하나를 선택하시고, 계속 진행하려면 <b>%2</b>, 취소하려면 <b>%3</b>을(를) 누르십시오.</p></translation>
+        <translation type="vanished"><p><b>%1</b>의 가상 디스크 속성을 수정할 것입니다.</p><p>미디어 종류 중 하나를 선택하시고, 계속 진행하려면 <b>%2</b>, 취소하려면 <b>%3</b>을(를) 누르십시오.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>미디어 종류 선택:</translation>
+        <translation type="vanished">미디어 종류 선택:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>이 형식의 미디어는 직접 및 간접적으로 연결되며 스냅샷을 찍을 때 보존됩니다.</translation>
+        <translation type="vanished">이 형식의 미디어는 직접 및 간접적으로 연결되며 스냅샷을 찍을 때 보존됩니다.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>이 형식의 미디어는 간접적으로 연결되며 가상 머신을 다음에 다시 시작할 때 변경 사항이 삭제됩니다.</translation>
+        <translation type="vanished">이 형식의 미디어는 간접적으로 연결되며 가상 머신을 다음에 다시 시작할 때 변경 사항이 삭제됩니다.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>이 형식의 미디어는 직접적으로 연결되며 스냅샷을 찍을 때 무시합니다.</translation>
+        <translation type="vanished">이 형식의 미디어는 직접적으로 연결되며 스냅샷을 찍을 때 무시합니다.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>이 형식의 미디어는 직접적으로 연결되며 여러 가상 머신에서 동시에 사용할 수 있습니다.</translation>
+        <translation type="vanished">이 형식의 미디어는 직접적으로 연결되며 여러 가상 머신에서 동시에 사용할 수 있습니다.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>이 형식의 미디어는 직접적으로 연결되며 여러 가상 머신에서 사용할 수 있습니다.</translation>
+        <translation type="vanished">이 형식의 미디어는 직접적으로 연결되며 여러 가상 머신에서 사용할 수 있습니다.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>이 형식의 미디어는 간접적으로 연결되며 한 기반 미디어를 여러 VM에서 사용할 때 가상 머신별 차이를 별도의 미디어에 기록합니다.</translation>
+        <translation type="vanished">이 형식의 미디어는 간접적으로 연결되며 한 기반 미디어를 여러 VM에서 사용할 때 가상 머신별 차이를 별도의 미디어에 기록합니다.</translation>
     </message>
 </context>
 <context>
@@ -12148,6 +12200,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14362,7 +14422,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>사본_%1</translation>
+        <translation type="vanished">사본_%1</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14378,27 +14438,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>가상 하드 디스크 복사</translation>
+        <translation type="vanished">가상 하드 디스크 복사</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>복사할 하드 디스크</translation>
+        <translation type="vanished">복사할 하드 디스크</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><p>복사할 가상 디스크를 선택하십시오. 목록에서 선택하거나 목록 옆의 폴더 아이콘을 눌러서 복사할 디스크 파일을 지정할 수 있습니다.</p></translation>
+        <translation type="vanished"><p>복사할 가상 디스크를 선택하십시오. 목록에서 선택하거나 목록 옆의 폴더 아이콘을 눌러서 복사할 디스크 파일을 지정할 수 있습니다.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>복사할 가상 하드 디스크 파일 선택...</translation>
+        <translation type="vanished">복사할 가상 하드 디스크 파일 선택...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>하드 디스크 파일 종류</translation>
+        <translation type="vanished">하드 디스크 파일 종류</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>새 가상 하드 디스크 파일 형식을 선택하십시오. 다른 가상화 소프트웨어에서 디스크를 사용하지 않으려면 선택을 변경하지 않아도 됩니다.</translation>
+        <translation type="vanished">새 가상 하드 디스크 파일 형식을 선택하십시오. 다른 가상화 소프트웨어에서 디스크를 사용하지 않으려면 선택을 변경하지 않아도 됩니다.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14406,47 +14466,120 @@ p, li { white-space: pre-wrap; }
     </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>새 가상 하드 디스크 파일을 사용하는 대로 커지게 할 것인지(동적 할당) 최대 크기로 만들 것인지(정적 할당) 선택하십시오.</translation>
+        <translation type="vanished">새 가상 하드 디스크 파일을 사용하는 대로 커지게 할 것인지(동적 할당) 최대 크기로 만들 것인지(정적 할당) 선택하십시오.</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><p><b>동적 할당</b> 하드 디스크 파일은 가상 디스크를 사용할 때 <b>고정된 최대 크기까지</b> 파일 크기가 커지지만, 사용량이 줄어들어도 자동적으로 작아지지는 않습니다.</p></translation>
+        <translation type="vanished"><p><b>동적 할당</b> 하드 디스크 파일은 가상 디스크를 사용할 때 <b>고정된 최대 크기까지</b> 파일 크기가 커지지만, 사용량이 줄어들어도 자동적으로 작아지지는 않습니다.</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><p><b>고정 크기</b> 하드 디스크 파일은 만드는 데 더 오래 걸리지만 사용할 때 더 빠릅니다.</p></translation>
+        <translation type="vanished"><p><b>고정 크기</b> 하드 디스크 파일은 만드는 데 더 오래 걸리지만 사용할 때 더 빠릅니다.</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><p>하드 디스크 파일을 2GB 파일 여러 개로 <b>분할</b>할 수도 있습니다. 큰 파일을 처리할 수 없는 시스템이나 이동식 디스크 등에 가상 머신을 저장할 때 유용합니다.</translation>
+        <translation type="vanished"><p>하드 디스크 파일을 2GB 파일 여러 개로 <b>분할</b>할 수도 있습니다. 큰 파일을 처리할 수 없는 시스템이나 이동식 디스크 등에 가상 머신을 저장할 때 유용합니다.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>새 가상 하드 디스크 파일의 위치를 지정하십시오</translation>
+        <translation type="vanished">새 가상 하드 디스크 파일의 위치를 지정하십시오</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>만들 새 하드 디스크</translation>
+        <translation type="vanished">만들 새 하드 디스크</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>새 가상 하드 디스크 파일의 이름을 아래 상자에 입력하거나 폴더 아이콘을 눌러서 파일을 생성할 폴더를 지정할 수 있습니다.</translation>
+        <translation type="vanished">새 가상 하드 디스크 파일의 이름을 아래 상자에 입력하거나 폴더 아이콘을 눌러서 파일을 생성할 폴더를 지정할 수 있습니다.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>새 가상 하드 디스크 파일 위치 선택...</translation>
+        <translation type="vanished">새 가상 하드 디스크 파일 위치 선택...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>복사할 하드 디스크(&C)</translation>
+        <translation type="vanished">복사할 하드 디스크(&C)</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>만들 새 하드 디스크(&N)</translation>
+        <translation type="vanished">만들 새 하드 디스크(&N)</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>하드 디스크 파일 종류(&T)</translation>
+        <translation type="vanished">하드 디스크 파일 종류(&T)</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">사본_%1</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
index 0879f66..4e2924e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
@@ -8480,6 +8480,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8673,6 +8705,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">Atnaujinti disko atvaizdžio rinkmeną (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -8708,39 +8760,15 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Keisti laikmenos atributus</translation>
+        <translation type="vanished">Keisti laikmenos atributus</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Keistumėte <b>%1</b> virtualaus disko atributus.</p><p>Pasirinkite laikmenos tipą ir norėdami tęsti spauskite <b>%2</b>, priešingu atveju – <b>%3</b>.</p></translation>
+        <translation type="vanished"><p>Keistumėte <b>%1</b> virtualaus disko atributus.</p><p>Pasirinkite laikmenos tipą ir norėdami tęsti spauskite <b>%2</b>, priešingu atveju – <b>%3</b>.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Pasirinkite laikmenos tipą:</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Pasirinkite laikmenos tipą:</translation>
     </message>
 </context>
 <context>
@@ -10689,6 +10717,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -12601,79 +12637,120 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopija</translation>
+        <translation type="vanished">%1_kopija</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Kopijuoti virtualų standųjį diską</translation>
+        <translation type="vanished">Kopijuoti virtualų standųjį diską</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Kopijuotinas virtualus standusis diskas</translation>
+        <translation type="vanished">Kopijuotinas virtualus standusis diskas</translation>
+    </message>
+    <message>
+        <source>Choose a virtual hard disk file to copy...</source>
+        <translation type="vanished">Pasirinkti kopijuotiną virtualaus standžiojo disko rinkmeną...</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>
+        <source>Hard disk file type</source>
+        <translation type="vanished">Standžiojo disko rinkmenos tipas</translation>
+    </message>
+    <message>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Pasirinkti kopijuotiną virtualaus standžiojo disko rinkmeną...</translation>
+        <source>New hard disk to create</source>
+        <translation type="vanished">Naujai sukurtinas standusis diskas</translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
-        <translation>Standžiojo disko rinkmenos tipas</translation>
+        <source>Choose a location for new virtual hard disk file...</source>
+        <translation type="vanished">Nurodykite naujo virtualaus standžiojo disko rinkmenos saugojimo vietą...</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>
+        <source>Hard disk to &copy</source>
+        <translation type="vanished">&Kopijuotinas virtualus standusis diskas</translation>
+    </message>
+    <message>
+        <source>&New hard disk to create</source>
+        <translation type="vanished">&Naujai sukurtinas standusis diskas</translation>
+    </message>
+    <message>
+        <source>Hard disk file &type</source>
+        <translation type="vanished">Standžiojo disko rinkmenos &tipas</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </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>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></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>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>Please choose whether the new virtual disk image 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>
     </message>
     <message>
-        <source>New hard disk to create</source>
-        <translation>Naujai sukurtinas standusis diskas</translation>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Nurodykite naujo virtualaus standžiojo disko rinkmenos saugojimo vietą...</translation>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
-        <translation>&Kopijuotinas virtualus standusis diskas</translation>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
-        <translation>&Naujai sukurtinas standusis diskas</translation>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
-        <translation>Standžiojo disko rinkmenos &tipas</translation>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_kopija</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
index 985cd1f..ec78e9b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
@@ -5753,6 +5753,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Kan mediumgrootte niet veranderen van <b>%1</b> naar <b>%2</b> aangezien opslagverkleining momenteel niet geïmplementeerd is.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">Dit type medium is direct of indirect gekoppeld en wordt bewaard bij het nemen van snapshots.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">Dit type medium is direct gekoppeld; bij de volgende start van de virtuele machine zijn alle veranderingen verdwenen.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">Dit type medium is direct gekoppeld en wordt genegeerd bij het nemen van snapshots.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">Dit type medium is direct gekoppeld; diverse machines mogen tegelijkertijd dit medium gebruiken.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">Dit type medium is direct gekoppeld en kan door diverse machines worden gebruikt.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">Dit type medium is indirect gekoppeld. Hierdoor kan één basismedium worden gebruikt voor diverse VMs met ieder hun eigen differencingmachine om modificaties op te slaan.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5938,6 +5970,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">Verversen disk-imagebestanden (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -5977,40 +6029,40 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Bewerk mediumattributen</translation>
+        <translation type="vanished">Bewerk mediumattributen</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
         <translatorcomment>%2=de knop OK  %3=de knop CANCEL</translatorcomment>
-        <translation><p>U staat op het punt de attributen van de virtuele schijf op plek <b>%1</b> te veranderen.</p><p>Kies hieronder een mediumtype en druk op <b>%2</b> om door te gaan, of <b>%3</b>.</p></translation>
+        <translation type="vanished"><p>U staat op het punt de attributen van de virtuele schijf op plek <b>%1</b> te veranderen.</p><p>Kies hieronder een mediumtype en druk op <b>%2</b> om door te gaan, of <b>%3</b>.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Kies mediumtype:</translation>
+        <translation type="vanished">Kies mediumtype:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Dit type medium is direct of indirect gekoppeld en wordt bewaard bij het nemen van snapshots.</translation>
+        <translation type="vanished">Dit type medium is direct of indirect gekoppeld en wordt bewaard bij het nemen van snapshots.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Dit type medium is direct gekoppeld; bij de volgende start van de virtuele machine zijn alle veranderingen verdwenen.</translation>
+        <translation type="vanished">Dit type medium is direct gekoppeld; bij de volgende start van de virtuele machine zijn alle veranderingen verdwenen.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Dit type medium is direct gekoppeld en wordt genegeerd bij het nemen van snapshots.</translation>
+        <translation type="vanished">Dit type medium is direct gekoppeld en wordt genegeerd bij het nemen van snapshots.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Dit type medium is direct gekoppeld; diverse machines mogen tegelijkertijd dit medium gebruiken.</translation>
+        <translation type="vanished">Dit type medium is direct gekoppeld; diverse machines mogen tegelijkertijd dit medium gebruiken.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Dit type medium is direct gekoppeld en kan door diverse machines worden gebruikt.</translation>
+        <translation type="vanished">Dit type medium is direct gekoppeld en kan door diverse machines worden gebruikt.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Dit type medium is indirect gekoppeld. Hierdoor kan één basismedium worden gebruikt voor diverse VMs met ieder hun eigen differencingmachine om modificaties op te slaan.</translation>
+        <translation type="vanished">Dit type medium is indirect gekoppeld. Hierdoor kan één basismedium worden gebruikt voor diverse VMs met ieder hun eigen differencingmachine om modificaties op te slaan.</translation>
     </message>
 </context>
 <context>
@@ -7223,6 +7275,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -8412,31 +8472,31 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_copy</translation>
+        <translation type="vanished">%1_copy</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Kopieer Virtuele Schijf</translation>
+        <translation type="vanished">Kopieer Virtuele Schijf</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Te kopiëren harde schijf</translation>
+        <translation type="vanished">Te kopiëren harde schijf</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><p>Kies een virtuele schijf om te kopiëren als u deze nog niet geselecteerd hebt. U kunt een schijf kiezen uit de lijst of door op de mappenicoon naast de lijst te klikken en daar een schijfbestand te kiezen.<p></translation>
+        <translation type="vanished"><p>Kies een virtuele schijf om te kopiëren als u deze nog niet geselecteerd hebt. U kunt een schijf kiezen uit de lijst of door op de mappenicoon naast de lijst te klikken en daar een schijfbestand te kiezen.<p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Kies een te kopiëren virtuele harde schijf bestand...</translation>
+        <translation type="vanished">Kies een te kopiëren virtuele harde schijf bestand...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Bestandstype harde schijf</translation>
+        <translation type="vanished">Bestandstype harde schijf</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>Kies het bestandstype dat u voor deze nieuwe virtuele schijf wilt gebruiken. Indien u niet van plan bent deze virtuele schijf met andersoortige virtualisatiesoftware te gebruiken kunt u deze instelling onveranderd laten.</translation>
+        <translation type="vanished">Kies het bestandstype dat u voor deze nieuwe virtuele schijf wilt gebruiken. Indien u niet van plan bent deze virtuele schijf met andersoortige virtualisatiesoftware te gebruiken kunt u deze instelling onveranderd laten.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -8444,47 +8504,120 @@
     </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>Kies of het nieuwe virtuele schijf bestand naar de maximale grootte moet groeien door gebruik (dynamisch gealloceerd) of dat het op de maximale grootte moet worden aangemaakt (gefixeerde grootte).</translation>
+        <translation type="vanished">Kies of het nieuwe virtuele schijf bestand naar de maximale grootte moet groeien door gebruik (dynamisch gealloceerd) of dat het op de maximale grootte moet worden aangemaakt (gefixeerde grootte).</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><p>Een <b>dynamisch gealloceerd</b> virtuele schijf bestand zal tijdens gebruik tot de aangegeven maximale grootte groeien (tot een maximum <b>gefixeerde grootte</b>).Het schijfbestand zal echter niet automatisch krimpen wanneer ruimte wordt vrijgemaakt.</p></translation>
+        <translation type="vanished"><p>Een <b>dynamisch gealloceerd</b> virtuele schijf bestand zal tijdens gebruik tot de aangegeven maximale grootte groeien (tot een maximum <b>gefixeerde grootte</b>).Het schijfbestand zal echter niet automatisch krimpen wanneer ruimte wordt vrijgemaakt.</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><p>Aanmaken van een virtuele schijf bestand van <b>gefixeerde grootte</b> kan op sommige systemen langer duren, maar is vaak sneller in het gebruik.</p></translation>
+        <translation type="vanished"><p>Aanmaken van een virtuele schijf bestand van <b>gefixeerde grootte</b> kan op sommige systemen langer duren, maar is vaak sneller in het gebruik.</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><p>U kunt er ook voor kiezen het virtueel schijfbestand <b>te splitsen</b> in meerdere bestanden van maximaal twee gigabytes elk. Dit is hoofdzakelijk handig indien u de virtuele machine wilt opslaan op verwijderbare USB-apparaten of op oudere systemen, waarvan sommige niet kunnen omgaan met erg grote bestanden.</translation>
+        <translation type="vanished"><p>U kunt er ook voor kiezen het virtueel schijfbestand <b>te splitsen</b> in meerdere bestanden van maximaal twee gigabytes elk. Dit is hoofdzakelijk handig indien u de virtuele machine wilt opslaan op verwijderbare USB-apparaten of op oudere systemen, waarvan sommige niet kunnen omgaan met erg grote bestanden.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Kies een lokatie voor het nieuwe virtuele harde schijf bestand</translation>
+        <translation type="vanished">Kies een lokatie voor het nieuwe virtuele harde schijf bestand</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Nieuw aan te maken harde schijf</translation>
+        <translation type="vanished">Nieuw aan te maken harde schijf</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>Typ de naam van de nieuwe virtuele schijf in de ruimte beneden of klik op het mapicoontje, kies een andere map en maak daar het bestand in aan.</translation>
+        <translation type="vanished">Typ de naam van de nieuwe virtuele schijf in de ruimte beneden of klik op het mapicoontje, kies een andere map en maak daar het bestand in aan.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Kies een lokatie voor het nieuwe virtuele harde schijf bestand...</translation>
+        <translation type="vanished">Kies een lokatie voor het nieuwe virtuele harde schijf bestand...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Te kopieren harde s&chijf</translation>
+        <translation type="vanished">Te kopieren harde s&chijf</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Nieuw aan te maken harde schijf</translation>
+        <translation type="vanished">&Nieuw aan te maken harde schijf</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Bestands&type harde schijf</translation>
+        <translation type="vanished">Bestands&type harde schijf</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_copy</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
index d8c8dd2..53a07c1 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
@@ -8803,6 +8803,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">Ten typ nośnika jest podłączony bezpośrednio lub pośrednio, używany podczas robienia migawek.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">Ten typ nośnika jest podłączony pośrednio, zmiany są kasowane kiedy wirtualna maszyna startuje kolejnym razem.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">Ten typ nośnika jest podłączony bezpośrednio, ignorowany podczas robienia migawek.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">Ten typ nośnika jest podłączony bezpośrednio, może być używany równocześnie przez kilka maszyn.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">Ten typ nośnika jest podłączony bezpośrednio i może być używany przez kilka maszyn.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">Ten typ nośnika jest podłączony pośrednio, więc jeden nośnik może być używany przez kilka maszyn, które posiadają swoje własne zróżnicowane nośniki, by przechowywać swoje modyfikacje.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8992,6 +9024,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumSizeEditor</name>
@@ -9008,39 +9060,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Modyfikuj parametry nośnika</translation>
+        <translation type="vanished">Modyfikuj parametry nośnika</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Zamierzasz zmienić ustawienia pliku z obrazem dysku <b>%1</b>.</p><p>Wybierz jeden z następujących trybów i wciśnij <b>%2</b> by kontynuować lub <b>%3</b> w przeciwnym razie.</p></translation>
+        <translation type="vanished"><p>Zamierzasz zmienić ustawienia pliku z obrazem dysku <b>%1</b>.</p><p>Wybierz jeden z następujących trybów i wciśnij <b>%2</b> by kontynuować lub <b>%3</b> w przeciwnym razie.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Wybierz tryb:</translation>
+        <translation type="vanished">Wybierz tryb:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Ten typ nośnika jest podłączony bezpośrednio lub pośrednio, używany podczas robienia migawek.</translation>
+        <translation type="vanished">Ten typ nośnika jest podłączony bezpośrednio lub pośrednio, używany podczas robienia migawek.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Ten typ nośnika jest podłączony pośrednio, zmiany są kasowane kiedy wirtualna maszyna startuje kolejnym razem.</translation>
+        <translation type="vanished">Ten typ nośnika jest podłączony pośrednio, zmiany są kasowane kiedy wirtualna maszyna startuje kolejnym razem.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Ten typ nośnika jest podłączony bezpośrednio, ignorowany podczas robienia migawek.</translation>
+        <translation type="vanished">Ten typ nośnika jest podłączony bezpośrednio, ignorowany podczas robienia migawek.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Ten typ nośnika jest podłączony bezpośrednio, może być używany równocześnie przez kilka maszyn.</translation>
+        <translation type="vanished">Ten typ nośnika jest podłączony bezpośrednio, może być używany równocześnie przez kilka maszyn.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Ten typ nośnika jest podłączony bezpośrednio i może być używany przez kilka maszyn.</translation>
+        <translation type="vanished">Ten typ nośnika jest podłączony bezpośrednio i może być używany przez kilka maszyn.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Ten typ nośnika jest podłączony pośrednio, więc jeden nośnik może być używany przez kilka maszyn, które posiadają swoje własne zróżnicowane nośniki, by przechowywać swoje modyfikacje.</translation>
+        <translation type="vanished">Ten typ nośnika jest podłączony pośrednio, więc jeden nośnik może być używany przez kilka maszyn, które posiadają swoje własne zróżnicowane nośniki, by przechowywać swoje modyfikacje.</translation>
     </message>
 </context>
 <context>
@@ -10965,6 +11017,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -13024,31 +13084,31 @@ Będzie ona używana przez wszystkie moduły VirtualBox, aby móc rozróżnić t
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopia</translation>
+        <translation type="vanished">%1_kopia</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Skopiuj wirtualny twardy dysk</translation>
+        <translation type="vanished">Skopiuj wirtualny twardy dysk</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Dysk twardy do skopiowania</translation>
+        <translation type="vanished">Dysk twardy do skopiowania</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><p>Wybierz plik wirtualnego dysku twardego, który chcesz skopiować jeśli nie jest już wybrany. Możesz też wybrać jeden z listy lub użyć ikonę folderu obok listy, aby wybrać jeden.</p></translation>
+        <translation type="vanished"><p>Wybierz plik wirtualnego dysku twardego, który chcesz skopiować jeśli nie jest już wybrany. Możesz też wybrać jeden z listy lub użyć ikonę folderu obok listy, aby wybrać jeden.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Wybierz plik dysku wirtualnego, który chcesz skopiować...</translation>
+        <translation type="vanished">Wybierz plik dysku wirtualnego, który chcesz skopiować...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Typ pliku z wirtualnym dyskiem</translation>
+        <translation type="vanished">Typ pliku z wirtualnym dyskiem</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>Wybierz typ pliku, którego chciałbyś użyć z nowym wirtualnym dyskiem twardym. Jeśli nie potrzebujesz użyć go z innym oprogramowaniem wirtualizacyjnym, możesz pozostawić te ustawienie niezmienione.</translation>
+        <translation type="vanished">Wybierz typ pliku, którego chciałbyś użyć z nowym wirtualnym dyskiem twardym. Jeśli nie potrzebujesz użyć go z innym oprogramowaniem wirtualizacyjnym, możesz pozostawić te ustawienie niezmienione.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -13056,47 +13116,120 @@ Będzie ona używana przez wszystkie moduły VirtualBox, aby móc rozróżnić t
     </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>Wybierz czy plik nowego wirtualnego dysku powinien rosnąć wraz z użyciem (dynamicznie przydzielany) czy powinien zostać utworzony z maksymalnym rozmiarem (stały rozmiar).</translation>
+        <translation type="vanished">Wybierz czy plik nowego wirtualnego dysku powinien rosnąć wraz z użyciem (dynamicznie przydzielany) czy powinien zostać utworzony z maksymalnym rozmiarem (stały rozmiar).</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><p> <b>Dynamicznie przydzielany</b> plik twardego dysku będzie używał  jedynie miejsca na twoim fizycznym twardym dysku, jeśli się zapełni (do maksymalnego <b>stałego rozmiaru</b>), chociaż nie skurczy się automatycznie, gdy zostanie zwolnione miejsce.</p></translation>
+        <translation type="vanished"><p> <b>Dynamicznie przydzielany</b> plik twardego dysku będzie używał  jedynie miejsca na twoim fizycznym twardym dysku, jeśli się zapełni (do maksymalnego <b>stałego rozmiaru</b>), chociaż nie skurczy się automatycznie, gdy zostanie zwolnione miejsce.</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><p>Tworzenie stałego rozmiaru pliku może trwać dłużej na niektórych systemach, ale często jest szybszy w użyciu.</p></translation>
+        <translation type="vanished"><p>Tworzenie stałego rozmiaru pliku może trwać dłużej na niektórych systemach, ale często jest szybszy w użyciu.</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><p>Mozesz również <b>podzielić</b> plik dysku twardego na kilka plików do 2 GB każdy.Jest to przede wszystkim przydatne, jeśli chcesz przechowywać maszynę wirtualną na wymiennych urządzeniach USB lub starych systemach, z których niektóre nie obsługują bardzo dużych plików.</translation>
+        <translation type="vanished"><p>Mozesz również <b>podzielić</b> plik dysku twardego na kilka plików do 2 GB każdy.Jest to przede wszystkim przydatne, jeśli chcesz przechowywać maszynę wirtualną na wymiennych urządzeniach USB lub starych systemach, z których niektóre nie obsługują bardzo dużych plików.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Wybierz lokalizację dla pliku nowego wirtualnego dysku twardego</translation>
+        <translation type="vanished">Wybierz lokalizację dla pliku nowego wirtualnego dysku twardego</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Nowe dyski twarde do utworzenia</translation>
+        <translation type="vanished">Nowe dyski twarde do utworzenia</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>Wpisz nazwę dla pliku nowego wirtualnego dysku twardego w polu poniżej lub kliknij na ikonę folderu, by wybrać inny, aby utworzyć w nim plik.</translation>
+        <translation type="vanished">Wpisz nazwę dla pliku nowego wirtualnego dysku twardego w polu poniżej lub kliknij na ikonę folderu, by wybrać inny, aby utworzyć w nim plik.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Wybierz lokalizację dla pliku nowego twardego dysku...</translation>
+        <translation type="vanished">Wybierz lokalizację dla pliku nowego twardego dysku...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Dysk twardy do &skopiowania</translation>
+        <translation type="vanished">Dysk twardy do &skopiowania</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Nowe dyski twarde do utworzenia</translation>
+        <translation type="vanished">&Nowe dyski twarde do utworzenia</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Typ pliku z &wirtualnym dyskiem</translation>
+        <translation type="vanished">Typ pliku z &wirtualnym dyskiem</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_kopia</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
index 657f214..5424cd5 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
@@ -8261,6 +8261,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8450,55 +8482,36 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
 </context>
 <context>
@@ -10207,6 +10220,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -12212,80 +12233,80 @@ diálogo de Configurações da MV.</p></translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
index dfef4e5..25476d4 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
@@ -10319,6 +10319,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Não é possível alterar o tamanho da mídia de <b>%1</b> para <b>%2</b>, pois redução de armazenamento ainda não foi implementada.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">Este tipo de mídia é conectada direta ou indiretamente, e é preservada quando são feitos snapshots.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">Este tipo de mídia é conectado indiretamente, e as mudanças são perdidas na próxima vez que a máquina virtual for iniciada.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">Este tipo de mídia é conectada diretamente, e é ignorada quando são feitos snapshots.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">Este tipo de mídia é conectada diretamente, e pode ser utilizada concorrentemente por várias máquinas.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">Este tipo de mídia é conectada diretamente, e pode ser utilizada por várias máquinas.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">Este tipo de mídia é conectado indiretamente, de tal forma que uma mídia-base possa ser utilizada por várias VMs e cada uma delas possui uma mídia diferencial para armazenar suas modificações.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -10516,6 +10548,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">Atualizar Arquivos de Imagem de Disco (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -10555,39 +10607,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Modificar os atributos da mídia</translation>
+        <translation type="vanished">Modificar os atributos da mídia</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Você está prestes a alterar os atributos do disco virtual localizado em <b>%1</b>.</p><p>Escolha um dos tipos de mídia abaixo e pressione <b>%2</b> para continuar ou <b>%3</b> para cancelar.</p></translation>
+        <translation type="vanished"><p>Você está prestes a alterar os atributos do disco virtual localizado em <b>%1</b>.</p><p>Escolha um dos tipos de mídia abaixo e pressione <b>%2</b> para continuar ou <b>%3</b> para cancelar.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Escolha o tipo da mídia:</translation>
+        <translation type="vanished">Escolha o tipo da mídia:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Este tipo de mídia é conectada direta ou indiretamente, e é preservada quando são feitos snapshots.</translation>
+        <translation type="vanished">Este tipo de mídia é conectada direta ou indiretamente, e é preservada quando são feitos snapshots.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Este tipo de mídia é conectado indiretamente, e as mudanças são perdidas na próxima vez que a máquina virtual for iniciada.</translation>
+        <translation type="vanished">Este tipo de mídia é conectado indiretamente, e as mudanças são perdidas na próxima vez que a máquina virtual for iniciada.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Este tipo de mídia é conectada diretamente, e é ignorada quando são feitos snapshots.</translation>
+        <translation type="vanished">Este tipo de mídia é conectada diretamente, e é ignorada quando são feitos snapshots.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Este tipo de mídia é conectada diretamente, e pode ser utilizada concorrentemente por várias máquinas.</translation>
+        <translation type="vanished">Este tipo de mídia é conectada diretamente, e pode ser utilizada concorrentemente por várias máquinas.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Este tipo de mídia é conectada diretamente, e pode ser utilizada por várias máquinas.</translation>
+        <translation type="vanished">Este tipo de mídia é conectada diretamente, e pode ser utilizada por várias máquinas.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Este tipo de mídia é conectado indiretamente, de tal forma que uma mídia-base possa ser utilizada por várias VMs e cada uma delas possui uma mídia diferencial para armazenar suas modificações.</translation>
+        <translation type="vanished">Este tipo de mídia é conectado indiretamente, de tal forma que uma mídia-base possa ser utilizada por várias VMs e cada uma delas possui uma mídia diferencial para armazenar suas modificações.</translation>
     </message>
 </context>
 <context>
@@ -12750,6 +12802,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -15426,7 +15486,7 @@ utilizando o diálogo de Configurações da MV.</p></translation>
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>cópia_%1</translation>
+        <translation type="vanished">cópia_%1</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -15442,27 +15502,27 @@ utilizando o diálogo de Configurações da MV.</p></translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Copiar Disco Rígido Virtual</translation>
+        <translation type="vanished">Copiar Disco Rígido Virtual</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Disco rígido para copiar</translation>
+        <translation type="vanished">Disco rígido para copiar</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><p>Selecione o disco rígido virtual que você deseja copiar, caso ainda não esteja selecionado. Você pode escolher um da lista ou utilizar o ícone da pasta ao lado da lista para selecionar um arquivo de disco virtual.</p></translation>
+        <translation type="vanished"><p>Selecione o disco rígido virtual que você deseja copiar, caso ainda não esteja selecionado. Você pode escolher um da lista ou utilizar o ícone da pasta ao lado da lista para selecionar um arquivo de disco virtual.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Selecione um arquivo de disco rígido virtual para copiar...</translation>
+        <translation type="vanished">Selecione um arquivo de disco rígido virtual para copiar...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Tipo de arquivo de disco rígido</translation>
+        <translation type="vanished">Tipo de arquivo de disco rígido</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>Escolha o tipo de arquivo que você gostaria de utilizar para o novo disco rígido virtual. Caso não necessite utilizá-lo com outros softwares de virtualização, pode deixar esta opção como está.</translation>
+        <translation type="vanished">Escolha o tipo de arquivo que você gostaria de utilizar para o novo disco rígido virtual. Caso não necessite utilizá-lo com outros softwares de virtualização, pode deixar esta opção como está.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -15470,47 +15530,120 @@ utilizando o diálogo de Configurações da MV.</p></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>Escolha se o arquivo contendo o disco rígido virtual deve crescer à medida em que é utilizado (dinamicamente alocado) ou se ele deve ser criado já com o tamanho máximo (tamanho fixo).</translation>
+        <translation type="vanished">Escolha se o arquivo contendo o disco rígido virtual deve crescer à medida em que é utilizado (dinamicamente alocado) ou se ele deve ser criado já com o tamanho máximo (tamanho fixo).</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><p>Um arquivo de disco rígido virtual <b>dinamicamente alocado</b> irá utilizar espaço em seu disco rígido físico à medida em que for sendo utilizado (até um <b>tamanho máximo pré-definido</b>), mas não irá encolher caso seja liberado espaço nele.</p></translation>
+        <translation type="vanished"><p>Um arquivo de disco rígido virtual <b>dinamicamente alocado</b> irá utilizar espaço em seu disco rígido físico à medida em que for sendo utilizado (até um <b>tamanho máximo pré-definido</b>), mas não irá encolher caso seja liberado espaço nele.</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><p>Um arquivo de disco rígido virtual de <b>tamanho fixo</b> pode levar mais tempo para ser criado em alguns sistemas, mas geralmente possui acesso mais rápido.</p></translation>
+        <translation type="vanished"><p>Um arquivo de disco rígido virtual de <b>tamanho fixo</b> pode levar mais tempo para ser criado em alguns sistemas, mas geralmente possui acesso mais rápido.</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><p>Você também pode optar por <b>dividir</b> o arquivo de disco virtual em diversos arquivos de até dois gigabytes cada. Isto é útil para situações em que você precisa armazenar a máquina virtual em dispositivos USB removíveis ou em sistemas mais antigos que não saibam lidar com arquivos grandes.</translation>
+        <translation type="vanished"><p>Você também pode optar por <b>dividir</b> o arquivo de disco virtual em diversos arquivos de até dois gigabytes cada. Isto é útil para situações em que você precisa armazenar a máquina virtual em dispositivos USB removíveis ou em sistemas mais antigos que não saibam lidar com arquivos grandes.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Escolha a localização para o arquivo contendo o novo disco rígido virtual</translation>
+        <translation type="vanished">Escolha a localização para o arquivo contendo o novo disco rígido virtual</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Novo disco rígido a criar</translation>
+        <translation type="vanished">Novo disco rígido a criar</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>Informe o nome do arquivo em disco que conterá o disco virtual no campo abaixo ou clique no ícone da pasta para selecionar uma localização diferente para o arquivo.</translation>
+        <translation type="vanished">Informe o nome do arquivo em disco que conterá o disco virtual no campo abaixo ou clique no ícone da pasta para selecionar uma localização diferente para o arquivo.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Escolha a localização para o arquivo contendo o novo disco rígido virtual...</translation>
+        <translation type="vanished">Escolha a localização para o arquivo contendo o novo disco rígido virtual...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Disco rígido para &copiar</translation>
+        <translation type="vanished">Disco rígido para &copiar</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Novo disco rígido a criar</translation>
+        <translation type="vanished">&Novo disco rígido a criar</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&Tipo de arquivo de disco rígido</translation>
+        <translation type="vanished">&Tipo de arquivo de disco rígido</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">cópia_%1</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
index 6617b53..6313450 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
@@ -8063,6 +8063,38 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8248,55 +8280,36 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
 </context>
 <context>
@@ -9979,6 +9992,14 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -12063,80 +12084,80 @@ din listă apăsând butonul <b>Existent</b> (pentru a invoca dialog
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
index a5d630e..263ce09 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
@@ -9780,6 +9780,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Невозможно изменить размер носителя с <b>%1</b> на <b>%2</b> поскольку уменьшение размера носителя в данный момент не поддерживается.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation>Выбрать расположение носителя</translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation>Расположение не может быть пустым.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>Этот тип носителя подключается как напрямую так и косвенно, защищён при взятии снимков состояния.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>Этот тип носителя подключается косвенно, любые произведённые изменения будут удалены при следующем запуске машины.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>Этот тип носителя подключается напрямую и игнорируется при взятии снимков состояния.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>Этот тип носителя подключается напрямую, предназначен для совместного использования несколькими машинами одновременно.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>Этот тип носителя подключается напрямую, может быть использован для чтения несколькими машинами одновременно.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>Этот тип носителя подключается косвенно, чтобы базовый образ мог быть использован несколькими машинами, каждая из которых будет иметь отдельный разностный носитель для хранения своих изменений.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9977,6 +10009,26 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation>Обновить файлы образа диска (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation>Текущее расширение (*.%1)</translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation>Выберите расположение данного носителя</translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation>&Переместить...</translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation>Переместить файл образа диска (%1)</translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation>Переместить выбранный файл образа диска</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -10016,39 +10068,39 @@ p, li { white-space: pre-wrap; }
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Изменить атрибуты носителя информации</translation>
+        <translation type="vanished">Изменить атрибуты носителя информации</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Вы собираетесь изменить атрибуты носителя информации, расположенного по адресу <b>%1</b>.</p><p>Пожалуйста, выберите один из следующих типов носителя информации и нажмите <b>%2</b> чтобы продолжить или <b>%3</b> в противном случае.</p></translation>
+        <translation type="vanished"><p>Вы собираетесь изменить атрибуты носителя информации, расположенного по адресу <b>%1</b>.</p><p>Пожалуйста, выберите один из следующих типов носителя информации и нажмите <b>%2</b> чтобы продолжить или <b>%3</b> в противном случае.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Выберите тип носителя информации:</translation>
+        <translation type="vanished">Выберите тип носителя информации:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Этот тип носителя подключается как напрямую так и косвенно, защищён при взятии снимков состояния.</translation>
+        <translation type="vanished">Этот тип носителя подключается как напрямую так и косвенно, защищён при взятии снимков состояния.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Этот тип носителя подключается косвенно, любые произведённые изменения будут удалены при следующем запуске машины.</translation>
+        <translation type="vanished">Этот тип носителя подключается косвенно, любые произведённые изменения будут удалены при следующем запуске машины.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Этот тип носителя подключается напрямую и игнорируется при взятии снимков состояния.</translation>
+        <translation type="vanished">Этот тип носителя подключается напрямую и игнорируется при взятии снимков состояния.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Этот тип носителя подключается напрямую, предназначен для совместного использования несколькими машинами одновременно.</translation>
+        <translation type="vanished">Этот тип носителя подключается напрямую, предназначен для совместного использования несколькими машинами одновременно.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Этот тип носителя подключается напрямую, может быть использован для чтения несколькими машинами одновременно.</translation>
+        <translation type="vanished">Этот тип носителя подключается напрямую, может быть использован для чтения несколькими машинами одновременно.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Этот тип носителя подключается косвенно, чтобы базовый образ мог быть использован несколькими машинами, каждая из которых будет иметь отдельный разностный носитель для хранения своих изменений.</translation>
+        <translation type="vanished">Этот тип носителя подключается косвенно, чтобы базовый образ мог быть использован несколькими машинами, каждая из которых будет иметь отдельный разностный носитель для хранения своих изменений.</translation>
     </message>
 </context>
 <context>
@@ -11994,6 +12046,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>Не удалось изменить атрибуты снимка <b>%1</b> виртуальной машины <b>%2</b>.</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation>Не удалось создать файл образа диска <nobr><b>%1</b>.</nobr></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14213,11 +14273,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Dynamically allocated</source>
-        <translation>&Динамический виртуальный жёсткий диск</translation>
+        <translation>&Динамический образ диска</translation>
     </message>
     <message>
         <source>&Fixed size</source>
-        <translation>&Фиксированный виртуальный жёсткий диск</translation>
+        <translation>&Фиксированный образ диска</translation>
     </message>
     <message>
         <source>&Split into files of less than 2GB</source>
@@ -14242,7 +14302,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_копия</translation>
+        <translation type="vanished">%1_копия</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14258,27 +14318,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Копировать виртуальный жёсткий диск</translation>
+        <translation type="vanished">Копировать виртуальный жёсткий диск</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Выберите диск</translation>
+        <translation type="vanished">Выберите диск</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><p>Пожалуйста, выберите виртуальный жёсткий диск, который Вы желаете скопировать, если он ещё не выбран. Вы можете выбрать один из выпадающего списка или использовать кнопку с иконкой папки справа от него.</p></translation>
+        <translation type="vanished"><p>Пожалуйста, выберите виртуальный жёсткий диск, который Вы желаете скопировать, если он ещё не выбран. Вы можете выбрать один из выпадающего списка или использовать кнопку с иконкой папки справа от него.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Выбрать файл виртуального жёсткого диска...</translation>
+        <translation type="vanished">Выбрать файл виртуального жёсткого диска...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Укажите тип</translation>
+        <translation type="vanished">Укажите тип</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>Пожалуйста, укажите тип файла, определяющий формат, который Вы хотите использовать при создании нового жёсткого диска. Если у Вас нет необходимости использовать диск с другими продуктами программной виртуализации, Вы можете оставить данный параметр без изменений.</translation>
+        <translation type="vanished">Пожалуйста, укажите тип файла, определяющий формат, который Вы хотите использовать при создании нового жёсткого диска. Если у Вас нет необходимости использовать диск с другими продуктами программной виртуализации, Вы можете оставить данный параметр без изменений.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -14286,46 +14346,119 @@ p, li { white-space: pre-wrap; }
     </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>Пожалуйста уточните, должен ли новый виртуальный жёсткий диск подстраивать свой размер под размер своего содержимого или быть точно заданного размера.</translation>
+        <translation type="vanished">Пожалуйста уточните, должен ли новый виртуальный жёсткий диск подстраивать свой размер под размер своего содержимого или быть точно заданного размера.</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><p>Файл <b>динамического</b> жёсткого диска будет занимать необходимое место на Вашем физическом носителе информации лишь по мере заполнения, однако не сможет уменьшиться в размере если место, занятое его содержимым, освободится.</p></translation>
+        <translation type="vanished"><p>Файл <b>динамического</b> жёсткого диска будет занимать необходимое место на Вашем физическом носителе информации лишь по мере заполнения, однако не сможет уменьшиться в размере если место, занятое его содержимым, освободится.</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><p>Файл <b>фиксированного</b> жёсткого диска может потребовать больше времени при создании на некоторых файловых системах, однако, обычно, быстрее в использовании.</p></translation>
+        <translation type="vanished"><p>Файл <b>фиксированного</b> жёсткого диска может потребовать больше времени при создании на некоторых файловых системах, однако, обычно, быстрее в использовании.</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><p>Вы можете также <b>разделить</b> жёсткий диск на несколько файлов размером до 2х ГБ. Это может пригодиться если Вы планируете хранить виртуальную машину на съёмных USB носителях или старых файловых системах, некоторые из которых не поддерживают файлы больших размеров.</translation>
+        <translation type="vanished"><p>Вы можете также <b>разделить</b> жёсткий диск на несколько файлов размером до 2х ГБ. Это может пригодиться если Вы планируете хранить виртуальную машину на съёмных USB носителях или старых файловых системах, некоторые из которых не поддерживают файлы больших размеров.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Укажите местоположение нового виртуального жёсткого диска</translation>
+        <translation type="vanished">Укажите местоположение нового виртуального жёсткого диска</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Укажите имя нового диска</translation>
+        <translation type="vanished">Укажите имя нового диска</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>Пожалуйста укажите имя нового виртуального жёсткого диска в поле снизу или используйте кнопку с иконкой папки справа от него.</translation>
+        <translation type="vanished">Пожалуйста укажите имя нового виртуального жёсткого диска в поле снизу или используйте кнопку с иконкой папки справа от него.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Выбрать местоположение нового виртуального жёсткого диска...</translation>
+        <translation type="vanished">Выбрать местоположение нового виртуального жёсткого диска...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Выберите &диск</translation>
+        <translation type="vanished">Выберите &диск</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>Укажите имя &нового диска</translation>
+        <translation type="vanished">Укажите имя &нового диска</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
+        <translation type="vanished">Укажите &тип</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation>Копировать образ диска</translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation>Выберите образ диска</translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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><p>Пожалуйста, выберите образ диска, который Вы желаете скопировать, если он ещё не выбран. Вы можете выбрать один из выпадающего списка или использовать кнопку с иконкой папки справа от него.</p></translation>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>Выбрать файл образа диска...</translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation>Укажите тип</translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>Пожалуйста, укажите тип файла, определяющий формат, который Вы хотите использовать при создании нового образа диска. Если у Вас нет необходимости использовать диск с другими продуктами программной виртуализации, Вы можете оставить данный параметр без изменений.</translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>Пожалуйста уточните, должен ли новый образ диска подстраивать свой размер под размер своего содержимого или быть точно заданного размера.</translation>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p>Файл <b>динамического</b> образа диска будет занимать необходимое место на Вашем физическом носителе информации лишь по мере заполнения, однако не сможет уменьшиться в размере если место, занятое его содержимым, освободится.</p></translation>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p>Файл <b>фиксированного</b> образа диска может потребовать больше времени при создании на некоторых файловых системах, однако, обычно, быстрее в использовании.</p></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>Вы можете также <b>разделить</b> образ диска на несколько файлов размером до 2х ГБ. Это может пригодиться если Вы планируете хранить виртуальную машину на съёмных USB носителях или старых файловых системах, некоторые из которых не поддерживают файлы больших размеров.</translation>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>Укажите местоположение нового образа диска</translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation>Укажите имя нового диска</translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>Пожалуйста укажите имя нового образа диска в поле снизу или используйте кнопку с иконкой папки справа от него.</translation>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>Выбрать местоположение нового образа диска...</translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_копия</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation>Выберите &диск</translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation>Укажите имя &нового диска</translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
         <translation>Укажите &тип</translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
index 951d0d7..543e855 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
@@ -8217,6 +8217,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8410,55 +8442,36 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
 </context>
 <context>
@@ -9954,6 +9967,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -11945,80 +11966,80 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
index 404dd5f..04f2b93 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
@@ -4,7 +4,7 @@
 <context>
     <name>@@@</name>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+1562"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+1563"/>
         <source>English</source>
         <comment>Native language name</comment>
         <translation>Slovenščina</translation>
@@ -168,7 +168,7 @@
     <name>QIMessageBox</name>
     <message>
         <location filename="../src/extensions/QIMessageBox.cpp" line="+302"/>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+1854"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1887"/>
         <location filename="../src/widgets/UIPopupPaneButtonPane.cpp" line="+180"/>
         <source>OK</source>
         <translation>V redu</translation>
@@ -244,7 +244,7 @@
         <location filename="../src/settings/machine/UIMachineSettingsSF.cpp" line="+182"/>
         <source>%1, %2: %3, %4: %5, %6: %7</source>
         <comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text, col.4 name: col.4 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3, %4: %5, %6: %7</translation>
     </message>
 </context>
 <context>
@@ -441,7 +441,7 @@
     <message>
         <location line="+28"/>
         <source>&Virtual Media Manager...</source>
-        <translation>Upravljalnik n&avideznih nosilcev …</translation>
+        <translation>Upravljalnik navi&deznih nosilcev …</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -451,12 +451,12 @@
     <message>
         <location line="+27"/>
         <source>&Host Network Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravljalnik g&ostiteljskega omrežja …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Display the Host Network Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Prikaži okno Upravljalnika gostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+27"/>
@@ -582,7 +582,7 @@
     <message>
         <location filename="../src/runtime/UIActionPoolRuntime.cpp" line="+1321"/>
         <source>Shared &Clipboard</source>
-        <translation>&Souporaba odložišča</translation>
+        <translation>&Deljeno odložišče</translation>
     </message>
     <message>
         <location line="-1320"/>
@@ -597,7 +597,7 @@
     <message>
         <location line="+186"/>
         <source>&Shared Folders Settings...</source>
-        <translation>&Nastavitve souporabe map …</translation>
+        <translation>&Nastavitve deljenih map …</translation>
     </message>
     <message>
         <location line="-985"/>
@@ -629,7 +629,7 @@
     <message>
         <location line="+131"/>
         <source>&Insert Guest Additions CD image...</source>
-        <translation>&Vstavi odtis CD Dodatkov za gosta …</translation>
+        <translation>&Vstavi odtis CD Guest Additions …</translation>
     </message>
     <message>
         <location filename="../src/globals/UIActionPool.cpp" line="-406"/>
@@ -694,7 +694,7 @@
     <message>
         <location line="+100"/>
         <source>&Shared Folders</source>
-        <translation>&Souporaba map</translation>
+        <translation>&Deljene mape</translation>
     </message>
     <message>
         <location line="+201"/>
@@ -946,27 +946,27 @@
     <message>
         <location line="+78"/>
         <source>&Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>&Zvok</translation>
     </message>
     <message>
         <location line="+31"/>
         <source>Audio Output</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvočni izhod</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Enable audio output</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogoči zvočni izhod</translation>
     </message>
     <message>
         <location line="+31"/>
         <source>Audio Input</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvočni vhod</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Enable audio input</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogoči zvočni vhod</translation>
     </message>
     <message>
         <location line="+24"/>
@@ -991,12 +991,12 @@
     <message>
         <location line="+54"/>
         <source>Display virtual machine settings window to configure shared folders</source>
-        <translation>Prikaži okno nastavitev navideznega računalnika za nastavitev souporabe map</translation>
+        <translation>Prikaži okno nastavitev navideznega računalnika za nastavitev deljenih map</translation>
     </message>
     <message>
         <location line="+30"/>
         <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-        <translation>Vstavi datoteko diska Dodatkov za gosta v navidezni optični pogon</translation>
+        <translation>Vstavi datoteko diska Guest Additions v navidezni optični pogon</translation>
     </message>
     <message>
         <location line="+1026"/>
@@ -1218,82 +1218,82 @@
     <message>
         <location line="+23"/>
         <source>&Machine Tools</source>
-        <translation type="unfinished"></translation>
+        <translation>&Orodja računalnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Switch to machine tools</source>
-        <translation type="unfinished"></translation>
+        <translation>Preklopi na orodja računalnika</translation>
     </message>
     <message>
         <location line="+22"/>
         <source>&Machine Tools Menu</source>
-        <translation type="unfinished"></translation>
+        <translation>Meni &orodij računalnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open the machine tools menu</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri meni orodij računalnika</translation>
     </message>
     <message>
         <location line="+24"/>
         <source>&Details</source>
-        <translation type="unfinished">&Podrobnosti</translation>
+        <translation>&Podrobnosti</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open the machine details pane</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri podokno podrobnosti o računalniku</translation>
     </message>
     <message>
         <location line="+24"/>
         <source>&Snapshots</source>
-        <translation type="unfinished">&Posnetki stanja</translation>
+        <translation>&Posnetki stanja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open the machine snapshots pane</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri podokno posnetkov stanja računalnika</translation>
     </message>
     <message>
         <location line="+23"/>
         <source>&Global Tools</source>
-        <translation type="unfinished"></translation>
+        <translation>&Splošna orodja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Switch to global tools</source>
-        <translation type="unfinished"></translation>
+        <translation>Preklopi na splošna orodja</translation>
     </message>
     <message>
         <location line="+22"/>
         <source>&Global Tools Menu</source>
-        <translation type="unfinished"></translation>
+        <translation>Meni &splošnih orodij</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open the global tools menu</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri meni splošnh orodij</translation>
     </message>
     <message>
         <location line="+24"/>
         <source>&Virtual Media Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravljalnik navi&deznh nosilcev</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open the Virtual Media Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri Upravljalnika navideznih nosilcev</translation>
     </message>
     <message>
         <location line="+24"/>
         <source>&Host Network Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravljalnik g&ostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open the Host Network Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri Upravljalnika gostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+69"/>
@@ -1511,7 +1511,7 @@
     <message>
         <location line="+365"/>
         <source>Detailed list of all components of all virtual machines of the current appliance</source>
-        <translation type="unfinished"></translation>
+        <translation>Podorben seznam sestavnih delov vseh navideznih računalnikov trenutne namenske naprave</translation>
     </message>
     <message>
         <location line="+7"/>
@@ -1568,13 +1568,13 @@
         <location filename="../src/widgets/UIApplianceEditorWidget.cpp" line="-174"/>
         <source>%1</source>
         <comment>col.1 text</comment>
-        <translation type="unfinished">%1% {1?}</translation>
+        <translation>%1</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>%1: %2</source>
         <comment>col.1 text: col.2 text</comment>
-        <translation type="unfinished">%1: %2</translation>
+        <translation>%1: %2</translation>
     </message>
 </context>
 <context>
@@ -1673,7 +1673,7 @@
 <context>
     <name>UIDetailsPagePrivate</name>
     <message>
-        <location filename="../src/selector/UIDesktopPane.cpp" line="+590"/>
+        <location filename="../src/selector/UIDesktopPane.cpp" line="+593"/>
         <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>Izbran navidezni računalnk je <i>nedostopen</i>. Preglejte spodnje  sporočilo napake in pritisnite gumb <b>Osveži</b>, če želite ponoviti preverjanje dostopnosti:</translation>
     </message>
@@ -1714,12 +1714,12 @@
     <message>
         <location filename="../src/net/UIDownloaderAdditions.cpp" line="+200"/>
         <source>Select folder to save Guest Additions image to</source>
-        <translation>Izberite mapo za shranjevanje Dodatkov za gosta</translation>
+        <translation>Izberite mapo za shranjevanje programa Guest Additions</translation>
     </message>
     <message>
         <location line="-92"/>
         <source>VirtualBox Guest Additions</source>
-        <translation>Dodatki za gosta VirtualBox</translation>
+        <translation>VirtualBox Guest Additions</translation>
     </message>
 </context>
 <context>
@@ -1763,31 +1763,31 @@
         <location line="+71"/>
         <source>Result&nbsp;Code: </source>
         <comment>error info</comment>
-        <translation type="unfinished">Koda&nbsp;rezultata: </translation>
+        <translation>Koda&nbsp;rezultata: </translation>
     </message>
     <message>
         <location line="+6"/>
         <source>Component: </source>
         <comment>error info</comment>
-        <translation type="unfinished">Sestavni del: </translation>
+        <translation>Sestavni del: </translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Interface: </source>
         <comment>error info</comment>
-        <translation type="unfinished">Vmesnik: </translation>
+        <translation>Vmesnik: </translation>
     </message>
     <message>
         <location line="+9"/>
         <source>Callee: </source>
         <comment>error info</comment>
-        <translation type="unfinished">Klicalec: </translation>
+        <translation>Klicalec: </translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Callee&nbsp;RC: </source>
         <comment>error info</comment>
-        <translation type="unfinished">Klicalec&nbsp;RC: </translation>
+        <translation>Klicalec&nbsp;RC: </translation>
     </message>
 </context>
 <context>
@@ -1796,13 +1796,13 @@
         <location filename="../src/settings/global/UIGlobalSettingsExtension.cpp" line="+157"/>
         <source>%1, %2: %3, %4</source>
         <comment>col.2 text, col.3 name: col.3 text, col.1 name</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3, %4</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>%1, %2: %3</source>
         <comment>col.2 text, col.3 name: col.3 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3</translation>
     </message>
 </context>
 <context>
@@ -1876,7 +1876,7 @@
 <context>
     <name>UIGChooserItemGroup</name>
     <message>
-        <location filename="../src/selector/graphics/chooser/UIGChooserItemGroup.cpp" line="+673"/>
+        <location filename="../src/selector/graphics/chooser/UIGChooserItemGroup.cpp" line="+674"/>
         <source><b>%1</b></source>
         <comment>Group item tool-tip / Group name</comment>
         <translation><b>%1</b></translation>
@@ -1945,7 +1945,7 @@
     <message>
         <location line="+6"/>
         <source>Virtual Machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Skupina navideznih računalnikov</translation>
     </message>
     <message>
         <location line="+7"/>
@@ -1963,7 +1963,7 @@
     <message>
         <location filename="../src/selector/graphics/chooser/UIGChooserItemMachine.cpp" line="+479"/>
         <source>Virtual Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Navidezni računalnik</translation>
     </message>
 </context>
 <context>
@@ -1979,13 +1979,13 @@
     <message>
         <location filename="../src/selector/graphics/chooser/UIGChooserView.cpp" line="+167"/>
         <source>Contains a tree of Virtual Machines and their groups</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje drevo navideznih računalnikov in njihove skupine</translation>
     </message>
 </context>
 <context>
     <name>UIGDetails</name>
     <message>
-        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+1173"/>
+        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+1161"/>
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+248"/>
         <source>Name</source>
         <comment>details (general)</comment>
@@ -2086,7 +2086,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+5"/>
         <source>Audio Output</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zvočni izhod</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -2094,7 +2094,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+2"/>
         <source>Enabled</source>
         <comment>details (audio/output)</comment>
-        <translation type="unfinished">Omogočeno</translation>
+        <translation>Omogočeno</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -2102,7 +2102,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+1"/>
         <source>Disabled</source>
         <comment>details (audio/output)</comment>
-        <translation type="unfinished">Onemogočeno</translation>
+        <translation>Onemogočeno</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -2110,7 +2110,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+3"/>
         <source>Audio Input</source>
         <comment>details (audio)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zvočni vhod</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -2118,7 +2118,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+2"/>
         <source>Enabled</source>
         <comment>details (audio/input)</comment>
-        <translation type="unfinished">Omogočeno</translation>
+        <translation>Omogočeno</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -2126,7 +2126,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+1"/>
         <source>Disabled</source>
         <comment>details (audio/input)</comment>
-        <translation type="unfinished">Onemogočeno</translation>
+        <translation>Onemogočeno</translation>
     </message>
     <message>
         <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="-386"/>
@@ -2249,28 +2249,28 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+5"/>
         <source>Chipset Type</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Vrsta veznega nabora</translation>
     </message>
     <message>
         <location line="+378"/>
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+12"/>
         <source>Enabled</source>
         <comment>details (system/EFI)</comment>
-        <translation type="unfinished">Omogočeno</translation>
+        <translation>Omogočeno</translation>
     </message>
     <message>
         <location line="-367"/>
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="-1"/>
         <source>EFI</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>EFI</translation>
     </message>
     <message>
         <location line="+372"/>
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+7"/>
         <source>Disabled</source>
         <comment>details (system/EFI)</comment>
-        <translation type="unfinished">Onemogočeno</translation>
+        <translation>Onemogočeno</translation>
     </message>
     <message>
         <location line="+22"/>
@@ -2290,7 +2290,7 @@
         <location line="+421"/>
         <source>Disabled</source>
         <comment>details (display/Unscaled HiDPI Video Output)</comment>
-        <translation type="unfinished">Onemogočeno</translation>
+        <translation>Onemogočeno</translation>
     </message>
     <message>
         <location line="+15"/>
@@ -2346,7 +2346,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+6"/>
         <source>Host-only Adapter, '%1'</source>
         <comment>details (network)</comment>
-        <translation>Vmesnik samo za gostitelja, '%1'</translation>
+        <translation>Gostiteljski vmesnik, '%1'</translation>
     </message>
     <message>
         <location line="+7"/>
@@ -2373,7 +2373,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+26"/>
         <source>Shared Folders</source>
         <comment>details (shared folders)</comment>
-        <translation>Mape v souporabi</translation>
+        <translation>Deljene mape</translation>
     </message>
     <message>
         <location line="-191"/>
@@ -2553,7 +2553,7 @@
         <location filename="../src/selector/graphics/details/UIGDetailsElement.cpp" line="+209"/>
         <source>%1 details</source>
         <comment>like 'General details' or 'Storage details'</comment>
-        <translation type="unfinished"></translation>
+        <translation>Podrobnosti - %1</translation>
     </message>
 </context>
 <context>
@@ -2561,7 +2561,7 @@
     <message>
         <location filename="../src/selector/graphics/details/UIGDetailsSet.cpp" line="+225"/>
         <source>Contains the details of virtual machine '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje podatke navideznega računalnika '%1'</translation>
     </message>
 </context>
 <context>
@@ -2569,13 +2569,13 @@
     <message>
         <location filename="../src/selector/graphics/details/UIGDetailsView.cpp" line="+177"/>
         <source>Contains a list of Virtual Machine details</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje seznam podrobnosti navideznega računalnika</translation>
     </message>
 </context>
 <context>
     <name>UIGMachinePreview</name>
     <message>
-        <location filename="../src/selector/graphics/details/UIGMachinePreview.cpp" line="+355"/>
+        <location filename="../src/selector/graphics/details/UIGMachinePreview.cpp" line="+356"/>
         <source>Every 0.5 s</source>
         <translation>Vsakih 0,5 s</translation>
     </message>
@@ -2636,7 +2636,7 @@
     <message>
         <location line="+3"/>
         <source>Suggest a reasonable maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
-        <translation>Gostu predlagaj razumno največjo velikost zaslona. Gost bo ta predlog videl le, ko so nameščni Dodatki za gosta.</translation>
+        <translation>Gostu predlagaj razumno največjo velikost zaslona. Gost bo ta predlog videl le, ko je nameščen program Guest Additions.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -2658,7 +2658,7 @@
     <message>
         <location line="+3"/>
         <source>Suggest a maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
-        <translation>Gostu predlagaj največjo velikost zaslona. Gost bo ta predlog videl le, ko so nameščni Dodatki za gosta.</translation>
+        <translation>Gostu predlagaj največjo velikost zaslona. Gost bo ta predlog videl le, ko je nameščen program Guest Additions.</translation>
     </message>
     <message>
         <location filename="../src/settings/global/UIGlobalSettingsDisplay.ui" line="+26"/>
@@ -2986,7 +2986,7 @@
     </message>
     <message>
         <source>Lists all available host-only networks.</source>
-        <translation type="vanished">Navede vsa razpoložljiva omrežja samo za gostitelja.</translation>
+        <translation type="vanished">Navede vsa razpoložljiva gostiteljska omrežja.</translation>
     </message>
     <message>
         <location filename="../src/settings/global/UIGlobalSettingsNetwork.cpp" line="+351"/>
@@ -3009,7 +3009,7 @@
     </message>
     <message>
         <source>&Host-only Networks</source>
-        <translation type="vanished">Omrežja &samo za gostitelja</translation>
+        <translation type="vanished">&Gostiteljska omrežja</translation>
     </message>
     <message>
         <location filename="../src/settings/global/UIGlobalSettingsNetwork.cpp" line="-185"/>
@@ -3165,27 +3165,27 @@
     </message>
     <message>
         <source>Add Host-only Network</source>
-        <translation type="vanished">Dodaj omrežje samo za gostitelja</translation>
+        <translation type="vanished">Dodaj gostiteljsko omrežje</translation>
     </message>
     <message>
         <source>Remove Host-only Network</source>
-        <translation type="vanished">Odstrani omrežje samo za gostitelja</translation>
+        <translation type="vanished">Odstrani gostiteljsko omrežje</translation>
     </message>
     <message>
         <source>Edit Host-only Network</source>
-        <translation type="vanished">Uredi omrežje samo za gostitelja</translation>
+        <translation type="vanished">Uredi gostiteljsko omrežje</translation>
     </message>
     <message>
         <source>Adds new host-only network.</source>
-        <translation type="vanished">Doda novo omrežje samo za gostitelja.</translation>
+        <translation type="vanished">Doda novo gostiteljsko omrežje.</translation>
     </message>
     <message>
         <source>Removes selected host-only network.</source>
-        <translation type="vanished">Odstrani izbrano omrežje samo za gostitelja.</translation>
+        <translation type="vanished">Odstrani izbrano gostiteljsko omrežje.</translation>
     </message>
     <message>
         <source>Edits selected host-only network.</source>
-        <translation type="vanished">Uredi izbrano omrežje samo za gostitelja.</translation>
+        <translation type="vanished">Uredi izbrano gostiteljsko omrežje.</translation>
     </message>
     <message>
         <source>Host interface <b>%1</b> does not currently have a valid IPv6 network mask prefix length.</source>
@@ -3196,7 +3196,7 @@
     <name>UIGlobalSettingsNetworkDetailsHost</name>
     <message>
         <source>Host-only Network Details</source>
-        <translation type="vanished">Podorobnosti omrežja samo za gostitelja</translation>
+        <translation type="vanished">Podorobnosti gostiteljskega omrežja</translation>
     </message>
     <message>
         <source>&Adapter</source>
@@ -3252,7 +3252,7 @@
     </message>
     <message>
         <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="vanished">Vsebuje naslov strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation type="vanished">Vsebuje naslov strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <source>Server &Mask:</source>
@@ -3260,7 +3260,7 @@
     </message>
     <message>
         <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="vanished">Vsebuje masko omrežja strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation type="vanished">Vsebuje masko omrežja strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <source>&Lower Address Bound:</source>
@@ -3268,7 +3268,7 @@
     </message>
     <message>
         <source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="vanished">Vsebuje spodnjo omejitev naslovov strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation type="vanished">Vsebuje spodnjo omejitev naslovov strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <source>&Upper Address Bound:</source>
@@ -3276,7 +3276,7 @@
     </message>
     <message>
         <source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="vanished">Vsebuje zgornjo omejitev naslovov strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation type="vanished">Vsebuje zgornjo omejitev naslovov strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <source>When checked, manual configuration will be used for this network adapter.</source>
@@ -3431,7 +3431,7 @@
     <message>
         <location line="-91"/>
         <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>Ko je izbrano, bo VirtualBox za opravila, kot sta prejemanje Dodatkov za gosta iz omrežja ali preverjanje za posodobitve, poizkusil samodejno zaznati nastavitve posredniškega strežnika gostitelja.</translation>
+        <translation>Ko je izbrano, bo VirtualBox za opravila, kot sta prejemanje programa Guest Additions iz omrežja ali preverjanje za posodobitve, poizkusil samodejno zaznati nastavitve posredniškega strežnika gostitelja.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -3441,7 +3441,7 @@
     <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>Ko je izbrano, bo VirtualBox za opravila, kot sta prejemanje Dodatkov za gosta iz omrežja ali preverjanje za posodobitve, uporabil neposredno internetno povezavo.</translation>
+        <translation>Ko je izbrano, bo VirtualBox za opravila, kot sta prejemanje programa Guest Additions iz omrežja ali preverjanje za posodobitve, uporabil neposredno internetno povezavo.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -3451,7 +3451,7 @@
     <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>Ko je označeno, bo VirtualBox za opravila, kot je prejemanje Dodatkov za gosta iz omrežja ali preverjanje za posodobitve, uporabil dobavljene nastavitve posredniškega strežnika.</translation>
+        <translation>Ko je označeno, bo VirtualBox za opravila, kot je prejemanje programa Guest Additions iz omrežja ali preverjanje za posodobitve, uporabil dobavljene nastavitve posredniškega strežnika.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -3528,7 +3528,7 @@
         <location filename="../src/widgets/graphics/UIGraphicsTextPane.cpp" line="+97"/>
         <source>%1: %2</source>
         <comment>'key: value', like 'Name: MyVM'</comment>
-        <translation type="unfinished">%1: %2</translation>
+        <translation>%1: %2</translation>
     </message>
 </context>
 <context>
@@ -3558,12 +3558,12 @@
     <message>
         <location line="-74"/>
         <source>Left %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Levi %1</translation>
     </message>
     <message>
         <location line="+6"/>
         <source>Right %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Desni %1</translation>
     </message>
     <message>
         <location line="+232"/>
@@ -3642,201 +3642,201 @@
     <message>
         <location filename="../src/hostnetwork/UIHostNetworkDetailsWidget.cpp" line="+83"/>
         <source>&Adapter</source>
-        <translation type="unfinished">&Vmesnik</translation>
+        <translation>&Vmesnik</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&DHCP Server</source>
-        <translation type="unfinished">Strežnik &DHCP</translation>
+        <translation>Strežnik &DHCP</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Configure Adapter &Automatically</source>
-        <translation type="unfinished"></translation>
+        <translation>&Samodejno prilagodi vmesnik</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Configure Adapter &Manually</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ročno prilagodi vmesnik</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&IPv4 Address:</source>
-        <translation type="unfinished">Naslov IPv&4:</translation>
+        <translation>Naslov IPv&4:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the host IPv4 address for this adapter.</source>
-        <translation type="unfinished">Vsebuje naslov IPv4 gostitelja za ta vmesnik.</translation>
+        <translation>Vsebuje naslov IPv4 gostitelja za ta vmesnik.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>IPv4 Network &Mask:</source>
-        <translation type="unfinished">&Maska omrežja IPv4:</translation>
+        <translation>&Maska omrežja IPv4:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the host IPv4 network mask for this adapter.</source>
-        <translation type="unfinished">Vsebuje masko omrežja IPv4 gostitelja za ta vmesnik.</translation>
+        <translation>Vsebuje masko omrežja IPv4 gostitelja za ta vmesnik.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>I&Pv6 Address:</source>
-        <translation type="unfinished">Naslov IPv&6:</translation>
+        <translation>Naslov IPv&6:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
-        <translation type="unfinished">Vsebuje naslov IPv6 gostitelja za ta vmesnik, če je podprt.</translation>
+        <translation>Vsebuje naslov IPv6 gostitelja za ta vmesnik, če je podprt.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>IPv6 Prefix &Length:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Dolžina predpone IPv6:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the host IPv6 prefix length for this adapter if IPv6 is supported.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje dolžino predpone IPv6 gostitelja za ta vmesnik, če je podprta.</translation>
     </message>
     <message>
         <location line="+3"/>
         <location line="+25"/>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi</translation>
     </message>
     <message>
         <location line="-24"/>
         <location line="+25"/>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi</translation>
     </message>
     <message>
         <location line="-22"/>
         <source>Reset changes in current interface details</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe podrobnosti trenutnega vmesnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply changes in current interface details</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe podrobnosti trenutnega vmesnika</translation>
     </message>
     <message>
         <location line="+2"/>
         <location line="+25"/>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="-23"/>
         <location line="+25"/>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="-21"/>
         <source>&Enable Server</source>
-        <translation type="unfinished">&Omogoči strežnik</translation>
+        <translation>&Omogoči strežnik</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
-        <translation type="unfinished">Ko je označeno, bo ob zagonu računalnika za to omrežje omogočen strežnik DHCP.</translation>
+        <translation>Ko je označeno, bo ob zagonu računalnika za to omrežje omogočen strežnik DHCP.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Server Add&ress:</source>
-        <translation type="unfinished">&Naslov strežnika:</translation>
+        <translation>&Naslov strežnika:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">Vsebuje naslov strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation>Vsebuje naslov strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Server &Mask:</source>
-        <translation type="unfinished">&Maska strežnika:</translation>
+        <translation>&Maska strežnika:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">Vsebuje masko omrežja strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation>Vsebuje masko omrežja strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Lower Address Bound:</source>
-        <translation type="unfinished">&Spodnja omejitev naslovov:</translation>
+        <translation>&Spodnja omejitev naslovov:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">Vsebuje spodnjo omejitev naslovov strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation>Vsebuje spodnjo omejitev naslovov strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Upper Address Bound:</source>
-        <translation type="unfinished">&Zgornja omejitev naslovov:</translation>
+        <translation>&Zgornja omejitev naslovov:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished">Vsebuje zgornjo omejitev naslovov strežnika DHCP, ki je povezan s tem vmesnikom samo za gostitelja.</translation>
+        <translation>Vsebuje zgornjo omejitev naslovov strežnika DHCP, ki je povezan s tem gostiteljskim vmesnikom.</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Reset changes in current DHCP server details</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe podrobnosti trenutnega strežnika DHCP</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply changes in current DHCP server details</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe podrobnosti trenutnega strežnika DHCP</translation>
     </message>
     <message>
         <location line="+841"/>
         <source>Host interface <nobr><b>%1</b></nobr> is set to obtain the address automatically but the corresponding DHCP server is not enabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> je nastavljen na samodejno pridobivanje naslova, vendar je pripadajoči strežnik DHCP onemogočen.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv4 address.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavnega naslova IPv4.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv4 network mask.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavne maske omrežja IPv4.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv6 address.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavnega naslova IPv6.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid IPv6 prefix length.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavne dolžine predpone IPv6.</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server address.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavnega naslova strežnika DHCP.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server mask.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavne maske strežnika DHCP.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server lower address bound.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavne spodnje omejitve naslovov strežnika DHCP.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Host interface <nobr><b>%1</b></nobr> does not currently have a valid DHCP server upper address bound.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik gostitelja <nobr><b>%1</b></nobr> trenutno nima veljavne zgornje omejitve naslovov strežnika DHCP.</translation>
     </message>
 </context>
 <context>
@@ -3845,29 +3845,29 @@
         <location filename="../src/hostnetwork/UIHostNetworkManager.cpp" line="+94"/>
         <source>Enable</source>
         <comment>DHCP Server</comment>
-        <translation type="unfinished">Omogoči</translation>
+        <translation>Omogoči</translation>
     </message>
     <message>
         <location line="+10"/>
         <source>Adapter</source>
-        <translation type="unfinished">Vmesnik</translation>
+        <translation>Vmesnik</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Automatically configured</source>
         <comment>interface</comment>
-        <translation type="unfinished">Samodejno nastavljeno</translation>
+        <translation>Samodejno nastavljeno</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Manually configured</source>
         <comment>interface</comment>
-        <translation type="unfinished">Ročno nastavljeno</translation>
+        <translation>Ročno nastavljeno</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>IPv4 Address</source>
-        <translation type="unfinished">Naslov IPv4</translation>
+        <translation>Naslov IPv4</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -3875,210 +3875,210 @@
         <location line="+17"/>
         <source>Not set</source>
         <comment>address</comment>
-        <translation type="unfinished">Ni nastavljeno</translation>
+        <translation>Ni nastavljeno</translation>
     </message>
     <message>
         <location line="-25"/>
         <source>IPv4 Network Mask</source>
-        <translation type="unfinished">Maska omrežja IPv4</translation>
+        <translation>Maska omrežja IPv4</translation>
     </message>
     <message>
         <location line="+2"/>
         <location line="+27"/>
         <source>Not set</source>
         <comment>mask</comment>
-        <translation type="unfinished">Ni nastavljeno</translation>
+        <translation>Ni nastavljeno</translation>
     </message>
     <message>
         <location line="-23"/>
         <source>IPv6 Address</source>
-        <translation type="unfinished">Naslov IPv6</translation>
+        <translation>Naslov IPv6</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>IPv6 Prefix Length</source>
-        <translation type="unfinished"></translation>
+        <translation>Dolžina predpone IPv6</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Not set</source>
         <comment>length</comment>
-        <translation type="unfinished">Ni nastavljeno</translation>
+        <translation>Ni nastavljeno</translation>
     </message>
     <message>
         <location line="+5"/>
         <location line="+128"/>
         <source>DHCP Server</source>
-        <translation type="unfinished">Strežnik DHCP</translation>
+        <translation>Strežnik DHCP</translation>
     </message>
     <message>
         <location line="-126"/>
         <source>Enabled</source>
         <comment>server</comment>
-        <translation type="unfinished">Omogočeno</translation>
+        <translation>Omogočeno</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Disabled</source>
         <comment>server</comment>
-        <translation type="unfinished">Onemogočeno</translation>
+        <translation>Onemogočeno</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Address</source>
-        <translation type="unfinished">Naslov</translation>
+        <translation>Naslov</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Network Mask</source>
-        <translation type="unfinished">Maska omrežja</translation>
+        <translation>Maska omrežja</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Lower Bound</source>
-        <translation type="unfinished">Spodnja omejitev</translation>
+        <translation>Spodnja omejitev</translation>
     </message>
     <message>
         <location line="+2"/>
         <location line="+4"/>
         <source>Not set</source>
         <comment>bound</comment>
-        <translation type="unfinished">Ni nastavljeno</translation>
+        <translation>Ni nastavljeno</translation>
     </message>
     <message>
         <location line="-2"/>
         <source>Upper Bound</source>
-        <translation type="unfinished">Zgornja omejitev</translation>
+        <translation>Zgornja omejitev</translation>
     </message>
     <message>
         <location line="+66"/>
         <source>&Network</source>
-        <translation type="unfinished">&Omrežje</translation>
+        <translation>&Omrežje</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>&Create</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ustvari</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Create Host-only Network (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustvari gostiteljsko omrežje (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Create new host-only network</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustvari novo gostiteljsko omrežje</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>&Remove...</source>
-        <translation type="unfinished">&Odstrani …</translation>
+        <translation>&Odstrani …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Remove Host-only Network (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstrani gostiteljsko omrežje (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Remove selected host-only network</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstrani izbrano gostiteljsko omrežje</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>&Properties...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lastnosti …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open Host-only Network Properties (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri lastosti gostiteljskega omrežja (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open pane with selected host-only network properties</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri podokno z lastnostmi izbranega gostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>&Refresh...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Osveži …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Refresh Host-only Networks (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Osveži gostiteljska omrežja (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Refresh the list of host-only networks</source>
-        <translation type="unfinished"></translation>
+        <translation>Osveži seznam gostiteljskih omrežij</translation>
     </message>
     <message>
         <location line="+16"/>
         <source>Name</source>
-        <translation type="unfinished">Ime</translation>
+        <translation>Ime</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>IPv4 Address/Mask</source>
-        <translation type="unfinished"></translation>
+        <translation>Naslov/Maska IPv4</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>IPv6 Address/Mask</source>
-        <translation type="unfinished"></translation>
+        <translation>Naslov/Maska IPv6</translation>
     </message>
     <message>
         <location line="+827"/>
         <source>Host Network Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravljalnik gostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close</source>
-        <translation type="unfinished">Zapri</translation>
+        <translation>Zapri</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Reset changes in current host network details</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe podrobnosti trenutnega gostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply changes in current host network details</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe podrobnosti trenutnega gostiteljskega omrežja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close dialog without saving</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapri pogovorno okno brez shranjevanja</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close Window (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapri okno (%1)</translation>
     </message>
 </context>
 <context>
@@ -4090,12 +4090,12 @@
     <message>
         <location line="-677"/>
         <source>Adding network...</source>
-        <translation type="unfinished"></translation>
+        <translation>Dodajanje omrežja …</translation>
     </message>
     <message>
         <location line="+101"/>
         <source>Removing network...</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstranjevanje omrežja …</translation>
     </message>
 </context>
 <context>
@@ -4208,12 +4208,12 @@
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p></source>
         <comment>Shared folders tooltip</comment>
-        <translation type="vanished"><p style='white-space:pre'><nobr>Nakazuje dejavnost souporabe map računalnika:</nobr>%1</p></translation>
+        <translation type="vanished"><p style='white-space:pre'><nobr>Nakazuje dejavnost deljenih map računalnika:</nobr>%1</p></translation>
     </message>
     <message>
         <source><br><nobr><b>No shared folders</b></nobr></source>
         <comment>Shared folders tooltip</comment>
-        <translation type="vanished"><br><nobr><b>Ni souporabe map</b></nobr></translation>
+        <translation type="vanished"><br><nobr><b>Ni deljenih map</b></nobr></translation>
     </message>
     <message>
         <source><br><nobr><b>%1:</b>&nbsp;%2</nobr></source>
@@ -4222,7 +4222,7 @@
     </message>
     <message>
         <source>Indicates whether the host mouse pointer is captured by the guest OS:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;pointer is not captured</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;pointer is captured</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;mouse integration (MI) is On</nobr><br><nobr><img src=:/mouse_can_seamless_ [...]
-        <translation type="vanished">Nakazuje, ali je gostujoči operacijski sistem zajel kazalec miške:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;Kazalec ni zajet</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;Kazalec je zajet</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;Vključitev miške (MI) je vklopljena</nobr><br><nobr><img src=:/mous [...]
+        <translation type="vanished">Nakazuje, ali je gostujoči operacijski sistem zajel kazalec miške:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;kazalec ni zajet</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;kazalec je zajet</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;vključitev miške je vklopljena</nobr><br><nobr><img src=:/mouse_can [...]
     </message>
     <message>
         <source><nobr>Indicates video capturing activity:</nobr><br>%1</source>
@@ -4268,133 +4268,133 @@
         <location filename="../src/runtime/UIIndicatorsPool.cpp" line="+130"/>
         <source>Adapter %1 (%2)</source>
         <comment>Network tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnik %1 (%2)</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>IP</source>
         <comment>Network tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>IP</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Cable</source>
         <comment>Network tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Kabel</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Connected</source>
         <comment>cable (Network tooltip)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Povezano</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Disconnected</source>
         <comment>cable (Network tooltip)</comment>
-        <translation type="unfinished">Prekinjen</translation>
+        <translation>Prekinjeno</translation>
     </message>
     <message>
         <location line="+65"/>
         <source>No USB devices attached</source>
         <comment>USB tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nobena naprava USB ni priklopljena</translation>
     </message>
     <message>
         <location line="+67"/>
         <source>No shared folders</source>
         <comment>Shared folders tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ni deljenih map</translation>
     </message>
     <message>
         <location line="+44"/>
         <source>Video memory</source>
         <comment>Display tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Grafični pomnilnik</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Screens</source>
         <comment>Display tooltip</comment>
-        <translation type="unfinished">Zasloni</translation>
+        <translation>Zasloni</translation>
     </message>
     <message>
         <location line="+11"/>
         <source>3D acceleration</source>
         <comment>Display tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Pospeševanje 3D</translation>
     </message>
     <message>
         <location line="+118"/>
         <source>Video capture disabled</source>
         <comment>Video capture tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zajem videoposnetkov onemogočeno</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Video capture file</source>
         <comment>Video capture tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Datoteka zajema videoposnetka</translation>
     </message>
     <message>
         <location line="+140"/>
         <source>Indicates whether the host mouse pointer is captured by the guest OS:%1</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nakazuje, ali je gostujoči OS zajel kazalec miške: %1</translation>
     </message>
     <message>
         <location line="+6"/>
         <source>pointer is not captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>kazalec ni zajet</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>pointer is captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>kazalec je zajet</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>mouse integration (MI) is On</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>vključitev miške je vklopljeno</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>MI is Off, pointer is captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>vključitev miške je izklopljeno, kazalec je zajet</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>MI is Off, pointer is not captured</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>vključitev miške je izklopljeno, kazalec ni zajet</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Note that the mouse integration feature requires Guest Additions to be installed in the guest OS.</source>
         <comment>Mouse tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Upoštevajte, da vključitev miške zahteva namstitev programa Guest Additions v gostujočem OS-u.</translation>
     </message>
     <message>
         <location line="+37"/>
         <source>Indicates whether the host keyboard is captured by the guest OS:%1</source>
         <comment>Keyboard tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nakazuje, ali je gostujoči OS zajel tipkovnico gostitelja: %1</translation>
     </message>
     <message>
         <location line="+6"/>
         <source>keyboard is not captured</source>
         <comment>Keyboard tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>tipkovnica ni zajeta</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>keyboard is captured</source>
         <comment>Keyboard tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>tipkovnica je zajeta</translation>
     </message>
 </context>
 <context>
@@ -4532,7 +4532,7 @@
         <location line="+3"/>
         <source>Host-only adapter, '%1'</source>
         <comment>details report (network)</comment>
-        <translation>Vmesnik samo za gostitelja, '%1'</translation>
+        <translation>Gostiteljski vmesnik, '%1'</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -4661,7 +4661,7 @@
     <message>
         <location line="+1"/>
         <source>Guest Additions</source>
-        <translation>Dodatki za gosta</translation>
+        <translation>Guest Additions</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -4700,7 +4700,7 @@
         <location line="+95"/>
         <source>Shared Folders</source>
         <comment>details report (shared folders)</comment>
-        <translation>Souporaba map</translation>
+        <translation>Deljene mape</translation>
     </message>
 </context>
 <context>
@@ -4742,7 +4742,7 @@
     <message>
         <location line="-4"/>
         <source>Requests</source>
-        <translation type="unfinished"></translation>
+        <translation>Zahteve</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
@@ -4910,13 +4910,13 @@
         <location filename="../src/settings/global/UIGlobalSettingsNetwork.cpp" line="-155"/>
         <source>%1, %2</source>
         <comment>col.2 text, col.1 name</comment>
-        <translation type="unfinished">%1: %2 {1,?}</translation>
+        <translation>%1, %2</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>%1</source>
         <comment>col.2 text</comment>
-        <translation type="unfinished">%1% {1?}</translation>
+        <translation>%1</translation>
     </message>
 </context>
 <context>
@@ -4965,27 +4965,27 @@
     <message>
         <location line="+7"/>
         <source>Extended Features:</source>
-        <translation type="unfinished">Razširjene značilnosti:</translation>
+        <translation>Razširjene značilnosti:</translation>
     </message>
     <message>
         <location line="+16"/>
         <source>When checked, output to the virtual audio device will reach the host. Otherwise the guest is muted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ko je označeno, bo izhod do navidezne zvočne naprave dosegel gostitelja. V nasprotnem primeru bo gost utišan.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Enable Audio &Output</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogoči zvočni iz&hod</translation>
     </message>
     <message>
         <location line="+13"/>
         <source>When checked, the guest will be able to capture audio input from the host. Otherwise the guest will capture only silence.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ko je označeno, bo gost lahko zajel zvočni vhod iz gostitelja. V nasprotnem primeru bo gost zajel samo tišino.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Enable Audio &Input</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogoči zvočni vho&d</translation>
     </message>
     <message>
         <location line="-68"/>
@@ -5121,12 +5121,12 @@
     <message>
         <location line="+87"/>
         <source>When checked, VirtualBox will record the audio stream to video file as well.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ko je označeno, bo VirtualBox v datoteko videoposnetka posnel tudi zvočni pretok.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&Record Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>&Posnemi zvok</translation>
     </message>
     <message>
         <location line="+7"/>
@@ -5353,12 +5353,12 @@
     <message>
         <location line="+38"/>
         <source>&Shared Clipboard:</source>
-        <translation>&Souporaba odložišča:</translation>
+        <translation>&Deljeno odložišče:</translation>
     </message>
     <message>
         <location line="+19"/>
         <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>Izbere, kateri podatki odložišča bodo kopirani med gostom in gostiteljem. Ta značilnost zahteva namestitev Dodatkov za gosta na gostujočem OS-u.</translation>
+        <translation>Izbere, kateri podatki odložišča bodo kopirani med gostom in gostiteljem. Ta značilnost zahteva namestitev programa Guest Additions na gostujočem OS-u.</translation>
     </message>
     <message>
         <location line="-42"/>
@@ -5383,7 +5383,7 @@
     <message>
         <location line="+19"/>
         <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>Izbere, kateri podatki bodo kopirani med gostom in gostiteljem z vlečenjem in spuščanjem. Ta značilnost zahteva namestitev Dodatkov za gosta na gostujočem OS-u.</translation>
+        <translation>Izbere, kateri podatki bodo kopirani med gostom in gostiteljem z vlečenjem in spuščanjem. Ta značilnost zahteva namestitev programa Guest Additions na gostujočem OS-u.</translation>
     </message>
     <message>
         <location filename="../src/settings/machine/UIMachineSettingsGeneral.cpp" line="+367"/>
@@ -5627,7 +5627,7 @@
     <message>
         <location line="+9"/>
         <source>No host-only network adapter is currently selected.</source>
-        <translation>Trenutno ni izbranega omrežnega vmesnika samo za gostitelja.</translation>
+        <translation>Trenutno ni izbranega vmesnika gostiteljskega omrežja.</translation>
     </message>
     <message>
         <location line="+9"/>
@@ -5781,12 +5781,12 @@
     <message>
         <location filename="../src/settings/machine/UIMachineSettingsSF.ui" line="+32"/>
         <source>Shared &Folders</source>
-        <translation type="unfinished"></translation>
+        <translation>&Deljene mape</translation>
     </message>
     <message>
         <location line="+37"/>
         <source>Lists all shared folders accessible to this machine. Use 'net use x: \\vboxsvr\share' to access a shared folder named <i>share</i> from a DOS-like OS, or 'mount -t vboxsf share mount_point' to access it from a Linux OS. This feature requires Guest Additions.</source>
-        <translation>Navede vse mape v souporabi, ki so dostopne temu računalniku. Za dostop do map v souporabi z imenom <i>share</i> uporabite 'net use x: \\vboxsvr\share' iz OS-a vrste DOS ali 'mount -t vboxsf share mount_point' iz OS-a Linux. Ta značilnost zahteva Dodatke za gosta.</translation>
+        <translation>Navede vse deljene mape, ki so dostopne temu računalniku. Za dostop do deljene mape z imenom <i>share</i> uporabite 'net use x: \\vboxsvr\share' iz OS-a vrste DOS ali 'mount -t vboxsf share mount_point' iz OS-a Linux. Ta značilnost zahteva program Guest Additions.</translation>
     </message>
     <message>
         <location line="+10"/>
@@ -5820,32 +5820,32 @@
     <message>
         <location line="+248"/>
         <source>Add Shared Folder</source>
-        <translation>Dodaj mapo v souporabo</translation>
+        <translation>Dodaj deljeno mapo</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Edit Shared Folder</source>
-        <translation>Uredi souporabo mape</translation>
+        <translation>Uredi deljeno mapo</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Remove Shared Folder</source>
-        <translation>Odstrani souporabo mape</translation>
+        <translation>Odstrani deljeno mapo</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Adds new shared folder.</source>
-        <translation>Doda novo mapo v souporabo.</translation>
+        <translation>Doda novo deljeno mapo.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Edits selected shared folder.</source>
-        <translation>Uredi izbrano souporabo mape.</translation>
+        <translation>Uredi izbrano deljeno mapo.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Removes selected shared folder.</source>
-        <translation>Odstrani izbrano souporabo mape.</translation>
+        <translation>Odstrani izbrano deljeno mapo.</translation>
     </message>
 </context>
 <context>
@@ -5853,12 +5853,12 @@
     <message>
         <location filename="../src/settings/machine/UIMachineSettingsSFDetails.cpp" line="+130"/>
         <source>Add Share</source>
-        <translation>Dodaj souporabo</translation>
+        <translation>Dodaj deljenje</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Edit Share</source>
-        <translation>Uredi souporabo</translation>
+        <translation>Uredi deljenje</translation>
     </message>
     <message>
         <location filename="../src/settings/machine/UIMachineSettingsSFDetails.ui" line="+29"/>
@@ -5873,12 +5873,12 @@
     <message>
         <location line="+10"/>
         <source>Holds the name of the shared folder (as it will be seen by the guest OS).</source>
-        <translation>Vsebuje ime mape v souporabi (kot jo bo videl gostujoči OS).</translation>
+        <translation>Vsebuje ime deljene mape (kot jo bo videl gostujoči OS).</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>When checked, the guest OS will not be able to write to the specified shared folder.</source>
-        <translation>Ko je označeno, gostujoči OS ne bo mogel pisati v navedeno mapo v souporabi.</translation>
+        <translation>Ko je označeno, gostujoči OS ne bo mogel pisati v navedeno deljeno mapo.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -5893,7 +5893,7 @@
     <message>
         <location line="-13"/>
         <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source>
-        <translation>Ko je označeno, bo gostujoči OS ob zagonu poizkusil samodejno priklopiti mapo v souporabi.</translation>
+        <translation>Ko je označeno, bo gostujoči OS ob zagonu poizkusil samodejno priklopiti deljeno mapo.</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -5903,7 +5903,7 @@
     <message>
         <location line="+7"/>
         <source>When checked, this shared folder will be permanent.</source>
-        <translation>Ko je označeno, bo ta mapa v souporabi trajna.</translation>
+        <translation>Ko je označeno, bo ta deljena mapa trajna.</translation>
     </message>
 </context>
 <context>
@@ -6146,7 +6146,7 @@
     <message>
         <location line="-355"/>
         <source>&Storage Devices</source>
-        <translation type="unfinished"></translation>
+        <translation>&Pomnilniške naprave</translation>
     </message>
     <message>
         <location line="+495"/>
@@ -6587,12 +6587,12 @@
     <message>
         <location line="+10"/>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed to support a chipset of type ICH9. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Značilnost I/O APIC v odseku Matična plošča na strani Sistem trenutno ni omogočena. Za podporo veznemu naboru vrste ICH9 jo je treba omogočiti. Samodejno bo omogočena, če potrdite svoje spremembe.</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>The USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB pointing device. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Posnemanje krmilnika USB trenutno na strani USB trenutno ni omogočeno. Za podporo posnemane vnosne naprave USB ga je treba omogočiti. Samodejno bo omogočen, če potrdite svoje spremembe.</translation>
     </message>
     <message>
         <location line="+21"/>
@@ -6607,12 +6607,12 @@
     <message>
         <location line="+9"/>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed to support more than one virtual processor. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Značilnost I/O APIC v odseku Matična plošča na strani Sistem trenutno ni omogočena. Za podporo več kot enemu navideznemu procesorju jo je treba omogočiti. Samodejno bo omogočena, če potrdite svoje spremembe.</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>The hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed to support more than one virtual processor. It will be enabled automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Strojan navideznost v odseku Pospeševanje na strani Sistem trenutno ni omogočena. Za podporo več kot enemu navideznemu procesorju jo je treba omogočiti. Samodejno bo omogočena, če potrdite svoje spremembe.</translation>
     </message>
     <message>
         <location line="+9"/>
@@ -6976,7 +6976,7 @@
 <context>
     <name>UIMachineWindow</name>
     <message>
-        <location filename="../src/runtime/UIMachineWindow.cpp" line="+239"/>
+        <location filename="../src/runtime/UIMachineWindow.cpp" line="+245"/>
         <source> EXPERIMENTAL build %1r%2 - %3</source>
         <translation>PREIZKUSNA izgradnja %1r%2 - %3</translation>
     </message>
@@ -6992,95 +6992,135 @@
 <context>
     <name>UIMediumDetailsWidget</name>
     <message>
-        <location filename="../src/medium/UIMediumDetailsWidget.cpp" line="+89"/>
+        <location filename="../src/medium/UIMediumDetailsWidget.cpp" line="+99"/>
         <source>&Attributes</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lastnosti</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Information</source>
-        <translation type="unfinished"></translation>
+        <translation>&Podatki</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>&Type:</source>
-        <translation type="unfinished">&Vrsta:</translation>
+        <translation>&Vrsta:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Location:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Mesto:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Description:</source>
-        <translation type="unfinished">&Opis:</translation>
+        <translation>&Opis:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Velikost:</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Holds the type of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje vrsto tega nosilca.</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Holds the location of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje mesto tega nosilca.</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Choose Medium Location</source>
+        <translation>Izberite mesto nosilca</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the description of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje opis tega nosilca.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje velikost tega nosilca.</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Reset changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe podrobnosti trenutnega nosilca</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe podrobnosti trenutnega nosilca</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe (%1)</translation>
     </message>
     <message>
-        <location line="+575"/>
+        <location line="+637"/>
+        <source>Location can not be empty.</source>
+        <translation>Mesto ne sme biti prazno.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
-        <translation type="unfinished"></translation>
+        <translation>Velikosti nosilca ni mogočle spremeniti iz <b>%1</b> v <b>%2</b>, ker krčenje pomnilniških naprav trenutno ni podprto.</translation>
+    </message>
+    <message>
+        <location line="+40"/>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>Ta vrsta nosilca se prikolpi neposredno ali posredno in se ohrani ob zajemanju posnetkov stanja.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>Ta vrsta nosilca se priklopi posredno in spremembe se ob naslednjem zagonu navidezneega računalnika izbrišejo.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>Ta vrsta nosilca se priklopi neposredno in je ob zajemanju posnetkov stanja prezrta.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>Ta vrsta nosilca se priklopi neposredno in se lahko sočasno uporablja v več računalnikih.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>Ta vrsta nosilca se priklopi neposredno in se lahko uporablja v več računalnikih.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>Ta vrsta nosilca se priklopi posredno, da se lahko osnovni nosilec uporabi v več navideznih računalnikih, ki ima vsak svoj razlikovalni nosilec za shranjevanje sprememb v njih.</translation>
     </message>
 </context>
 <context>
     <name>UIMediumManager</name>
     <message>
-        <location filename="../src/medium/UIMediumManager.cpp" line="+844"/>
+        <location filename="../src/medium/UIMediumManager.cpp" line="+902"/>
         <source>&Optical disks</source>
         <translation>&Optični diski</translation>
     </message>
@@ -7090,139 +7130,154 @@
         <translation>&Diskete</translation>
     </message>
     <message>
-        <location line="-239"/>
+        <location line="-297"/>
         <source>Removing medium...</source>
         <translation>Odstranjevanje nosilca …</translation>
     </message>
     <message>
-        <location line="-241"/>
+        <location line="-227"/>
         <source>%1, %2: %3, %4: %5</source>
         <comment>col.1 text, col.2 name: col.2 text, col.3 name: col.3 text</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2: %3, %4: %5</translation>
     </message>
     <message>
-        <location line="+34"/>
+        <location line="+35"/>
         <source>Format:</source>
-        <translation type="unfinished">Oblika:</translation>
+        <translation>Oblika:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Storage details:</source>
-        <translation type="unfinished">Podrobnosti pomnilniške naprave:</translation>
+        <translation>Podrobnosti pomnilniške naprave:</translation>
     </message>
     <message>
         <location line="+1"/>
         <location line="+19"/>
         <source>Attached to:</source>
-        <translation type="unfinished">Priklopljen v:</translation>
+        <translation>Priklopljen v:</translation>
     </message>
     <message>
         <location line="-18"/>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Šifriran s ključem:</translation>
     </message>
     <message>
         <location line="+1"/>
         <location line="+18"/>
         <source>UUID:</source>
-        <translation type="unfinished">UUID:</translation>
+        <translation>UUID:</translation>
     </message>
     <message>
         <location line="-13"/>
         <location line="+16"/>
         <source><i>Not&nbsp;Attached</i></source>
-        <translation type="unfinished"><i>Ni&nbsp;priklopljen</i></translation>
+        <translation><i>Ni&nbsp;priklopljen</i></translation>
     </message>
     <message>
         <location line="-13"/>
         <source><i>Not&nbsp;Encrypted</i></source>
-        <translation type="unfinished"><i>Ni&nbsp;šifriran</i></translation>
+        <translation><i>Ni&nbsp;šifriran</i></translation>
     </message>
     <message>
         <location line="+61"/>
         <source>--</source>
         <comment>no info</comment>
-        <translation type="unfinished">--</translation>
+        <translation>--</translation>
     </message>
     <message>
-        <location line="+323"/>
+        <location line="+360"/>
         <source>&Medium</source>
-        <translation type="unfinished"></translation>
+        <translation>&Nosilec</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>&Copy...</source>
-        <translation type="unfinished">&Kopiraj …</translation>
+        <translation>&Kopiraj …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Copy Disk Image File (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopiraj datoteko odtisa diska (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Copy selected disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopiraj izbrano datoteko odtisa diska</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&Move...</source>
+        <translation>&Premakni …</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Move Disk Image File (%1)</source>
+        <translation>Premakni datoteko odtisa diska (%1)</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Move selected disk image file</source>
+        <translation>Premakni izbrano datoteko odtisa diska</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>&Remove...</source>
-        <translation type="unfinished">&Odstrani …</translation>
+        <translation>&Odstrani …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Remove Disk Image File (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstrani datoteko odtisa diska (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Remove selected disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstrani izbrano datoteko odtisa diska</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Re&lease...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Sprosti …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Release Disk Image File (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Sprosti datoteko odtisa diska (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Release selected disk image file by detaching it from machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Sprosti izbrano datoteko odtisa diska z njenim odklopom iz računlanikov</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>&Properties...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lastnosti …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open Disk Image File Properties (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri lastosti datoteke odtisa diska (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open pane with selected disk image file properties</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri podokno z lastnostmi izbrane datoteke odtisa diska</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Re&fresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Osve&ži</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Refresh Disk Image Files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Osveži datoteke odtisa diska (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Refresh the list of disk image files</source>
-        <translation type="unfinished">Osveži seznam datotek odtisa diska</translation>
+        <translation>Osveži seznam datotek odtisa diska</translation>
     </message>
     <message>
         <location line="+17"/>
@@ -7234,84 +7289,97 @@
         <location line="+9"/>
         <location line="+8"/>
         <source>Name</source>
-        <translation type="unfinished">Ime</translation>
+        <translation>Ime</translation>
     </message>
     <message>
         <location line="-16"/>
         <source>Virtual Size</source>
-        <translation type="unfinished">Navidezna velikost</translation>
+        <translation>Navidezna velikost</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Actual Size</source>
-        <translation type="unfinished">Dejanska velikost</translation>
+        <translation>Dejanska velikost</translation>
     </message>
     <message>
         <location line="+8"/>
         <location line="+8"/>
         <source>Size</source>
-        <translation type="unfinished">Velikost</translation>
+        <translation>Velikost</translation>
     </message>
     <message>
         <location line="+6"/>
         <source>Checking accessibility</source>
-        <translation type="unfinished">Preverjanje dostopnosti</translation>
+        <translation>Preverjanje dostopnosti</translation>
     </message>
     <message>
-        <location line="+75"/>
+        <location line="-636"/>
+        <location line="+722"/>
         <location line="+29"/>
         <source>Moving medium...</source>
-        <translation type="unfinished"></translation>
+        <translation>Premikanje nosilca …</translation>
     </message>
     <message>
-        <location line="+1302"/>
+        <location line="+1333"/>
         <source>Virtual Media Manager</source>
-        <translation type="unfinished">Upravljalnik navideznih nosilcev</translation>
+        <translation>Upravljalnik navideznih nosilcev</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close</source>
-        <translation type="unfinished">Zapri</translation>
+        <translation>Zapri</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Reset changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe podrobnosti trenutnega nosilca</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply changes in current medium details</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe podrobnosti trenutnega nosilca</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close dialog without saving</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapri pogovorno okno brez shranjevanja</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Close Window (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapri okno (%1)</translation>
+    </message>
+    <message>
+        <location filename="../src/medium/UIMediumDetailsWidget.cpp" line="-666"/>
+        <location filename="../src/medium/UIMediumManager.cpp" line="-2128"/>
+        <source>Current extension (*.%1)</source>
+        <translation>Trenutna pripona (*.%1)</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/medium/UIMediumManager.cpp" line="+3"/>
+        <source>Choose the location of this medium</source>
+        <translation>Izberite mesto tega nosilca</translation>
     </message>
 </context>
 <context>
@@ -7320,66 +7388,57 @@
         <location filename="../src/widgets/UIMediumSizeEditor.cpp" line="+77"/>
         <location line="+1"/>
         <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje velikost tega nosilca.</translation>
     </message>
     <message>
         <location line="+186"/>
         <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
+        <translation><nobr>%1 (%2 B)</nobr></translation>
     </message>
 </context>
 <context>
     <name>UIMediumTypeChangeDialog</name>
     <message>
-        <location filename="../src/UIMediumTypeChangeDialog.cpp" line="+73"/>
         <source>Modify medium attributes</source>
-        <translation>Spremeni lastnosti nosilca</translation>
+        <translation type="vanished">Spremeni lastnosti nosilca</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Ste pred spremembo nastavitev datoteke odtisa diska <b>%1</b>.</p><p>Izberite enega od naslednjih načinov in za nadaljevanje pritisnite <b>%2</b> ali v naprotnem primeru <b>%3</b>.</p></translation>
+        <translation type="vanished"><p>Ste pred spremembo nastavitev datoteke odtisa diska <b>%1</b>.</p><p>Izberite enega od naslednjih načinov in za nadaljevanje pritisnite <b>%2</b> ali v naprotnem primeru <b>%3</b>.</p></translation>
     </message>
     <message>
-        <location line="+8"/>
         <source>Choose mode:</source>
-        <translation>Izberite način:</translation>
+        <translation type="vanished">Izberite način:</translation>
     </message>
     <message>
-        <location line="+190"/>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Ta vrsta nosilca se pripne neposredno ali posredno in se ohrani ob zajemanju posnetkov stanja.</translation>
+        <translation type="vanished">Ta vrsta nosilca se pripne neposredno ali posredno in se ohrani ob zajemanju posnetkov stanja.</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Ta vrsta nosilca se pripne posredno in spremembe se ob naslednjem zagonu navidezneega računalnika izbrišejo.</translation>
+        <translation type="vanished">Ta vrsta nosilca se pripne posredno in spremembe se ob naslednjem zagonu navidezneega računalnika izbrišejo.</translation>
     </message>
     <message>
-        <location line="+4"/>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Ta vrsta nosilca se pripne neposredno in je ob zajemanju posnetkov stanja prezrta.</translation>
+        <translation type="vanished">Ta vrsta nosilca se pripne neposredno in je ob zajemanju posnetkov stanja prezrta.</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Ta vrsta nosilca se pripne neposredno in se lahko sočasno uporablja v več računalnikih.</translation>
+        <translation type="vanished">Ta vrsta nosilca se pripne neposredno in se lahko sočasno uporablja v več računalnikih.</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Ta vrsta nosilca se pripne neposredno in se lahko uporablja v več računalnikih.</translation>
+        <translation type="vanished">Ta vrsta nosilca se pripne neposredno in se lahko uporablja v več računalnikih.</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Ta vrsta nosilca se pripne posredno, da se lahko osnovni nosilec uporabi v več navideznih računalnikih, ki ima vsak svoj razlikovalni nosilec za shranjevanje sprememb v njih.</translation>
+        <translation type="vanished">Ta vrsta nosilca se pripne posredno, da se lahko osnovni nosilec uporabi v več navideznih računalnikih, ki ima vsak svoj razlikovalni nosilec za shranjevanje sprememb v njih.</translation>
     </message>
 </context>
 <context>
     <name>UIMenuBarEditorWidget</name>
     <message>
-        <location filename="../src/runtime/UIMenuBarEditorWindow.cpp" line="+1208"/>
+        <location filename="../src/runtime/UIMenuBarEditorWindow.cpp" line="+1211"/>
         <source>Virtual Screen Resize</source>
         <translation>Sprememba velikosti navideznega zaslona</translation>
     </message>
@@ -7399,17 +7458,17 @@
         <translation>Preklopi</translation>
     </message>
     <message>
-        <location line="-981"/>
+        <location line="-984"/>
         <source>Toggle menu %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Preklopi meni %1</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Popup menu %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Pojavni meni %1</translation>
     </message>
     <message>
-        <location line="+1012"/>
+        <location line="+1015"/>
         <source>Enable Menu Bar</source>
         <translation>Omogoči menijsko vrstico</translation>
     </message>
@@ -7417,36 +7476,36 @@
 <context>
     <name>UIMessageCenter</name>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-1570"/>
-        <location line="+2419"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-1603"/>
+        <location line="+2452"/>
         <source>VirtualBox - Information</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - podatki</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Question</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - vprašanje</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Warning</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - opozorilo</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Error</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - napaka</translation>
     </message>
     <message>
-        <location line="-2415"/>
-        <location line="+2419"/>
+        <location line="-2448"/>
+        <location line="+2452"/>
         <source>VirtualBox - Critical Error</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - kritična napaka</translation>
@@ -7458,7 +7517,7 @@
         <translation>Tega sporočila ne prikazuj več</translation>
     </message>
     <message>
-        <location line="-2209"/>
+        <location line="-2242"/>
         <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source>
         <translation>Odpiranje <tt>%1</tt> je spodeltelo. Prepričajte se, da lahko vaše namizno okolje pravilno obvlada URL te vrste.</translation>
     </message>
@@ -7478,18 +7537,18 @@
         <translation>Dostop do podsistema USB je spodletel.</translation>
     </message>
     <message>
-        <location line="+541"/>
+        <location line="+550"/>
         <source>Failed to create a new virtual machine.</source>
         <translation>Ustvarjanje novega navideznega računalnika je spodletelo.</translation>
     </message>
     <message>
-        <location line="+359"/>
+        <location line="+383"/>
         <location line="+8"/>
         <source>Failed to start the virtual machine <b>%1</b>.</source>
         <translation>Zagon navideznega računalnika <b>%1</b> je spodletel.</translation>
     </message>
     <message>
-        <location line="-1160"/>
+        <location line="-1193"/>
         <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source>
         <translation>Premor izvajanja navideznega računalnika <b>%1</b> je spodeltel.</translation>
     </message>
@@ -7544,10 +7603,10 @@
         <translation>Odpiranje nove seje za navidezni računalnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
-        <location line="+982"/>
+        <location line="+991"/>
         <location line="+8"/>
         <source>Failed to remove the host network interface <b>%1</b>.</source>
-        <translation>Odstranjevanje omrežnega vmesnika gostitelja <b>%1</b> je spodletelo.</translation>
+        <translation>Odstranjevanje vmesnika gostiteljskega omrežja <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location filename="../src/globals/UIPopupCenter.cpp" line="+518"/>
@@ -7563,7 +7622,7 @@
     </message>
     <message>
         <source>Failed to create the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>.</source>
-        <translation type="vanished">Ustvarjanje souporabe mape <b>%1</b> (ki kaže na <nobr><b>%2</b></nobr>) za navidezni računalnik <b>%3</b> je spodletelo.</translation>
+        <translation type="vanished">Ustvarjanje deljene mape <b>%1</b> (ki kaže na <nobr><b>%2</b></nobr>) za navidezni računalnik <b>%3</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="-68"/>
@@ -7576,7 +7635,7 @@
         <translation><p>Navidezni računalnik je trenutno v stanju <b>Premora</b> in ne more zaznati vnosa miške ali tipkovnice. Če želite nadaljevati z delom v navideznem računalniku, ga morate nadaljevati z izbiro ustreznega dejanja v menijski vrstici.</p></translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+261"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+285"/>
         <source><nobr>Fatal Error</nobr></source>
         <comment>runtime error info</comment>
         <translation><nobr>Usodna napaka</nobr></translation>
@@ -7623,7 +7682,7 @@
     <message>
         <location line="+310"/>
         <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>but the SHA-256 checksum verification failed.</p><p>Please do the download, installation and verification manually.</p></source>
-        <translation><p>Datoteka odtis diska <b>Dodatki za gosta VirtualBox</b> je bila uspešno prejeta s/z <nobr><a href="%1">%1</a></nobr> in krajevno shranjena kot <nobr><b>%2</b>, </nobr>vendar je preverjanje nadzorne vsote SHA-256 spodletelo.</p><p>Prosimo, da prejem, namestitev in preverjanje opravite ročno.</p></translation>
+        <translation><p>Datoteka odtis diska <b>VirtualBox Guest Additions</b> je bila uspešno prejeta s/z <nobr><a href="%1">%1</a></nobr> in krajevno shranjena kot <nobr><b>%2</b>, </nobr>vendar je preverjanje nadzorne vsote SHA-256 spodletelo.</p><p>Prosimo, da prejem, namestitev in preverjanje opravite ročno.</p></translation>
     </message>
     <message>
         <location line="+100"/>
@@ -7664,7 +7723,7 @@
     </message>
     <message>
         <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source>
-        <translation type="vanished"><p>Odstranjevanje souporabe mape <b>%1</b> (ki kaže na <nobr><b>%2</b></nobr>) iz navideznega računalnika <b>%3</b> je spodletelo. </p><p>Zaprite vse programe v gostujočem OS-u, ki morda uporabljajo to mapo in poizkusite znova.</p></translation>
+        <translation type="vanished"><p>Odstranjevanje deljene mape <b>%1</b> (ki kaže na <nobr><b>%2</b></nobr>) iz navideznega računalnika <b>%3</b> je spodletelo. </p><p>Zaprite vse programe v gostujočem OS-u, ki morda uporabljajo to mapo in poizkusite znova.</p></translation>
     </message>
     <message>
         <location line="+185"/>
@@ -7672,7 +7731,7 @@
         <translation>Odpiranje datoteke z dovoljenjem <nobr><b>%1</b></nobr> je spodletelo. Preverite dovoljenja datoteke.</translation>
     </message>
     <message>
-        <location line="-1621"/>
+        <location line="-1654"/>
         <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source>
         <translation>Pošiljanje pritiska gumba za izklop ACPI v navidezni računalnik <b>%1</b> je spodletelo.</translation>
     </message>
@@ -7697,7 +7756,7 @@
         <translation>Zavrzi</translation>
     </message>
     <message>
-        <location line="+1215"/>
+        <location line="+1248"/>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-199"/>
         <source><p>The host key is currently defined as <b>%1</b>.</p></source>
         <comment>additional message box paragraph</comment>
@@ -7710,7 +7769,7 @@
         <translation>Zajemi</translation>
     </message>
     <message>
-        <location line="-1233"/>
+        <location line="-1266"/>
         <source>Check</source>
         <comment>inaccessible media message box</comment>
         <translation>Preveri</translation>
@@ -7722,7 +7781,7 @@
         <translation>Ponovno zaženi</translation>
     </message>
     <message>
-        <location line="+813"/>
+        <location line="+822"/>
         <source>Continue</source>
         <comment>no hard disk attached</comment>
         <translation>Nadaljuj</translation>
@@ -7734,7 +7793,7 @@
         <translation>Pojdi nazaj</translation>
     </message>
     <message>
-        <location line="+456"/>
+        <location line="+480"/>
         <source><p>Could not enter seamless 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></source>
         <translation><p>V tekoči način ni bilo mogoče vstopiti zaradi nezadostnega grafičnega pomnilnika gosta.</p><p>Grafični pomnilnik navideznega računalnika morate nastaviti na najmanj <b>%1</b>.</p></translation>
     </message>
@@ -7759,7 +7818,8 @@
         <translation><p>Navidezni računalnik sporoča, da gostujoči OS podpira <b>vključitev kazalca miške</b>. To pomeni, da vam ni treba <b>zajeti</b> kazalca miške, da ga lahko uporabite v gostujočem OS-u -- vsa dejanja miške, ki jih opravite, ko je kazalec miške v zaslonu navideznega računalnika, se bodo neposredno poslala v gostujoči OS. Če je miška trenutno zajeta, bo samodejno sproščena.</p><p>Ikona miške v vrstici stanja bo videti kot& [...]
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-702"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-734"/>
+        <location line="+8"/>
         <source>Release</source>
         <comment>detach medium</comment>
         <translation>Sprosti</translation>
@@ -7801,17 +7861,17 @@
         <translation>Ustvarjanje pomnilniške naprave trdega diska <b>%1</b> je spodletelo.</nobr></translation>
     </message>
     <message>
-        <location line="-1103"/>
+        <location line="-1112"/>
         <source>Failed to access the disk image file <nobr><b>%1</b></nobr>.</source>
         <translation>Dostop do datoteke odtisa diska <b>%1</b> je spodletel</nobr>.</translation>
     </message>
     <message>
-        <location line="+1938"/>
+        <location line="+1971"/>
         <source>The following files already exist:<br /><br />%1<br /><br />Are you sure you want to replace them? Replacing them will overwrite their contents.</source>
         <translation>Naslednje datoteke že obstajajo:<br /><br />%1.<br /><br />Ali jih res želite nadomestiti? Njihova nadomestitev bo prepisala njihovo vsebino.</translation>
     </message>
     <message>
-        <location line="-2052"/>
+        <location line="-2085"/>
         <source>You are running a prerelease version of VirtualBox. This version is not suitable for production use.</source>
         <translation>Izvajajte predizdajno različico VirtualBoxa. Ta različica ni primerna za proizvodno uporabo.</translation>
     </message>
@@ -7821,7 +7881,7 @@
         <translation>Gosta poizkušate izklopiti z gumbom za izklop ACPI. To trenutno ni mogoče, ker gost ne podpira zaustavtve programske opreme.</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+1475"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1508"/>
         <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</p><p>Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer.</p></source>
         <translation><p>Strojno pospeševanje VT-x/AMD-V je bilo omogočeno, vendar ne deluje. Vaš 64-bitni gost ne bo zaznal 64-bitnega CPE-ja in se ne bo mogel zagnati.</p><p>Prepričajte se, da ste pravilno omogočili VT-x/AMD-V v BIOS-u svojega gostiteljskega računalnika.</p></translation>
     </message>
@@ -7844,14 +7904,14 @@
         <translation>Nadaljuj</translation>
     </message>
     <message>
-        <location line="-1052"/>
+        <location line="-1085"/>
         <location line="+9"/>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-167"/>
         <source>Cancel</source>
         <translation>Prekliči</translation>
     </message>
     <message>
-        <location line="+801"/>
+        <location line="+834"/>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
         <translation>Odpiranje/prepoznavanje namenske naprave <b>%1</b> je spodletelo.</translation>
     </message>
@@ -7872,12 +7932,12 @@
         <translation>Izvoz namenske naprave <b>%1</b> je spodletel.</translation>
     </message>
     <message>
-        <location line="-279"/>
+        <location line="-303"/>
         <source><p>Deleting this host-only network will remove the host-only interface this network is based on. Do you want to remove the (host-only network) interface <nobr><b>%1</b>?</nobr></p><p><b>Note:</b> this interface may be in use by one or more virtual network adapters belonging to one of your VMs. After it is removed, these adapters will no longer be usable until you correct their settings by either choosing a different in [...]
-        <translation><p>Izbris tega omrežja samo za gostitelja bo odstranil vmesnik samo za gostitelja, na katerem je osnovano to omrežje. Ali želite odstraniti vmesnik (omrežja samo za gostitelja) <nobr><b>%1</b>?</nobr></p><p><b>Opomba:</b> ta vmesnik lahko uporablja enega ali več navideznih omrežnih vmesnikov, ki pripadajo enemu od vaših navideznih računalnikov. Ko bo odstranjen, ti vmesniki ne bodo več uporabni, dokler ne popravit [...]
+        <translation><p>Izbris tega gostiteljskega omrežja bo odstranil gostiteljski vmesnik, na katerem je osnovano to omrežje. Ali želite odstraniti vmesnik (gostiteljskega omrežja) <nobr><b>%1</b>?</nobr></p><p><b>Opomba:</b> ta vmesnik lahko uporablja eden ali več navideznih omrežnih vmesnikov, ki pripadajo enemu od vaših navideznih računalnikov. Ko bo odstranjen, ti vmesniki ne bodo več uporabni, dokler ne popravite njihovih nast [...]
     </message>
     <message>
-        <location line="+994"/>
+        <location line="+1018"/>
         <source>A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents.</source>
         <translation>Datoteka z imenom <b>%1</b> že obstaja. Ali jo res želite nadomestiti?<br /><br />Njena nadomestitev bo prepisala njeno vsebino.</translation>
     </message>
@@ -7897,7 +7957,7 @@
         <translation>Odstranjevanje datoteke je spodletelo.</translation>
     </message>
     <message>
-        <location line="-1300"/>
+        <location line="-1333"/>
         <source>You seem to have the USBFS filesystem mounted at /sys/bus/usb/drivers. We strongly recommend that you change this, as it is a severe mis-configuration of your system which could cause USB devices to fail in unexpected ways.</source>
         <translation>Videti je, da imate na /sys/bus/usb/drivers priklopljen datotečni sistem USBFS. Zelo priporočamo, da to spremenite, ker je to resna napačna nastavitev vašega sistema, ki lahko povzroči, da naprave USB spodletijo na nepričakovane načine.</translation>
     </message>
@@ -7931,18 +7991,18 @@
         <translation>Izbris posnetka stanja <b>%1</b> navideznega računalnika <b>%2</b> je spodletel.</translation>
     </message>
     <message>
-        <location line="+479"/>
+        <location line="+488"/>
         <source>Force Unmount</source>
         <translation>Vsili odklop</translation>
     </message>
     <message>
-        <location line="-330"/>
+        <location line="-339"/>
         <source>&Remove</source>
         <comment>medium</comment>
         <translation>&Odstrani</translation>
     </message>
     <message>
-        <location line="+795"/>
+        <location line="+828"/>
         <source><p>VT-x/AMD-V hardware acceleration is not available on your system. Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.</source>
         <translation><p>Strojno pospeševanje VT-x/AMD-V ni na voljo na vašem sistemu. Vaš 64-bitni gost ne bo zaznal 64-bitnega CPE-ja in se ne bo zagnal.</translation>
     </message>
@@ -7962,7 +8022,7 @@
         <translation><p>Zaslona gosta ni bilo mogoče spremeniti v zaslon gostitelja zaradi nezadostnega grafičnega pomnilnika gosta.</p><p>Grafični pomnilnik navideznega računalnika morate nastaviti na najmanj <b>%1</b>.</p><p>Pritisnite <b>Prezri</b>, da vseeno preklopite na zaslon ali <b>Prekliči</b>, da prekličete opravilo.</p></translation>
     </message>
     <message>
-        <location line="-1467"/>
+        <location line="-1500"/>
         <source>Failed to open virtual machine located in %1.</source>
         <translation>Odpiranje navideznega računalnika na %1 je spodletelo.</translation>
     </message>
@@ -7985,12 +8045,12 @@
         <location line="-83"/>
         <location line="+75"/>
         <location line="+317"/>
-        <location line="+454"/>
+        <location line="+463"/>
         <source>Remove</source>
         <translation>Odstrani</translation>
     </message>
     <message>
-        <location line="-400"/>
+        <location line="-409"/>
         <source><p>You are about to add a virtual hard disk to controller <b>%1</b>.</p><p>Would you like to create a new, empty file to hold the disk contents or select an existing one?</p></source>
         <translation><p>Ste pred dodajanjem navideznega trdega diska h krmilniku <b>%1</b>.</p><p>Ali želite ustvarti novo prazno datoteko, ki bo vsebovala vsebino diska, ali izbrati obstoječo?</p></translation>
     </message>
@@ -8000,34 +8060,34 @@
         <translation><p>Ste pred dodajanjem novega disketnega pogona h krmilniku <b>%1</b>.</p><p>Ali želite izbrati navidezno disketo za vstavitev v pogon ali ga za zdaj pustiti praznega?</p></translation>
     </message>
     <message>
-        <location line="+275"/>
+        <location line="+284"/>
         <source>Failed to detach the hard disk (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation>Odklop trdega diska (<nobr><b>%1</b></nobr>) z mesta <i>%2</i> računalnika <b>%3</b>.je spodletel.</translation>
     </message>
     <message>
-        <location line="+784"/>
+        <location line="+808"/>
         <source>Failed to update Guest Additions. The Guest Additions disk image file will be inserted for user installation.</source>
-        <translation>Posodobitev Dodatkov za gosta je spodletela. Datoteka odtisa diska Dodatkov za gosta bo vstavljena za uporabniško namestitev.</translation>
+        <translation>Posodobitev programa Guest Additions je spodletela. Datoteka odtisa diska Guest Additions bo vstavljena za uporabniško namestitev.</translation>
     </message>
     <message>
         <location line="+120"/>
         <source><p>You are about to install a VirtualBox extension pack. Extension packs complement the functionality of VirtualBox and can contain system level software that could be potentially harmful to your system. Please review the description below and only proceed if you have obtained the extension pack from a trusted source.</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1< [...]
-        <translation type="unfinished"><p>Ste pred namestitvijo paketa razširitev VirtualBox. Paketi razširitev dopolnijo delovanje VirtualBoxa in lahko vsebujejo programsko opremo na ravni sistema, ki mu je lahko škodljiva. Preglejte spodnji opis in nadaljujte samo, če ste paket razširitev pridobili iz zaupanja vrednega vira.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%1</td>& [...]
+        <translation><p>Ste pred namestitvijo paketa razširitev VirtualBox. Paketi razširitev dopolnijo delovanje VirtualBoxa in lahko vsebujejo programsko opremo na ravni sistema, ki mu je lahko škodljiva. Preglejte spodnji opis in nadaljujte samo, če ste paket razširitev pridobili iz zaupanja vrednega vira.</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr&g [...]
     </message>
     <message>
         <location line="+33"/>
         <source><p>An older version of the extension pack is already installed, would you like to upgrade? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></td& [...]
-        <translation type="unfinished"><p>Nameščena je že starejša različica paketa razširitev, ali želite nadgraditi?<p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Nova različica:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Trenutna različica:&nbsp;&nbsp;&l [...]
+        <translation><p>Nameščena je že starejša različica paketa razširitev. Ali želite nadgraditi?<p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Nova različica:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Trenutna različica:&nbsp;&nbsp;</b></td&gt [...]
     </message>
     <message>
         <location line="+13"/>
         <source><p>An newer version of the extension pack is already installed, would you like to downgrade? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>New Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Current Version:&nbsp;&nbsp;</b></t [...]
-        <translation type="unfinished"><p>Nameščena je že novejša različica paketa razširitev, ali želite podgraditi?<p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Nova različica:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Trenutna različica:&nbsp;&nbsp;&lt [...]
+        <translation><p>Nameščena je že novejša različica paketa razširitev. Ali želite podgraditi?<p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Nova različica:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Trenutna različica:&nbsp;&nbsp;</b></td> [...]
     </message>
     <message>
         <location line="+13"/>
         <source><p>The extension pack is already installed with the same version, would you like reinstall it? <p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Version:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Description:&nbsp;&nbsp;</b></td>& [...]
-        <translation type="unfinished"><p>Nameščena je že enaka različica paketa razširitev, ali jo želite ponovno namestiti?<p>%1</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Različica:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Opis:&nbsp;&nbsp;</b>< [...]
+        <translation><p>Nameščena je že enaka različica paketa razširitev. Ali jo želite ponovno namestiti?<p>%1</p><p><table cellpadding=0 cellspacing=5><tr><td><b>Ime:&nbsp;&nbsp;</b></td><td>%2</td></tr><tr><td><b>Različica:&nbsp;&nbsp;</b></td><td>%3</td></tr><tr><td><b>Opis:&nbsp;&nbsp;</b></td><td>% [...]
     </message>
     <message>
         <location line="+42"/>
@@ -8047,7 +8107,7 @@
         <translation>&Odstrani</translation>
     </message>
     <message>
-        <location line="-1203"/>
+        <location line="-1236"/>
         <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source>
         <translation>Trenutna pravila posredovanja vrat niso veljavna. Nobena vrednost vrat gostitelja ali gosta ne sme biti nastavljena na nič.</translation>
     </message>
@@ -8062,13 +8122,13 @@
         <translation>Priklop trdega diska (<nobr><b>%1</b></nobr>) na mesto <i>%2</i> računalnika <b>%3</b>.je spodeltel.</translation>
     </message>
     <message>
-        <location line="+164"/>
+        <location line="+173"/>
         <location line="+8"/>
         <source><p>Note that the storage unit of this medium will not be deleted and that it will be possible to use it later again.</p></source>
         <translation><p>Upoštevajte za enota pomnilniške naprave tega nosilca ne bo izbrisana in jo bo mogoče kasneje spet uporabiti.</p></translation>
     </message>
     <message>
-        <location line="+700"/>
+        <location line="+724"/>
         <source><p>The virtual machine window will be now switched to <b>Seamless</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 seamless mode. You can access it by pressing <b>Host+Home</b>.</p></source>
         <translation><p>Okno navideznega računalnika bo sedaj preklopljeno na <b>tekoči</b> način. S pritiskom na <b>%1</b> se lahko kadarkoli vrnete na okenski način.</p><p>Upoštevajte, da je <i>gostiteljska</i> tipka trenutno določena kot <b>%2</b>.</p><p>Upoštevajte, da je v tekočem načinu glavna menijska vrstica skrita . Do nje lahko dostopate s pritiskom na <b>gostiteljsko tipko+Home</b>.</p [...]
     </message>
@@ -8145,12 +8205,12 @@
         <translation><p>Mape računalnika <b>%1</b> v nadrejeni mapi <nobr><b>%2</b> ni mogoče ustvariti.</nobr></p><p>Preverite, ali nadrejena mapa res obstaja in da imate dovoljenja za ustvarjanje mape računalnika.</p></translation>
     </message>
     <message>
-        <location line="-76"/>
+        <location line="-100"/>
         <source>Failed to register the virtual machine <b>%1</b>.</source>
         <translation>Registracija navideznega računalnika <b>%1</b> je spodeltela.</translation>
     </message>
     <message>
-        <location line="-526"/>
+        <location line="-535"/>
         <source><p>The machine settings were changed while you were editing them. You currently have unsaved setting changes.</p><p>Would you like to reload the changed settings or to keep your own changes?</p></source>
         <translation><p>Nastavitve računalnika so se med vašim urejanjem spremenile. Trenutno imate neshranjenne spremembe.</p><p>Ali želite ponovno naložiti spremenjene nastavitve ali obdržati svoje?</p></translation>
     </message>
@@ -8170,13 +8230,13 @@
         <translation>Navidezni računalnik, ki ga spreminjate, se je zagnal. Med izvajanjem računalnika lahko spremenite samo določene nastavitve. Vse druge spremembe bodo izgubljene, če zdaj zaprete to okno.</translation>
     </message>
     <message>
-        <location line="+544"/>
+        <location line="+553"/>
         <location line="+8"/>
         <source>Failed to clone the virtual machine <b>%1</b>.</source>
         <translation>Kloniranje navideznega računlanika <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
-        <location line="-738"/>
+        <location line="-747"/>
         <source>Create a snapshot of the current machine state</source>
         <translation>Ustvari posnetek trenutnega stanja računalnika</translation>
     </message>
@@ -8186,7 +8246,7 @@
         <translation><p>Napaka pri spreminjanju odtisa diska iz <b>%1</b> v <b>%2</b>.</p></translation>
     </message>
     <message>
-        <location line="+1460"/>
+        <location line="+1493"/>
         <source>Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might not be installed on the host computer</source>
         <translation>Storitve posredniškega strežnika USB gostitelja ni bilo mogoče naložiti (VERR_FILE_NOT_FOUND. Storitev morda ni nameščena na gostiteljskem računalniku.</translation>
     </message>
@@ -8211,12 +8271,12 @@
         <translation>Storitve posredniškega strežnika USB gostitelja ni bilo mogoče naložiti.</translation>
     </message>
     <message>
-        <location line="-1694"/>
+        <location line="-1727"/>
         <source>Can't find snapshot named <b>%1</b>.</source>
         <translation>Posnetka stanja z imenom <b>%1</b> ni bilo mogoče najti.</translation>
     </message>
     <message>
-        <location line="+1222"/>
+        <location line="+1255"/>
         <source><p>You have an old version (%1) of the <b><nobr>%2</nobr></b> installed.</p><p>Do you wish to download latest one from the Internet?</p></source>
         <translation><p>Nameščeno imate staro različico (%1) <b><nobr>%2</nobr></b>.</p><p>Ali želite z interneta prejeti najnovejšo?</p></translation>
     </message>
@@ -8248,7 +8308,7 @@
         <translation><p>Nameščeno imate različico %1 <b><nobr>%2</nobr></b>.</p><p>Prejmite in namestite različico %3 tega paketa razširitev od Oracla!</p></translation>
     </message>
     <message>
-        <location line="-1657"/>
+        <location line="-1690"/>
         <source><p>Failed to initialize COM because the VirtualBox global configuration directory <b><nobr>%1</nobr></b> is not accessible. Please check the permissions of this directory and of its parent directory.</p><p>The application will now terminate.</p></source>
         <translation><p>Začenjanje COM-a je spodletelo, ker mapa splošnih nastavitev VirtualBoxa <b><nobr>%1</nobr></b> ni na voljo. Preverite dovoljenja te in njene nadrejene mape.</p><p>Program se bo sedaj končal.</p></translation>
     </message>
@@ -8273,12 +8333,12 @@
         <translation><p>Ste pred odstranitvijo naslednjih navideznih računalnikov s seznama računalnikov: <b>%1</b>.</p><p>Ali želite iz trdega diska izbrisati tudi datoteke, ki vsebujejo navidezni računalnik?</p></translation>
     </message>
     <message>
-        <location line="+1382"/>
+        <location line="+1415"/>
         <source>Do you wish to cancel all current network operations?</source>
         <translation>Ali želite preklicati vsa trenutna omrežna opravila?</translation>
     </message>
     <message>
-        <location line="-1299"/>
+        <location line="-1332"/>
         <source>ACPI Shutdown</source>
         <comment>machine</comment>
         <translation>Zaustavitev ACPI</translation>
@@ -8290,7 +8350,7 @@
         <translation>Izklopi</translation>
     </message>
     <message>
-        <location line="+864"/>
+        <location line="+897"/>
         <source><p>Cannot remove the machine folder <nobr><b>%1</b>.</nobr></p><p>Please check that this folder really exists and that you have permissions to remove it.</p></source>
         <translation><p>Mape računalnika <nobr><b>%1</b> ni mogoče odstraniti.</nobr></p><p>Preverite, ali ta mapa res obstaja in da imate dovoljenja za njeno odstranitev.</p></translation>
     </message>
@@ -8300,7 +8360,7 @@
         <translation><p>Mape računalnika <nobr><b>%1</b> v nadrejeni mapi <nobr><b>%2</b> ni mogoče ustvaritii.</nobr></p><p>Mapa že obstaja in verjetno pripada drugemu računalniku.</p></translation>
     </message>
     <message>
-        <location line="-911"/>
+        <location line="-944"/>
         <source><p>Are you sure you want to discard the saved state of the following virtual machines?</p><p><b>%1</b></p><p>This operation is equivalent to resetting or powering off the machine without doing a proper shutdown of the guest OS.</p></source>
         <translation><p>Ali res želite zavreči shranjeno stanje naslednjih navideznih računalnikov?</p><p><b>%1</b></p><p>To opravilo je enakrovredno ponovnemu zagonu ali izklopu računalnika brez primerne zaustavitve gostujočega OS-a.</p></translation>
     </message>
@@ -8350,7 +8410,7 @@
         <translation>Nastavljanje skupin navideznega računalnika <b>%1</b> je spodeltelo.</translation>
     </message>
     <message>
-        <location line="+1315"/>
+        <location line="+1348"/>
         <source><p>Could not start the machine <b>%1</b> because the following physical network interfaces were not found:</p><p><b>%2</b></p><p>You can either change the machine's network settings or stop the machine.</p></source>
         <translation><p>Računalnika <b>%1</b> ni bilo mogoče zagnati, ker naslednjih fizičnih omrežnih vmesnikov ni bilo najdenih:</p><p><b>%2</b></p><p>Lahko spremenite omrežne nastavitve računalnika ali ga ustavite.</p></translation>
     </message>
@@ -8360,7 +8420,7 @@
         <translation>Spremeni omrežne nastavitve</translation>
     </message>
     <message>
-        <location line="-1520"/>
+        <location line="-1553"/>
         <source><p>Cannot start the VirtualBox Manager due to local restrictions.</p><p>The application will now terminate.</p></source>
         <translation><p>Upravljalnika VirtualBoxa ni mogoče zagnati zaradi krajevnih omejitev.</p><p>Program se bo sedaj zaprl.</p></translation>
     </message>
@@ -8386,7 +8446,7 @@
     </message>
     <message>
         <location line="+234"/>
-        <location line="+1131"/>
+        <location line="+1164"/>
         <location line="+156"/>
         <location line="+21"/>
         <source>Ignore</source>
@@ -8410,10 +8470,10 @@
     </message>
     <message>
         <source>Failed to create the host network interface.</source>
-        <translation type="vanished">Ustvarjanje omrežnega vmesnika gostitelja je spodletelo.</translation>
+        <translation type="vanished">Ustvarjanje vmesnika gostiteljskega omrežja je spodletelo.</translation>
     </message>
     <message>
-        <location line="-970"/>
+        <location line="-1003"/>
         <source>Create &new disk</source>
         <translation>&Ustvari nov disk</translation>
     </message>
@@ -8438,15 +8498,20 @@
         <location line="+117"/>
         <location line="+8"/>
         <source>Failed to move the storage unit of the disk image <b>%1</b> to <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Premikanje pomnilniške enote odtisa diska <b>%1</b> to <b>%2</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+8"/>
         <source><p>Error changing the description of the disk image <b>%1</b>.</p></source>
+        <translation><p>Napaka pri spreminjanju opisa odtisa diska <b>%1</b>.</p></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
-        <location line="+34"/>
+        <location line="+17"/>
         <source><p>Are you sure you want to remove the virtual hard disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
         <translation><p>Ali res želite odstraniti navidezni disk <b><nobr>%1</nobr></b> s seznama znanih datotek odtisa diska?</p></translation>
     </message>
@@ -8469,7 +8534,7 @@
         <location line="+55"/>
         <location line="+8"/>
         <source>Failed to resize the storage unit of the hard disk <b>%1</b> from <b>%2</b> to <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Spreminjanje velikosti pomnilniške enote trdega diska <b>%1</b> iz <b>%2</b> na <b>%3</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+46"/>
@@ -8506,51 +8571,58 @@
     <message>
         <location line="+57"/>
         <source>Failed to acquire host network interfaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pridobivanje vmesnikov gostiteljskga omrežja je spodletelo.</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Unable to find the host network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vmesnika gostiteljskega omrežja <b>%1</b> ni mogoče najti.</translation>
     </message>
     <message>
         <location line="+8"/>
         <location line="+7"/>
         <source>Failed to create a host network interface.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustvarjanje vmesnika gostiteljskega omrežja je spodletelo.</translation>
     </message>
     <message>
         <location line="+23"/>
         <source>Failed to acquire host network interface parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pridobivanje parametra vmesnika gostiteljskega omrežja je spodletelo.</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Failed to save host network interface parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Shranjevanje parametra vmesnika gostiteljskega omrežja je spodletelo.</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Failed to create a DHCP server for the network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ustvarjanje strežnika DHCP za omrežni vmesnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Failed to remove the DHCP server for the network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstranjevanje strežnika DHCP za omrežni vmesnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Failed to acquire DHCP server parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pridobivanje parametra strežnika DHCP je spodletelo.</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>Failed to save DHCP server parameter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Shranjevanje parametra strežnika DHCP je spodletelo.</translation>
+    </message>
+    <message>
+        <location line="+84"/>
+        <location line="+8"/>
+        <location line="+8"/>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation>Ustvarjanje pomnilniške naprave odtisa navideznega diska <b>%1</b> je spodletelo.</nobr></translation>
     </message>
     <message numerus="yes">
-        <location line="+149"/>
+        <location line="+73"/>
         <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>
@@ -8590,7 +8662,7 @@
     <message>
         <location filename="../src/globals/UIMessageCenter.cpp" line="+86"/>
         <source><p>Could not find the <b>VirtualBox Guest Additions</b> disk image file.</p><p>Do you wish to download this disk image file from the Internet?</p></source>
-        <translation><p>Datoteke odtisa diska <b>Dodatkov za gosta VirtualBox</b> ni bilo mogoče najti.</p><p>Ali želite prejeti to datoteko odtisa diska iz interneta?</p></translation>
+        <translation><p>Datoteke odtisa diska <b>VirtualBox Guest Additions</b> ni bilo mogoče najti.</p><p>Ali želite prejeti to datoteko odtisa diska iz interneta?</p></translation>
     </message>
     <message>
         <location line="+3"/>
@@ -8605,12 +8677,12 @@
     <message>
         <location line="-104"/>
         <source><p>Are you sure you want to download the <b>VirtualBox Guest Additions</b> disk image file from <nobr><a href="%1">%1</a></nobr> (size %2 bytes)?</p></source>
-        <translation><p>Ali res želite prejeti datoteko odtisa diska <b>Dodatkov za gosta VirtualBox</b> iz <nobr><a href="%1">%1</a></nobr> (velikost %2 bajtov)?</p></translation>
+        <translation><p>Ali res želite prejeti datoteko odtisa diska <b>VirtualBox Guest Additions</b> iz <nobr><a href="%1">%1</a></nobr> (velikost %2 bajtov)?</p></translation>
     </message>
     <message>
         <location line="+10"/>
         <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> but can't be saved locally as <nobr><b>%2</b>.</nobr></p><p>Please choose another location for that file.</p></source>
-        <translation><p>Datoteka odtisa diska <b>Dodatkov za gosta VirtualBox</b> je bila uspešno prejeta iz <nobr><a href="%1">%1</a></nobr>, vendar je ni mogoče krajevno shraniti kot <nobr><b>%2</b>.</nobr></p><p>Izberite drugo mesto za to datoteko.</p></translation>
+        <translation><p>Datoteka odtisa diska <bVirtualBox Guest Additions</b> je bila uspešno prejeta iz <nobr><a href="%1">%1</a></nobr>, vendar je ni mogoče krajevno shraniti kot <nobr><b>%2</b>.</nobr></p><p>Izberite drugo mesto za to datoteko.</p></translation>
     </message>
     <message>
         <location line="+41"/>
@@ -8649,7 +8721,7 @@
         <translation>Tega sporočila ne prikazuj več</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-1180"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-1213"/>
         <source><p>Do you want to remove the NAT network <nobr><b>%1</b>?</nobr></p><p>If this network is in use by one or more virtual machine network adapters these adapters will no longer be usable until you correct their settings by either choosing a different network name or a different adapter attachment type.</p></source>
         <translation><p>Ali želite odstraniti omrežje NAT <nobr><b>%1</b>?</nobr></p><p>Če to omrežje uporablja en ali več omrežnih vmesnikov navideznega računalnika, ti ne bodo več uporabni, dokler ne popravite njihove nastavitve z izbiro drugega imena omrežja ali druge vrste priklopa vmesnika.</p></translation>
     </message>
@@ -8666,10 +8738,10 @@
     <message>
         <location line="+38"/>
         <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><p>Videti je, da Dodatki za gosta VirtualBox na tem navideznem računalniku niso na voljo in brez njih souporabe map ni mogoče uporabiti. Da jo uporabite v navideznem računalniku, namestite Dodatke za gosta, če še niso nameščeni, ali jih z izbiro <b>Vstavi odtis CD Dodatkov za gosta</b> iz menija <b>Naprave</b> ponovno namestite, če ne delujejo pravilno. Če so  Dodatki za gosta nameščeni, vendar se računalnik še ni popolnoma zagnal, bodo  [...]
+        <translation><p>Videti je, da program VirtualBox Guest Additions na tem navideznem računalniku ni na voljo in brez njega deljenih map ni mogoče uporabljati. Da jih uporabite v navideznem računalniku, namestite program Guest Additions, če še ni nameščen, ali ga z izbiro <b>Vstavi odtis CD Guest Additions</b> iz menija <b>Naprave</b> ponovno namestite, če ne delujejo pravilno. Če je program Guest Additions nameščen, vendar se računalnik še ni popolnoma [...]
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+1125"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1158"/>
         <source>Insert</source>
         <comment>additions</comment>
         <translation>Vstavi</translation>
@@ -8677,10 +8749,10 @@
     <message>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-102"/>
         <source><p>The virtual screen is currently set to a <b>%1&nbsp;bit</b> color mode. For better performance please change this to <b>%2&nbsp;bit</b>. This can usually be done from the <b>Display</b> section of the guest operating system's Control Panel or System Settings.</p></source>
-        <translation><p>Navidezni zaslon je trenutno nastavljen na <b>%1-bitni</b> barvni način. Za boljšo zmogljivost to spremenite na <b>%2-bitnega</b>. To običajno lahko storite iz odseka<b>Zaslon</b> Nadzorne plošče gostujočega operacijskega sistema ali sistemskih nastavitev.</p></translation>
+        <translation><p>Navidezni zaslon je trenutno nastavljen na <b>%1-bitni</b> barvni način. Za boljšo zmogljivost ga spremenite na <b>%2-bitnega</b>. To običajno lahko storite iz odseka<b>Zaslon</b> Nadzorne plošče gostujočega operacijskega sistema ali sistemskih nastavitev.</p></translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-963"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-996"/>
         <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
         <translation>Trenutna pravila posredovanja vrat niso veljavna. Imena pravil morajo biti edinstvena.</translation>
     </message>
@@ -8707,22 +8779,22 @@
     <message>
         <location line="+293"/>
         <source><p>You are about to start all of the following virtual machines:</p><p><b>%1</b></p><p>This could take some time and consume a lot of host system resources. Do you wish to proceed?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Ste pred zagonom vseh naslednjih navideznih računalnikov:</p><p><b>%1</b></p><p>To lahko traja nekaj časa in lahko porabi veliko sistemskih virov gostitelja. Ali želite nadaljevati?</p></translation>
     </message>
     <message>
         <location line="+115"/>
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Spreminjanje posnetka stanja <b>%1</b> navideznega računalnika <b>%2</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+20"/>
         <source>Can't find snapshot with ID=<b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Posnetka stanja z ID-jem <b>%1</b> ni mogoče najti.</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>Can't acquire snapshot attributes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Lastnosti posnetka stanja ni mogoče pridobiti.</translation>
     </message>
     <message>
         <location line="+7"/>
@@ -8737,7 +8809,7 @@
     <message>
         <location line="+22"/>
         <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><p>Ali res želite izbrisati optični pogon?</p><p>Brez njega ne boste mogli vstavljati optičnih diskov ali odtisov ISO, ali namestiti Dodatkov za gosta!</p></translation>
+        <translation><p>Ali res želite izbrisati optični pogon?</p><p>Brez njega ne boste mogli vstavljati optičnih diskov ali odtisov ISO, ali namestiti programa Guest Additions!</p></translation>
     </message>
     <message>
         <location line="+24"/>
@@ -8750,7 +8822,7 @@
         <translation>Priklop disketnega pogona (<nobr><b>%1</b></nobr>) na mesto <i>%2</i> računalnika <b>%3</b> je spodletel.</translation>
     </message>
     <message>
-        <location line="+240"/>
+        <location line="+249"/>
         <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>Odklop optičnega pogona (<nobr><b>%1</b></nobr>) z mesta <i>%2</i> računalnika <b>%3</b> je spodletel.</translation>
     </message>
@@ -8762,36 +8834,36 @@
     <message>
         <location filename="../src/globals/UIPopupCenter.cpp" line="+114"/>
         <source>Failed to enable the audio adapter output for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogočanje izhoda zvočnega vmesnika za navidezni računalnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Failed to disable the audio adapter output for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Onemogočanje izhoda zvočnega vmesnika za navidezni računalnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Failed to enable the audio adapter input for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogočanje vhoda zvočnega vmesnika za navidezni računalnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Failed to disable the audio adapter input for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Onemogočanje vhoda zvočnega vmesnika za navidezni računalnik <b>%1</b> je spodletelo.</translation>
     </message>
     <message>
         <location line="+7"/>
         <source><p>Could not insert the <b>%1</b> disk image file into the virtual machine <b>%2</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>Odtisa diska <b>%1</b> ni bilo mogoče vstaviti v navidezni računalnik <b>%2</b>, ker le-ta nima optičnih pogonov. Dodajte pogon z uporabo strani pomnilniških naprav okna nastavitev navideznega računalnika.</p></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="vanished"><p>Datoteke odtisa diska<b>Dodatkov za gosta VirtualBox</b> ni bilo mogoče vstaviti v računalnik <b>%1</b>, ker nima optičnih pogonov. Dodajte pogon z uporabo strani pomnilnških naprav okna nastavitev navideznega računalnika.</p></translation>
+        <translation type="vanished"><p>Datoteke odtisa diska<b>VirtualBox Guest Additions</b> ni bilo mogoče vstaviti v računalnik <b>%1</b>, ker nima optičnih pogonov. Dodajte pogon z uporabo strani pomnilnških naprav okna nastavitev navideznega računalnika.</p></translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+749"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+773"/>
         <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><p>Datoteka odtisa diska <b>Dodatkov za gosta VirtualBox</b> je bila uspešno prejeta iz <nobr><a href="%1">%1</a></nobr>in krajevno shranjena kot <nobr><b>%2</b>.</nobr></p><p>Ali želite registrirati to datoteko odtisa diska in jo vstaviti v navidezni optični pogon?</p></translation>
+        <translation><p>Datoteka odtisa diska <b>VirtualBox Guest Additions</b> je bila uspešno prejeta iz <nobr><a href="%1">%1</a></nobr>in krajevno shranjena kot <nobr><b>%2</b>.</nobr></p><p>Ali želite registrirati to datoteko odtisa diska in jo vstaviti v navidezni optični pogon?</p></translation>
     </message>
     <message>
         <location line="-380"/>
@@ -8842,7 +8914,7 @@
         <translation>Odklop kabla omrežnega vmesnika navideznega računalnika <b>%1</b> je spodletela.</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-1710"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-1743"/>
         <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><p>Ena ali več datotek odtisa diska trenutno ni na voljo. Posledično ne boste mogli upravljati z navideznimi računalniki, ki uporabljajo te datoteke, dokler spet ne postanejo dostopne.</p><p>Pritisnite <b>Preveri</b>, da odprete Upravljalnika navideznih nosilcev in si ogledate, katere datoteke niso dostopne ali <b>Prezri</b>, da prezrete to sporočilo.</p></translation>
     </message>
@@ -8857,12 +8929,12 @@
         <translation><p>Izbris posnetka stanja %1 bo začasno potreboval več prostora.V najslabšem primeru se bo velikost odtisa %2 povečala za %3, vendar je v tem datotečnem sistemu na voljo samo %4.</p></p>Pomanjkanje prostora med opravilom združevanja lahko povzroči okvaro odtisa in nastavitev navideznega računalnika, kar pomeni izgubo navideznega računalnka in njegovih podatkov.</p><p>Posnetek stanja lahko izbrišete na lastno odgovornost.</p></translation>
     </message>
     <message>
-        <location line="+347"/>
+        <location line="+348"/>
         <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><p>Ali res želite sprostiti datoteko odtisa diska <nobr><b>%1</b></nobr>?</p><p>To jo bo odklopilo iz naslednjih navideznih računalnikov: <b>%2</b>.</p></translation>
     </message>
     <message>
-        <location line="+63"/>
+        <location line="+71"/>
         <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><p>Ali želite izbrisati enoto pomnilniške naprave <nobr><b>%1</b></nobr>?</p><p>Če izberete <b>Izbriši</b>, potem bo enota trajno izbrisana. Tega opravila <b>ni mogoče razveljaviti</b>.</p><p>Če izberete <b>Obdrži</b>, potem bo trdi disk odstranjen samo s seznama znanih trdih diskov, vendar bo enota pomnilniške naprave ostala nedotaknjena, kar omogoča kasnejše ponovno dodajanje  [...]
     </message>
@@ -8883,7 +8955,7 @@
         <translation>Ste pred ustvarjanjem novega navideznega računalnika brez trdega diska. Na računalniku ne boste mogli namestiti operacijskega sistema, dokler ne dodate trdega diska. Medtem boste računalnik lahko zagnali samo z uporabo navideznega optičnega diska ali omrežja.</translation>
     </message>
     <message>
-        <location line="+412"/>
+        <location line="+436"/>
         <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><p>Okno navideznega računalnika bo sedaj preklopljeno na <b>celozaslonski</b> način. S pritiskom na <b>%1</b> se lahko kadarkoli vrnete na okenski način.</p><p>Upoštevajte, da je <i>gostiteljska</i> tipka trenutno določena kot <b>%2</b>.</p><p>Upoštevajte, da je v celozaslonskem načinu glavna menijska vrstic skrita. Do nje lahko dostopate s pritiskom na <b>gostiteljsko tipko+Home</ [...]
     </message>
@@ -8893,7 +8965,7 @@
         <translation><p>Zaslona gosta ni bilo mogoče preklopiti na celozaslonski način zaradi nezadostnega grafičnega pomnilnika gosta.</p><p>Grafični pomnilnik navideznega računalnika morate nastaviti na najmanj <b>%1</b>.</p><p>Pritisnite <b>Prezri</b>, da vseeno preklopite na celozaslonski način ali <b>Prekliči</b>, da prekličete opravilo.</p></translation>
     </message>
     <message>
-        <location line="-1453"/>
+        <location line="-1486"/>
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>Šifrirno geslo za <nobr>ID = '%1'</nobr> je neveljavno.</translation>
     </message>
@@ -8916,7 +8988,7 @@
 <context>
     <name>UIMiniToolBar</name>
     <message>
-        <location filename="../src/widgets/UIMiniToolBar.cpp" line="+296"/>
+        <location filename="../src/widgets/UIMiniToolBar.cpp" line="+297"/>
         <source>Always show the toolbar</source>
         <translation>Vedno prikaži orodno vrstico</translation>
     </message>
@@ -9012,7 +9084,7 @@
         <translation>Prekliči vsa dejavna omrežna opravila</translation>
     </message>
     <message>
-        <location filename="../src/net/UINetworkRequestWidget.cpp" line="+187"/>
+        <location filename="../src/net/UINetworkRequestWidget.cpp" line="+191"/>
         <source>Network Operation</source>
         <translation>Omrežno opravilo</translation>
     </message>
@@ -9059,7 +9131,7 @@
 <context>
     <name>UINetworkReplyPrivate</name>
     <message>
-        <location filename="../src/net/UINetworkReply.cpp" line="+956"/>
+        <location filename="../src/net/UINetworkReply.cpp" line="+957"/>
         <source>Host not found</source>
         <translation>Gostitelj ni bil najden</translation>
     </message>
@@ -9089,13 +9161,13 @@
         <translation>Neznan vzrok</translation>
     </message>
     <message>
-        <location line="-35"/>
+        <location line="-36"/>
         <source>%1: %2</source>
         <comment>Context description: Error description</comment>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location line="+25"/>
+        <location line="+26"/>
         <source>Unable to initialize HTTP library</source>
         <translation>Knjižnice HTTP ni mogoče začeti</translation>
     </message>
@@ -9123,7 +9195,7 @@
 <context>
     <name>UINetworkReplyPrivateThread</name>
     <message>
-        <location line="-569"/>
+        <location line="-570"/>
         <source>During proxy configuration</source>
         <translation>Med nastavitvijo posredniškega strežnika</translation>
     </message>
@@ -9153,18 +9225,18 @@
     <message>
         <location line="+177"/>
         <source><p><b>Details:</b></source>
-        <translation type="unfinished"></translation>
+        <translation><p><b>Podrobnosti:</b></translation>
     </message>
     <message>
         <location line="+5"/>
         <source><p><b>Details:</b> (%1 of %2)</source>
-        <translation type="unfinished"></translation>
+        <translation><p><b>Podrobnosti (%1 od %2):</b></translation>
     </message>
 </context>
 <context>
     <name>UIPortForwardingTable</name>
     <message>
-        <location filename="../src/widgets/UIPortForwardingTable.cpp" line="+661"/>
+        <location filename="../src/widgets/UIPortForwardingTable.cpp" line="+662"/>
         <source>Name</source>
         <translation>Ime</translation>
     </message>
@@ -9267,19 +9339,19 @@
 <context>
     <name>UIScreenshotViewer</name>
     <message>
-        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="-1414"/>
+        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="-1402"/>
         <source>Screenshot of %1 (%2)</source>
-        <translation type="unfinished">Posnetek stanja %1 (%2)</translation>
+        <translation>Posnetek stanja %1 (%2)</translation>
     </message>
     <message>
         <location line="+141"/>
         <source>Click to view non-scaled screenshot.</source>
-        <translation type="unfinished">Kliknite za ogled neumerjenega posnetka stanja.</translation>
+        <translation>Kliknite za ogled neumerjenega posnetka stanja.</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Click to view scaled screenshot.</source>
-        <translation type="unfinished">Kliknite za ogled umerjenega posnetka stanja.</translation>
+        <translation>Kliknite za ogled umerjenega posnetka stanja.</translation>
     </message>
 </context>
 <context>
@@ -9292,7 +9364,7 @@
     <message>
         <location line="+12"/>
         <source>Show Toolbar Text</source>
-        <translation type="unfinished"></translation>
+        <translation>Prikaži besedilo orodnih vrstic</translation>
     </message>
     <message>
         <location line="+12"/>
@@ -9325,7 +9397,7 @@
     <message>
         <location filename="../src/runtime/UISession.cpp" line="+551"/>
         <source>Updating Guest Additions</source>
-        <translation>Posodabljanje Dodatkov za gosta</translation>
+        <translation>Posodabljanje programa Guest Additions</translation>
     </message>
 </context>
 <context>
@@ -9334,7 +9406,7 @@
         <location filename="../src/runtime/UIIndicatorsPool.cpp" line="-969"/>
         <source>%1 status-bar indicator</source>
         <comment>like 'hard-disk status-bar indicator'</comment>
-        <translation type="unfinished"></translation>
+        <translation>Kazalnik vrstice stanja za %1</translation>
     </message>
 </context>
 <context>
@@ -9405,7 +9477,7 @@
     <message>
         <location line="-27"/>
         <source>Allows to navigate through Global Property categories</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogoča krmarjenje po kategorijah splošne lastnosti</translation>
     </message>
     <message>
         <location line="+17"/>
@@ -9472,7 +9544,7 @@
     <message>
         <location line="+3"/>
         <source>Shared Folders</source>
-        <translation>Souporaba map</translation>
+        <translation>Deljene mape</translation>
     </message>
     <message>
         <location line="+30"/>
@@ -9487,7 +9559,7 @@
     <message>
         <location line="-42"/>
         <source>Allows to navigate through VM Settings categories</source>
-        <translation type="unfinished"></translation>
+        <translation>Omogoča krmarjenje po kategorijah nastavitev navideznega računalnika</translation>
     </message>
     <message>
         <location line="+59"/>
@@ -9511,99 +9583,99 @@
 <context>
     <name>UISnapshotDetailsWidget</name>
     <message>
-        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+84"/>
+        <location filename="../src/selector/UISnapshotDetailsWidget.cpp" line="+74"/>
         <source>&Attributes</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lastnosti</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Information</source>
-        <translation type="unfinished"></translation>
+        <translation>&Podatki</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Name:</source>
-        <translation type="unfinished">I&me:</translation>
+        <translation>I&me:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Description:</source>
-        <translation type="unfinished">&Opis:</translation>
+        <translation>&Opis:</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the snapshot name.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje ime posnetka stanja.</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Holds the snapshot description.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje opis posnetka stanja.</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>Enter a name for the new snapshot...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vnesite ime novega posnetka stanja …</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Enter a name for this snapshot...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vnesite ime tega posnetka stanja …</translation>
     </message>
     <message>
         <location line="+59"/>
         <source>Apply</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi</translation>
     </message>
     <message>
         <location line="-16"/>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi</translation>
     </message>
     <message>
         <location line="+17"/>
         <source>Apply changes in current snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe podrobnosti trenutnega posnetka stanja</translation>
     </message>
     <message>
         <location line="-16"/>
         <source>Reset changes in current snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe podrobnosti trenutnega posnetka stanja</translation>
     </message>
     <message>
         <location line="+18"/>
         <source>Apply Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Uveljavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="-16"/>
         <source>Reset Changes (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ponastavi spremembe (%1)</translation>
     </message>
     <message>
         <location line="-37"/>
         <source>Click to enlarge the screenshot.</source>
-        <translation type="unfinished">Kliknite za povečavo posnetka stanja.</translation>
+        <translation>Kliknite za povečavo posnetka stanja.</translation>
     </message>
     <message>
         <location line="+42"/>
         <source>Take</source>
-        <translation type="unfinished"></translation>
+        <translation>Zajemi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Take snapshot on the basis of current machine state</source>
-        <translation type="unfinished"></translation>
+        <translation>Zajemi posnetek na osnovi stanja trenutnega računalnika</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Take Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zajemi posnetek stanja (%1)</translation>
     </message>
     <message>
-        <location line="+455"/>
+        <location line="+453"/>
         <source>Snapshot name is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Ime posnetka stanja je prazno</translation>
     </message>
 </context>
 <context>
@@ -9612,23 +9684,23 @@
         <location filename="../src/selector/UISnapshotPane.cpp" line="+278"/>
         <source>Current State (changed)</source>
         <comment>Current State (Modified)</comment>
-        <translation type="unfinished">Trenutno stanje (spremenjeno)</translation>
+        <translation>Trenutno stanje (spremenjeno)</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Current State</source>
         <comment>Current State (Unmodified)</comment>
-        <translation type="unfinished">Trenutno stanje</translation>
+        <translation>Trenutno stanje</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>The current state differs from the state stored in the current snapshot</source>
-        <translation type="unfinished">Trenutno stanje se razlikuje od stanja shranjenega v trenutnem posnetku</translation>
+        <translation>Trenutno stanje se razlikuje od stanja, shranjenega v trenutnem posnetku</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>The current state is identical to the state stored in the current snapshot</source>
-        <translation type="unfinished">Trenutno stanje je enako stanju, shranjenemu v trenutnem posnetku</translation>
+        <translation>Trenutno stanje je enako stanju, shranjenemu v trenutnem posnetku</translation>
     </message>
     <message>
         <location line="+64"/>
@@ -9637,146 +9709,146 @@
         <location line="+6"/>
         <source>%1 (%2 ago)</source>
         <comment>date time (how long ago)</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 (pred %2)</translation>
     </message>
     <message>
         <location line="+29"/>
         <source>%1 since %2</source>
         <comment>Current State (time or date + time)</comment>
-        <translation type="unfinished">%1 od %2</translation>
+        <translation>%1 od %2</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>current</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>trenutno</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>online</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>povezan</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>offline</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>nepovezan</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>Taken at %1</source>
         <comment>Snapshot (time)</comment>
-        <translation type="unfinished">Zajeto ob %1</translation>
+        <translation>Zajeto ob %1</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Taken on %1</source>
         <comment>Snapshot (date + time)</comment>
-        <translation type="unfinished">Zajeto %1</translation>
+        <translation>Zajeto %1</translation>
     </message>
     <message>
         <location line="+98"/>
         <source>Contains the snapshot tree of the current virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Vsebuje drevo posnetkov stanja trenutnega navideznega računalnika</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>&Take...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Zajemi …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Iz&briši</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Restore</source>
-        <translation type="unfinished"></translation>
+        <translation>&Obnovi</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Properties...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lastnosti …</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>&Clone...</source>
-        <translation type="unfinished">&Kloniraj …</translation>
+        <translation>&Kloniraj …</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Take Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Zajemi posnetek stanja (%1)</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Delete Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Izbriši posnetek stanja (%1)</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Restore Snapshot (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Obnovi posnetek stanja (%1)</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Open Snapshot Properties (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri lastnosti posnetka stanja (%1)</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Clone Virtual Machine (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Kloniraj navidezni računalnik (%1)</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Take a snapshot of the current virtual machine state</source>
-        <translation type="unfinished">Zajemi posnetek stanja trenutnega navideznega računalnika</translation>
+        <translation>Zajemi posnetek stanja trenutnega navideznega računalnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Delete selected snapshot of the virtual machine</source>
-        <translation type="unfinished">Izbriši izban posnetek stanja navideznega računalnika</translation>
+        <translation>Izbriši izban posnetek stanja navideznega računalnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Restore selected snapshot of the virtual machine</source>
-        <translation type="unfinished">Obnovi izbran posnetek stanja navideznega računalnika</translation>
+        <translation>Obnovi izbran posnetek stanja navideznega računalnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Open pane with the selected snapshot properties</source>
-        <translation type="unfinished"></translation>
+        <translation>Odpri podokno z lastnostmi izbranega posnetka stanja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished">Kloniraj izbran navidezni računalnik</translation>
+        <translation>Kloniraj izbran navidezni računalnik</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>Name</source>
         <comment>snapshot</comment>
-        <translation type="unfinished">Ime</translation>
+        <translation>Ime</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Taken</source>
         <comment>snapshot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zajeto</translation>
     </message>
     <message>
         <location line="+1026"/>
         <source>Snapshot %1</source>
-        <translation type="unfinished">Posnetek stanja %1</translation>
+        <translation>Posnetek stanja %1</translation>
     </message>
 </context>
 <context>
     <name>UIStatusBarEditorWidget</name>
     <message>
-        <location filename="../src/runtime/UIStatusBarEditorWindow.cpp" line="+604"/>
+        <location filename="../src/runtime/UIStatusBarEditorWindow.cpp" line="+607"/>
         <source>Close</source>
         <translation>Zapri</translation>
     </message>
@@ -9786,7 +9858,7 @@
         <translation>Omogoči vrstico stanja</translation>
     </message>
     <message>
-        <location line="-370"/>
+        <location line="-373"/>
         <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
         <translation><nobr><b>&Kliknite</b>, da preklopite prisotnost kazalnika.</nobr><br><nobr><b>Povlecite in spustite</b>, da spremenite položaj kazalnika.</nobr></translation>
     </message>
@@ -9796,22 +9868,22 @@
     <message>
         <location filename="../src/UITakeSnapshotDialog.cpp" line="+82"/>
         <source>Take Snapshot of Virtual Machine</source>
-        <translation type="unfinished">Zajemi ponetek stanja navideznega računalnika</translation>
+        <translation>Zajemi ponetek stanja navideznega računalnika</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Snapshot &Name</source>
-        <translation type="unfinished">I&me posnetka stanja</translation>
+        <translation>I&me posnetka stanja</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Snapshot &Description</source>
-        <translation type="unfinished">&Opis posnetka stanja</translation>
+        <translation>&Opis posnetka stanja</translation>
     </message>
     <message numerus="yes">
         <location line="+1"/>
         <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">
+        <translation>
             <numerusform>Opozorilo: zajemate posnetek stanja računalnika v izvajanju, ki ima nase priklopljen %n nespremenljiv odtis. Dokler delate iz tega posnetka stanja, nespremenljivi odtisi ne bodo ponastavljeni, da se prepreči izguba podatkov.</numerusform>
             <numerusform>Opozorilo: zajemate posnetek stanja računalnika v izvajanju, ki ima nase priklopljena %n nespremenljiva odtisa. Dokler delate iz tega posnetka stanja, nespremenljivi odtisi ne bodo ponastavljeni, da se prepreči izguba podatkov.</numerusform>
             <numerusform>Opozorilo: zajemate posnetek stanja računalnika v izvajanju, ki ima nase priklopljene %n nespremenljive odtise. Dokler delate iz tega posnetka stanja, nespremenljivi odtisi ne bodo ponastavljeni, da se prepreči izguba podatkov.</numerusform>
@@ -9821,7 +9893,7 @@
     <message>
         <location filename="../src/runtime/UIMachineLogic.cpp" line="-246"/>
         <source>Snapshot %1</source>
-        <translation type="unfinished">Posnetek stanja %1</translation>
+        <translation>Posnetek stanja %1</translation>
     </message>
 </context>
 <context>
@@ -9857,17 +9929,17 @@
     <message>
         <location filename="../src/selector/UIToolsPaneGlobal.cpp" line="+181"/>
         <source><h3>Welcome to VirtualBox!</h3><p>This window represents a set of global tools which are currently opened (or can be opened). They are not related to any particular machine but to the complete VM collection. For a list of currently available tools check the corresponding menu at the right side of the main tool bar located at the top of the window. This list will be extended with new tools in future releases.</p><p>You can press the <b>% [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>Dobrodošli v VirtualBoxu!</h3><p>To okno predstavlja niz splošnih orodij, ki so trenutno odprta (ali jih je mogoče odpreti). Niso povezana z nobenim določenim navideznm računalnikom, ampak s celotno zbirko navideznih računalnikov. Za seznam trenutno razpoložljivih orodij si oglejte pripadajoči meni na desni strani glavne orodne vrstice, ki se nahaja na vrhu okna. V prihodnjih izdajah bo seznam dopolnjen z novmi orodji. </p><p>Za tako [...]
     </message>
     <message>
         <location line="+19"/>
         <source>Tool to observe virtual storage media. Reflects all the chains of <u>virtual disks</u> you have registered (per each storage type) within your virtual machines and allows for media operations like <u>copy</u>, <u>remove</u>, <u>release</u> (detach it from VMs where it is currently attached to) and observe their properties. Allows to <u>edit</u> medium attributes like <u>type</u>, <u>location/nam [...]
-        <translation type="unfinished"></translation>
+        <translation>Orodje za nadzor navideznih nosilcev. Odraža vse verige <u>navideznih diskov</u>, ki ste jih registrirali (za vsako vrsto pomnilniške naprave) v svojih navideznih računalnikih in omogoča opravila, kot so <u>kopiranje</u>, <u>odstranjevanje</u>, <u>sproščanje</u> (odklapljanje iz navideznih računalnikov, na katere so trenutno priklopljeni) in ogled njihovih lastnosti. Omogoča <u>urejanje</u> lastnosti nosilca [...]
     </message>
     <message>
         <location line="+10"/>
         <source>Tool to control host-only network interfaces. Reflects <u>host-only networks</u>, their DHCP servers and allows for operations on the networks like possibility to <u>create</u>, <u>remove</u> and observe their properties. Allows to <u>edit</u> various <u>attributes</u> for host-only interface and corresponding DHCP server.</source>
-        <translation type="unfinished"></translation>
+        <translation>Orodje za nadzor vmsnikov gostiteljskega omrežja. Odraža <u>gostiteljska omrežja</u>, njihove strežnike DHCP in omogoča omrežna opravila, kot so možnost <u>ustvarjanja</u>, <u>odstranjevanja</u> in ogled njihovih lastnosti. Omogoča <u>urejanje</u> raznih <u>lastnosti</u> za gostiteljski vmesnik in pripadajoči strežnik DHCP.</translation>
     </message>
 </context>
 <context>
@@ -9875,22 +9947,22 @@
     <message>
         <location filename="../src/selector/UIToolsPaneMachine.cpp" line="+217"/>
         <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window lists all virtual machines and virtual machine groups on your computer. The list is empty now because you haven't created any virtual machines yet.</p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or v [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>Dobrodošli v VirtualBoxu!</h3><p>Levi del tega okna je seznam vseh navideznih računalnikov in skupin navideznih računalnikov na vašem računalniku. Seznam je sedaj prazen, ker še niste ustvarili nobenega navideznega računalnika.</p><p>Da ustvarite nov navidezni računalnik, kliknite gumb <b>Nov</b> v glavni orodni vrstici na vrhu okna.</p><p>Za takojšnjo pomoč lahko pritisnete tipko <b>%1</b> ali za  [...]
     </message>
     <message>
         <location line="+17"/>
         <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window lists all virtual machines and virtual machine groups on your computer.</p><p>The right part of this window represents a set of tools which are currently opened (or can be opened) for the currently chosen machine. For a list of currently available tools check the corresponding menu at the right side of the main tool bar located at the top of the window. This list will be extended  [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>Dobrodošli v VirtualBoxu!</h3><p>Levi del tega okna je seznam vseh navideznih računalnikov in skupin navideznih računalnikov na vašem računalniku..</p><p>Desni del okna predstavlja niz splošnih orodij, ki so trenutno odprta (ali jih je mogoče odpreti) za trenutno izbrani računalnik. Za seznam trenutno razpoložljivih orodij si oglejte pripadajoči meni na desni strani glavne orodne vrstice, ki se nahaja na vrhu okna. V prihodnjih izdaj [...]
     </message>
     <message>
         <location line="+23"/>
         <source>Tool to observe virtual machine (VM) details. Reflects groups of <u>properties</u> for the currently chosen VM and allows basic operations on certain properties (like the machine storage devices).</source>
-        <translation type="unfinished"></translation>
+        <translation>Orodje za nadzor podrobnosti navideznega računalnika. Odraža skupine <u>lastnosti</u> trenutno izbranega navideznega računalnika in omogoča opravila na določenh lastnostih (kot so pomnilniške naprave računalnika).</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>Tool to control virtual machine (VM) snapshots. Reflects <u>snapshots</u> created for the currently selected VM and allows snapshot operations like <u>create</u>, <u>remove</u>, <u>restore</u> (make current) and observe their properties. Allows to <u>edit</u> snapshot attributes like <u>name</u> and <u>description</u>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Orodje za nadzor posnetkov stanja navideznega računalnika. Odraža <u>posnetke stanja</u>, ki so bili ustvarjeni za trenutno izbrani navidezni računalnik in omogoča opravila posnetkov stanja, kot so <u>ustvarjanje</u>, <u>odstranjvanje</u>, <u>obnavljanje</u> (naredi trenuten) in ogled njihovih lastnosti. Omogoča <u>urejanje</u> raznih lastnosti posentka stanja, kot so <u>ime</u> in <u>opis& [...]
     </message>
 </context>
 <context>
@@ -9899,13 +9971,13 @@
         <location filename="../src/settings/machine/UIMachineSettingsUSB.cpp" line="-274"/>
         <source>%1, Active</source>
         <comment>col.1 text, col.1 state</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, dejaven</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>%1</source>
         <comment>col.1 text</comment>
-        <translation type="unfinished">%1% {1?}</translation>
+        <translation>%1</translation>
     </message>
 </context>
 <context>
@@ -10103,7 +10175,7 @@
     </message>
     <message>
         <source>Guest Additions</source>
-        <translation type="vanished">Dodatki za gosta</translation>
+        <translation type="vanished">Guest Additions</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
@@ -10317,13 +10389,38 @@
 <context>
     <name>UIWizardCloneVD</name>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVD.cpp" line="+120"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVD.cpp" line="+117"/>
+        <source>Copy Virtual Disk Image</source>
+        <translation>Kopiraj odtis navideznega diska</translation>
+    </message>
+    <message>
+        <location line="+1"/>
         <source>Copy</source>
         <translation>Kopiraj</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp" line="+140"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+259"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp" line="+136"/>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>Izberite, ali naj se nova datoteka odtisa navideznega diska med uporabo povečuje (dinamično dodeljeno) ali naj se ustvari v največji velikosti (nespremenljiva velikost).</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p><b>Dinamično dodeljen</b> datoteka odtisa diska bo uporabila samo toliko prostora na vašem trdem disku, kolikor ga zasede (do največ <b>nespremenljive velikosti</b>), vendar se ne bo samodejno skrčila, ko bo prostor sproščen.</p></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p>Ustvarjanje datoteke odtisa diska <b>nespremenljive velikosti</b> lahko na nekaterih sistemih traja dlje, vendar je pogosto hitrejša za uporabo.</p></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>Lahko izberete tudi <b>razdelitev</b> datoteke odtisa diska v več datotek z do 2 GB na vsako. To je v glavnem uporabno, če želite shraniti navidezni računalnik na odstranljive naprave USB ali stare sisteme, ki ne podpirajo zelo velikih datotek.</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+265"/>
         <source>&Dynamically allocated</source>
         <translation>&Dinamično dodeljeno</translation>
     </message>
@@ -10340,104 +10437,152 @@
         <translation>&Razdeli v datoteke z manj kot 2 GB</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp" line="+221"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-71"/>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopija</translation>
+        <translation type="vanished">%1_kopija</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVD.cpp" line="-1"/>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Kopiraj navidezni trdi disk</translation>
+        <translation type="vanished">Kopiraj navidezni trdi disk</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp" line="+115"/>
         <source>Hard disk to copy</source>
-        <translation>Trdi disk za kopiranje</translation>
+        <translation type="vanished">Trdi disk za kopiranje</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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><p>Izberite datoteko navideznega trdega diska, ki bi jo radi kopirali, če še ni izbrana. Lahko izberete eno s seznama ali uporabite ikono mape poleg seznama, da eno izberete.</p></translation>
+        <translation type="vanished"><p>Izberite datoteko navideznega trdega diska, ki bi jo radi kopirali, če še ni izbrana. Lahko izberete eno s seznama ali uporabite ikono mape poleg seznama, da eno izberete.</p></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+58"/>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Izberi datoteko navideznega trdega diska za kopiranje …</translation>
+        <translation type="vanished">Izberi datoteko navideznega trdega diska za kopiranje …</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp" line="+154"/>
         <source>Hard disk file type</source>
-        <translation>Vrsta datoteke trdega diska</translation>
+        <translation type="vanished">Vrsta datoteke trdega diska</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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>Izberite vrsto datoteke, ki bi jo radi uporabili za nov navidezni trdi disk. Če je ne boste uporabljali z drugo programsko opremo navideznosti, lahko pustite nastavitev nespremenjeno.</translation>
+        <translation type="vanished">Izberite vrsto datoteke, ki bi jo radi uporabili za nov navidezni trdi disk. Če je ne boste uporabljali z drugo programsko opremo navideznosti, lahko pustite nastavitev nespremenjeno.</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp" line="-16"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+10"/>
+        <location line="-16"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-3"/>
         <source>Storage on physical hard disk</source>
         <translation>Pomnilniška naprava na fizičnem trdem disku</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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>Izberite, ali naj se nova datoteka navideznega trdega diska med uporabo povečuje (dinamično dodeljeno) ali naj se ustvari v največji velikosti (nespremenljiva velikost).</translation>
+        <translation type="vanished">Izberite, ali naj se nova datoteka navideznega trdega diska med uporabo povečuje (dinamično dodeljeno) ali naj se ustvari v največji velikosti (nespremenljiva velikost).</translation>
     </message>
     <message>
-        <location line="+2"/>
         <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><p><b>Dinamično dodeljena</b> datoteka trdega diska bo uporabila samo toliko prostora na vašem trdem disku, kolikor ga zasede (do največ <b>nespremenljive velikosti</b>), vendar se ne bo samodejno skrčila, ko je prostor sproščen.</p></translation>
+        <translation type="vanished"><p><b>Dinamično dodeljena</b> datoteka trdega diska bo uporabila samo toliko prostora na vašem trdem disku, kolikor ga zasede (do največ <b>nespremenljive velikosti</b>), vendar se ne bo samodejno skrčila, ko je prostor sproščen.</p></translation>
     </message>
     <message>
-        <location line="+3"/>
         <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><p>Ustvarjanje datoteke trdega diska <b>Nespremenljive velikosti</b> lahko na nekaterih sistemih traja dlje, vendar je pogosto hitrejša za uporabo.</p></translation>
+        <translation type="vanished"><p>Ustvarjanje datoteke trdega diska <b>Nespremenljive velikosti</b> lahko na nekaterih sistemih traja dlje, vendar je pogosto hitrejša za uporabo.</p></translation>
     </message>
     <message>
-        <location line="+2"/>
         <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><p>Lahko izberete tudi <b>razdelitev</b>, datoteke trdega diska v več datotek z do 2 GB na vsako. To je v glavnem uporabno, če želite shraniti navidezni računalnik na odstranljive naprave USB ali stare sisteme, ki ne podpirajo zelo velikih datotek.</translation>
+        <translation type="vanished"><p>Lahko izberete tudi <b>razdelitev</b>, datoteke trdega diska v več datotek z do 2 GB na vsako. To je v glavnem uporabno, če želite shraniti navidezni računalnik na odstranljive naprave USB ali stare sisteme, ki ne podpirajo zelo velikih datotek.</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp" line="-134"/>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Izberite mesto za novo datoteko navideznega trdega diska</translation>
+        <translation type="vanished">Izberite mesto za novo datoteko navideznega trdega diska</translation>
     </message>
     <message>
-        <location line="+114"/>
         <source>New hard disk to create</source>
-        <translation>Nov trdi disk za ustvarjanje</translation>
+        <translation type="vanished">Nov trdi disk za ustvarjanje</translation>
     </message>
     <message>
-        <location line="+3"/>
         <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>Vtipkajte ime nove datoteke navideznega trdega diska v spodnje polje ali kliknite ikono mape, da izberete drugo mapo, v kateri boste ustvarili datoteko.</translation>
+        <translation type="vanished">Vtipkajte ime nove datoteke navideznega trdega diska v spodnje polje ali kliknite ikono mape, da izberete drugo mapo, v kateri boste ustvarili datoteko.</translation>
     </message>
     <message>
-        <location line="+2"/>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-8"/>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Izberi mesto za novo datoteko navideznega trdega diska …</translation>
+        <translation type="vanished">Izberi mesto za novo datoteko navideznega trdega diska …</translation>
     </message>
     <message>
-        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-3"/>
         <source>Hard disk to &copy</source>
-        <translation>Trdi disk za &kopiranje</translation>
+        <translation type="vanished">Trdi disk za &kopiranje</translation>
     </message>
     <message>
-        <location line="+2"/>
         <source>&New hard disk to create</source>
-        <translation>&Nov trdi disk za ustvarjanje</translation>
+        <translation type="vanished">&Nov trdi disk za ustvarjanje</translation>
     </message>
     <message>
-        <location line="+2"/>
         <source>Hard disk file &type</source>
-        <translation>&Vrsta datoteke trdega diska</translation>
+        <translation type="vanished">&Vrsta datoteke trdega diska</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp" line="+117"/>
+        <source>Disk image to copy</source>
+        <translation>Odtis diska za kopiranje</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source><p>Please select the virtual disk image 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><p>Izberite datoteko odtisa navideznega diska, ki bi jo radi kopirali, če še ni izbrana. Lahko izberete eno s seznama ali uporabite ikono mape poleg seznama, da jo izberete.</p></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-10"/>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>Izberi datoteko odtisa navideznega diska za kopiranje …</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp" line="+160"/>
+        <source>Disk image file type</source>
+        <translation>Vrsta datoteke odtisa diska</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>Izberite vrsto datoteke, ki bi jo radi uporabili za nov odtis navideznega diska. Če je ne boste uporabljali z drugo programsko opremo navideznosti, lahko pustite nastavitev nespremenjeno.</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp" line="+87"/>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>Izberite mesto za novo datoteko odtisa navideznega diska</translation>
+    </message>
+    <message>
+        <location line="+123"/>
+        <source>New disk image to create</source>
+        <translation>Nov odtis diska za ustvarjanje</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>Vtipkajte ime nove datoteke odtisa navideznega diska v spodnje polje ali kliknite ikono mape, da izberete drugo mapo, v kateri boste ustvarili datoteko.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+2"/>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>Izberi mesto za novo datoteko odtisa navideznega diska …</translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="-61"/>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_kopija</translation>
+    </message>
+    <message>
+        <location filename="../src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp" line="+58"/>
+        <source>Disk image to &copy</source>
+        <translation>Odtis diska za &kopiranje</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&New disk image to create</source>
+        <translation>&Nov odtis diska za ustvarjanje</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Disk image file &type</source>
+        <translation>&Vrsta datoteke odtisa diska</translation>
     </message>
 </context>
 <context>
@@ -10690,7 +10835,7 @@
     <message>
         <location line="-13"/>
         <source>Oracle Public Cloud Format Archive (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Arhiv oblike Oracle Public Cloud (%1)</translation>
     </message>
     <message>
         <location line="+14"/>
@@ -10701,25 +10846,25 @@
         <location line="+219"/>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp" line="+4"/>
         <source>Open Virtualization Format 0.9</source>
-        <translation type="unfinished"></translation>
+        <translation>Odprta oblika navideznosti 0.9</translation>
     </message>
     <message>
         <location line="+1"/>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp" line="+1"/>
         <source>Open Virtualization Format 1.0</source>
-        <translation type="unfinished"></translation>
+        <translation>Odprta oblika navideznosti 1.0</translation>
     </message>
     <message>
         <location line="+1"/>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp" line="+1"/>
         <source>Open Virtualization Format 2.0</source>
-        <translation type="unfinished"></translation>
+        <translation>Odprta oblika navideznosti 2.0</translation>
     </message>
     <message>
         <location line="+1"/>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp" line="+1"/>
         <source>Oracle Public Cloud Format 1.0</source>
-        <translation type="unfinished"></translation>
+        <translation>Oblika Oracle Public Cloud 1.0</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -10731,13 +10876,13 @@
         <location line="+3"/>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp" line="+3"/>
         <source>Write in new OVF 2.0 format.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapiši v novi obliki OVF 2.0.</translation>
     </message>
     <message>
         <location line="+1"/>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp" line="+1"/>
         <source>Write in Oracle Public Cloud 1.0 format.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapiši v obliki Oracle Public Cloud 1.0.</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -10830,7 +10975,7 @@
     <message>
         <location filename="../src/wizards/exportappliance/UIWizardExportAppPageBasic3.cpp" line="+71"/>
         <source><p>Please choose a filename to export the virtual appliance to.</p><p>The <b>Open Virtualization Format</b> supports only <b>ovf</b> or <b>ova</b> extensions. <br>If you use the <b>ovf</b> extension, several files will be written separately.<br>If you use the <b>ova</b> extension, all the files will be combined into one Open Virtualization Format archive.</p><p>The <b& [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Izberite ime datoteke, v katero boste izvozili navidezno namensko napravo.</p><p><b>Odprta oblika navideznosti</b> podpira samo pripono <b>ovf</b> ali <b>ova</b>.<br>Če boste uporabili pripono <b>ovf</b>, bo več datotek zapisanih ločeno.<br>Če boste uporabili pripono <b>ova</b>, bodo vse datoteke združene v en arhiv oblike odprte oblike navideznosti.</p><p><b&g [...]
     </message>
     <message>
         <location line="+14"/>
@@ -11600,7 +11745,7 @@
     <message>
         <source>Shared Folders</source>
         <comment>details report (shared folders)</comment>
-        <translation type="vanished">Souporaba map</translation>
+        <translation type="vanished">Deljene mape</translation>
     </message>
     <message>
         <source>None</source>
@@ -11610,7 +11755,7 @@
     <message>
         <source>Shared Folders</source>
         <comment>details report</comment>
-        <translation type="vanished">Souporaba map</translation>
+        <translation type="vanished">Deljene mape</translation>
     </message>
     <message>
         <location line="+149"/>
@@ -11705,7 +11850,7 @@
         <location line="+1"/>
         <source>Shared Folder</source>
         <comment>DeviceType</comment>
-        <translation>Souporaba mape</translation>
+        <translation>Deljena mapa</translation>
     </message>
     <message>
         <location line="+264"/>
@@ -11820,7 +11965,7 @@
         <translation><nobr>Stanje: %1</nobr></translation>
     </message>
     <message>
-        <location filename="../src/medium/UIMedium.cpp" line="+537"/>
+        <location filename="../src/medium/UIMedium.cpp" line="+542"/>
         <source>Checking...</source>
         <comment>medium</comment>
         <translation>Preverjanje …</translation>
@@ -11936,7 +12081,7 @@
     <message>
         <source>Host-only adapter, '%1'</source>
         <comment>details report (network)</comment>
-        <translation type="vanished">Vmesnik samo za gostitelja, '%1'</translation>
+        <translation type="vanished">Gostiteljski vmesnik, '%1'</translation>
     </message>
     <message>
         <location line="-301"/>
@@ -11954,7 +12099,7 @@
         <location line="+2"/>
         <source>Host-only Adapter</source>
         <comment>NetworkAttachmentType</comment>
-        <translation>Vmesnik samo za gostitelja</translation>
+        <translation>Gostiteljski vmesnik</translation>
     </message>
     <message>
         <location filename="../src/runtime/UIIndicatorsPool.cpp" line="-19"/>
@@ -12080,13 +12225,13 @@
         <translation>I82078</translation>
     </message>
     <message>
-        <location filename="../src/medium/UIMedium.cpp" line="-382"/>
+        <location filename="../src/medium/UIMedium.cpp" line="-386"/>
         <source>Empty</source>
         <comment>medium</comment>
         <translation>Prazno</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+55"/>
         <source>Host Drive '%1'</source>
         <comment>medium</comment>
         <translation>Pogon gostitelja '%1'</translation>
@@ -12098,7 +12243,7 @@
         <translation>Pogon gostitelja %1 (%2)</translation>
     </message>
     <message>
-        <location line="+175"/>
+        <location line="+178"/>
         <source><p style=white-space:pre>Type (Format):  %1 (%2)</p></source>
         <comment>medium</comment>
         <translation><p style=white-space:pre>Vrsta (oblika):  %1 (%2)</p></translation>
@@ -12148,7 +12293,7 @@
         <location line="+208"/>
         <source>Differencing</source>
         <comment>MediumType</comment>
-        <translation type="unfinished">Razlikovalen</translation>
+        <translation>Razlikovalen</translation>
     </message>
     <message numerus="yes">
         <location filename="../src/globals/VBoxGlobal.h" line="+246"/>
@@ -12458,7 +12603,7 @@
         <location line="+1"/>
         <source>Shareable</source>
         <comment>MediumType</comment>
-        <translation>Souporaba mogoča</translation>
+        <translation>Deljenje mogoče</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -12705,7 +12850,7 @@
         <location line="+27"/>
         <source>Shared folders</source>
         <comment>DetailsElementType</comment>
-        <translation>Souporaba map</translation>
+        <translation>Deljene mape</translation>
     </message>
     <message>
         <location line="-25"/>
@@ -13052,73 +13197,73 @@
         <location line="+1229"/>
         <source>Hard Disks</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Trdi diski</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Optical Disks</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Optični diski</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Floppy Disks</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Diskete</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Audio</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">Zvok</translation>
+        <translation>Zvok</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Network</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">Omrežje</translation>
+        <translation>Omrežje</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>USB</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">USB</translation>
+        <translation>USB</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Shared Folders</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Deljene mape</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Display</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">Zaslon</translation>
+        <translation>Zaslon</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Video Capture</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished">Zajem videoposnetka</translation>
+        <translation>Zajem videoposnetka</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Features</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Značilnosti</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Mouse</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Miška</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Keyboard</source>
         <comment>IndicatorType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Tipkovnica</translation>
     </message>
     <message>
         <location line="+240"/>
@@ -13193,7 +13338,7 @@
         <location line="+30"/>
         <source>Shared folders</source>
         <comment>InformationElementType</comment>
-        <translation>Souporaba map</translation>
+        <translation>Deljene mape</translation>
     </message>
     <message>
         <location line="-29"/>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
index c4a2f90..063924a 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
@@ -8882,6 +8882,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9075,55 +9107,51 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 Б)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Промени атрибуте медија</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Спремате се да промените атрибуте диска <b>%1</b>.</p><p>Одаберите један тип и стусните <b>%2</b> за наст@вак или <b>%3</b>.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Тип медија:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 Б)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Промени атрибуте медија</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Спремате се да промените атрибуте диска <b>%1</b>.</p><p>Одаберите један тип и стусните <b>%2</b> за наст@вак или <b>%3</b>.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Тип медија:</translation>
     </message>
 </context>
 <context>
@@ -10974,6 +11002,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -13077,78 +13113,83 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation type="unfinished">%1_копија</translation>
+        <translation type="obsolete">%1_копија</translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></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>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></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>
+        <source>Disk image file type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></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>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></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>
+        <source>Please type the name of the new virtual disk image 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>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_копија</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
index b6182b9..bc0c0b9 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
@@ -9798,6 +9798,38 @@ serial ports</comment>
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9995,55 +10027,51 @@ serial ports</comment>
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Ändra mediaattribut</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Du är på väg att ändra attribut för den virtuella disken i <b>%1</b>.</p><p>Välj en av följande mediatyper och tryck på <b>%2</b> för att fortsätta eller <b>%3</b> om inte.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Välj mediatyp:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 B)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Ändra mediaattribut</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Du är på väg att ändra attribut för den virtuella disken i <b>%1</b>.</p><p>Välj en av följande mediatyper och tryck på <b>%2</b> för att fortsätta eller <b>%3</b> om inte.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Välj mediatyp:</translation>
     </message>
 </context>
 <context>
@@ -12107,6 +12135,14 @@ serial ports</comment>
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -14518,7 +14554,7 @@ serial ports</comment>
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_kopia</translation>
+        <translation type="vanished">%1_kopia</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -14533,75 +14569,80 @@ serial ports</comment>
         <translation type="obsolete">&Typ av hårddiskfil</translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></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>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></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>
+        <source>Disk image file type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></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>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></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>
+        <source>Please type the name of the new virtual disk image 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>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_kopia</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_th.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_th.ts
index 7f1709b..8b43182 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_th.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_th.ts
@@ -5644,6 +5644,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">สื่อชนิดนี้เชื่อมต่อได้โดยตรงหรือโดยอ้อม และจะถูกเก็บไว้ขณะเก็บสแนปช็อต</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">สื่อชนิดนี้ถูกเชื่อมต่อโดยอ้อม ความเปลี่ยนแปลงทั้งหมดจะถูกละทิ้งเมื่อเวอร์ชวลแมชชีนเริ่มการทำงานในครั้งต่อไป</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และจะถูกเพิกเฉยขณะเก็บสแนปช็อต</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และสามารถถูกใช้จากเวอร์ชวลแมชชีนหลายเครื่องได้พร้อมกัน</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และสามารถถูกใช้จากเวอร์ชวลแมชชีนได้หลายเครื่อง</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">สื่อชนิดนี้ถูกเชื่อมต่อโดยอ้อม ดังนั้นสื่อพื้นฐานหนึ่ง ๆ สามารถถูกใช้กับหลาย ๆ VM ที่มีสื่อแบบเก็บส่วนต่างของตัวเองเพื่อเก็บข้อมูลในส่วนที่เกิดการเปลี่ยนแปลง</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5829,6 +5861,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumSizeEditor</name>
@@ -5845,39 +5897,39 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>เปลี่ยนลักษณะเฉพาะของมีเดีย</translation>
+        <translation type="vanished">เปลี่ยนลักษณะเฉพาะของมีเดีย</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>คุณกำลังจะเปลี่ยนแปลงการตั้งค่าไฟล์ดิสก์อิมเมจ <b>%1</b></p><p>โปรดเลือกหนึ่งในโหมดต่อไปนี้แล้วกด <b>%2</b> เพื่อดำเนินการต่อหรือกด <b>%3</b> เพื่อยกเลิก</p></translation>
+        <translation type="vanished"><p>คุณกำลังจะเปลี่ยนแปลงการตั้งค่าไฟล์ดิสก์อิมเมจ <b>%1</b></p><p>โปรดเลือกหนึ่งในโหมดต่อไปนี้แล้วกด <b>%2</b> เพื่อดำเนินการต่อหรือกด <b>%3</b> เพื่อยกเลิก</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>เลือกโหมด:</translation>
+        <translation type="vanished">เลือกโหมด:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>สื่อชนิดนี้เชื่อมต่อได้โดยตรงหรือโดยอ้อม และจะถูกเก็บไว้ขณะเก็บสแนปช็อต</translation>
+        <translation type="vanished">สื่อชนิดนี้เชื่อมต่อได้โดยตรงหรือโดยอ้อม และจะถูกเก็บไว้ขณะเก็บสแนปช็อต</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>สื่อชนิดนี้ถูกเชื่อมต่อโดยอ้อม ความเปลี่ยนแปลงทั้งหมดจะถูกละทิ้งเมื่อเวอร์ชวลแมชชีนเริ่มการทำงานในครั้งต่อไป</translation>
+        <translation type="vanished">สื่อชนิดนี้ถูกเชื่อมต่อโดยอ้อม ความเปลี่ยนแปลงทั้งหมดจะถูกละทิ้งเมื่อเวอร์ชวลแมชชีนเริ่มการทำงานในครั้งต่อไป</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และจะถูกเพิกเฉยขณะเก็บสแนปช็อต</translation>
+        <translation type="vanished">สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และจะถูกเพิกเฉยขณะเก็บสแนปช็อต</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และสามารถถูกใช้จากเวอร์ชวลแมชชีนหลายเครื่องได้พร้อมกัน</translation>
+        <translation type="vanished">สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และสามารถถูกใช้จากเวอร์ชวลแมชชีนหลายเครื่องได้พร้อมกัน</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และสามารถถูกใช้จากเวอร์ชวลแมชชีนได้หลายเครื่อง</translation>
+        <translation type="vanished">สื่อชนิดนี้ถูกเชื่อมต่อโดยตรง และสามารถถูกใช้จากเวอร์ชวลแมชชีนได้หลายเครื่อง</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>สื่อชนิดนี้ถูกเชื่อมต่อโดยอ้อม ดังนั้นสื่อพื้นฐานหนึ่ง ๆ สามารถถูกใช้กับหลาย ๆ VM ที่มีสื่อแบบเก็บส่วนต่างของตัวเองเพื่อเก็บข้อมูลในส่วนที่เกิดการเปลี่ยนแปลง</translation>
+        <translation type="vanished">สื่อชนิดนี้ถูกเชื่อมต่อโดยอ้อม ดังนั้นสื่อพื้นฐานหนึ่ง ๆ สามารถถูกใช้กับหลาย ๆ VM ที่มีสื่อแบบเก็บส่วนต่างของตัวเองเพื่อเก็บข้อมูลในส่วนที่เกิดการเปลี่ยนแปลง</translation>
     </message>
 </context>
 <context>
@@ -7077,6 +7129,14 @@
         <source><p>Could not insert the <b>%1</b> disk image file into the virtual machine <b>%2</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>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -8257,31 +8317,31 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_สำเนา</translation>
+        <translation type="vanished">%1_สำเนา</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>ทำสำเนาฮาร์ดดิสก์เสมือน</translation>
+        <translation type="vanished">ทำสำเนาฮาร์ดดิสก์เสมือน</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>ฮาร์ดดิสก์ที่จะทำสำเนา</translation>
+        <translation type="vanished">ฮาร์ดดิสก์ที่จะทำสำเนา</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><p>กรุณาเลือกไฟล์ฮาร์ดดิสก์เสมือนที่คุณต้องการทำสำเนาหากยังไม่ได้เลือกไว้ คุณสามารถเลือกจากรายการที่แสดงอยู่หรือใช้ไอคอนโฟลเดอร์ด้านข้างรายการเพื่อเลือกขึ้นมาหนึ่งไฟล์</p></translation>
+        <translation type="vanished"><p>กรุณาเลือกไฟล์ฮาร์ดดิสก์เสมือนที่คุณต้องการทำสำเนาหากยังไม่ได้เลือกไว้ คุณสามารถเลือกจากรายการที่แสดงอยู่หรือใช้ไอคอนโฟลเดอร์ด้านข้างรายการเพื่อเลือกขึ้นมาหนึ่งไฟล์</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>เลือกไฟล์ฮาร์ดดิสก์เสมือนเพื่อทำสำเนา...</translation>
+        <translation type="vanished">เลือกไฟล์ฮาร์ดดิสก์เสมือนเพื่อทำสำเนา...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>ชนิดของไฟล์ฮาร์ดดิสก์</translation>
+        <translation type="vanished">ชนิดของไฟล์ฮาร์ดดิสก์</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>โปรดเลือกชนิดของไฟล์ที่คุณต้องการใช้สำหรับฮาร์ดดิสก์เสมือนที่จะสร้างขึ้นมาใหม่ หากคุณไม่ต้องการใช้ไฟล์นี้ร่วมกับซอฟต์แวร์เวอร์ชวลไลเซชันอื่น คุณสามารถใช้ค่านี้ได้โดยไม่ต้องเปลี่ยนแปลง</translation>
+        <translation type="vanished">โปรดเลือกชนิดของไฟล์ที่คุณต้องการใช้สำหรับฮาร์ดดิสก์เสมือนที่จะสร้างขึ้นมาใหม่ หากคุณไม่ต้องการใช้ไฟล์นี้ร่วมกับซอฟต์แวร์เวอร์ชวลไลเซชันอื่น คุณสามารถใช้ค่านี้ได้โดยไม่ต้องเปลี่ยนแปลง</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -8289,47 +8349,120 @@
     </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>โปรดเลือกว่าไฟล์ฮาร์ดดิสก์เวอร์ชวลบอกซ์ควรขยายขนาดตามการใช้งาน (จัดสรรแบบพลวัต) หรือควรสร้างโดยใช้ขนาดสูงสุด (ขนาดคงที่)</translation>
+        <translation type="vanished">โปรดเลือกว่าไฟล์ฮาร์ดดิสก์เวอร์ชวลบอกซ์ควรขยายขนาดตามการใช้งาน (จัดสรรแบบพลวัต) หรือควรสร้างโดยใช้ขนาดสูงสุด (ขนาดคงที่)</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><p>ฮาร์ดดิสก์ที่<b>จัดสรรแบบพลวัต</b> จะใช้พื้นที่บนฮาร์ดดิสก์กายภาพของคุณเพิ่มขึ้นตามการใช้งาน (จนถึง <b>ขนาดคงที่</b> ที่ระบุไว้) แต่มันจะไม่ลดขนาดลงโดยอัตโนมัติแม้พื้นที่ภายในจะว่างลง</p></translation>
+        <translation type="vanished"><p>ฮาร์ดดิสก์ที่<b>จัดสรรแบบพลวัต</b> จะใช้พื้นที่บนฮาร์ดดิสก์กายภาพของคุณเพิ่มขึ้นตามการใช้งาน (จนถึง <b>ขนาดคงที่</b> ที่ระบุไว้) แต่มันจะไม่ลดขนาดลงโดยอัตโนมัติแม้พื้นที่ภายในจะว่างลง</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><p>ไฟล์ฮาร์ดดิสก์ <b>ขนาดคงที่</b> อาจใช้เวลานานในการสร้างบนบางระบบ แต่มักทำงานได้เร็วกว่า</p></translation>
+        <translation type="vanished"><p>ไฟล์ฮาร์ดดิสก์ <b>ขนาดคงที่</b> อาจใช้เวลานานในการสร้างบนบางระบบ แต่มักทำงานได้เร็วกว่า</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><p>คุณสามารถกำหนดให้<b>แบ่ง</b>ไฟล์ฮาร์ดดิสก์ออกเป็นส่วนย่อย ๆ ส่วนละสองกิกะไบต์ การแบ่งเช่นนี้มีประโยชน์หากคุณต้องการเก็บไฟล์เวอร์ชวลแมชชีนไว้บนสื่อบันทึก USB ที่เคลื่อนย้ายได้หรือในเครื่องรุ่นเก่าที่ไม่สามารถรองรับไฟล์ขนาดใหญ่มาก ๆ ได้</translation>
+        <translation type="vanished"><p>คุณสามารถกำหนดให้<b>แบ่ง</b>ไฟล์ฮาร์ดดิสก์ออกเป็นส่วนย่อย ๆ ส่วนละสองกิกะไบต์ การแบ่งเช่นนี้มีประโยชน์หากคุณต้องการเก็บไฟล์เวอร์ชวลแมชชีนไว้บนสื่อบันทึก USB ที่เคลื่อนย้ายได้หรือในเครื่องรุ่นเก่าที่ไม่สามารถรองรับไฟล์ขนาดใหญ่มาก ๆ ได้</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>โปรดเลือกที่ตั้งไฟล์เวอร์ชวลฮาร์ดดิสก์ที่จะสร้างขึ้นใหม่</translation>
+        <translation type="vanished">โปรดเลือกที่ตั้งไฟล์เวอร์ชวลฮาร์ดดิสก์ที่จะสร้างขึ้นใหม่</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>ฮาร์ดดิสก์ใหม่ที่จะสร้าง</translation>
+        <translation type="vanished">ฮาร์ดดิสก์ใหม่ที่จะสร้าง</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>โปรดป้อนชื่อไฟล์สำหรับฮาร์ดดิสก์เสมือนที่สร้างขึ้นใหม่ลงในกล่องด้านล่าง หรือคลิกไอคอนโฟลเดอร์เพื่อเลือกโฟลเดอร์อื่นสำหรับการสร้างไฟล์</translation>
+        <translation type="vanished">โปรดป้อนชื่อไฟล์สำหรับฮาร์ดดิสก์เสมือนที่สร้างขึ้นใหม่ลงในกล่องด้านล่าง หรือคลิกไอคอนโฟลเดอร์เพื่อเลือกโฟลเดอร์อื่นสำหรับการสร้างไฟล์</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>เลือกที่ตั้งสำหรับไฟล์เวอร์ชวลฮาร์ดดิสก์ใหม่...</translation>
+        <translation type="vanished">เลือกที่ตั้งสำหรับไฟล์เวอร์ชวลฮาร์ดดิสก์ใหม่...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>ฮาร์ดดิสก์ที่จะทำ&สำเนา</translation>
+        <translation type="vanished">ฮาร์ดดิสก์ที่จะทำ&สำเนา</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>ฮาร์ดดิสก์ให&ม่ที่จะสร้าง</translation>
+        <translation type="vanished">ฮาร์ดดิสก์ให&ม่ที่จะสร้าง</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>&ชนิดของไฟล์ฮาร์ดดิสก์</translation>
+        <translation type="vanished">&ชนิดของไฟล์ฮาร์ดดิสก์</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_สำเนา</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
index 255e8dc..a2d9a7b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
@@ -8995,6 +8995,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>Ortam boyutu, depolama küçültme şu anda uygulanmadığından <b>%1</b> boyutundan <b>%2</b> boyutuna değiştirilemiyor.</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation>Ortam Konumunu Seçin</translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation>Konum boş olamaz.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>Bu tür ortam doğrudan ya da dolaylı olarak takılır, anlık görüntüler alınırken korunur.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>Bu tür ortam dolaylı olarak takılır, bir dahaki sefere sanal makine başlatıldığında değişiklikler silinir.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>Bu tür ortam doğrudan takılır, anlık görüntüler alınırken yoksayılır.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>Bu tür ortam doğrudan takılır, birkaç makine tarafından aynı zamanda kullanılmasına izin verilir.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>Bu tür ortam doğrudan takılır, ve birkaç makine tarafından kullanılabilir.</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>Bu tür ortam dolaylı olarak takılır, böylece bir ana ortam kendi değişikliklerini saklayamak için kendi ayrımlama ortamına sahip birkaç VM için kullanılabilir.</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9192,6 +9224,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation>Disk Kalıbı Dosyasını Yenile (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation>Şu anki genişletme (*.%1)</translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation>Bu ortamın konumunu seçin</translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation>&Taşı...</translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation>Disk Kalıbı Dosyasını Taşı (%1)</translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation>Seçilen disk kalıbı dosyasını taşı</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -9231,39 +9283,39 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>Ortam özniteliklerini değiştir</translation>
+        <translation type="vanished">Ortam özniteliklerini değiştir</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p><b>%1</b> disk kalıbı dosyasının ayarlarını değiştirmek üzeresiniz.</p><p>Lütfen aşağıdaki kiplerden birini seçin ve ilerlemek için <b>%2</b> düğmesine ya da aksi takdirde <b>%3</b> düğmesine basın.</p></translation>
+        <translation type="vanished"><p><b>%1</b> disk kalıbı dosyasının ayarlarını değiştirmek üzeresiniz.</p><p>Lütfen aşağıdaki kiplerden birini seçin ve ilerlemek için <b>%2</b> düğmesine ya da aksi takdirde <b>%3</b> düğmesine basın.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>Kipi seçin:</translation>
+        <translation type="vanished">Kipi seçin:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>Bu tür ortam doğrudan ya da dolaylı olarak takılır, anlık görüntüler alınırken korunur.</translation>
+        <translation type="vanished">Bu tür ortam doğrudan ya da dolaylı olarak takılır, anlık görüntüler alınırken korunur.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>Bu tür ortam dolaylı olarak takılır, bir dahaki sefere sanal makine başlatıldığında değişiklikler silinir.</translation>
+        <translation type="vanished">Bu tür ortam dolaylı olarak takılır, bir dahaki sefere sanal makine başlatıldığında değişiklikler silinir.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>Bu tür ortam doğrudan takılır, anlık görüntüler alınırken yoksayılır.</translation>
+        <translation type="vanished">Bu tür ortam doğrudan takılır, anlık görüntüler alınırken yoksayılır.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>Bu tür ortam doğrudan takılır, birkaç makine tarafından aynı zamanda kullanılmasına izin verilir.</translation>
+        <translation type="vanished">Bu tür ortam doğrudan takılır, birkaç makine tarafından aynı zamanda kullanılmasına izin verilir.</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>Bu tür ortam doğrudan takılır, ve birkaç makine tarafından kullanılabilir.</translation>
+        <translation type="vanished">Bu tür ortam doğrudan takılır, ve birkaç makine tarafından kullanılabilir.</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>Bu tür ortam dolaylı olarak takılır, böylece bir ana ortam kendi değişikliklerini saklayan kendi ayrımlama ortamına sahip birkaç VM için kullanılabilir.</translation>
+        <translation type="vanished">Bu tür ortam dolaylı olarak takılır, böylece bir ana ortam kendi değişikliklerini saklayan kendi ayrımlama ortamına sahip birkaç VM için kullanılabilir.</translation>
     </message>
 </context>
 <context>
@@ -11192,6 +11244,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation><b>%2</b> sanal makinesinin <b>%1</b> anlık görüntüsünü değiştirme başarısız.</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation><nobr><b>%1</b></nobr> sanal disk kalıbı depolamasını oluşturma başarısız.</translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -13300,7 +13360,7 @@ bu basamağı atlayarak sabit diskleri Sanal Makine Ayarları penceresinden ekle
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_copy</translation>
+        <translation type="vanished">%1_kopyası</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -13316,27 +13376,27 @@ bu basamağı atlayarak sabit diskleri Sanal Makine Ayarları penceresinden ekle
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Sanal Sabit Diski Kopyala</translation>
+        <translation type="vanished">Sanal Sabit Diski Kopyala</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Kopyalamak için sabit disk</translation>
+        <translation type="vanished">Kopyalamak için sabit disk</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><p>Lütfen kopyalamak istediğiniz sanal sabit disk dosyası zaten seçilmediyse seçin. Ya listeden birisini seçebilirsiniz ya da birini seçmek için listenin yanındaki klasör simgesini kullanabilirsiniz.</p></translation>
+        <translation type="vanished"><p>Lütfen kopyalamak istediğiniz sanal sabit disk dosyası zaten seçilmediyse seçin. Ya listeden birisini seçebilirsiniz ya da birini seçmek için listenin yanındaki klasör simgesini kullanabilirsiniz.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Kopyalamak için sanal sabit disk dosyasını seçin...</translation>
+        <translation type="vanished">Kopyalamak için sanal bir sabit disk dosyası seçin...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Sabit disk dosyası türü</translation>
+        <translation type="vanished">Sabit disk dosyası türü</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>Lütfen yeni sanal sabit disk için kullanmak istediğiniz dosyanın türünü seçin. Eğer diğer sanallaştırma yazılımları ile kullanmaya ihtiyacınız yoksa bu ayarı değiştirmeden bırakabilirsiniz.</translation>
+        <translation type="vanished">Lütfen yeni sanal sabit disk için kullanmak istediğiniz dosyanın türünü seçin. Eğer diğer sanallaştırma yazılımları ile kullanmaya ihtiyacınız yoksa bu ayarı değiştirmeden bırakabilirsiniz.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -13344,47 +13404,120 @@ bu basamağı atlayarak sabit diskleri Sanal Makine Ayarları penceresinden ekle
     </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>Lütfen yeni sanal sabit disk dosyasının kullanılmasına göre (değişken olarak ayrılan) büyüyüp büyümemesini ya da en fazla boyutunda (sabitlenmiş boyut) oluşturulup oluşturulmamasını seçin.</translation>
+        <translation type="vanished">Lütfen yeni sanal sabit disk dosyasının kullanılmasına göre (değişken olarak ayrılan) büyüyüp büyümemesini ya da en fazla boyutunda (sabitlenmiş boyut) oluşturulup oluşturulmamasını seçin.</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><p><b>Değişken olarak ayrılan</b> sabit disk dosyası yalnızca fiziksel sabit sürücünüzdeki alanı doldurarak (en fazla <b>sabitlenmiş boyuta</b> kadar) kullanacak olmasına rağmen alan serbest kaldığında otomatik olarak yeniden küçülmeyecektir.</p></translation>
+        <translation type="vanished"><p><b>Değişken olarak ayrılan</b> sabit disk dosyası yalnızca fiziksel sabit sürücünüzdeki alanı doldurarak (en fazla <b>sabitlenmiş boyuta</b> kadar) kullanacak olmasına rağmen alan serbest kaldığında otomatik olarak yeniden küçülmeyecektir.</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><p><b>Sabitlenmiş boyutlu</b> sabit disk dosyasını oluşturmak bazı sistemlerde uzun sürebilir ama kullanması çoğu kez en hızlı olandır.</p></translation>
+        <translation type="vanished"><p><b>Sabitlenmiş boyutlu</b> sabit disk dosyasını oluşturmak bazı sistemlerde uzun sürebilir ama kullanması çoğu kez en hızlı olandır.</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><p>Ayrıca sabit disk dosyasını her biri iki gigabayta kadar birkaç dosyaya <b>bölmeyi</b> seçebilirsiniz. Bu çoğunlukla eğer sanal makineyi kaldırılabilir USB aygıtlarda veya çok büyük dosyalarla başa çıkamayan bazı eski sistemlerde depolamak isterseniz faydalıdır.</translation>
+        <translation type="vanished"><p>Ayrıca sabit disk dosyasını her biri iki gigabayta kadar birkaç dosyaya <b>bölmeyi</b> seçebilirsiniz. Bu çoğunlukla eğer sanal makineyi kaldırılabilir USB aygıtlarda veya çok büyük dosyalarla başa çıkamayan bazı eski sistemlerde depolamak isterseniz faydalıdır.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Lütfen yeni sanal sabit disk dosyası için bir yer seçin</translation>
+        <translation type="vanished">Lütfen yeni sanal sabit disk dosyası için bir yer seçin</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Oluşturmak için yeni sabit disk</translation>
+        <translation type="vanished">Oluşturmak için yeni sabit disk</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>Lütfen aşağıdaki kutuya yeni sanal sabit disk dosyasının adını yazın ya da dosyanın içinde oluşturulacağı farklı bir klasörü seçmek için klasör simgesine tıklayın.</translation>
+        <translation type="vanished">Lütfen aşağıdaki kutuya yeni sanal sabit disk dosyasının adını yazın ya da dosyanın içinde oluşturulacağı farklı bir klasörü seçmek için klasör simgesine tıklayın.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Yeni sanal sabit disk dosyası için bir yer seçin...</translation>
+        <translation type="vanished">Yeni sanal sabit disk dosyası için bir yer seçin...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>&Kopyalamak için sabit disk</translation>
+        <translation type="vanished">&Kopyalamak için sabit disk</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>Oluşturmak için &yeni sabit disk</translation>
+        <translation type="vanished">Oluşturmak için &yeni sabit disk</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Sabit disk dosyası &türü</translation>
+        <translation type="vanished">Sabit disk dosyası &türü</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation>Sanal Disk Kalıbını Kopyala</translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation>Kopyalamak için disk kalıbı</translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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><p>Lütfen kopyalamak istediğiniz sanal disk kalıbı dosyası zaten seçilmediyse seçin. Ya listeden birisini seçebilirsiniz ya da birini seçmek için listenin yanındaki klasör simgesini kullanabilirsiniz.</p></translation>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>Kopyalamak için sanal bir disk kalıbı dosyası seçin...</translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation>Disk kalıbı dosyası türü</translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>Lütfen yeni sanal disk kalıbı için kullanmak istediğiniz dosyanın türünü seçin. Eğer diğer sanallaştırma yazılımları ile kullanmaya ihtiyacınız yoksa bu ayarı değiştirmeden bırakabilirsiniz.</translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>Lütfen yeni sanal disk kalıbı dosyasının kullanılmasına göre (değişken olarak ayrılan) büyüyüp büyümemesini ya da en fazla boyutunda (sabitlenmiş boyut) oluşturulup oluşturulmamasını seçin.</translation>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p><b>Değişken olarak ayrılan</b> disk kalıbı dosyası yalnızca fiziksel sabit sürücünüzdeki alanı doldurarak (en fazla <b>sabitlenmiş boyuta</b> kadar) kullanacak olmasına rağmen alan serbest kaldığında otomatik olarak yeniden küçülmeyecektir.</p></translation>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p><b>Sabitlenmiş boyutlu</b> disk kalıbı dosyasını oluşturmak bazı sistemlerde uzun sürebilir ama kullanması çoğu kez en hızlı olandır.</p></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>Ayrıca disk kalıbı dosyasını her biri iki gigabayta kadar birkaç dosyaya <b>bölmeyi</b> seçebilirsiniz. Bu çoğunlukla eğer sanal makineyi kaldırılabilir USB aygıtlarda veya çok büyük dosyalarla başa çıkamayan bazı eski sistemlerde depolamak isterseniz faydalıdır.</translation>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>Lütfen yeni sanal disk kalıbı dosyası için bir yer seçin</translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation>Oluşturmak için yeni disk kalıbı</translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>Lütfen aşağıdaki kutuya yeni sanal disk kalıbı dosyasının adını yazın ya da dosyanın içinde oluşturulacağı farklı bir klasörü seçmek için klasör simgesine tıklayın.</translation>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>Yeni sanal disk kalıbı dosyası için bir yer seçin...</translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_kopyası</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation>&Kopyalamak için disk kalıbı</translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation>Oluşturmak için &yeni disk kalıbı</translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation>Disk kalıbı dosyası &türü</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
index aa2abc2..ebf454b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
@@ -9198,6 +9198,38 @@ p, li { white-space: pre-wrap; }
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -9395,55 +9427,51 @@ p, li { white-space: pre-wrap; }
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
     <message>
-        <source>Holds the size of this medium.</source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"><nobr>%1 (%2 Б)</nobr></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>Змінити атрибути носія</translation>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>Ви збираєтесь змінити атрибути віртуально диска в <b>%1</b>.</p><p>Будь ласка, виберіть один із цих типів носія і натисніть <b>%2</b>, що продовжити, або ж <b>%3</b>.</p></translation>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation>Вибрати тип носія:</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation type="unfinished"><nobr>%1 (%2 Б)</nobr></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumTypeChangeDialog</name>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source>Modify medium attributes</source>
+        <translation type="vanished">Змінити атрибути носія</translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation type="unfinished"></translation>
+        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <translation type="vanished"><p>Ви збираєтесь змінити атрибути віртуально диска в <b>%1</b>.</p><p>Будь ласка, виберіть один із цих типів носія і натисніть <b>%2</b>, що продовжити, або ж <b>%3</b>.</p></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation type="unfinished"></translation>
+        <source>Choose mode:</source>
+        <translation type="vanished">Вибрати тип носія:</translation>
     </message>
 </context>
 <context>
@@ -11370,6 +11398,14 @@ p, li { white-space: pre-wrap; }
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -13617,7 +13653,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_копія</translation>
+        <translation type="vanished">%1_копія</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -13633,27 +13669,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>Копіювати віртуальний жорсткий диск</translation>
+        <translation type="vanished">Копіювати віртуальний жорсткий диск</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>Жорсткий диск для копіювання</translation>
+        <translation type="vanished">Жорсткий диск для копіювання</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><p>Будь ласка, виберіть файл віртуального жорсткого диску, який Ви хочете скопіювати, якщо його ще не вибрано. Ви можете або вибрати один зі списку, або використати піктограму теки поруч зі списком для вибору.</p></translation>
+        <translation type="vanished"><p>Будь ласка, виберіть файл віртуального жорсткого диску, який Ви хочете скопіювати, якщо його ще не вибрано. Ви можете або вибрати один зі списку, або використати піктограму теки поруч зі списком для вибору.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>Вибрати файл віртуального жорсткого диску для копіювання...</translation>
+        <translation type="vanished">Вибрати файл віртуального жорсткого диску для копіювання...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>Тип жорсткого диску</translation>
+        <translation type="vanished">Тип жорсткого диску</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>Будь ласка, виберіть тип файла, який Ви хочете використовувати для нового віртуального жорсткого диску. Якщо Вам не потрібно його використовувати з іншим програмним забезпеченням віртуалізації, Ви можете залишити цей параметр без змін.</translation>
+        <translation type="vanished">Будь ласка, виберіть тип файла, який Ви хочете використовувати для нового віртуального жорсткого диску. Якщо Вам не потрібно його використовувати з іншим програмним забезпеченням віртуалізації, Ви можете залишити цей параметр без змін.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -13661,47 +13697,120 @@ p, li { white-space: pre-wrap; }
     </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>Будь ласка, зазначте, чи повинен файл нового віртуального жорсткого диску збільшуватись при його використанні (динамічне визначення), чи він повинен бути створений зі своїм максимальним розміром (фіксований розмір).</translation>
+        <translation type="vanished">Будь ласка, зазначте, чи повинен файл нового віртуального жорсткого диску збільшуватись при його використанні (динамічне визначення), чи він повинен бути створений зі своїм максимальним розміром (фіксований розмір).</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><p>Файл <b>динамічного</b> жорсткого диску буде займати місце на Вашому фізичному жорсткому диску лише при його заповненні (до максимального <b>фіксованого розміру</b>), проте не зможе автоматично зменшитись, при звільненні місця на ньому.</p></translation>
+        <translation type="vanished"><p>Файл <b>динамічного</b> жорсткого диску буде займати місце на Вашому фізичному жорсткому диску лише при його заповненні (до максимального <b>фіксованого розміру</b>), проте не зможе автоматично зменшитись, при звільненні місця на ньому.</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><p>Файл <b>фіксованого</b> жорсткого диску може потребувати більше часу для створення на певних системах, проте, зазвичай, він швидше у використанні.</p></translation>
+        <translation type="vanished"><p>Файл <b>фіксованого</b> жорсткого диску може потребувати більше часу для створення на певних системах, проте, зазвичай, він швидше у використанні.</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"><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.</translation>
+        <translation type="obsolete"><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.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>Виберіть розташування файла нового віртуального жорсткого диска</translation>
+        <translation type="vanished">Виберіть розташування файла нового віртуального жорсткого диска</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>Новий жорсткий диск для створення</translation>
+        <translation type="vanished">Новий жорсткий диск для створення</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>Будь ласка, зазначте назву файла нового віртуального жорсткого диску в полі нижче або натисніть на піктограмі теки, щоб вибрати іншу теку для створення файла.</translation>
+        <translation type="vanished">Будь ласка, зазначте назву файла нового віртуального жорсткого диску в полі нижче або натисніть на піктограмі теки, щоб вибрати іншу теку для створення файла.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>Вибрати місце розташування файла нового віртуального жорсткого диску...</translation>
+        <translation type="vanished">Вибрати місце розташування файла нового віртуального жорсткого диску...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>Жорсткий диск для копіювання</translation>
+        <translation type="vanished">Жорсткий диск для копіювання</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>&Новий жорсткий диск для створення</translation>
+        <translation type="vanished">&Новий жорсткий диск для створення</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>Тип файлу жорсткого диску</translation>
+        <translation type="vanished">Тип файлу жорсткого диску</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_копія</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
index b132c58..3028d21 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
@@ -5141,6 +5141,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5326,54 +5358,35 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>UIMediumSizeEditor</name>
-    <message>
-        <source>Holds the size of this medium.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
-    </message>
     <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
+        <source>Current extension (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose mode:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <source>Choose the location of this medium</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <source>&Move...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <source>Move Disk Image File (%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <source>Move selected disk image file</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UIMediumSizeEditor</name>
     <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <source>Holds the size of this medium.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <source><nobr>%1 (%2 B)</nobr></source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -6493,6 +6506,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -7554,80 +7575,80 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
+        <source>Storage on physical hard disk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
+        <source>Copy Virtual Disk Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
+        <source>Disk image to copy</source>
         <translation type="unfinished"></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>
+        <source><p>Please select the virtual disk image 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>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
+        <source>Choose a virtual disk image file to copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
+        <source>Disk image file type</source>
         <translation type="unfinished"></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>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
+        <source>Please choose whether the new virtual disk image 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>
     </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>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
     </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>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
         <translation type="unfinished"></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>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
     </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>
+        <source>Please choose a location for new virtual disk image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
+        <source>New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
+        <source>Please type the name of the new virtual disk image 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>
     </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>
+        <source>Choose a location for new virtual disk image file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
+        <source>Disk image to &copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
+        <source>&New disk image to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
+        <source>Disk image file &type</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
index 3b91c20..90a4a39 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
@@ -8707,6 +8707,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>不能将介质大小从 <b>%1</b> 调整为 <b>%2</b> ,存储空间缩减的功能尚未实现。</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation type="unfinished">这种介质是直接或间接分配的,生成快照时保存状态。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation type="unfinished">这种介质为间接分配, 其所做修改在虚拟机下次启动时清除。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation type="unfinished">该介质是直接分配的,生成快照时忽略。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation type="unfinished">该介质是直接分配的,允许多个虚拟机同步访问。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation type="unfinished">该介质是直接分配的,允许多个虚拟机访问。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation type="unfinished">该介质是间接分配的, 多个虚拟机可共用一个基础介质,每个虚拟机各自存储一个差分介质。</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -8904,6 +8936,26 @@
         <source>Refresh Disk Image Files (%1)</source>
         <translation type="unfinished">刷新虚拟存储介质列表 (%1)</translation>
     </message>
+    <message>
+        <source>Current extension (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose the location of this medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Move...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move Disk Image File (%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move selected disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManagerWidget</name>
@@ -8943,39 +8995,39 @@
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation>修改介质属性</translation>
+        <translation type="vanished">修改介质属性</translation>
     </message>
     <message>
         <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>您将要更改位于 <b>%1</b> 中虚拟盘的属性。</p><p>请选择以下介质类型之一,并按<b>%2</b>继续进行,反之请按<b>%3</b>。</p></translation>
+        <translation type="vanished"><p>您将要更改位于 <b>%1</b> 中虚拟盘的属性。</p><p>请选择以下介质类型之一,并按<b>%2</b>继续进行,反之请按<b>%3</b>。</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation>选择介质类型:</translation>
+        <translation type="vanished">选择介质类型:</translation>
     </message>
     <message>
         <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>这种介质是直接或间接分配的,生成快照时保存状态。</translation>
+        <translation type="vanished">这种介质是直接或间接分配的,生成快照时保存状态。</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>这种介质为间接分配, 其所做修改在虚拟机下次启动时清除。</translation>
+        <translation type="vanished">这种介质为间接分配, 其所做修改在虚拟机下次启动时清除。</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>该介质是直接分配的,生成快照时忽略。</translation>
+        <translation type="vanished">该介质是直接分配的,生成快照时忽略。</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>该介质是直接分配的,允许多个虚拟机同步访问。</translation>
+        <translation type="vanished">该介质是直接分配的,允许多个虚拟机同步访问。</translation>
     </message>
     <message>
         <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>该介质是直接分配的,允许多个虚拟机访问。</translation>
+        <translation type="vanished">该介质是直接分配的,允许多个虚拟机访问。</translation>
     </message>
     <message>
         <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>该介质是间接分配的, 多个虚拟机可共用一个基础介质,每个虚拟机各自存储一个差分介质。</translation>
+        <translation type="vanished">该介质是间接分配的, 多个虚拟机可共用一个基础介质,每个虚拟机各自存储一个差分介质。</translation>
     </message>
 </context>
 <context>
@@ -10699,6 +10751,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>修改虚拟电脑 <b>%2</b> 的备份 <b>%1</b> 失败.</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniProcessWidgetUserManual</name>
@@ -12443,7 +12503,7 @@
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation>%1_副本</translation>
+        <translation type="vanished">%1_副本</translation>
     </message>
     <message>
         <source>Hard drive to &copy</source>
@@ -12459,27 +12519,27 @@
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation>复制虚拟硬盘</translation>
+        <translation type="vanished">复制虚拟硬盘</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation>要复制的硬盘</translation>
+        <translation type="vanished">要复制的硬盘</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><p>请选择要复制的虚拟磁盘。您可以从列表中选择一个,或使用列表旁边的文件夹图标来选择一个虚拟磁盘文件。</p></translation>
+        <translation type="vanished"><p>请选择要复制的虚拟磁盘。您可以从列表中选择一个,或使用列表旁边的文件夹图标来选择一个虚拟磁盘文件。</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation>选择一个虚拟硬盘...</translation>
+        <translation type="vanished">选择一个虚拟硬盘...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation>虚拟硬盘文件类型</translation>
+        <translation type="vanished">虚拟硬盘文件类型</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>请选择您想要用于新建虚拟磁盘的文件类型。如果您不需要其他虚拟化软件使用它,您可以让此设置保持不更改状态。</translation>
+        <translation type="vanished">请选择您想要用于新建虚拟磁盘的文件类型。如果您不需要其他虚拟化软件使用它,您可以让此设置保持不更改状态。</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
@@ -12487,47 +12547,120 @@
     </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>请选择新建虚拟硬盘文件是应该为其使用而分配(动态分配),还是应该创建完全分配(固定分配)。</translation>
+        <translation type="vanished">请选择新建虚拟硬盘文件是应该为其使用而分配(动态分配),还是应该创建完全分配(固定分配)。</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><p><b>动态分配</b>的虚拟磁盘只是逐渐占用物理硬盘的空间 (直至达到 <b>分配的大小</b>), 不过当其内部空间不用时不会自动缩减占用的物理硬盘空间。</p></translation>
+        <translation type="vanished"><p><b>动态分配</b>的虚拟磁盘只是逐渐占用物理硬盘的空间 (直至达到 <b>分配的大小</b>), 不过当其内部空间不用时不会自动缩减占用的物理硬盘空间。</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><p><b>固定大小</b>的虚拟磁盘文件可能在某些系统中要花很长时间来创建,但它往往使用起来较快。</p></translation>
+        <translation type="vanished"><p><b>固定大小</b>的虚拟磁盘文件可能在某些系统中要花很长时间来创建,但它往往使用起来较快。</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><p>您也可以选择将虚拟磁盘<b>分割</b>为 2GB 以下大小的几个文件。如果您想要在可移动 USB 设备或旧系统中存储虚拟机,这将会很有用,因为它们不能处理非常大型的文件。</translation>
+        <translation type="vanished"><p>您也可以选择将虚拟磁盘<b>分割</b>为 2GB 以下大小的几个文件。如果您想要在可移动 USB 设备或旧系统中存储虚拟机,这将会很有用,因为它们不能处理非常大型的文件。</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation>请选择虚拟硬盘文件保存的位置</translation>
+        <translation type="vanished">请选择虚拟硬盘文件保存的位置</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation>要创建的新虚拟硬盘</translation>
+        <translation type="vanished">要创建的新虚拟硬盘</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>请在下面的框中键入新建虚拟硬盘文件的名称,或单击文件夹图标来选择创建文件要保存到的文件夹。</translation>
+        <translation type="vanished">请在下面的框中键入新建虚拟硬盘文件的名称,或单击文件夹图标来选择创建文件要保存到的文件夹。</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation>选择虚拟硬盘文件保存的位置...</translation>
+        <translation type="vanished">选择虚拟硬盘文件保存的位置...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation>要复制的硬盘(&C)</translation>
+        <translation type="vanished">要复制的硬盘(&C)</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation>要创建的新虚拟硬盘(&N)</translation>
+        <translation type="vanished">要创建的新虚拟硬盘(&N)</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation>虚拟硬盘文件类型(&T)</translation>
+        <translation type="vanished">虚拟硬盘文件类型(&T)</translation>
+    </message>
+    <message>
+        <source>Copy Virtual Disk Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image to copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>Please select the virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please choose whether the new virtual disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>dynamically allocated</b> disk image 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>
+    </message>
+    <message>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><p>You can also choose to <b>split</b> the disk image 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>
+    </message>
+    <message>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Please type the name of the new virtual disk image 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>
+    </message>
+    <message>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation type="unfinished">%1_副本</translation>
+    </message>
+    <message>
+        <source>Disk image to &copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&New disk image to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Disk image file &type</source>
+        <translation type="unfinished"></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 7381e9b..99dee83 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
@@ -145,34 +145,6 @@
     </message>
 </context>
 <context>
-    <name>QObject</name>
-    <message>
-        <source>Result&nbsp;Code: </source>
-        <comment>error info</comment>
-        <translation type="vanished">結果碼: </translation>
-    </message>
-    <message>
-        <source>Component: </source>
-        <comment>error info</comment>
-        <translation type="vanished">元件: </translation>
-    </message>
-    <message>
-        <source>Interface: </source>
-        <comment>error info</comment>
-        <translation type="vanished">介面: </translation>
-    </message>
-    <message>
-        <source>Callee: </source>
-        <comment>error info</comment>
-        <translation type="vanished">被呼叫端: </translation>
-    </message>
-    <message>
-        <source>Callee&nbsp;RC: </source>
-        <comment>error info</comment>
-        <translation type="vanished">被呼叫端&nbsp;RC: </translation>
-    </message>
-</context>
-<context>
     <name>SFTreeViewItem</name>
     <message>
         <source>%1, %2: %3, %4: %5, %6: %7</source>
@@ -1375,27 +1347,27 @@
     <message>
         <source>Result&nbsp;Code: </source>
         <comment>error info</comment>
-        <translation type="unfinished">結果碼: </translation>
+        <translation>結果碼: </translation>
     </message>
     <message>
         <source>Component: </source>
         <comment>error info</comment>
-        <translation type="unfinished">元件: </translation>
+        <translation>元件: </translation>
     </message>
     <message>
         <source>Interface: </source>
         <comment>error info</comment>
-        <translation type="unfinished">介面: </translation>
+        <translation>介面: </translation>
     </message>
     <message>
         <source>Callee: </source>
         <comment>error info</comment>
-        <translation type="unfinished">被呼叫端: </translation>
+        <translation>被呼叫端: </translation>
     </message>
     <message>
         <source>Callee&nbsp;RC: </source>
         <comment>error info</comment>
-        <translation type="unfinished">被呼叫端&nbsp;RC: </translation>
+        <translation>被呼叫端&nbsp;RC: </translation>
     </message>
 </context>
 <context>
@@ -2966,16 +2938,12 @@
 <context>
     <name>UIHostNetworkManagerWidget</name>
     <message>
-        <source>Networking</source>
-        <translation type="vanished">網路</translation>
-    </message>
-    <message>
         <source>Adding network...</source>
-        <translation type="unfinished"></translation>
+        <translation>加入網路...</translation>
     </message>
     <message>
         <source>Removing network...</source>
-        <translation type="unfinished"></translation>
+        <translation>移除網路...</translation>
     </message>
 </context>
 <context>
@@ -3038,26 +3006,6 @@
 <context>
     <name>UIIndicatorsPool</name>
     <message>
-        <source><nobr>Indicates the activity of the hard disks:</nobr>%1</source>
-        <comment>HD tooltip</comment>
-        <translation type="vanished"><nobr>指示硬碟的活動性:</nobr>%1</translation>
-    </message>
-    <message>
-        <source><nobr>Indicates the activity of the optical drives:</nobr>%1</source>
-        <comment>CD tooltip</comment>
-        <translation type="vanished"><nobr>指示光學裝置的活動性:</nobr>%1</translation>
-    </message>
-    <message>
-        <source><nobr>Indicates the activity of the floppy drives:</nobr>%1</source>
-        <comment>FD tooltip</comment>
-        <translation type="vanished"><nobr>指示軟碟的活動性:</nobr>%1</translation>
-    </message>
-    <message>
-        <source><nobr>Indicates the activity of the network interfaces:</nobr>%1</source>
-        <comment>Network tooltip</comment>
-        <translation type="vanished"><nobr>指示網路介面的活動性:</nobr>%1</translation>
-    </message>
-    <message>
         <source>Adapter %1 (%2)</source>
         <comment>Network tooltip</comment>
         <translation>網路卡 %1 (%2)</translation>
@@ -3083,31 +3031,16 @@
         <translation>已中斷連接</translation>
     </message>
     <message>
-        <source><nobr>Indicates the activity of the attached USB devices:</nobr>%1</source>
-        <comment>USB tooltip</comment>
-        <translation type="vanished"><nobr>指示附加 USB 裝置的活動性:</nobr>%1</translation>
-    </message>
-    <message>
         <source>No USB devices attached</source>
         <comment>USB tooltip</comment>
         <translation>未附加 USB 裝置</translation>
     </message>
     <message>
-        <source><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</source>
-        <comment>Shared folders tooltip</comment>
-        <translation type="vanished"><nobr>指示電腦的共用資料夾的活動性:</nobr>%1</translation>
-    </message>
-    <message>
         <source>No shared folders</source>
         <comment>Shared folders tooltip</comment>
         <translation>沒有共用資料夾</translation>
     </message>
     <message>
-        <source><nobr>Indicates the activity of the display:</nobr>%1</source>
-        <comment>Display tooltip</comment>
-        <translation type="vanished"><nobr>指示顯示的活動性:</nobr>%1</translation>
-    </message>
-    <message>
         <source>Video memory</source>
         <comment>Display tooltip</comment>
         <translation>視訊記憶體</translation>
@@ -3123,11 +3056,6 @@
         <translation>3D 加速</translation>
     </message>
     <message>
-        <source><nobr>Indicates video capturing activity:</nobr>%1</source>
-        <comment>Video capture tooltip</comment>
-        <translation type="vanished"><nobr>指示視訊擷取的活動性:</nobr>%1</translation>
-    </message>
-    <message>
         <source>Video capture disabled</source>
         <comment>Video capture tooltip</comment>
         <translation>視訊擷取停用</translation>
@@ -3138,11 +3066,6 @@
         <translation>視訊擷取檔案</translation>
     </message>
     <message>
-        <source><nobr>Indicates the activity of the additional features:</nobr>%1</source>
-        <comment>Virtualization Stuff LED</comment>
-        <translation type="vanished"><nobr>指示額外功能的活動性:</nobr>%1</translation>
-    </message>
-    <message>
         <source>Indicates whether the host mouse pointer is captured by the guest OS:%1</source>
         <comment>Mouse tooltip</comment>
         <translation>指示主機滑鼠游標是否由客體 OS 所擷取: %1</translation>
@@ -3192,11 +3115,6 @@
         <comment>Keyboard tooltip</comment>
         <translation>鍵盤擷取</translation>
     </message>
-    <message>
-        <source><nobr>Indicates the activity of the audio device:</nobr>%1</source>
-        <comment>Audio tooltip</comment>
-        <translation type="vanished"><nobr>指示音訊裝置的活動性:</nobr>%1</translation>
-    </message>
 </context>
 <context>
     <name>UIInformationDataAudio</name>
@@ -3898,11 +3816,11 @@
     </message>
     <message>
         <source>When checked, VirtualBox will record the audio stream to video file as well.</source>
-        <translation type="unfinished"></translation>
+        <translation>選取時,VirtualBox 也將錄製音訊串流到視訊檔案。</translation>
     </message>
     <message>
         <source>&Record Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>錄音(&R)</translation>
     </message>
 </context>
 <context>
@@ -5223,6 +5141,38 @@
         <source>Cannot change medium size from <b>%1</b> to <b>%2</b> as storage shrinking is currently not implemented.</source>
         <translation>無法變更媒體大小從 <b>%1</b> 到 <b>%2</b>,因為存放裝置縮放目前尚未實施。</translation>
     </message>
+    <message>
+        <source>Choose Medium Location</source>
+        <translation>選擇媒體位置</translation>
+    </message>
+    <message>
+        <source>Location can not be empty.</source>
+        <translation>位置不能為空。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
+        <translation>這種類型的媒體直接或間接附加,取得快照時保留。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
+        <translation>這種類型的媒體間接附加,下次虛擬機器啟動時,將清除變更。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
+        <translation>這種類型的媒體直接附加,在取得快照時忽略。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
+        <translation>這種類型的媒體直接附加,允許由數台機器同時使用。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached directly, and can be used by several machines.</source>
+        <translation>這種類型的媒體直接附加,可以由數台機器使用。</translation>
+    </message>
+    <message>
+        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
+        <translation>這種類型的媒體間接附加,使得一個基本媒體可以用於具有其自己的差異媒體來存放其修改的數個 VM。</translation>
+    </message>
 </context>
 <context>
     <name>UIMediumManager</name>
@@ -5390,46 +5340,43 @@
     </message>
     <message>
         <source>Copy Disk Image File (%1)</source>
-        <translation type="unfinished">複製磁碟映像檔案 (%1)</translation>
+        <translation>複製磁碟映像檔案 (%1)</translation>
     </message>
     <message>
         <source>Remove Disk Image File (%1)</source>
-        <translation type="unfinished">移除磁碟映像檔案 (%1)</translation>
+        <translation>移除磁碟映像檔案 (%1)</translation>
     </message>
     <message>
         <source>Release Disk Image File (%1)</source>
-        <translation type="unfinished">釋放磁碟映像檔案 (%1)</translation>
+        <translation>釋放磁碟映像檔案 (%1)</translation>
     </message>
     <message>
         <source>Open Disk Image File Properties (%1)</source>
-        <translation type="unfinished">開啟磁碟映像檔案內容 (%1)</translation>
+        <translation>開啟磁碟映像檔案內容 (%1)</translation>
     </message>
     <message>
         <source>Refresh Disk Image Files (%1)</source>
-        <translation type="unfinished">重新整理磁碟映像檔案 (%1)</translation>
+        <translation>重新整理磁碟映像檔案 (%1)</translation>
     </message>
-</context>
-<context>
-    <name>UIMediumManagerWidget</name>
     <message>
-        <source>Copy Disk Image File (%1)</source>
-        <translation type="vanished">複製磁碟映像檔案 (%1)</translation>
+        <source>Current extension (*.%1)</source>
+        <translation>目前附檔名 (*.%1)</translation>
     </message>
     <message>
-        <source>Remove Disk Image File (%1)</source>
-        <translation type="vanished">移除磁碟映像檔案 (%1)</translation>
+        <source>Choose the location of this medium</source>
+        <translation>選擇這個媒體的位置</translation>
     </message>
     <message>
-        <source>Release Disk Image File (%1)</source>
-        <translation type="vanished">釋放磁碟映像檔案 (%1)</translation>
+        <source>&Move...</source>
+        <translation>移動(&M)...</translation>
     </message>
     <message>
-        <source>Open Disk Image File Properties (%1)</source>
-        <translation type="vanished">開啟磁碟映像檔案內容 (%1)</translation>
+        <source>Move Disk Image File (%1)</source>
+        <translation>移動磁碟映像檔案 (%1)</translation>
     </message>
     <message>
-        <source>Refresh Disk Image Files (%1)</source>
-        <translation type="vanished">重新整理磁碟映像檔案 (%1)</translation>
+        <source>Move selected disk image file</source>
+        <translation>移動選取的磁碟映像檔案</translation>
     </message>
 </context>
 <context>
@@ -5444,45 +5391,6 @@
     </message>
 </context>
 <context>
-    <name>UIMediumTypeChangeDialog</name>
-    <message>
-        <source>Modify medium attributes</source>
-        <translation>修改媒體屬性</translation>
-    </message>
-    <message>
-        <source><p>You are about to change the settings of the disk image file <b>%1</b>.</p><p>Please choose one of the following modes and press <b>%2</b> to proceed or <b>%3</b> otherwise.</p></source>
-        <translation><p>您即將變更磁碟映像檔案 <b>%1</b> 的設定。</p><p>請選擇以下一種模式並按下 [<b>%2</b>] 進行否則按下 [<b>%3</b>]。</p></translation>
-    </message>
-    <message>
-        <source>Choose mode:</source>
-        <translation>選擇模式:</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly or indirectly, preserved when taking snapshots.</source>
-        <translation>這種類型的媒體直接或間接附加,取得快照時保留。</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached indirectly, changes are wiped out the next time the virtual machine is started.</source>
-        <translation>這種類型的媒體間接附加,下次虛擬機器啟動時,將清除變更。</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, ignored when taking snapshots.</source>
-        <translation>這種類型的媒體直接附加,在取得快照時忽略。</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, allowed to be used concurrently by several machines.</source>
-        <translation>這種類型的媒體直接附加,允許由數台機器同時使用。</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached directly, and can be used by several machines.</source>
-        <translation>這種類型的媒體直接附加,可以由數台機器使用。</translation>
-    </message>
-    <message>
-        <source>This type of medium is attached indirectly, so that one base medium can be used for several VMs which have their own differencing medium to store their modifications.</source>
-        <translation>這種類型的媒體間接附加,使得一個基本媒體可以用於具有其自己的差異媒體來存放其修改的數個 VM。</translation>
-    </message>
-</context>
-<context>
     <name>UIMenuBarEditorWidget</name>
     <message>
         <source>Virtual Screen Resize</source>
@@ -6598,6 +6506,14 @@
         <source>Failed to change the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>變更虛擬機器 <b>%2</b> 的快照 <b>%1</b> 失敗。</translation>
     </message>
+    <message>
+        <source>Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr></source>
+        <translation>建立虛擬磁碟映像存儲失敗 <nobr><b>%1</b>。</nobr></translation>
+    </message>
+    <message>
+        <source><p>The changes you requested require this disk to be released from the machines it is attached to.</p><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>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -7659,81 +7575,81 @@
         <translation>分割成小於 2GB 的檔案(&S)</translation>
     </message>
     <message>
-        <source>%1_copy</source>
-        <comment>copied virtual hard drive name</comment>
-        <translation>%1_copy</translation>
+        <source>Storage on physical hard disk</source>
+        <translation>實體硬碟中存放裝置</translation>
     </message>
     <message>
-        <source>Copy Virtual Hard Disk</source>
-        <translation>複製虛擬硬碟</translation>
+        <source>Copy Virtual Disk Image</source>
+        <translation>複製虛擬磁碟映像</translation>
     </message>
     <message>
-        <source>Hard disk to copy</source>
-        <translation>複製的硬碟</translation>
+        <source>Disk image to copy</source>
+        <translation>複製的磁碟映像</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><p>如果尚未選取,請選取希望複製的虛擬硬碟檔案。 可以從清單選擇或使用清單旁資料夾圖示選取一個。</p></translation>
+        <source><p>Please select the virtual disk image 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><p>如果尚未選取,請選取希望複製的虛擬磁碟映像檔案。 您可以從清單選擇或使用清單旁資料夾圖示選取一個。</p></translation>
     </message>
     <message>
-        <source>Choose a virtual hard disk file to copy...</source>
-        <translation>選擇複製的虛擬硬碟檔案...</translation>
+        <source>Choose a virtual disk image file to copy...</source>
+        <translation>選取複製的虛擬磁碟映像檔案...</translation>
     </message>
     <message>
-        <source>Hard disk file type</source>
-        <translation>硬碟檔案類型</translation>
+        <source>Disk image file type</source>
+        <translation>磁碟映像檔案類型</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>請選擇您希望新虛擬硬碟所使用的檔案類型。 如果您不需要與其它虛擬化軟體使用,您可以保持此設定不變。</translation>
+        <source>Please choose the type of file that you would like to use for the new virtual disk image. If you do not need to use it with other virtualization software you can leave this setting unchanged.</source>
+        <translation>請選取新的虛擬磁碟映像希望使用的檔案類型。 如果不需要用在其它虛擬化軟體,您可以保留這個設定不變更。</translation>
     </message>
     <message>
-        <source>Storage on physical hard disk</source>
-        <translation>實體硬碟中存放裝置</translation>
+        <source>Please choose whether the new virtual disk image file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
+        <translation>請選擇新的虛擬磁碟映像檔案是否應根據使用來成長 (動態配置),或建立為其最大大小 (固定大小)。</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>請選擇新虛擬硬碟檔案是否根據使用而成長 (動態配置) 或以最大大小建立 (固定大小)。</translation>
+        <source><p>A <b>dynamically allocated</b> disk image 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><p><b>動態配置</b> 磁碟映像檔案將只使用實體硬碟的空間作為填滿 (直到最大的<b>固定大小</b>),雖然它的空間釋放時不會再次自動縮小。</p></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><p><b>動態配置</b>硬碟檔案只使用實體硬碟的空間作為填滿 (直到最大的<b>固定大小</b>) ,雖然有可用空間也不會再次自動伸縮。</p></translation>
+        <source><p>A <b>fixed size</b> disk image file may take longer to create on some systems but is often faster to use.</p></source>
+        <translation><p><b>固定大小</b>磁碟映像檔案在某些系統需要花比較長的時間建立但通常用起來比較快。</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><p><b>固定大小</b>硬碟檔案在某些系統需要花比較長的時間建立但通常用起來比較快。</p></translation>
+        <source><p>You can also choose to <b>split</b> the disk image 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><p>您也可以選擇<b>分割</b>磁碟映像檔案成每個最大 2GB 的數個檔案。 這主要是有用於如果想存放虛擬機器在卸除式 USB 裝置,或某些無法處理非常大檔案的舊系統時。</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><p>您也可以選擇<b>分割</b>虛擬硬碟成每個最大 2GB 的數個檔案。 這主要是有用於如果想存放虛擬機器在卸除式 USB 裝置,或某些無法處理非常大檔案的舊系統時。</translation>
+        <source>Please choose a location for new virtual disk image file</source>
+        <translation>請選擇新虛擬磁碟映像檔案的位置</translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard disk file</source>
-        <translation>請選擇新虛擬硬碟檔案的位置</translation>
+        <source>New disk image to create</source>
+        <translation>建立的新磁碟映像</translation>
     </message>
     <message>
-        <source>New hard disk to create</source>
-        <translation>建立的新硬碟</translation>
+        <source>Please type the name of the new virtual disk image file into the box below or click on the folder icon to select a different folder to create the file in.</source>
+        <translation>請在下方方框輸入新虛擬磁碟映像檔案的名稱或按一下資料夾圖示來選取建立檔案的不同資料夾。</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>請在以下方塊輸入新虛擬硬碟檔案的名稱或按一下資料夾圖示以選取建立檔案所在的不同資料夾。</translation>
+        <source>Choose a location for new virtual disk image file...</source>
+        <translation>選擇新虛擬磁碟映像檔案的位置...</translation>
     </message>
     <message>
-        <source>Choose a location for new virtual hard disk file...</source>
-        <translation>選擇新虛擬硬碟檔案的位置...</translation>
+        <source>%1_copy</source>
+        <comment>copied virtual disk image name</comment>
+        <translation>%1_copy</translation>
     </message>
     <message>
-        <source>Hard disk to &copy</source>
-        <translation>複製的硬碟(&C)</translation>
+        <source>Disk image to &copy</source>
+        <translation>複製的磁碟映像(&C)</translation>
     </message>
     <message>
-        <source>&New hard disk to create</source>
-        <translation>建立的新硬碟(&N)</translation>
+        <source>&New disk image to create</source>
+        <translation>建立的新磁碟映像(&N)</translation>
     </message>
     <message>
-        <source>Hard disk file &type</source>
-        <translation>硬碟檔案類型(&T)</translation>
+        <source>Disk image file &type</source>
+        <translation>磁碟映像檔案類型(&T)</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/shaders/.scm-settings b/src/VBox/Frontends/VirtualBox/shaders/.scm-settings
new file mode 100644
index 0000000..62f7089
--- /dev/null
+++ b/src/VBox/Frontends/VirtualBox/shaders/.scm-settings
@@ -0,0 +1,24 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for VirtualBox shaders.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# The shader files doesn't have license comments as it's believed too much
+# comments could cause trouble.  There is a separate COPYRIGHT file instead.
+--no-update-license
+--no-update-copyright-year
+--filter-out-files "/COPYRIGHT"
+/.scm-settings: --license-ose-gpl
+
diff --git a/src/VBox/Frontends/VirtualBox/src/UIMediumTypeChangeDialog.cpp b/src/VBox/Frontends/VirtualBox/src/UIMediumTypeChangeDialog.cpp
deleted file mode 100644
index 17cd877..0000000
--- a/src/VBox/Frontends/VirtualBox/src/UIMediumTypeChangeDialog.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-/* $Id: UIMediumTypeChangeDialog.cpp $ */
-/** @file
- * VBox Qt GUI - UIMediumTypeChangeDialog class implementation.
- */
-
-/*
- * Copyright (C) 2011-2016 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QGroupBox>
-# include <QPushButton>
-# include <QRadioButton>
-# include <QVBoxLayout>
-
-/* GUI includes: */
-# include "UIMediumTypeChangeDialog.h"
-# include "UIMessageCenter.h"
-# include "UIConverter.h"
-# include "UIMedium.h"
-# include "VBoxGlobal.h"
-# include "QIDialogButtonBox.h"
-# include "QILabel.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-UIMediumTypeChangeDialog::UIMediumTypeChangeDialog(QWidget *pParent, const QString &strMediumID)
-    : QIWithRetranslateUI<QIDialog>(pParent)
-    , m_strMediumID(strMediumID)
-{
-    /* Prepare: */
-    prepare();
-}
-
-void UIMediumTypeChangeDialog::sltAccept()
-{
-    /* Try to assign new medium type: */
-    m_medium.SetType(m_enmMediumTypeNew);
-    /* Check for result: */
-    if (!m_medium.isOk())
-    {
-        /* Show error message: */
-        msgCenter().cannotChangeMediumType(m_medium, m_enmMediumTypeOld, m_enmMediumTypeNew, this);
-        return;
-    }
-
-    /* Call to base-class: */
-    QIWithRetranslateUI<QIDialog>::accept();
-}
-
-void UIMediumTypeChangeDialog::sltReject()
-{
-    /* Call to base-class: */
-    QIWithRetranslateUI<QIDialog>::reject();
-}
-
-void UIMediumTypeChangeDialog::retranslateUi()
-{
-    /* Translate window title: */
-    setWindowTitle(tr("Modify medium attributes"));
-
-    /* Translate label: */
-    m_pLabel->setText(tr("<p>You are about to change the settings of the disk image file <b>%1</b>.</p>"
-                         "<p>Please choose one of the following modes and press <b>%2</b> "
-                         "to proceed or <b>%3</b> otherwise.</p>")
-                      .arg(m_medium.GetLocation())
-                      .arg(VBoxGlobal::removeAccelMark(m_pButtonBox->button(QDialogButtonBox::Ok)->text()))
-                      .arg(VBoxGlobal::removeAccelMark(m_pButtonBox->button(QDialogButtonBox::Cancel)->text())));
-
-    /* Translate group-box name: */
-    m_pGroupBox->setTitle(tr("Choose mode:"));
-
-    /* Translate radio-buttons: */
-    QList<QRadioButton*> buttons = findChildren<QRadioButton*>();
-    for (int i = 0; i < buttons.size(); ++i)
-        buttons[i]->setText(gpConverter->toString(buttons[i]->property("mediumType").value<KMediumType>()));
-
-    /* Translate details-pane: */
-    updateDetailsPane();
-}
-
-void UIMediumTypeChangeDialog::sltValidate()
-{
-    /* Search for the checked button: */
-    QRadioButton *pCheckedButton = 0;
-    QList<QRadioButton*> buttons = findChildren<QRadioButton*>();
-    for (int i = 0; i < buttons.size(); ++i)
-    {
-        if (buttons[i]->isChecked())
-        {
-            pCheckedButton = buttons[i];
-            break;
-        }
-    }
-    AssertPtrReturnVoid(pCheckedButton);
-
-    /* Determine chosen type: */
-    m_enmMediumTypeNew = pCheckedButton->property("mediumType").value<KMediumType>();
-
-    /* Enable/disable OK button depending on chosen type,
-     * for now only the previous type is restricted, others are free to choose: */
-    m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(m_enmMediumTypeOld != m_enmMediumTypeNew);
-
-    /* Update details-pane: */
-    updateDetailsPane();
-}
-
-void UIMediumTypeChangeDialog::prepare()
-{
-#ifdef VBOX_WS_MAC
-    /// @todo Is that necessary?
-    setWindowFlags(Qt::Sheet);
-#else /* !VBOX_WS_MAC */
-    /* Enable size-grip: */
-    setSizeGripEnabled(true);
-#endif /* !VBOX_WS_MAC */
-
-    /* Search for corresponding medium: */
-    m_medium = vboxGlobal().medium(m_strMediumID).medium();
-    m_enmMediumTypeOld = m_medium.GetType();
-    m_enmMediumTypeNew = m_enmMediumTypeOld;
-
-    /* Create main layout: */
-    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
-    AssertPtrReturnVoid(pMainLayout);
-    {
-        /* Create label: */
-        m_pLabel = new QILabel;
-        AssertPtrReturnVoid(m_pLabel);
-        {
-            /* Configure label: */
-            m_pLabel->setWordWrap(true);
-            m_pLabel->useSizeHintForWidth(450);
-            m_pLabel->updateGeometry();
-        }
-        /* Add label into main layout: */
-        pMainLayout->addWidget(m_pLabel);
-
-        /* Create group-box: */
-        m_pGroupBox = new QGroupBox;
-        AssertPtrReturnVoid(m_pGroupBox);
-        {
-            /* Configure group-box: */
-            m_pGroupBox->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
-
-            /* Prepares radio-buttons: */
-            prepareMediumTypeButtons();
-        }
-        /* Add group-box into main layout: */
-        pMainLayout->addWidget(m_pGroupBox);
-
-        /* Add a stretch to main layout: */
-        pMainLayout->addStretch();
-
-        /* Create button-box: */
-        m_pButtonBox = new QIDialogButtonBox;
-        AssertPtrReturnVoid(m_pButtonBox);
-        {
-            /* Configure button-box: */
-            m_pButtonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-            m_pButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
-            connect(m_pButtonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(sltAccept()));
-            connect(m_pButtonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(sltReject()));
-        }
-        /* Add button-box into main layout: */
-        pMainLayout->addWidget(m_pButtonBox);
-    }
-
-    /* Retranslate: */
-    retranslateUi();
-
-    /* Revalidate: */
-    sltValidate();
-
-    /* Resize to minimum size: */
-    resize(minimumSizeHint());
-}
-
-void UIMediumTypeChangeDialog::prepareMediumTypeButtons()
-{
-    /* Register required meta-type: */
-    qRegisterMetaType<KMediumType>();
-
-    /* Create group-box layout: */
-    QHBoxLayout *pGroupBoxLayout = new QHBoxLayout(m_pGroupBox);
-    AssertPtrReturnVoid(pGroupBoxLayout);
-    {
-        /* Create button layout: */
-        m_pButtonLayout = new QVBoxLayout;
-        AssertPtrReturnVoid(m_pButtonLayout);
-        {
-            /* Populate radio-buttons: */
-            prepareMediumTypeButton(KMediumType_Normal);
-            prepareMediumTypeButton(KMediumType_Immutable);
-            prepareMediumTypeButton(KMediumType_Writethrough);
-            prepareMediumTypeButton(KMediumType_Shareable);
-            prepareMediumTypeButton(KMediumType_MultiAttach);
-            /* Make sure button reflecting current type is checked: */
-            QList<QRadioButton*> buttons = m_pGroupBox->findChildren<QRadioButton*>();
-            for (int i = 0; i < buttons.size(); ++i)
-            {
-                if (buttons[i]->property("mediumType").value<KMediumType>() == m_enmMediumTypeOld)
-                {
-                    buttons[i]->setChecked(true);
-                    buttons[i]->setFocus();
-                    break;
-                }
-            }
-
-            /* Add stretch into button layout: */
-            m_pButtonLayout->addStretch();
-        }
-        /* Add button layout into group-box layout: */
-        pGroupBoxLayout->addLayout(m_pButtonLayout);
-
-        /* Create details layout: */
-        QVBoxLayout *pDetailsLayout = new QVBoxLayout;
-        AssertPtrReturnVoid(pDetailsLayout);
-        {
-            /* Create details-pane: */
-            m_pDetailsPane = new QILabel;
-            AssertPtrReturnVoid(m_pDetailsPane);
-            {
-                /* Configure details-pane: */
-                m_pDetailsPane->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
-                m_pDetailsPane->setMargin(2);
-                m_pDetailsPane->setWordWrap(true);
-                m_pDetailsPane->useSizeHintForWidth(320);
-                m_pDetailsPane->updateGeometry();
-            }
-            /* Add details-pane into details layout: */
-            pDetailsLayout->addWidget(m_pDetailsPane);
-
-            /* Add stretch into details layout: */
-            pDetailsLayout->addStretch();
-        }
-        /* Add details layout into group-box layout: */
-        pGroupBoxLayout->addLayout(pDetailsLayout);
-    }
-}
-
-void UIMediumTypeChangeDialog::prepareMediumTypeButton(KMediumType mediumType)
-{
-    /* Create radio-button: */
-    QRadioButton *pRadioButton = new QRadioButton(m_pGroupBox);
-    AssertPtrReturnVoid(pRadioButton);
-    {
-        /* Configure radio-button: */
-        connect(pRadioButton, SIGNAL(clicked()), this, SLOT(sltValidate()));
-        pRadioButton->setProperty("mediumType", QVariant::fromValue(mediumType));
-    }
-    /* Add radio-button into layout: */
-    m_pButtonLayout->addWidget(pRadioButton);
-}
-
-void UIMediumTypeChangeDialog::updateDetailsPane()
-{
-    switch (m_enmMediumTypeNew)
-    {
-        case KMediumType_Normal:
-            m_pDetailsPane->setText(tr("This type of medium is attached directly or indirectly, preserved when taking snapshots."));
-            break;
-        case KMediumType_Immutable:
-            m_pDetailsPane->setText(tr("This type of medium is attached indirectly, changes are wiped out the next time the "
-                                       "virtual machine is started."));
-            break;
-        case KMediumType_Writethrough:
-            m_pDetailsPane->setText(tr("This type of medium is attached directly, ignored when taking snapshots."));
-            break;
-        case KMediumType_Shareable:
-            m_pDetailsPane->setText(tr("This type of medium is attached directly, allowed to be used concurrently by several machines."));
-            break;
-        case KMediumType_Readonly:
-            m_pDetailsPane->setText(tr("This type of medium is attached directly, and can be used by several machines."));
-            break;
-        case KMediumType_MultiAttach:
-            m_pDetailsPane->setText(tr("This type of medium is attached indirectly, so that one base medium can be used for several "
-                                       "VMs which have their own differencing medium to store their modifications."));
-            break;
-        default:
-            break;
-    }
-}
-
diff --git a/src/VBox/Frontends/VirtualBox/src/UIMediumTypeChangeDialog.h b/src/VBox/Frontends/VirtualBox/src/UIMediumTypeChangeDialog.h
deleted file mode 100644
index 90e6b0d..0000000
--- a/src/VBox/Frontends/VirtualBox/src/UIMediumTypeChangeDialog.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $Id: UIMediumTypeChangeDialog.h $ */
-/** @file
- * VBox Qt GUI - UIMediumTypeChangeDialog class declaration.
- */
-
-/*
- * Copyright (C) 2011-2016 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIMediumTypeChangeDialog_h___
-#define ___UIMediumTypeChangeDialog_h___
-
-/* GUI includes: */
-#include "QIDialog.h"
-#include "QIWithRetranslateUI.h"
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CMedium.h"
-
-/* Forward declarations: */
-class QGroupBox;
-class QRadioButton;
-class QVBoxLayout;
-class QIDialogButtonBox;
-class QILabel;
-
-
-/** QIDialog extension
-  * providing GUI with possibility to change particular medium type. */
-class UIMediumTypeChangeDialog : public QIWithRetranslateUI<QIDialog>
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs the dialog passing @a pParent to the base-class.
-      * @param  strMediumID  Brings the ID of the medium to be modified. */
-    UIMediumTypeChangeDialog(QWidget *pParent, const QString &strMediumID);
-
-protected:
-
-    /** Handles translation event. */
-    void retranslateUi() /* override */;
-
-protected slots:
-
-    /** Accepts the dialog. */
-    void sltAccept();
-    /** Rejects the dialog. */
-    void sltReject();
-
-    /** Performes the dialog validation. */
-    void sltValidate();
-
-private:
-
-    /** Prepares all. */
-    void prepare();
-    /** Prepares medium-type radio-buttons. */
-    void prepareMediumTypeButtons();
-    /** Prepares radio-button for the passed @a mediumType. */
-    void prepareMediumTypeButton(KMediumType mediumType);
-
-    /** Updates the details-pane. */
-    void updateDetailsPane();
-
-    /** Holds the medium ID reference. */
-    const QString &m_strMediumID;
-    /** Holds the medium instance to be modified. */
-    CMedium m_medium;
-    /** Holds the old medium type. */
-    KMediumType m_enmMediumTypeOld;
-    /** Holds the new medium type. */
-    KMediumType m_enmMediumTypeNew;
-
-    /** Holds the description label instance. */
-    QILabel *m_pLabel;
-    /** Holds the group-box instance. */
-    QGroupBox *m_pGroupBox;
-    /** Holds the button layout instance. */
-    QVBoxLayout *m_pButtonLayout;
-    /** Holds the details-pane instance. */
-    QILabel *m_pDetailsPane;
-    /** Holds the button-box instance. */
-    QIDialogButtonBox *m_pButtonBox;
-};
-
-#endif /* !___UIMediumTypeChangeDialog_h___ */
-
diff --git a/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.cpp b/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.cpp
index 4201af0..b877601 100644
--- a/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -141,8 +141,6 @@ private:
         AssertPtrReturnVoid(m_pMainLayout);
         {
             /* Configure main-layout: */
-            m_pMainLayout->setSpacing(5);
-            /* Not sure 0 margins are default, but just to be safe: */
             m_pMainLayout->setContentsMargins(0, 0, 0, 0);
 
             /* Create close-button: */
@@ -606,9 +604,7 @@ private:
         m_pMainLayout = new QHBoxLayout(this);
         AssertPtrReturnVoid(m_pMainLayout);
         {
-            /* Prepare main-layout: */
-            m_pMainLayout->setSpacing(5);
-            /* Not sure 0 margins are default, but just to be safe: */
+            /* Configure main-layout: */
             m_pMainLayout->setContentsMargins(0, 0, 0, 0);
 
             /* Create close-button: */
@@ -1170,9 +1166,6 @@ QTextEdit* UIVMLogViewer::createLogPage(const QString &strName)
         /* Create page-layout: */
         QVBoxLayout *pPageLayout = new QVBoxLayout(pPageContainer);
         AssertPtrReturn(pPageLayout, 0);
-        {
-            pPageLayout->setContentsMargins(10, 10, 10, 10);
-        }
         /* Create Log-Viewer: */
         QTextEdit *pLogViewer = new QTextEdit(pPageContainer);
         AssertPtrReturn(pLogViewer, 0);
diff --git a/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.h b/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.h
index bd18322..69d012e 100644
--- a/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.h
+++ b/src/VBox/Frontends/VirtualBox/src/UIVMLogViewer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp
index 06682f3..a3ba859 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -124,10 +124,22 @@ void VBoxAboutDlg::prepare()
     }
 
     /* Load image: */
+    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+    const double dRatio = (double)iIconMetric / 32;
     const QIcon icon = UIIconPool::iconSet(strPath);
     m_size = icon.availableSizes().first();
+    m_size *= dRatio;
     m_pixmap = icon.pixmap(m_size);
 
+    // WORKAROUND:
+    // Since we don't have x3 and x4 HiDPI icons yet,
+    // and we hadn't enabled automatic up-scaling for now,
+    // we have to make sure m_pixmap is upscaled to required size.
+    const QSize actualSize = m_pixmap.size() / m_pixmap.devicePixelRatio();
+    if (   actualSize.width() < m_size.width()
+        || actualSize.height() < m_size.height())
+        m_pixmap = m_pixmap.scaled(m_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
     /* Prepare main-layout: */
     prepareMainLayout();
 
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.h b/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.h
index 188e2f6..d5560b0 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.h
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
index 0494057..dc76cc4 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h
index 6d87df3..988a8d0 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlayCommon.h b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlayCommon.h
index a826280..f4589e2 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlayCommon.h
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlayCommon.h
@@ -1,10 +1,10 @@
-/* $Id:  $ */
+/* $Id: VBoxFBOverlayCommon.h $ */
 /** @file
  * VBox Qt GUI - VBoxFrameBuffer Overlay classes declarations.
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxGLSupportInfo.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxGLSupportInfo.cpp
index 0a87d8f..9ea72cf 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxGLSupportInfo.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxGLSupportInfo.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp
index c8bbb7e..78c7977 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -57,8 +57,6 @@ VBoxLicenseViewer::VBoxLicenseViewer(QWidget *pParent /* = 0 */)
     connect (mDisagreeButton, SIGNAL (clicked()), SLOT (reject()));
 
     QVBoxLayout *mainLayout = new QVBoxLayout (this);
-    mainLayout->setSpacing (10);
-    mainLayout->setContentsMargins(10, 10, 10, 10);
     mainLayout->addWidget (mLicenseText);
     mainLayout->addWidget (dbb);
 
diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h b/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h
index 471a76a..e43c421 100644
--- a/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h
+++ b/src/VBox/Frontends/VirtualBox/src/VBoxLicenseViewer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.cpp b/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.cpp
index b72d939..4842924 100644
--- a/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.h b/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.h
index ad243fd..de4a343 100644
--- a/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.h
+++ b/src/VBox/Frontends/VirtualBox/src/converter/UIConverter.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h b/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
index 18bdb27..fe3d162 100644
--- a/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
+++ b/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp b/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
index 5bed8fd..b0282eb 100644
--- a/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
index 8bc4f52..1d1e7fc 100644
--- a/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.cpp
index 1825c9c..31199e6 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.h
index e2c81d9..02fb251 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIAdvancedSlider.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.cpp
index f3a8b0a..0e083ca 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.h
index 73267b0..22af7f3 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonPress.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.cpp
index ba9aabf..1434b02 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.h
index 8e155cd..1c5670b 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowButtonSwitch.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp
index c5f6ee7..1e7ff21 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.h
index c8f9e58..fe8156d 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIArrowSplitter.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.cpp
index a42f474..91657e2 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.h
index 3a88af9b..1b68800 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIComboBox.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.cpp
index c839678..aaa49ff 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.h
index 1717acb..bc24c86 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.cpp
index e4302c5..4d3c56d 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.h
index 3b79a07..61616e2 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIDialogButtonBox.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.cpp
index ce95187..1cb705c 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.h
index 346eb33..1364b96 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIFileDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.cpp
index 017014e..3620eee 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.h b/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.h
index d546873..9bfc298 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QILabel.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.cpp
index 1983275..c9953d9 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.h b/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.h
index 5925d0c..61c1f62 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QILabelSeparator.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.cpp
index 759a90a..64297dc 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.h b/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.h
index 5450e0f..72fcfe6 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QILineEdit.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp
index d8ec0ad..e95e6be 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h
index 0030da4..f58023a 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.cpp
index 75ee301..201ea6b 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.h
index da7d1fb..5ec8bbd 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMainWindow.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp
index f925ae1..baf5c05 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIManagerDialog.cpp
@@ -120,8 +120,11 @@ void QIManagerDialog::prepareCentralWidget()
         AssertPtrReturnVoid(centralWidget()->layout());
         {
             /* Configure layout: */
-            centralWidget()->layout()->setContentsMargins(5, 5, 5, 5);
-            centralWidget()->layout()->setSpacing(10);
+            const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+            const int iT = qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin) / 2;
+            const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2;
+            const int iB = qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin) / 2;
+            centralWidget()->layout()->setContentsMargins(iL, iT, iR, iB);
 
             /* Configure central-widget: */
             configureCentralWidget();
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.cpp
index d600945..4c991c8 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.h
index 31cdb31..adc2ad1 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMenu.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp
index 52a72b3..271038e 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -173,10 +173,7 @@ void QIMessageBox::prepare()
 #ifdef VBOX_WS_MAC
         pMainLayout->setContentsMargins(40, 11, 40, 11);
         pMainLayout->setSpacing(15);
-#else /* !VBOX_WS_MAC */
-        pMainLayout->setContentsMargins(11, 11, 11, 11);
-        pMainLayout->setSpacing(10);
-#endif /* !VBOX_WS_MAC */
+#endif /* VBOX_WS_MAC */
         /* Create top-layout: */
         QHBoxLayout *pTopLayout = new QHBoxLayout;
         AssertPtrReturnVoid(pTopLayout);
@@ -216,7 +213,7 @@ void QIMessageBox::prepare()
         AssertPtrReturnVoid(m_pDetailsContainer);
         {
             /* Configure container: */
-            connect(m_pDetailsContainer, &QIArrowSplitter::sigSizeHintChange, 
+            connect(m_pDetailsContainer, &QIArrowSplitter::sigSizeHintChange,
                     this, &QIMessageBox::sltUpdateSize);
             /* Add details-container into main-layout: */
             pMainLayout->addWidget(m_pDetailsContainer);
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.h
index 58a5a2f..4513206 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIMessageBox.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.cpp
index 1f756d5..e75a455 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.h
index 35c8bfb..3cf713d 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIProcess.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.cpp
index 0d92fcc..6758358 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.h
index 7cb0314..0be9b78 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichTextLabel.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.cpp
index 08994f4..dac3a8d 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.h
index 2a0ba4c..246ad43 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIRichToolButton.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.cpp
index 09b88b6..807951e 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.h b/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.h
index d61bf83..8396538 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QISplitter.h
@@ -1,10 +1,10 @@
-/* $Id:  $ */
+/* $Id: QISplitter.h $ */
 /** @file
  * VBox Qt GUI - Qt extensions: QISplitter class declaration.
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.cpp
index af16252..ef75940 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.h
index 3f11b8e..b30c221 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBar.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.cpp
index 0b3628b..ee287ce 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.h
index 4208f34..c124589 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIStatusBarIndicator.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIStyledItemDelegate.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIStyledItemDelegate.h
index 27699d6..6cda60b 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIStyledItemDelegate.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIStyledItemDelegate.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITabWidget.h b/src/VBox/Frontends/VirtualBox/src/extensions/QITabWidget.h
index e76747e..3447aaa 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITabWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITabWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.cpp
index 6733b7c..a81db6c 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -167,7 +167,7 @@ private:
 
 
 /*********************************************************************************************************************************
-*   Class QIAccessibilityInterfaceForQITableViewCell implementation.                                                              *
+*   Class QIAccessibilityInterfaceForQITableViewCell implementation.                                                             *
 *********************************************************************************************************************************/
 
 QAccessibleInterface *QIAccessibilityInterfaceForQITableViewCell::parent() const
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.h b/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.h
index 3e8302b..998a3f1 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITableView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIToolButton.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIToolButton.h
index 34aacda..34c45c5 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIToolButton.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIToolButton.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.cpp
index dc50181..cbfbf46 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.h b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.h
index eef8215..a7fb20b 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp
index 21b42bb..2794f82 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h
index 2ce5913..dc7fecd 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.cpp
index 365740e..347821a 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.h b/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.h
index 5f10247..eb63894 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.cpp
index bc9c174..fe9bba4 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.h b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.h
index dfae7b7..46ae70e 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.cpp b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.cpp
index eb86063..d3c4e4f 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.h b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.h
index 77d29bf..40567e1 100644
--- a/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/extensions/graphics/QIGraphicsWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
index bc05d75..584d77d 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -139,6 +139,7 @@ const char* UIExtraDataDefs::GUI_Seamless = "GUI/Seamless";
 const char* UIExtraDataDefs::GUI_Scale = "GUI/Scale";
 #ifdef VBOX_WS_X11
 const char* UIExtraDataDefs::GUI_Fullscreen_LegacyMode = "GUI/Fullscreen/LegacyMode";
+const char* UIExtraDataDefs::GUI_DistinguishMachineWindowGroups = "GUI/DistinguishMachineWindowGroups";
 #endif /* VBOX_WS_X11 */
 const char* UIExtraDataDefs::GUI_AutoresizeGuest = "GUI/AutoresizeGuest";
 const char* UIExtraDataDefs::GUI_LastVisibilityStatusForGuestScreen = "GUI/LastVisibilityStatusForGuestScreen";
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
index 1087e6e..5651cec 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -247,6 +247,8 @@ namespace UIExtraDataDefs
 #ifdef VBOX_WS_X11
         /** Holds whether legacy full-screen mode is requested. */
         extern const char* GUI_Fullscreen_LegacyMode;
+        /** Holds whether internal machine-window names should be unique. */
+        extern const char* GUI_DistinguishMachineWindowGroups;
 #endif /* VBOX_WS_X11 */
         /** Holds whether guest-screen auto-resize according machine-window size is enabled. */
         extern const char* GUI_AutoresizeGuest;
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
index 862b6a8..752c7c5 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -244,7 +244,7 @@ void UIExtraDataEventHandler::sltPreprocessExtraDataCanChange(QString strMachine
         if (strKey.startsWith("GUI/"))
         {
             /* Check whether global extra-data property can be applied: */
-            // TODO: Here can be various extra-data flags handling.
+            /// @todo Here can be various extra-data flags handling.
             //       Generally we should check whether one or another flag feats some rule (like reg-exp).
             //       For each required strValue we should set fVeto = true; and fill strVetoReason = "with some text".
         }
@@ -259,7 +259,7 @@ void UIExtraDataEventHandler::sltPreprocessExtraDataChange(QString strMachineID,
         if (strKey.startsWith("GUI/"))
         {
             /* Apply global extra-data property: */
-            // TODO: Here can be various extra-data flags handling.
+            /// @todo Here can be various extra-data flags handling.
             //       Generally we should push one or another flag to various instances which want to handle
             //       those flags independently from UIExtraDataManager. Remember to process each required strValue
             //       from under the m_mutex lock (since we are in another thread) and unlock that m_mutex afterwards.
@@ -1444,8 +1444,11 @@ void UIExtraDataManagerWindow::prepareCentralWidget()
             m_pMainLayout->insertSpacing(0, 10);
 #else /* !VBOX_WS_MAC */
             /* Set spacing/margin like in the selector window: */
-            m_pMainLayout->setSpacing(5);
-            m_pMainLayout->setContentsMargins(5, 5, 5, 5);
+            const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+            const int iT = qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin) / 2;
+            const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2;
+            const int iB = qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin) / 2;
+            m_pMainLayout->setContentsMargins(iL, iT, iR, iB);
 #endif /* !VBOX_WS_MAC */
             /* Prepare tool-bar: */
             prepareToolBar();
@@ -1535,7 +1538,8 @@ void UIExtraDataManagerWindow::preparePaneChooser()
                          pLayout == m_pPaneOfChooser->layout());
         {
             /* Configure layout: */
-            pLayout->setContentsMargins(0, 0, 3, 0);
+            const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 3;
+            pLayout->setContentsMargins(0, 0, iR, 0);
             /* Create chooser-filter: */
             m_pFilterOfChooser = new QLineEdit;
             {
@@ -1600,7 +1604,8 @@ void UIExtraDataManagerWindow::preparePaneData()
                          pLayout == m_pPaneOfData->layout());
         {
             /* Configure layout: */
-            pLayout->setContentsMargins(3, 0, 0, 0);
+            const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 3;
+            pLayout->setContentsMargins(iL, 0, 0, 0);
             /* Create data-filter: */
             m_pFilterOfData = new QLineEdit;
             {
@@ -1981,6 +1986,7 @@ QStringList UIExtraDataManagerWindow::knownExtraDataKeys()
            << GUI_Fullscreen << GUI_Seamless << GUI_Scale
 #ifdef VBOX_WS_X11
            << GUI_Fullscreen_LegacyMode
+           << GUI_DistinguishMachineWindowGroups
 #endif /* VBOX_WS_X11 */
            << GUI_AutoresizeGuest << GUI_LastVisibilityStatusForGuestScreen << GUI_LastGuestSizeHint
            << GUI_VirtualScreenToHostScreen << GUI_AutomountGuestScreens
@@ -2293,8 +2299,8 @@ void UIExtraDataManager::incrementApplicationUpdateCheckCounter()
 
 bool UIExtraDataManager::legacyProgressHandlingRequested()
 {
-    /* 'True' unless feature restricted: */
-    return !isFeatureRestricted(GUI_Progress_LegacyMode);
+    /* 'False' unless feature allowed: */
+    return isFeatureAllowed(GUI_Progress_LegacyMode);
 }
 
 bool UIExtraDataManager::guiFeatureEnabled(GUIFeatureType enmFeature)
@@ -2595,17 +2601,17 @@ QRect UIExtraDataManager::selectorWindowGeometry(QWidget *pWidget)
     }
     while (0);
 
+    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
+    const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
+                                          gpDesktop->availableGeometry();
+
     /* Use geometry (loaded or default): */
-    QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(0, 0, 770, 550);
+    QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(QPoint(0, 0), availableGeometry.size() * .50 /* % */);
 
     /* Take hint-widget into account: */
     if (pWidget)
         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
 
-    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
-    const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
-                                          gpDesktop->availableGeometry();
-
     /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
 #ifdef VBOX_WS_WIN
     /* Make sure resulting geometry is within current bounds: */
@@ -3556,6 +3562,18 @@ bool UIExtraDataManager::legacyFullscreenModeRequested()
     /* 'False' unless feature allowed: */
     return isFeatureAllowed(GUI_Fullscreen_LegacyMode);
 }
+
+bool UIExtraDataManager::distinguishMachineWindowGroups(const QString &strID)
+{
+    /* 'False' unless feature allowed: */
+    return isFeatureAllowed(GUI_DistinguishMachineWindowGroups, strID);
+}
+
+void UIExtraDataManager::setDistinguishMachineWindowGroups(const QString &strID, bool fEnabled)
+{
+    /* 'True' if feature allowed, null-string otherwise: */
+    setExtraDataString(GUI_DistinguishMachineWindowGroups, toFeatureAllowed(fEnabled), strID);
+}
 #endif /* VBOX_WS_X11 */
 
 bool UIExtraDataManager::guestScreenAutoResizeEnabled(const QString &strID)
@@ -3973,17 +3991,17 @@ QRect UIExtraDataManager::informationWindowGeometry(QWidget *pWidget, QWidget *p
     }
     while (0);
 
+    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
+    const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
+                                          gpDesktop->availableGeometry();
+
     /* Use geometry (loaded or default): */
-    QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(0, 0, 600, 450);
+    QRect geometry = fOk ? QRect(iX, iY, iW, iH) : QRect(QPoint(0, 0), availableGeometry.size() * .33 /* % */);
 
     /* Take hint-widget into account: */
     if (pWidget)
         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
 
-    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
-    const QRect availableGeometry = fOk ? gpDesktop->availableGeometry(QPoint(iX, iY)) :
-                                          gpDesktop->availableGeometry();
-
     /* In Windows Qt fails to reposition out of screen window properly, so doing it ourselves: */
 #ifdef VBOX_WS_WIN
     /* Make sure resulting geometry is within current bounds: */
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
index 5591d04..1654a34 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -480,6 +480,11 @@ public:
 #ifdef VBOX_WS_X11
         /** Returns whether legacy full-screen mode is requested. */
         bool legacyFullscreenModeRequested();
+
+        /** Returns whether internal machine-window name should be unique. */
+        bool distinguishMachineWindowGroups(const QString &strID);
+        /** Defines whether internal machine-window name should be unique. */
+        void setDistinguishMachineWindowGroups(const QString &strID, bool fEnabled);
 #endif /* VBOX_WS_X11 */
 
         /** Returns whether guest-screen auto-resize according machine-window size is enabled. */
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/CIShared.h b/src/VBox/Frontends/VirtualBox/src/globals/CIShared.h
index 77bfcf4..8be2e56 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/CIShared.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/CIShared.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp b/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp
index fb27d2a..f604690 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h b/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h
index 5ee307c..17bb86e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/QIWithRetranslateUI.h b/src/VBox/Frontends/VirtualBox/src/globals/QIWithRetranslateUI.h
index 7f4fb30..8db22b0 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/QIWithRetranslateUI.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/QIWithRetranslateUI.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp
index f5cfca2..0fea847 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h b/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h
index ae171d7..439f5b3 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.cpp
index c975eb7..8657769 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.h b/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.h
index dc4ce2a..c5ba5e3 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIAnimationFramework.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
index 82d44f8..9fca6aa 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
index 53d89c9..15d1d8f 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.cpp
index a2c3018..4f96de8 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.h b/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.h
index 64a6e3b..24ca77c 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIDesktopWidgetWatchdog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp
index f7b8b3a..3baa12a 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h
index 1f3ada6..ffd0916 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIImageTools.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
index 757ec2a..e22b88e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h b/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h
index 065173e..9419658 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
index c272d61..85b5f22 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1219,7 +1219,7 @@ void UIMessageCenter::cannotChangeMediumDescription(const CMedium &comMedium, co
           UIErrorString::formatErrorInfo(comMedium));
 }
 
-bool UIMessageCenter::confirmMediumRelease(const UIMedium &medium, QWidget *pParent /* = 0*/) const
+bool UIMessageCenter::confirmMediumRelease(const UIMedium &medium, bool fInduced, QWidget *pParent /* = 0 */) const
 {
     /* Prepare the usage: */
     QStringList usage;
@@ -1232,12 +1232,21 @@ bool UIMessageCenter::confirmMediumRelease(const UIMedium &medium, QWidget *pPar
         usage << machine.GetName();
     }
     /* Show the question: */
-    return questionBinary(pParent, MessageType_Question,
-                          tr("<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>")
-                             .arg(medium.location(), usage.join(", ")),
-                          0 /* auto-confirm id */,
-                          tr("Release", "detach medium"));
+    return !fInduced
+           ? questionBinary(pParent, MessageType_Question,
+                            tr("<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>")
+                               .arg(medium.location(), usage.join(", ")),
+                            0 /* auto-confirm id */,
+                            tr("Release", "detach medium"))
+           : questionBinary(pParent, MessageType_Question,
+                            tr("<p>The changes you requested require this disk to "
+                               "be released from the machines it is attached to.</p>"
+                               "<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>")
+                               .arg(medium.location(), usage.join(", ")),
+                            0 /* auto-confirm id */,
+                            tr("Release", "detach medium"));
 }
 
 bool UIMessageCenter::confirmMediumRemoval(const UIMedium &medium, QWidget *pParent /* = 0*/) const
@@ -1626,6 +1635,30 @@ void UIMessageCenter::cannotCreateHardDiskStorage(const CProgress &progress, con
           UIErrorString::formatErrorInfo(progress));
 }
 
+void UIMessageCenter::cannotCreateMediumStorage(const CVirtualBox &comVBox, const QString &strLocation, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr>")
+             .arg(strLocation),
+          UIErrorString::formatErrorInfo(comVBox));
+}
+
+void UIMessageCenter::cannotCreateMediumStorage(const CMedium &comMedium, const QString &strLocation, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr>")
+             .arg(strLocation),
+          UIErrorString::formatErrorInfo(comMedium));
+}
+
+void UIMessageCenter::cannotCreateMediumStorage(const CProgress &comProgress, const QString &strLocation, QWidget *pParent /* = 0 */) const
+{
+    error(pParent, MessageType_Error,
+          tr("Failed to create the virtual disk image storage <nobr><b>%1</b>.</nobr>")
+             .arg(strLocation),
+          UIErrorString::formatErrorInfo(comProgress));
+}
+
 void UIMessageCenter::cannotRemoveMachineFolder(const QString &strFolderName, QWidget *pParent /* = 0*/) const
 {
     alert(pParent, MessageType_Critical,
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
index 7e82129..d6d283e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -245,7 +245,7 @@ public:
     void cannotMoveMediumStorage(const CMedium &comMedium, const QString &strLocationOld, const QString &strLocationNew, QWidget *pParent = 0) const;
     void cannotMoveMediumStorage(const CProgress &comProgress, const QString &strLocationOld, const QString &strLocationNew, QWidget *pParent = 0) const;
     void cannotChangeMediumDescription(const CMedium &comMedium, const QString &strLocation, QWidget *pParent = 0) const;
-    bool confirmMediumRelease(const UIMedium &medium, QWidget *pParent = 0) const;
+    bool confirmMediumRelease(const UIMedium &medium, bool fInduced, QWidget *pParent = 0) const;
     bool confirmMediumRemoval(const UIMedium &medium, QWidget *pParent = 0) const;
     int confirmDeleteHardDiskStorage(const QString &strLocation, QWidget *pParent = 0) const;
     void cannotDeleteHardDiskStorage(const CMedium &medium, const QString &strLocation, QWidget *pParent = 0) const;
@@ -282,6 +282,9 @@ public:
     void cannotCreateHardDiskStorage(const CVirtualBox &vbox, const QString &strLocation,QWidget *pParent = 0) const;
     void cannotCreateHardDiskStorage(const CMedium &medium, const QString &strLocation, QWidget *pParent = 0) const;
     void cannotCreateHardDiskStorage(const CProgress &progress, const QString &strLocation, QWidget *pParent = 0) const;
+    void cannotCreateMediumStorage(const CVirtualBox &comVBox, const QString &strLocation, QWidget *pParent = 0) const;
+    void cannotCreateMediumStorage(const CMedium &comMedium, const QString &strLocation, QWidget *pParent = 0) const;
+    void cannotCreateMediumStorage(const CProgress &comProgress, const QString &strLocation, QWidget *pParent = 0) const;
     void cannotRemoveMachineFolder(const QString &strFolderName, QWidget *pParent = 0) const;
     void cannotRewriteMachineFolder(const QString &strFolderName, QWidget *pParent = 0) const;
     void cannotCreateMachineFolder(const QString &strFolderName, QWidget *pParent = 0) const;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.cpp
index 2650b99..e1b54e3 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.h b/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.h
index 1f2de31..7480daa 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIModalWindowManager.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp
index 23d680d..642f38a 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h b/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h
index e420f79..f4ec264 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -31,7 +31,7 @@ class QWidget;
 class UIPopupStack;
 class CAudioAdapter;
 class CConsole;
-class CEmulatedUSB; 
+class CEmulatedUSB;
 class CMachine;
 class CNetworkAdapter;
 class CVirtualBox;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.cpp
index ee08797..368a2c5 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.h b/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.h
index e000972..09dc3e7 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIShortcutPool.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.cpp
index fe04efe..74f6a86 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.h b/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.h
index a3eb13d..5c0ad89 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIThreadPool.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
index e82c453..108960e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -168,6 +168,7 @@
 # include <X11/Xmd.h>
 # include <X11/Xlib.h>
 # include <X11/Xatom.h>
+# include <X11/Xutil.h>
 # include <X11/extensions/Xinerama.h>
 # define BOOL PRBool
 #endif /* VBOX_WS_X11 */
@@ -3321,6 +3322,32 @@ void VBoxGlobal::setTopLevelGeometry(QWidget *pWidget, const QRect &rect)
     VBoxGlobal::setTopLevelGeometry(pWidget, rect.x(), rect.y(), rect.width(), rect.height());
 }
 
+#ifdef VBOX_WS_X11
+void VBoxGlobal::setWMClass(QWidget *pWidget, const QString &strNameString, const QString &strClassString)
+{
+    /* Make sure all arguments set: */
+    AssertReturnVoid(pWidget && !strNameString.isNull() && !strClassString.isNull());
+
+    /* Define QByteArray objects to make sure data is alive within the scope: */
+    QByteArray nameByteArray;
+    /* Check the existence of RESOURCE_NAME env. variable and override name string if necessary: */
+    const char resourceName[] = "RESOURCE_NAME";
+    if (qEnvironmentVariableIsSet(resourceName))
+        nameByteArray = qgetenv(resourceName);
+    else
+        nameByteArray = strNameString.toLatin1();
+    QByteArray classByteArray = strClassString.toLatin1();
+
+    AssertReturnVoid(nameByteArray.data() && classByteArray.data());
+
+    XClassHint windowClass;
+    windowClass.res_name = nameByteArray.data();
+    windowClass.res_class = classByteArray.data();
+    /* Set WM_CLASS of the window to passed name and class strings: */
+    XSetClassHint(QX11Info::display(), pWidget->window()->winId(), &windowClass);
+}
+#endif /* VBOX_WS_X11 */
+
 // Public slots
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -3563,7 +3590,7 @@ void VBoxGlobal::prepare()
             msgCenter().cannotInitCOM(rc);
         return;
     }
-    
+
 #ifdef VBOX_WITH_SDS
     // setup Client COM Security to enable impersonation required by VBOX_SDS
     HRESULT hrGUICoInitializeSecurity = CoInitializeSecurity(NULL,
@@ -3837,7 +3864,6 @@ void VBoxGlobal::prepare()
         RTPathAppend(szLogFile, sizeof(szLogFile), "selectorwindow.log");
         pszLogFile = szLogFile;
         /* Create release logger, to file: */
-        char szError[RTPATH_MAX + 128];
         com::VBoxLogRelCreate("GUI VM Selector Window",
                               pszLogFile,
                               RTLOGFLAGS_PREFIX_TIME_PROG,
@@ -3848,8 +3874,7 @@ void VBoxGlobal::prepare()
                               1,
                               60 * 60,
                               _1M,
-                              szError,
-                              sizeof(szError));
+                              NULL /*pErrInfo*/);
 
         LogRel(("Qt version: %s\n", qtRTVersionString().toUtf8().constData()));
     }
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
index d3835fe..59effdb 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -452,6 +452,11 @@ public:
       * @note  Take into account that this request may fail on X11. */
     static void setTopLevelGeometry(QWidget *pWidget, const QRect &rect);
 
+#ifdef VBOX_WS_X11
+    /** Assigns WM_CLASS property for passed @a pWidget. */
+    static void setWMClass(QWidget *pWidget, const QString &strNameString, const QString &strClassString);
+#endif
+
 signals:
 
     /** Notifies listeners about the VBoxSVC availability change. */
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h
index 419dbca..86ae563 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxVersion.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxVersion.h
index d76ccd6..6bdd21e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxVersion.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxVersion.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp b/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp
index 09d79b2..8206d7e 100644
--- a/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/hardenedmain.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp b/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
index f971b48..184a927 100644
--- a/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
@@ -1138,6 +1138,11 @@ void UIHostNetworkManager::configureButtonBox()
             button(ButtonType_Reset), &QPushButton::setEnabled);
     connect(buttonBox(), &QIDialogButtonBox::clicked,
             this, &UIHostNetworkManager::sltHandleButtonBoxClick);
+    // WORKAROUND:
+    // Since we connected signals later than extra-data loaded
+    // for signals above, we should handle that stuff here again:
+    button(ButtonType_Apply)->setVisible(gEDataManager->hostNetworkManagerDetailsExpanded());
+    button(ButtonType_Reset)->setVisible(gEDataManager->hostNetworkManagerDetailsExpanded());
 }
 
 void UIHostNetworkManager::finalize()
diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp
index 086bfde..4776ee6 100644
--- a/src/VBox/Frontends/VirtualBox/src/main.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/main.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp
index f1c3dd4..6453584 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -101,6 +101,7 @@ UIMedium& UIMedium::operator=(const UIMedium &other)
 
     m_strHardDiskType = other.hardDiskType();
     m_strHardDiskFormat = other.hardDiskFormat();
+    m_fHasChildren = other.hasChildren();
     m_strStorageDetails = other.storageDetails();
     m_strEncryptionPasswordID = other.encryptionPasswordID();
 
@@ -168,6 +169,7 @@ void UIMedium::refresh()
     /* Reset hard drive related parameters: */
     m_strHardDiskType = QString();
     m_strHardDiskFormat = QString();
+    m_fHasChildren = false;
     m_strStorageDetails = QString();
     m_strEncryptionPasswordID = QString();
 
@@ -253,6 +255,9 @@ void UIMedium::refresh()
             /* Refresh hard drive format: */
             m_strHardDiskFormat = m_medium.GetFormat();
 
+            /* Refresh hard drive parental status: */
+            m_fHasChildren = m_medium.GetChildren().size();
+
             /* Refresh hard drive storage details: */
             m_strStorageDetails = gpConverter->toString(m_enmMediumVariant);
 
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h b/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h
index f03e66a..eec81cb 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMedium.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -216,6 +216,11 @@ public:
       * @note  In "don't show diffs" mode, this method returns the disk format of root in the given hard drive chain. */
     QString hardDiskFormat(bool fNoDiffs = false) const { return fNoDiffs ? root().m_strHardDiskFormat : m_strHardDiskFormat; }
 
+    /** Returns whether the hard drive medium disk has childred.
+      * @param fNoDiffs @c true to enable user-friendly "don't show diffs" mode.
+      * @note  In "don't show diffs" mode, this method returns the disk format of root in the given hard drive chain. */
+    bool hasChildren(bool fNoDiffs = false) const { return fNoDiffs ? root().m_fHasChildren : m_fHasChildren; }
+
     /** Returns the hard drive medium storage details. */
     QString storageDetails() const { return m_strStorageDetails; }
     /** Returns the hard drive medium encryption password ID. */
@@ -378,6 +383,8 @@ private:
     QString m_strHardDiskType;
     /** Holds the hard drive medium disk format. */
     QString m_strHardDiskFormat;
+    /** Holds whether the hard drive medium disk has children. */
+    bool m_fHasChildren;
     /** Holds the hard drive medium storage details. */
     QString m_strStorageDetails;
     /** Holds the hard drive medium encryption password ID. */
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.cpp
index 37d47ed..6106f13 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.h b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.h
index 75ca84c..1e82005 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.cpp
index 5e64904..bf3c14b 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.cpp
@@ -25,18 +25,21 @@
 # include <QPushButton>
 # include <QSlider>
 # include <QStackedLayout>
+# include <QStyle>
 # include <QTextEdit>
 # include <QVBoxLayout>
 
 /* GUI includes: */
 # include "QIDialogButtonBox.h"
+# include "QIFileDialog.h"
 # include "QILabel.h"
 # include "QILineEdit.h"
 # include "QITabWidget.h"
+# include "QIToolButton.h"
 # include "UIConverter.h"
-# include "UIFilePathSelector.h"
 # include "UIIconPool.h"
 # include "UIMediumDetailsWidget.h"
+# include "UIMediumManager.h"
 # include "UIMediumSizeEditor.h"
 # include "VBoxGlobal.h"
 
@@ -46,17 +49,19 @@
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
 
-UIMediumDetailsWidget::UIMediumDetailsWidget(EmbedTo enmEmbedding, QWidget *pParent /* = 0 */)
+UIMediumDetailsWidget::UIMediumDetailsWidget(UIMediumManagerWidget *pParent, EmbedTo enmEmbedding)
     : QIWithRetranslateUI<QWidget>(pParent)
+    , m_pParent(pParent)
     , m_enmEmbedding(enmEmbedding)
     , m_oldData(UIDataMedium())
     , m_newData(UIDataMedium())
     , m_pTabWidget(0)
     , m_pLabelType(0), m_pComboBoxType(0), m_pErrorPaneType(0)
-    , m_pLabelLocation(0), m_pSelectorLocation(0), m_pErrorPaneLocation(0)
+    , m_pLabelLocation(0), m_pEditorLocation(0), m_pErrorPaneLocation(0), m_pButtonLocation(0)
     , m_pLabelDescription(0), m_pEditorDescription(0), m_pErrorPaneDescription(0)
     , m_pLabelSize(0), m_pEditorSize(0), m_pErrorPaneSize(0)
     , m_pButtonBox(0)
+    , m_pProgressBar(0)
     , m_fValid(true)
     , m_pLayoutDetails(0)
 {
@@ -83,6 +88,11 @@ void UIMediumDetailsWidget::setData(const UIDataMedium &data)
     loadDataForDetails();
 }
 
+void UIMediumDetailsWidget::setOptionsEnabled(bool fEnabled)
+{
+    m_pTabWidget->widget(0)->setEnabled(fEnabled);
+}
+
 void UIMediumDetailsWidget::retranslateUi()
 {
     /* Translate tab-widget: */
@@ -101,7 +111,8 @@ void UIMediumDetailsWidget::retranslateUi()
     m_pComboBoxType->setToolTip(tr("Holds the type of this medium."));
     for (int i = 0; i < m_pComboBoxType->count(); ++i)
         m_pComboBoxType->setItemText(i, gpConverter->toString(m_pComboBoxType->itemData(i).value<KMediumType>()));
-    m_pSelectorLocation->setToolTip(tr("Holds the location of this medium."));
+    m_pEditorLocation->setToolTip(tr("Holds the location of this medium."));
+    m_pButtonLocation->setToolTip(tr("Choose Medium Location"));
     m_pEditorDescription->setToolTip(tr("Holds the description of this medium."));
     m_pEditorSize->setToolTip(tr("Holds the size of this medium."));
 
@@ -140,6 +151,19 @@ void UIMediumDetailsWidget::sltLocationPathChanged(const QString &strPath)
     updateButtonStates();
 }
 
+void UIMediumDetailsWidget::sltChooseLocationPath()
+{
+    /* Open file-save dialog to choose location for current medium: */
+    const QString strFileName = QIFileDialog::getSaveFileName(m_pEditorLocation->text(),
+                                                              QApplication::translate("UIMediumManager", "Current extension (*.%1)")
+                                                                 .arg(QFileInfo(m_oldData.m_options.m_strLocation).suffix()),
+                                                              this,
+                                                              QApplication::translate("UIMediumManager", "Choose the location of this medium"),
+                                                              0, true, true);
+    if (!strFileName.isNull())
+        m_pEditorLocation->setText(QDir::toNativeSeparators(strFileName));
+}
+
 void UIMediumDetailsWidget::sltDescriptionTextChanged()
 {
     m_newData.m_options.m_strDescription = m_pEditorDescription->toPlainText();
@@ -260,6 +284,7 @@ void UIMediumDetailsWidget::prepareTabOptions()
                 {
                     /* Configure editor: */
                     m_pLabelType->setBuddy(m_pComboBoxType);
+                    m_pComboBoxType->setSizeAdjustPolicy(QComboBox::AdjustToContents);
                     m_pComboBoxType->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
                     connect(m_pComboBoxType, static_cast<void(QComboBox::*)(int)>(&QComboBox::activated),
                             this, &UIMediumDetailsWidget::sltTypeIndexChanged);
@@ -307,19 +332,17 @@ void UIMediumDetailsWidget::prepareTabOptions()
                 pLayoutLocation->setContentsMargins(0, 0, 0, 0);
 
                 /* Create location editor: */
-                m_pSelectorLocation = new UIFilePathSelector;
-                AssertPtrReturnVoid(m_pSelectorLocation);
+                m_pEditorLocation = new QLineEdit;
+                AssertPtrReturnVoid(m_pEditorLocation);
                 {
                     /* Configure editor: */
-                    m_pLabelLocation->setBuddy(m_pSelectorLocation);
-                    m_pSelectorLocation->setResetEnabled(false);
-                    m_pSelectorLocation->setMode(UIFilePathSelector::Mode_File_Save);
-                    m_pSelectorLocation->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
-                    connect(m_pSelectorLocation, &UIFilePathSelector::pathChanged,
+                    m_pLabelLocation->setBuddy(m_pEditorLocation);
+                    m_pEditorLocation->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
+                    connect(m_pEditorLocation, &QLineEdit::textChanged,
                             this, &UIMediumDetailsWidget::sltLocationPathChanged);
 
                     /* Add into layout: */
-                    pLayoutLocation->addWidget(m_pSelectorLocation);
+                    pLayoutLocation->addWidget(m_pEditorLocation);
                 }
 
                 /* Create location error pane: */
@@ -334,6 +357,22 @@ void UIMediumDetailsWidget::prepareTabOptions()
                     pLayoutLocation->addWidget(m_pErrorPaneLocation);
                 }
 
+                /* Create location button: */
+                m_pButtonLocation = new QIToolButton;
+                AssertPtrReturnVoid(m_pButtonLocation);
+                {
+                    /* Configure editor: */
+                    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
+                    m_pButtonLocation->setIconSize(QSize(iIconMetric, iIconMetric));
+                    m_pButtonLocation->setIcon(UIIconPool::iconSet(":/select_file_16px.png"));
+                    m_pButtonLocation->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+                    connect(m_pButtonLocation, &QIToolButton::clicked,
+                            this, &UIMediumDetailsWidget::sltChooseLocationPath);
+
+                    /* Add into layout: */
+                    pLayoutLocation->addWidget(m_pButtonLocation);
+                }
+
                 /* Add into layout: */
                 pLayoutOptions->addLayout(pLayoutLocation, 1, 1);
             }
@@ -464,9 +503,23 @@ void UIMediumDetailsWidget::prepareTabOptions()
                 /* Create button-box: */
                 m_pButtonBox = new QIDialogButtonBox;
                 AssertPtrReturnVoid(m_pButtonBox);
-                /* Configure button-box: */
-                m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
-                connect(m_pButtonBox, &QIDialogButtonBox::clicked, this, &UIMediumDetailsWidget::sltHandleButtonBoxClick);
+                {
+                    /* Configure button-box: */
+                    m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
+                    connect(m_pButtonBox, &QIDialogButtonBox::clicked, this, &UIMediumDetailsWidget::sltHandleButtonBoxClick);
+
+                    /* Create progress-bar: */
+                    m_pProgressBar = new UIEnumerationProgressBar;
+                    AssertPtrReturnVoid(m_pProgressBar);
+                    {
+                        /* Configure progress-bar: */
+                        m_pProgressBar->hide();
+                        /* Add progress-bar into button-box layout: */
+                        m_pButtonBox->addExtraWidget(m_pProgressBar);
+                        /* Notify parent it has progress-bar: */
+                        m_pParent->setProgressBar(m_pProgressBar);
+                    }
+                }
 
                 /* Add into layout: */
                 pLayoutOptions->addWidget(m_pButtonBox, 7, 0, 1, 2);
@@ -515,7 +568,6 @@ void UIMediumDetailsWidget::prepareInformationContainer(UIMediumType enmType, in
         {
             /* Configure layout: */
             pLayout->setVerticalSpacing(0);
-            pLayout->setContentsMargins(5, 5, 5, 5);
             pLayout->setColumnStretch(1, 1);
 
             /* Create labels & fields: */
@@ -528,6 +580,7 @@ void UIMediumDetailsWidget::prepareInformationContainer(UIMediumType enmType, in
                 AssertPtrReturnVoid(pLabel);
                 {
                     /* Configure label: */
+                    pLabel->setMargin(2);
                     pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
 
                     /* Add into layout: */
@@ -540,6 +593,7 @@ void UIMediumDetailsWidget::prepareInformationContainer(UIMediumType enmType, in
                 AssertPtrReturnVoid(pField);
                 {
                     /* Configure field: */
+                    pField->setMargin(2);
                     pField->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
                     pField->setFullSizeSelection(true);
 
@@ -573,23 +627,44 @@ void UIMediumDetailsWidget::loadDataForOptions()
         /* Populate type combo-box: */
         switch (m_newData.m_enmType)
         {
+            case UIMediumType_HardDisk:
+            {
+                /* No type changes for differencing disks: */
+                if (m_oldData.m_enmVariant & KMediumVariant_Diff)
+                    m_pComboBoxType->addItem(QString(), m_oldData.m_options.m_enmType);
+                else
+                {
+                    m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Normal));
+                    m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Immutable));
+                    if (!m_newData.m_fHasChildren)
+                    {
+                        m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Writethrough));
+                        m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Shareable));
+                    }
+                    m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_MultiAttach));
+                }
+                break;
+            }
             case UIMediumType_DVD:
-            case UIMediumType_Floppy:
+            {
                 m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Readonly));
                 break;
-            case UIMediumType_HardDisk:
-                m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Normal));
-                m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Immutable));
+            }
+            case UIMediumType_Floppy:
+            {
                 m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Writethrough));
-                m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Shareable));
-                m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_MultiAttach));
+                m_pComboBoxType->addItem(QString(), QVariant::fromValue(KMediumType_Readonly));
                 break;
+            }
             default:
                 break;
         }
         /* Translate type combo-box: */
         for (int i = 0; i < m_pComboBoxType->count(); ++i)
+        {
             m_pComboBoxType->setItemText(i, gpConverter->toString(m_pComboBoxType->itemData(i).value<KMediumType>()));
+            m_pComboBoxType->setItemData(i, mediumTypeTip(m_pComboBoxType->itemData(i).value<KMediumType>()), Qt::ToolTipRole);
+        }
     }
 
     /* Choose the item with required type to be the current one: */
@@ -600,9 +675,9 @@ void UIMediumDetailsWidget::loadDataForOptions()
 
     /* Load location: */
     m_pLabelLocation->setEnabled(m_newData.m_fValid);
-    m_pSelectorLocation->setEnabled(m_newData.m_fValid);
-    m_pSelectorLocation->setPath(m_newData.m_options.m_strLocation);
-    sltLocationPathChanged(m_pSelectorLocation->path());
+    m_pEditorLocation->setEnabled(m_newData.m_fValid);
+    m_pButtonLocation->setEnabled(m_newData.m_fValid);
+    m_pEditorLocation->setText(m_newData.m_options.m_strLocation);
 
     /* Load description: */
     m_pLabelDescription->setEnabled(m_newData.m_fValid);
@@ -617,6 +692,9 @@ void UIMediumDetailsWidget::loadDataForOptions()
     m_pEditorSize->setEnabled(fEnableResize);
     m_pEditorSize->setMediumSize(m_newData.m_options.m_uLogicalSize);
     sltSizeValueChanged(m_pEditorSize->mediumSize());
+
+    /* Revalidate: */
+    revalidate();
 }
 
 void UIMediumDetailsWidget::loadDataForDetails()
@@ -652,8 +730,8 @@ void UIMediumDetailsWidget::revalidate(QWidget *pWidget /* = 0 */)
     }
     if (!pWidget || pWidget == m_pErrorPaneLocation)
     {
-        /* Always valid for now: */
-        const bool fError = false;
+        /* If medium is valid itself, details are valid only is location is set: */
+        const bool fError = m_newData.m_fValid && m_newData.m_options.m_strLocation.isEmpty();
         m_pErrorPaneLocation->setVisible(fError);
         if (fError)
             m_fValid = false;
@@ -685,9 +763,8 @@ void UIMediumDetailsWidget::retranslateValidation(QWidget *pWidget /* = 0 */)
 //    if (!pWidget || pWidget == m_pErrorPaneType)
 //        m_pErrorPaneType->setToolTip(tr("Cannot change from type <b>%1</b> to <b>%2</b>.")
 //                                     .arg(m_oldData.m_options.m_enmType).arg(m_newData.m_options.m_enmType));
-//    if (!pWidget || pWidget == m_pErrorPaneLocation)
-//        m_pErrorPaneLocation->setToolTip(tr("Cannot change medium location from <b>%1</b> to <b>%2</b>.")
-//                                         .arg(m_oldData.m_options.m_strLocation).arg(m_newData.m_options.m_strLocation));
+    if (!pWidget || pWidget == m_pErrorPaneLocation)
+        m_pErrorPaneLocation->setToolTip(tr("Location can not be empty."));
 //    if (!pWidget || pWidget == m_pErrorPaneDescription)
 //        m_pErrorPaneDescription->setToolTip(tr("Cannot change medium description from <b>%1</b> to <b>%2</b>.")
 //                                               .arg(m_oldData.m_options.m_strDescription).arg(m_newData.m_options.m_strDescription));
@@ -726,6 +803,31 @@ void UIMediumDetailsWidget::updateButtonStates()
     emit sigAcceptAllowed((m_oldData != m_newData) && m_fValid);
 }
 
+/* static */
+QString UIMediumDetailsWidget::mediumTypeTip(KMediumType enmType)
+{
+    switch (enmType)
+    {
+        case KMediumType_Normal:
+            return tr("This type of medium is attached directly or indirectly, preserved when taking snapshots.");
+        case KMediumType_Immutable:
+            return tr("This type of medium is attached indirectly, changes are wiped out the next time the "
+                      "virtual machine is started.");
+        case KMediumType_Writethrough:
+            return tr("This type of medium is attached directly, ignored when taking snapshots.");
+        case KMediumType_Shareable:
+            return tr("This type of medium is attached directly, allowed to be used concurrently by several machines.");
+        case KMediumType_Readonly:
+            return tr("This type of medium is attached directly, and can be used by several machines.");
+        case KMediumType_MultiAttach:
+            return tr("This type of medium is attached indirectly, so that one base medium can be used for several "
+                      "VMs which have their own differencing medium to store their modifications.");
+        default:
+            break;
+    }
+    AssertFailedReturn(QString());
+}
+
 QWidget *UIMediumDetailsWidget::infoContainer(UIMediumType enmType) const
 {
     /* Return information-container for known medium type: */
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.h b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.h
index f5e350a..7474e57 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumDetailsWidget.h
@@ -33,12 +33,15 @@
 class QAbstractButton;
 class QComboBox;
 class QLabel;
+class QLineEdit;
 class QStackedLayout;
 class QTextEdit;
 class QWidget;
 class QILabel;
 class QITabWidget;
-class UIFilePathSelector;
+class QIToolButton;
+class UIEnumerationProgressBar;
+class UIMediumManagerWidget;
 class UIMediumSizeEditor;
 
 
@@ -118,6 +121,7 @@ struct UIDataMedium
         : m_fValid(false)
         , m_enmType(UIMediumType_Invalid)
         , m_enmVariant(KMediumVariant_Max)
+        , m_fHasChildren(false)
         , m_options(UIDataMediumOptions())
         , m_details(UIDataMediumDetails())
     {}
@@ -127,6 +131,7 @@ struct UIDataMedium
         : m_fValid(false)
         , m_enmType(enmType)
         , m_enmVariant(KMediumVariant_Max)
+        , m_fHasChildren(false)
         , m_options(UIDataMediumOptions())
         , m_details(UIDataMediumDetails())
     {}
@@ -138,6 +143,7 @@ struct UIDataMedium
                && (m_fValid == other.m_fValid)
                && (m_enmType == other.m_enmType)
                && (m_enmVariant == other.m_enmVariant)
+               && (m_fHasChildren == other.m_fHasChildren)
                && (m_options == other.m_options)
                && (m_details == other.m_details)
                ;
@@ -154,6 +160,8 @@ struct UIDataMedium
     UIMediumType m_enmType;
     /** Holds the medium variant. */
     KMediumVariant m_enmVariant;
+    /** Holds whether medium has children. */
+    bool m_fHasChildren;
 
     /** Holds the medium options. */
     UIDataMediumOptions m_options;
@@ -183,7 +191,7 @@ public:
 
     /** Constructs medium details dialog passing @a pParent to the base-class.
       * @param  enmEmbedding  Brings embedding type. */
-    UIMediumDetailsWidget(EmbedTo enmEmbedding, QWidget *pParent = 0);
+    UIMediumDetailsWidget(UIMediumManagerWidget *pParent, EmbedTo enmEmbedding);
 
     /** Defines the raised details @a enmType. */
     void setCurrentType(UIMediumType enmType);
@@ -193,6 +201,11 @@ public:
     /** Defines the @a data for passed @a enmType. */
     void setData(const UIDataMedium &data);
 
+public slots:
+
+    /** Defines whether the options tab is @a fEnabled. */
+    void setOptionsEnabled(bool fEnabled);
+
 protected:
 
     /** Handles translation event. */
@@ -206,6 +219,8 @@ private slots:
         void sltTypeIndexChanged(int iIndex);
         /** Handles location change. */
         void sltLocationPathChanged(const QString &strPath);
+        /** Handles request to choose location. */
+        void sltChooseLocationPath();
         /** Handles description text change. */
         void sltDescriptionTextChanged();
         /** Handles size editor change. */
@@ -249,6 +264,9 @@ private:
         void retranslateValidation(QWidget *pWidget = 0);
         /** Updates button states. */
         void updateButtonStates();
+
+        /** Returns tool-tip for passed medium @a enmType. */
+        static QString mediumTypeTip(KMediumType enmType);
     /** @} */
 
     /** @name Details stuff.
@@ -263,6 +281,8 @@ private:
 
     /** @name General variables.
       * @{ */
+        /** Holds the parent reference. */
+        UIMediumManagerWidget *m_pParent;
         /** Holds the parent widget embedding type. */
         const EmbedTo m_enmEmbedding;
 
@@ -285,11 +305,13 @@ private:
         QLabel    *m_pErrorPaneType;
 
         /** Holds the location label. */
-        QLabel             *m_pLabelLocation;
-        /** Holds the location selector. */
-        UIFilePathSelector *m_pSelectorLocation;
+        QLabel       *m_pLabelLocation;
+        /** Holds the location editor. */
+        QLineEdit    *m_pEditorLocation;
         /** Holds the location error pane. */
-        QLabel             *m_pErrorPaneLocation;
+        QLabel       *m_pErrorPaneLocation;
+        /** Holds the location button. */
+        QIToolButton *m_pButtonLocation;
 
         /** Holds the description label. */
         QLabel    *m_pLabelDescription;
@@ -306,7 +328,9 @@ private:
         QLabel             *m_pErrorPaneSize;
 
         /** Holds the button-box instance. */
-        QIDialogButtonBox *m_pButtonBox;
+        QIDialogButtonBox        *m_pButtonBox;
+        /** Holds the progress-bar widget instance. */
+        UIEnumerationProgressBar *m_pProgressBar;
 
         /** Holds whether options are valid. */
         bool m_fValid;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp
index 7c84ddb..43cf8a6 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -74,15 +74,15 @@ UIMediumEnumerator::UIMediumEnumerator()
     qRegisterMetaType<UIMedium>();
 
     /* Prepare Main event handlers: */
-    connect(gVBoxEvents, SIGNAL(sigMachineDataChange(QString)), this, SLOT(sltHandleMachineUpdate(QString)));
-    connect(gVBoxEvents, SIGNAL(sigSnapshotTake(QString, QString)), this, SLOT(sltHandleMachineUpdate(QString)));
-    connect(gVBoxEvents, SIGNAL(sigSnapshotDelete(QString, QString)), this, SLOT(sltHandleSnapshotDeleted(QString, QString)));
-    connect(gVBoxEvents, SIGNAL(sigSnapshotChange(QString, QString)), this, SLOT(sltHandleMachineUpdate(QString)));
-    connect(gVBoxEvents, SIGNAL(sigSnapshotRestore(QString, QString)), this, SLOT(sltHandleSnapshotDeleted(QString, QString)));
-    connect(gVBoxEvents, SIGNAL(sigMachineRegistered(QString, bool)), this, SLOT(sltHandleMachineRegistration(QString, bool)));
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigMachineDataChange, this, &UIMediumEnumerator::sltHandleMachineUpdate);
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigSnapshotTake,      this, &UIMediumEnumerator::sltHandleMachineUpdate);
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigSnapshotDelete,    this, &UIMediumEnumerator::sltHandleSnapshotDeleted);
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigSnapshotChange,    this, &UIMediumEnumerator::sltHandleMachineUpdate);
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigSnapshotRestore,   this, &UIMediumEnumerator::sltHandleSnapshotDeleted);
+    connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigMachineRegistered, this, &UIMediumEnumerator::sltHandleMachineRegistration);
 
     /* Listen for global thread-pool: */
-    connect(vboxGlobal().threadPool(), SIGNAL(sigTaskComplete(UITask*)), this, SLOT(sltHandleMediumEnumerationTaskComplete(UITask*)));
+    connect(vboxGlobal().threadPool(), &UIThreadPool::sigTaskComplete, this, &UIMediumEnumerator::sltHandleMediumEnumerationTaskComplete);
 }
 
 QList<QString> UIMediumEnumerator::mediumIDs() const
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.h b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.h
index a601865..40c5099 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
index 8464c56..841d2e2 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
@@ -34,6 +34,7 @@
 # include "UIMediumManager.h"
 # include "UIWizardCloneVD.h"
 # include "UIMessageCenter.h"
+# include "QIFileDialog.h"
 # include "QITabWidget.h"
 # include "QITreeWidget.h"
 # include "QILabel.h"
@@ -71,11 +72,15 @@ public:
     UIMediumItem(const UIMedium &guiMedium, UIMediumItem *pParent);
 
     /** Copies UIMedium wrapped by <i>this</i> item. */
-    virtual bool copy() = 0;
+    virtual bool copy();
+    /** Moves UIMedium wrapped by <i>this</i> item. */
+    virtual bool move();
     /** Removes UIMedium wrapped by <i>this</i> item. */
     virtual bool remove() = 0;
-    /** Releases UIMedium wrapped by <i>this</i> item. */
-    virtual bool release();
+    /** Releases UIMedium wrapped by <i>this</i> item.
+      * @param  fInduced  Brings whether this action is caused by other user's action,
+      *                   not a direct order to release particularly selected medium. */
+    virtual bool release(bool fInduced = false);
 
     /** Refreshes item fully. */
     void refreshAll();
@@ -109,6 +114,8 @@ public:
     /** Returns QString <i>tool-tip</i> of the wrapped UIMedium. */
     QString toolTip() const { return m_guiMedium.toolTip(); }
 
+    /** Returns a vector of IDs of all machines wrapped UIMedium is attached to. */
+    const QList<QString> &machineIds() const { return m_guiMedium.machineIds(); }
     /** Returns QString <i>usage</i> of the wrapped UIMedium. */
     QString usage() const { return m_guiMedium.usage(); }
     /** Returns whether wrapped UIMedium is used. */
@@ -159,8 +166,6 @@ public:
 
 protected:
 
-    /** Copies UIMedium wrapped by <i>this</i> item. */
-    virtual bool copy() /* override */;
     /** Removes UIMedium wrapped by <i>this</i> item. */
     virtual bool remove() /* override */;
     /** Releases UIMedium wrapped by <i>this</i> item from virtual @a comMachine. */
@@ -184,8 +189,6 @@ public:
 
 protected:
 
-    /** Copies UIMedium wrapped by <i>this</i> item. */
-    virtual bool copy() /* override */;
     /** Removes UIMedium wrapped by <i>this</i> item. */
     virtual bool remove() /* override */;
     /** Releases UIMedium wrapped by <i>this</i> item from virtual @a comMachine. */
@@ -204,8 +207,6 @@ public:
 
 protected:
 
-    /** Copies UIMedium wrapped by <i>this</i> item. */
-    virtual bool copy() /* override */;
     /** Removes UIMedium wrapped by <i>this</i> item. */
     virtual bool remove() /* override */;
     /** Releases UIMedium wrapped by <i>this</i> item from virtual @a comMachine. */
@@ -242,63 +243,6 @@ private:
 };
 
 
-/** Medium manager progress-bar.
-  * Reflects medium-enumeration progress, stays hidden otherwise. */
-class UIEnumerationProgressBar : public QWidget
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructor on the basis of passed @a pParent. */
-    UIEnumerationProgressBar(QWidget *pParent = 0)
-        : QWidget(pParent)
-    {
-        /* Prepare: */
-        prepare();
-    }
-
-    /** Defines progress-bar label-text. */
-    void setText(const QString &strText) { m_pLabel->setText(strText); }
-
-    /** Returns progress-bar current-value. */
-    int value() const { return m_pProgressBar->value(); }
-    /** Defines progress-bar current-value. */
-    void setValue(int iValue) { m_pProgressBar->setValue(iValue); }
-    /** Defines progress-bar maximum-value. */
-    void setMaximum(int iValue) { m_pProgressBar->setMaximum(iValue); }
-
-private:
-
-    /** Prepares progress-bar content. */
-    void prepare()
-    {
-        /* Create layout: */
-        QHBoxLayout *pLayout = new QHBoxLayout(this);
-        {
-            /* Configure layout: */
-            pLayout->setContentsMargins(0, 0, 0, 0);
-            /* Create label: */
-            m_pLabel = new QLabel;
-            /* Create progress-bar: */
-            m_pProgressBar = new QProgressBar;
-            {
-                /* Configure progress-bar: */
-                m_pProgressBar->setTextVisible(false);
-            }
-            /* Add widgets into layout: */
-            pLayout->addWidget(m_pLabel);
-            pLayout->addWidget(m_pProgressBar);
-        }
-    }
-
-    /** Progress-bar label. */
-    QLabel *m_pLabel;
-    /** Progress-bar itself. */
-    QProgressBar *m_pProgressBar;
-};
-
-
 /*********************************************************************************************************************************
 *   Class UIMediumItem implementation.                                                                                           *
 *********************************************************************************************************************************/
@@ -317,7 +261,77 @@ UIMediumItem::UIMediumItem(const UIMedium &guiMedium, UIMediumItem *pParent)
     refresh();
 }
 
-bool UIMediumItem::release()
+bool UIMediumItem::move()
+{
+    /* Open file-save dialog to choose location for current medium: */
+    const QString strFileName = QIFileDialog::getSaveFileName(location(),
+                                                              UIMediumManager::tr("Current extension (*.%1)")
+                                                                 .arg(QFileInfo(location()).suffix()),
+                                                              treeWidget(),
+                                                              UIMediumManager::tr("Choose the location of this medium"),
+                                                              0, true, true);
+    /* Negative if nothing changed: */
+    if (strFileName.isNull())
+        return false;
+
+    /* Search for corresponding medium: */
+    CMedium comMedium = medium().medium();
+
+    /* Try to assign new medium location: */
+    if (   comMedium.isOk()
+        && strFileName != location())
+    {
+        /* Prepare move storage progress: */
+        CProgress comProgress = comMedium.SetLocation(strFileName);
+
+        /* Show error message if necessary: */
+        if (!comMedium.isOk())
+        {
+            msgCenter().cannotMoveMediumStorage(comMedium, location(),
+                                                strFileName, treeWidget());
+            /* Negative if failed: */
+            return false;
+        }
+        else
+        {
+            /* Show move storage progress: */
+            msgCenter().showModalProgressDialog(comProgress, UIMediumManager::tr("Moving medium..."),
+                                                ":/progress_media_move_90px.png", treeWidget());
+
+            /* Show error message if necessary: */
+            if (!comProgress.isOk() || comProgress.GetResultCode() != 0)
+            {
+                msgCenter().cannotMoveMediumStorage(comProgress, location(),
+                                                    strFileName, treeWidget());
+                /* Negative if failed: */
+                return false;
+            }
+        }
+    }
+
+    /* Recache item: */
+    refreshAll();
+
+    /* Positive: */
+    return true;
+}
+
+bool UIMediumItem::copy()
+{
+    /* Show Clone VD wizard: */
+    UISafePointerWizard pWizard = new UIWizardCloneVD(treeWidget(), medium().medium());
+    pWizard->prepare();
+    pWizard->exec();
+
+    /* Delete if still exists: */
+    if (pWizard)
+        delete pWizard;
+
+    /* True by default: */
+    return true;
+}
+
+bool UIMediumItem::release(bool fInduced /* = false */)
 {
     /* Refresh medium and item: */
     m_guiMedium.refresh();
@@ -328,7 +342,7 @@ bool UIMediumItem::release()
         return true;
 
     /* Confirm release: */
-    if (!msgCenter().confirmMediumRelease(medium(), treeWidget()))
+    if (!msgCenter().confirmMediumRelease(medium(), fInduced, treeWidget()))
         return false;
 
     /* Release: */
@@ -385,6 +399,7 @@ void UIMediumItem::refresh()
                && m_guiMedium.state() != KMediumState_Inaccessible;
     m_enmType = m_guiMedium.type();
     m_enmVariant = m_guiMedium.mediumVariant();
+    m_fHasChildren = m_guiMedium.hasChildren();
     /* Gather medium options data: */
     m_options.m_enmType = m_guiMedium.mediumType();
     m_options.m_strLocation = m_guiMedium.location();
@@ -489,21 +504,6 @@ UIMediumItemHD::UIMediumItemHD(const UIMedium &guiMedium, UIMediumItem *pParent)
 {
 }
 
-bool UIMediumItemHD::copy()
-{
-    /* Show Clone VD wizard: */
-    UISafePointerWizard pWizard = new UIWizardCloneVD(treeWidget(), medium().medium());
-    pWizard->prepare();
-    pWizard->exec();
-
-    /* Delete if still exists: */
-    if (pWizard)
-        delete pWizard;
-
-    /* True by default: */
-    return true;
-}
-
 bool UIMediumItemHD::remove()
 {
     /* Confirm medium removal: */
@@ -626,11 +626,6 @@ UIMediumItemCD::UIMediumItemCD(const UIMedium &guiMedium, QITreeWidget *pParent)
 {
 }
 
-bool UIMediumItemCD::copy()
-{
-    AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
-}
-
 bool UIMediumItemCD::remove()
 {
     /* Confirm medium removal: */
@@ -697,11 +692,6 @@ UIMediumItemFD::UIMediumItemFD(const UIMedium &guiMedium, QITreeWidget *pParent)
 {
 }
 
-bool UIMediumItemFD::copy()
-{
-    AssertMsgFailedReturn(("That functionality in not supported!\n"), false);
-}
-
 bool UIMediumItemFD::remove()
 {
     /* Confirm medium removal: */
@@ -760,6 +750,59 @@ bool UIMediumItemFD::releaseFrom(CMachine comMachine)
 
 
 /*********************************************************************************************************************************
+*   Class UIEnumerationProgressBar implementation.                                                                               *
+*********************************************************************************************************************************/
+
+UIEnumerationProgressBar::UIEnumerationProgressBar(QWidget *pParent /* = 0 */)
+    : QWidget(pParent)
+{
+    /* Prepare: */
+    prepare();
+}
+
+void UIEnumerationProgressBar::setText(const QString &strText)
+{
+    m_pLabel->setText(strText);
+}
+
+int UIEnumerationProgressBar::value() const
+{
+    return m_pProgressBar->value();
+}
+
+void UIEnumerationProgressBar::setValue(int iValue)
+{
+    m_pProgressBar->setValue(iValue);
+}
+
+void UIEnumerationProgressBar::setMaximum(int iValue)
+{
+    m_pProgressBar->setMaximum(iValue);
+}
+
+void UIEnumerationProgressBar::prepare()
+{
+    /* Create layout: */
+    QHBoxLayout *pLayout = new QHBoxLayout(this);
+    {
+        /* Configure layout: */
+        pLayout->setContentsMargins(0, 0, 0, 0);
+        /* Create label: */
+        m_pLabel = new QLabel;
+        /* Create progress-bar: */
+        m_pProgressBar = new QProgressBar;
+        {
+            /* Configure progress-bar: */
+            m_pProgressBar->setTextVisible(false);
+        }
+        /* Add widgets into layout: */
+        pLayout->addWidget(m_pLabel);
+        pLayout->addWidget(m_pProgressBar);
+    }
+}
+
+
+/*********************************************************************************************************************************
 *   Class UIMediumManagerWidget implementation.                                                                                  *
 *********************************************************************************************************************************/
 
@@ -779,7 +822,7 @@ UIMediumManagerWidget::UIMediumManagerWidget(EmbedTo enmEmbedding, QWidget *pPar
     , m_pToolBar(0)
     , m_pContextMenu(0)
     , m_pMenu(0)
-    , m_pActionCopy(0), m_pActionRemove(0)
+    , m_pActionCopy(0), m_pActionMove(0), m_pActionRemove(0)
     , m_pActionRelease(0), m_pActionDetails(0)
     , m_pActionRefresh(0)
     , m_pProgressBar(0)
@@ -788,6 +831,15 @@ UIMediumManagerWidget::UIMediumManagerWidget(EmbedTo enmEmbedding, QWidget *pPar
     prepare();
 }
 
+void UIMediumManagerWidget::setProgressBar(UIEnumerationProgressBar *pProgressBar)
+{
+    /* Cache progress-bar reference:*/
+    m_pProgressBar = pProgressBar;
+
+    /* Update translation: */
+    retranslateUi();
+}
+
 void UIMediumManagerWidget::retranslateUi()
 {
     /* Translate menu: */
@@ -801,6 +853,12 @@ void UIMediumManagerWidget::retranslateUi()
         m_pActionCopy->setToolTip(UIMediumManager::tr("Copy Disk Image File (%1)").arg(m_pActionCopy->shortcut().toString()));
         m_pActionCopy->setStatusTip(UIMediumManager::tr("Copy selected disk image file"));
     }
+    if (m_pActionMove)
+    {
+        m_pActionMove->setText(UIMediumManager::tr("&Move..."));
+        m_pActionMove->setToolTip(UIMediumManager::tr("Move Disk Image File (%1)").arg(m_pActionMove->shortcut().toString()));
+        m_pActionMove->setStatusTip(UIMediumManager::tr("Move selected disk image file"));
+    }
     if (m_pActionRemove)
     {
         m_pActionRemove->setText(UIMediumManager::tr("&Remove..."));
@@ -925,11 +983,22 @@ void UIMediumManagerWidget::sltApplyMediumDetailsChanges()
     if (   comMedium.isOk()
         && newData.m_options.m_enmType != oldData.m_options.m_enmType)
     {
-        comMedium.SetType(newData.m_options.m_enmType);
+        /* Check if we need to release medium first: */
+        bool fDo = true;
+        if (   pMediumItem->machineIds().size() > 1
+            || (   (   newData.m_options.m_enmType == KMediumType_Immutable
+                    || newData.m_options.m_enmType == KMediumType_MultiAttach)
+                && pMediumItem->machineIds().size() > 0))
+            fDo = pMediumItem->release(true);
+
+        if (fDo)
+        {
+            comMedium.SetType(newData.m_options.m_enmType);
 
-        /* Show error message if necessary: */
-        if (!comMedium.isOk())
-            msgCenter().cannotChangeMediumType(comMedium, oldData.m_options.m_enmType, newData.m_options.m_enmType, this);
+            /* Show error message if necessary: */
+            if (!comMedium.isOk())
+                msgCenter().cannotChangeMediumType(comMedium, oldData.m_options.m_enmType, newData.m_options.m_enmType, this);
+        }
     }
 
     /* Try to assign new medium location: */
@@ -1053,6 +1122,10 @@ void UIMediumManagerWidget::sltHandleMediumEnumerationStart()
     if (m_pActionRefresh)
         m_pActionRefresh->setEnabled(false);
 
+    /* Disable details-widget: */
+    if (m_pDetailsWidget)
+        m_pDetailsWidget->setOptionsEnabled(false);
+
     /* Reset and show progress-bar: */
     if (m_pProgressBar)
     {
@@ -1110,6 +1183,10 @@ void UIMediumManagerWidget::sltHandleMediumEnumerationFinish()
     if (m_pProgressBar)
         m_pProgressBar->hide();
 
+    /* Enable details-widget: */
+    if (m_pDetailsWidget)
+        m_pDetailsWidget->setOptionsEnabled(true);
+
     /* Enable 'refresh' action: */
     if (m_pActionRefresh)
         m_pActionRefresh->setEnabled(true);
@@ -1130,6 +1207,20 @@ void UIMediumManagerWidget::sltCopyMedium()
     pMediumItem->copy();
 }
 
+void UIMediumManagerWidget::sltMoveMedium()
+{
+    /* Get current medium-item: */
+    UIMediumItem *pMediumItem = currentMediumItem();
+    AssertMsgReturnVoid(pMediumItem, ("Current item must not be null"));
+    AssertReturnVoid(!pMediumItem->id().isNull());
+
+    /* Copy current medium-item: */
+    pMediumItem->move();
+
+    /* Push the current item data into details-widget: */
+    sltHandleCurrentTabChanged();
+}
+
 void UIMediumManagerWidget::sltRemoveMedium()
 {
     /* Get current medium-item: */
@@ -1288,18 +1379,18 @@ void UIMediumManagerWidget::prepareThis()
 void UIMediumManagerWidget::prepareConnections()
 {
     /* Configure medium-processing connections: */
-    connect(&vboxGlobal(), SIGNAL(sigMediumCreated(const QString&)),
-            this, SLOT(sltHandleMediumCreated(const QString&)));
-    connect(&vboxGlobal(), SIGNAL(sigMediumDeleted(const QString&)),
-            this, SLOT(sltHandleMediumDeleted(const QString&)));
+    connect(&vboxGlobal(), &VBoxGlobal::sigMediumCreated,
+            this, &UIMediumManagerWidget::sltHandleMediumCreated);
+    connect(&vboxGlobal(), &VBoxGlobal::sigMediumDeleted,
+            this, &UIMediumManagerWidget::sltHandleMediumDeleted);
 
     /* Configure medium-enumeration connections: */
-    connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationStarted()),
-            this, SLOT(sltHandleMediumEnumerationStart()));
-    connect(&vboxGlobal(), SIGNAL(sigMediumEnumerated(const QString&)),
-            this, SLOT(sltHandleMediumEnumerated(const QString&)));
-    connect(&vboxGlobal(), SIGNAL(sigMediumEnumerationFinished()),
-            this, SLOT(sltHandleMediumEnumerationFinish()));
+    connect(&vboxGlobal(), &VBoxGlobal::sigMediumEnumerationStarted,
+            this, &UIMediumManagerWidget::sltHandleMediumEnumerationStart);
+    connect(&vboxGlobal(), &VBoxGlobal::sigMediumEnumerated,
+            this, &UIMediumManagerWidget::sltHandleMediumEnumerated);
+    connect(&vboxGlobal(), &VBoxGlobal::sigMediumEnumerationFinished,
+            this, &UIMediumManagerWidget::sltHandleMediumEnumerationFinish);
 }
 
 void UIMediumManagerWidget::prepareActions()
@@ -1313,6 +1404,15 @@ void UIMediumManagerWidget::prepareActions()
         connect(m_pActionCopy, &QAction::triggered, this, &UIMediumManagerWidget::sltCopyMedium);
     }
 
+    /* Create 'Move' action: */
+    m_pActionMove = new QAction(this);
+    AssertPtrReturnVoid(m_pActionMove);
+    {
+        /* Configure move-action: */
+        m_pActionMove->setShortcut(QKeySequence("Ctrl+M"));
+        connect(m_pActionMove, &QAction::triggered, this, &UIMediumManagerWidget::sltMoveMedium);
+    }
+
     /* Create 'Remove' action: */
     m_pActionRemove  = new QAction(this);
     AssertPtrReturnVoid(m_pActionRemove);
@@ -1368,9 +1468,11 @@ void UIMediumManagerWidget::prepareMenu()
         /* Configure 'Medium' menu: */
         if (m_pActionCopy)
             m_pMenu->addAction(m_pActionCopy);
+        if (m_pActionMove)
+            m_pMenu->addAction(m_pActionMove);
         if (m_pActionRemove)
             m_pMenu->addAction(m_pActionRemove);
-        if (   (m_pActionCopy || m_pActionRemove)
+        if (   (m_pActionCopy || m_pActionMove || m_pActionRemove)
             && (m_pActionRelease || m_pActionDetails))
             m_pMenu->addSeparator();
         if (m_pActionRelease)
@@ -1394,9 +1496,11 @@ void UIMediumManagerWidget::prepareContextMenu()
         /* Configure contex-menu: */
         if (m_pActionCopy)
             m_pContextMenu->addAction(m_pActionCopy);
+        if (m_pActionMove)
+            m_pContextMenu->addAction(m_pActionMove);
         if (m_pActionRemove)
             m_pContextMenu->addAction(m_pActionRemove);
-        if (   (m_pActionCopy || m_pActionRemove)
+        if (   (m_pActionCopy || m_pActionMove || m_pActionRemove)
             && (m_pActionRelease || m_pActionDetails))
             m_pContextMenu->addSeparator();
         if (m_pActionRelease)
@@ -1442,9 +1546,11 @@ void UIMediumManagerWidget::prepareToolBar()
         /* Add toolbar actions: */
         if (m_pActionCopy)
             m_pToolBar->addAction(m_pActionCopy);
+        if (m_pActionMove)
+            m_pToolBar->addAction(m_pActionMove);
         if (m_pActionRemove)
             m_pToolBar->addAction(m_pActionRemove);
-        if (   (m_pActionCopy || m_pActionRemove)
+        if (   (m_pActionCopy || m_pActionMove || m_pActionRemove)
             && (m_pActionRelease || m_pActionDetails))
             m_pToolBar->addSeparator();
         if (m_pActionRelease)
@@ -1485,7 +1591,7 @@ void UIMediumManagerWidget::prepareTabWidget()
         m_pTabWidget->setTabIcon(tabIndex(UIMediumType_HardDisk), m_iconHD);
         m_pTabWidget->setTabIcon(tabIndex(UIMediumType_DVD), m_iconCD);
         m_pTabWidget->setTabIcon(tabIndex(UIMediumType_Floppy), m_iconFD);
-        connect(m_pTabWidget, SIGNAL(currentChanged(int)), this, SLOT(sltHandleCurrentTabChanged()));
+        connect(m_pTabWidget, &QITabWidget::currentChanged, this, &UIMediumManagerWidget::sltHandleCurrentTabChanged);
 
         /* Add tab-widget into central layout: */
         layout()->addWidget(m_pTabWidget);
@@ -1541,17 +1647,17 @@ void UIMediumManagerWidget::prepareTreeWidget(UIMediumType type, int iColumns)
             pTreeWidget->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
         pTreeWidget->header()->setStretchLastSection(false);
         pTreeWidget->setSortingEnabled(true);
-        connect(pTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
-                this, SLOT(sltHandleCurrentItemChanged()));
+        connect(pTreeWidget, &QITreeWidget::currentItemChanged,
+                this, &UIMediumManagerWidget::sltHandleCurrentItemChanged);
         if (m_pActionDetails)
             connect(pTreeWidget, &QITreeWidget::itemDoubleClicked,
                     m_pActionDetails, &QAction::setChecked);
-        connect(pTreeWidget, SIGNAL(customContextMenuRequested(const QPoint&)),
-                this, SLOT(sltHandleContextMenuCall(const QPoint&)));
-        connect(pTreeWidget, SIGNAL(resized(const QSize&, const QSize&)),
-                this, SLOT(sltPerformTablesAdjustment()), Qt::QueuedConnection);
-        connect(pTreeWidget->header(), SIGNAL(sectionResized(int, int, int)),
-                this, SLOT(sltPerformTablesAdjustment()), Qt::QueuedConnection);
+        connect(pTreeWidget, &QITreeWidget::customContextMenuRequested,
+                this, &UIMediumManagerWidget::sltHandleContextMenuCall);
+        connect(pTreeWidget, &QITreeWidget::resized,
+                this, &UIMediumManagerWidget::sltPerformTablesAdjustment, Qt::QueuedConnection);
+        connect(pTreeWidget->header(), &QHeaderView::sectionResized,
+                this, &UIMediumManagerWidget::sltPerformTablesAdjustment, Qt::QueuedConnection);
         /* Add tree-widget into tab layout: */
         tab(type)->layout()->addWidget(pTreeWidget);
     }
@@ -1560,7 +1666,7 @@ void UIMediumManagerWidget::prepareTreeWidget(UIMediumType type, int iColumns)
 void UIMediumManagerWidget::prepareDetailsWidget()
 {
     /* Create details-widget: */
-    m_pDetailsWidget = new UIMediumDetailsWidget(m_enmEmbedding);
+    m_pDetailsWidget = new UIMediumDetailsWidget(this, m_enmEmbedding);
     AssertPtrReturnVoid(m_pDetailsWidget);
     {
         /* Configure details-widget: */
@@ -1580,19 +1686,6 @@ void UIMediumManagerWidget::prepareDetailsWidget()
     }
 }
 
-//void UIMediumManagerWidget::prepareProgressBar()
-//{
-//    /* Create progress-bar: */
-//    m_pProgressBar = new UIEnumerationProgressBar;
-//    AssertPtrReturnVoid(m_pProgressBar);
-//    {
-//        /* Configure progress-bar: */
-//        m_pProgressBar->hide();
-//        /* Add progress-bar into button-box layout: */
-//        m_pButtonBox->addExtraWidget(m_pProgressBar);
-//    }
-//}
-
 void UIMediumManagerWidget::loadSettings()
 {
     /* Details action/widget: */
@@ -1693,10 +1786,14 @@ void UIMediumManagerWidget::updateActions()
     /* Apply actions accessibility: */
     if (m_pActionCopy)
     {
-        bool fActionEnabledCopy = currentMediumType() == UIMediumType_HardDisk &&
-                                  fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Copy);
+        bool fActionEnabledCopy = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Copy);
         m_pActionCopy->setEnabled(fActionEnabledCopy);
     }
+    if (m_pActionMove)
+    {
+        bool fActionEnabledMove = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Edit);
+        m_pActionMove->setEnabled(fActionEnabledMove);
+    }
     if (m_pActionRemove)
     {
         bool fActionEnabledRemove = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Remove);
@@ -1732,6 +1829,11 @@ void UIMediumManagerWidget::updateActionIcons()
                                                        QString(":/%1_copy_16px.png").arg(strPrefix),
                                                        QString(":/%1_copy_disabled_22px.png").arg(strPrefix),
                                                        QString(":/%1_copy_disabled_16px.png").arg(strPrefix)));
+    if (m_pActionMove)
+        m_pActionMove->setIcon(UIIconPool::iconSetFull(QString(":/%1_move_22px.png").arg(strPrefix),
+                                                       QString(":/%1_move_16px.png").arg(strPrefix),
+                                                       QString(":/%1_move_disabled_22px.png").arg(strPrefix),
+                                                       QString(":/%1_move_disabled_16px.png").arg(strPrefix)));
     if (m_pActionRemove)
         m_pActionRemove->setIcon(UIIconPool::iconSetFull(QString(":/%1_remove_22px.png").arg(strPrefix),
                                                          QString(":/%1_remove_16px.png").arg(strPrefix),
@@ -1836,7 +1938,8 @@ void UIMediumManagerWidget::updateTabIcons(UIMediumItem *pMediumItem, Action act
             break;
         }
 
-        case Action_Copy: case Action_Modify: case Action_Release: break; /* Shut up MSC */
+        default:
+            break;
     }
 }
 
@@ -2213,11 +2316,6 @@ bool UIMediumManagerWidget::checkMediumFor(UIMediumItem *pItem, Action action)
             /* False for children: */
             return pItem->medium().parentID() == UIMedium::nullID();
         }
-        case Action_Modify:
-        {
-            /* False for children: */
-            return pItem->medium().parentID() == UIMedium::nullID();
-        }
         case Action_Remove:
         {
             /* Removable if not attached to anything: */
@@ -2229,7 +2327,8 @@ bool UIMediumManagerWidget::checkMediumFor(UIMediumItem *pItem, Action action)
             return pItem->isUsed() && !pItem->isUsedInSnapshots();
         }
 
-        case Action_Add: break; /* Shut up MSC */
+        default:
+            break;
     }
 
     AssertFailedReturn(false);
@@ -2259,6 +2358,7 @@ void UIMediumManagerFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterW
 
 UIMediumManager::UIMediumManager(QWidget *pCenterWidget)
     : QIWithRetranslateUI<QIManagerDialog>(pCenterWidget)
+    , m_pProgressBar(0)
 {
 }
 
@@ -2337,6 +2437,23 @@ void UIMediumManager::configureButtonBox()
             button(ButtonType_Reset), &QPushButton::setEnabled);
     connect(buttonBox(), &QIDialogButtonBox::clicked,
             this, &UIMediumManager::sltHandleButtonBoxClick);
+    // WORKAROUND:
+    // Since we connected signals later than extra-data loaded
+    // for signals above, we should handle that stuff here again:
+    button(ButtonType_Apply)->setVisible(gEDataManager->virtualMediaManagerDetailsExpanded());
+    button(ButtonType_Reset)->setVisible(gEDataManager->virtualMediaManagerDetailsExpanded());
+
+    /* Create progress-bar: */
+    m_pProgressBar = new UIEnumerationProgressBar;
+    AssertPtrReturnVoid(m_pProgressBar);
+    {
+        /* Configure progress-bar: */
+        m_pProgressBar->hide();
+        /* Add progress-bar into button-box layout: */
+        buttonBox()->addExtraWidget(m_pProgressBar);
+        /* Notify widget it has progress-bar: */
+        widget()->setProgressBar(m_pProgressBar);
+    }
 }
 
 void UIMediumManager::finalize()
@@ -2350,5 +2467,3 @@ UIMediumManagerWidget *UIMediumManager::widget()
     return qobject_cast<UIMediumManagerWidget*>(QIManagerDialog::widget());
 }
 
-#include "UIMediumManager.moc"
-
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h
index ae78ad0..2204920 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h
@@ -26,12 +26,12 @@
 /* Forward declarations: */
 class QAbstractButton;
 class QLabel;
+class QProgressBar;
 class QTabWidget;
 class QTreeWidgetItem;
 class QIDialogButtonBox;
 class QILabel;
 class QITreeWidget;
-class UIEnumerationProgressBar;
 class UIMedium;
 class UIMediumDetailsWidget;
 class UIMediumItem;
@@ -51,13 +51,46 @@ public:
 };
 
 
+/** Medium manager progress-bar.
+  * Reflects medium-enumeration progress, stays hidden otherwise. */
+class UIEnumerationProgressBar : public QWidget
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructor on the basis of passed @a pParent. */
+    UIEnumerationProgressBar(QWidget *pParent = 0);
+
+    /** Defines progress-bar label-text. */
+    void setText(const QString &strText);
+
+    /** Returns progress-bar current-value. */
+    int value() const;
+    /** Defines progress-bar current-value. */
+    void setValue(int iValue);
+    /** Defines progress-bar maximum-value. */
+    void setMaximum(int iValue);
+
+private:
+
+    /** Prepares progress-bar content. */
+    void prepare();
+
+    /** Progress-bar label. */
+    QLabel       *m_pLabel;
+    /** Progress-bar itself. */
+    QProgressBar *m_pProgressBar;
+};
+
+
 /** QWidget extension providing GUI with the pane to control media related functionality. */
 class UIMediumManagerWidget : public QIWithRetranslateUI<QWidget>
 {
     Q_OBJECT;
 
     /** Item action types. */
-    enum Action { Action_Add, Action_Edit, Action_Copy, Action_Modify, Action_Remove, Action_Release };
+    enum Action { Action_Add, Action_Edit, Action_Copy, Action_Remove, Action_Release };
 
 signals:
 
@@ -81,6 +114,9 @@ public:
     UIToolBar *toolbar() const { return m_pToolBar; }
 #endif
 
+    /** Defines @a pProgressBar reference. */
+    void setProgressBar(UIEnumerationProgressBar *pProgressBar);
+
 protected:
 
     /** @name Event-handling stuff.
@@ -126,6 +162,8 @@ private slots:
       * @{ */
         /** Handles command to copy medium. */
         void sltCopyMedium();
+        /** Handles command to move medium. */
+        void sltMoveMedium();
         /** Handles command to remove medium. */
         void sltRemoveMedium();
         /** Handles command to release medium. */
@@ -180,8 +218,6 @@ private:
         void prepareTreeWidget(UIMediumType type, int iColumns);
         /** Prepares details-widget. */
         void prepareDetailsWidget();
-//        /** Prepares progress-bar. */
-//        void prepareProgressBar();
         /** Load settings: */
         void loadSettings();
 
@@ -309,6 +345,8 @@ private:
         QMenu     *m_pMenu;
         /** Holds the Copy action instance. */
         QAction   *m_pActionCopy;
+        /** Holds the Move action instance. */
+        QAction   *m_pActionMove;
         /** Holds the Remove action instance. */
         QAction   *m_pActionRemove;
         /** Holds the Release action instance. */
@@ -321,7 +359,7 @@ private:
 
     /** @name Progress-bar variables.
       * @{ */
-        /** Holds the progress-bar widget instance. */
+        /** Holds the progress-bar widget reference. */
         UIEnumerationProgressBar *m_pProgressBar;
     /** @} */
 };
@@ -388,6 +426,12 @@ private:
         virtual UIMediumManagerWidget *widget() /* override */;
     /** @} */
 
+    /** @name Progress-bar variables.
+      * @{ */
+        /** Holds the progress-bar widget instance. */
+        UIEnumerationProgressBar *m_pProgressBar;
+    /** @} */
+
     /** Allow factory access to private/protected members: */
     friend class UIMediumManagerFactory;
 };
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
index 4e89bdd..38bc444 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -73,9 +73,9 @@ UIDownloader::UIDownloader()
     : m_state(UIDownloaderState_Null)
 {
     /* Connect listeners: */
-    connect(this, SIGNAL(sigToStartAcknowledging()), this, SLOT(sltStartAcknowledging()), Qt::QueuedConnection);
-    connect(this, SIGNAL(sigToStartDownloading()), this, SLOT(sltStartDownloading()), Qt::QueuedConnection);
-    connect(this, SIGNAL(sigToStartVerifying()), this, SLOT(sltStartVerifying()), Qt::QueuedConnection);
+    connect(this, &UIDownloader::sigToStartAcknowledging, this, &UIDownloader::sltStartAcknowledging, Qt::QueuedConnection);
+    connect(this, &UIDownloader::sigToStartDownloading,   this, &UIDownloader::sltStartDownloading,   Qt::QueuedConnection);
+    connect(this, &UIDownloader::sigToStartVerifying,     this, &UIDownloader::sltStartVerifying,     Qt::QueuedConnection);
 }
 
 /* virtual override */
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
index b2fa293..7d395eb 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
index 617dc8f..adc4888 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
index 5823c13..e7d0550 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
index 8a1b717..188083b 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
index c8f9c9e..dcc6c57 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
index 3e04519..f328030 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
index 334c17e..8a91b63 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp
index af397dc..aa1a755 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
index fe2ac0f..592630c 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h
index cfa94a6..31c451c 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp
index 412a3ce..0303024 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -74,12 +74,12 @@ UINetworkManagerIndicator* UINetworkManager::createIndicator() const
 
     /* Create network-manager state-indicator: */
     UINetworkManagerIndicator *pNetworkManagerIndicator = new UINetworkManagerIndicator;
-    connect(pNetworkManagerIndicator, SIGNAL(sigMouseDoubleClick(QIStatusBarIndicator*, QMouseEvent*)),
-            this, SLOT(show()));
-    connect(this, SIGNAL(sigAddNetworkManagerIndicatorDescription(UINetworkRequest*)),
-            pNetworkManagerIndicator, SLOT(sltAddNetworkManagerIndicatorDescription(UINetworkRequest*)));
-    connect(this, SIGNAL(sigRemoveNetworkManagerIndicatorDescription(const QUuid &)),
-            pNetworkManagerIndicator, SLOT(sldRemoveNetworkManagerIndicatorDescription(const QUuid &)));
+    connect(pNetworkManagerIndicator, &UINetworkManagerIndicator::sigMouseDoubleClick,
+            this, &UINetworkManager::show);
+    connect(this, &UINetworkManager::sigAddNetworkManagerIndicatorDescription,
+            pNetworkManagerIndicator, &UINetworkManagerIndicator::sltAddNetworkManagerIndicatorDescription);
+    connect(this, &UINetworkManager::sigRemoveNetworkManagerIndicatorDescription,
+            pNetworkManagerIndicator, &UINetworkManagerIndicator::sldRemoveNetworkManagerIndicatorDescription);
     return pNetworkManagerIndicator;
 }
 
@@ -133,7 +133,7 @@ void UINetworkManager::prepare()
 {
     /* Prepare network-manager dialog: */
     m_pNetworkManagerDialog = new UINetworkManagerDialog;
-    connect(m_pNetworkManagerDialog, SIGNAL(sigCancelNetworkRequests()), this, SIGNAL(sigCancelNetworkRequests()));
+    connect(m_pNetworkManagerDialog, &UINetworkManagerDialog::sigCancelNetworkRequests, this, &UINetworkManager::sigCancelNetworkRequests);
 }
 
 void UINetworkManager::cleanup()
@@ -148,14 +148,14 @@ void UINetworkManager::cleanup()
 void UINetworkManager::prepareNetworkRequest(UINetworkRequest *pNetworkRequest)
 {
     /* Prepare listeners for network-request: */
-    connect(pNetworkRequest, SIGNAL(sigProgress(const QUuid&, qint64, qint64)),
-            this, SLOT(sltHandleNetworkRequestProgress(const QUuid&, qint64, qint64)));
-    connect(pNetworkRequest, SIGNAL(sigCanceled(const QUuid&)),
-            this, SLOT(sltHandleNetworkRequestCancel(const QUuid&)));
-    connect(pNetworkRequest, SIGNAL(sigFinished(const QUuid&)),
-            this, SLOT(sltHandleNetworkRequestFinish(const QUuid&)));
-    connect(pNetworkRequest, SIGNAL(sigFailed(const QUuid&, const QString&)),
-            this, SLOT(sltHandleNetworkRequestFailure(const QUuid&, const QString&)));
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid&, qint64, qint64)>(&UINetworkRequest::sigProgress),
+            this, &UINetworkManager::sltHandleNetworkRequestProgress);
+    connect(pNetworkRequest, &UINetworkRequest::sigCanceled,
+            this, &UINetworkManager::sltHandleNetworkRequestCancel);
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid&)>(&UINetworkRequest::sigFinished),
+            this, &UINetworkManager::sltHandleNetworkRequestFinish);
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid &uuid, const QString &strError)>(&UINetworkRequest::sigFailed),
+            this, &UINetworkManager::sltHandleNetworkRequestFailure);
 
     /* Add network-request into map: */
     m_requests.insert(pNetworkRequest->uuid(), pNetworkRequest);
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h
index 8778817..293f6f6 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.cpp
index 09be77c..e8d70ab 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -70,7 +70,6 @@ UINetworkManagerDialog::UINetworkManagerDialog()
 
     /* Create main-layout: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(centralWidget());
-    pMainLayout->setContentsMargins(6, 6, 6, 6);
 
     /* Create description-label: */
     m_pLabel = new QLabel(centralWidget());
@@ -82,7 +81,7 @@ UINetworkManagerDialog::UINetworkManagerDialog()
 
     /* Create button-box: */
     m_pButtonBox = new QIDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, centralWidget());
-    connect(m_pButtonBox, SIGNAL(rejected()), this, SLOT(sltHandleCancelAllButtonPress()));
+    connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UINetworkManagerDialog::sltHandleCancelAllButtonPress);
     m_pButtonBox->setHidden(true);
 
     /* Layout content: */
@@ -120,8 +119,8 @@ void UINetworkManagerDialog::addNetworkRequestWidget(UINetworkRequest *pNetworkR
     }
 
     /* Prepare network-request widget's notifications for network-request: */
-    connect(pNetworkRequestWidget, SIGNAL(sigRetry()), pNetworkRequest, SLOT(sltRetry()), Qt::QueuedConnection);
-    connect(pNetworkRequestWidget, SIGNAL(sigCancel()), pNetworkRequest, SLOT(sltCancel()), Qt::QueuedConnection);
+    connect(pNetworkRequestWidget, &UINetworkRequestWidget::sigRetry,  pNetworkRequest, &UINetworkRequest::sltRetry,  Qt::QueuedConnection);
+    connect(pNetworkRequestWidget, &UINetworkRequestWidget::sigCancel, pNetworkRequest, &UINetworkRequest::sltCancel, Qt::QueuedConnection);
 }
 
 void UINetworkManagerDialog::removeNetworkRequestWidget(const QUuid &uuid)
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.h
index 4da2065..1348f21 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.cpp
index fd5b162..5ca94e4 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -51,16 +51,16 @@ void UINetworkManagerIndicator::sltAddNetworkManagerIndicatorDescription(UINetwo
     m_data.append(UINetworkRequestData(pNetworkRequest->description(), 0, 0));
 
     /* Prepare network-request listeners: */
-    connect(pNetworkRequest, SIGNAL(sigStarted(const QUuid &)),
-            this, SLOT(sltSetProgressToStarted(const QUuid &)));
-    connect(pNetworkRequest, SIGNAL(sigCanceled(const QUuid &)),
-            this, SLOT(sltSetProgressToCanceled(const QUuid &)));
-    connect(pNetworkRequest, SIGNAL(sigFinished(const QUuid &)),
-            this, SLOT(sltSetProgressToFinished(const QUuid &)));
-    connect(pNetworkRequest, SIGNAL(sigFailed(const QUuid &, const QString &)),
-            this, SLOT(sltSetProgressToFailed(const QUuid &, const QString &)));
-    connect(pNetworkRequest, SIGNAL(sigProgress(const QUuid &, qint64, qint64)),
-            this, SLOT(sltSetProgress(const QUuid &, qint64, qint64)));
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid&)>(&UINetworkRequest::sigStarted),
+            this, &UINetworkManagerIndicator::sltSetProgressToStarted);
+    connect(pNetworkRequest, &UINetworkRequest::sigCanceled,
+            this, &UINetworkManagerIndicator::sltSetProgressToCanceled);
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid&)>(&UINetworkRequest::sigFinished),
+            this, &UINetworkManagerIndicator::sltSetProgressToFinished);
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid&, const QString &)>(&UINetworkRequest::sigFailed),
+            this, &UINetworkManagerIndicator::sltSetProgressToFailed);
+    connect(pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QUuid&, qint64, qint64)>(&UINetworkRequest::sigProgress),
+            this, &UINetworkManagerIndicator::sltSetProgress);
 
     /* Update appearance: */
     recalculateIndicatorState();
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.h
index 6b322a9..72083db 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManagerIndicator.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -49,13 +49,15 @@ public:
     /** Update routine. */
     void updateAppearance();
 
-private slots:
+public slots:
 
     /** Adds @a pNetworkRequest to network-manager state-indicators. */
     void sltAddNetworkManagerIndicatorDescription(UINetworkRequest *pNetworkRequest);
     /** Removes network-request with @a uuid from network-manager state-indicators. */
     void sldRemoveNetworkManagerIndicatorDescription(const QUuid &uuid);
 
+private slots:
+
     /* Set particular network-request progress to 'started': */
     void sltSetProgressToStarted(const QUuid &uuid);
     /* Set particular network-request progress to 'canceled': */
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
index 32e7e14..230f894 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -930,9 +930,10 @@ UINetworkReplyPrivate::UINetworkReplyPrivate(UINetworkRequestType type, const QU
 
     /* Create and run reply thread: */
     m_pThread = new UINetworkReplyPrivateThread(type, url, requestHeaders);
-    connect(m_pThread, SIGNAL(sigDownloadProgress(qint64, qint64)),
-            this, SIGNAL(downloadProgress(qint64, qint64)), Qt::QueuedConnection);
-    connect(m_pThread, SIGNAL(finished()), this, SLOT(sltFinished()));
+    connect(m_pThread, &UINetworkReplyPrivateThread::sigDownloadProgress,
+            this, &UINetworkReplyPrivate::downloadProgress, Qt::QueuedConnection);
+    connect(m_pThread, &UINetworkReplyPrivateThread::finished,
+            this, &UINetworkReplyPrivate::sltFinished);
     m_pThread->start();
 }
 
@@ -1000,8 +1001,8 @@ UINetworkReply::UINetworkReply(UINetworkRequestType type, const QUrl &url, const
     : m_pReply(new UINetworkReplyPrivate(type, url, requestHeaders))
 {
     /* Prepare network-reply object connections: */
-    connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64)));
-    connect(m_pReply, SIGNAL(finished()), this, SIGNAL(finished()));
+    connect(m_pReply, &UINetworkReplyPrivate::downloadProgress, this, &UINetworkReply::downloadProgress);
+    connect(m_pReply, &UINetworkReplyPrivate::finished,         this, &UINetworkReply::finished);
 }
 
 UINetworkReply::~UINetworkReply()
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
index 353d1d6..31fc100 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
index 1a0ae8b..553d36e 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -161,8 +161,8 @@ void UINetworkRequest::sltCancel()
 void UINetworkRequest::prepare()
 {
     /* Prepare listeners for network-manager: */
-    connect(manager(), SIGNAL(sigCancelNetworkRequests()),
-            this, SLOT(sltCancel()), Qt::QueuedConnection);
+    connect(manager(), &UINetworkManager::sigCancelNetworkRequests,
+            this, &UINetworkRequest::sltCancel, Qt::QueuedConnection);
 
     /* Choose first url as current: */
     m_iUrlIndex = 0;
@@ -182,9 +182,10 @@ void UINetworkRequest::prepareNetworkReply()
     AssertPtrReturnVoid(m_pReply.data());
     {
         /* Prepare network-reply: */
-        connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)),
-                this, SLOT(sltHandleNetworkReplyProgress(qint64, qint64)));
-        connect(m_pReply, SIGNAL(finished()), this, SLOT(sltHandleNetworkReplyFinish()));
+        connect(m_pReply.data(), &UINetworkReply::downloadProgress,
+                this, &UINetworkRequest::sltHandleNetworkReplyProgress);
+        connect(m_pReply.data(), &UINetworkReply::finished,
+                this, &UINetworkRequest::sltHandleNetworkReplyFinish);
 
         /* Mark network-reply as running: */
         m_fRunning = true;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
index 4e3034b..037e5a9 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -88,6 +88,13 @@ public:
     /** Returns the request reply. */
     UINetworkReply* reply() { return m_pReply; }
 
+public slots:
+
+    /** Initiates request retrying. */
+    void sltRetry();
+    /** Initiates request cancelling. */
+    void sltCancel();
+
 private slots:
 
     /** Handles reply about progress changed.
@@ -97,11 +104,6 @@ private slots:
     /** Handles reply about progress finished. */
     void sltHandleNetworkReplyFinish();
 
-    /** Initiates request retrying. */
-    void sltRetry();
-    /** Initiates request cancelling. */
-    void sltCancel();
-
 private:
 
     /** Prepares request. */
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp
index 7eaf48b..d8083d0 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -21,6 +21,7 @@
 
 /* Global includes: */
 # include <QTimer>
+# include <QStyle>
 # include <QGridLayout>
 # include <QProgressBar>
 
@@ -54,17 +55,25 @@ UINetworkRequestWidget::UINetworkRequestWidget(UINetworkManagerDialog *pParent,
     setOpen(true);
 
     /* Prepare listeners for m_pNetworkRequest: */
-    connect(m_pNetworkRequest, SIGNAL(sigProgress(qint64, qint64)), this, SLOT(sltSetProgress(qint64, qint64)));
-    connect(m_pNetworkRequest, SIGNAL(sigStarted()), this, SLOT(sltSetProgressToStarted()));
-    connect(m_pNetworkRequest, SIGNAL(sigFinished()), this, SLOT(sltSetProgressToFinished()));
-    connect(m_pNetworkRequest, SIGNAL(sigFailed(const QString&)), this, SLOT(sltSetProgressToFailed(const QString&)));
+    connect(m_pNetworkRequest, static_cast<void(UINetworkRequest::*)(qint64, qint64)>(&UINetworkRequest::sigProgress),
+            this, &UINetworkRequestWidget::sltSetProgress);
+    connect(m_pNetworkRequest, static_cast<void(UINetworkRequest::*)()>(&UINetworkRequest::sigStarted),
+            this, &UINetworkRequestWidget::sltSetProgressToStarted);
+    connect(m_pNetworkRequest, static_cast<void(UINetworkRequest::*)()>(&UINetworkRequest::sigFinished),
+            this, &UINetworkRequestWidget::sltSetProgressToFinished);
+    connect(m_pNetworkRequest, static_cast<void(UINetworkRequest::*)(const QString&)>(&UINetworkRequest::sigFailed),
+            this, &UINetworkRequestWidget::sltSetProgressToFailed);
 
     /* Setup timer: */
     m_pTimer->setInterval(5000);
-    connect(m_pTimer, SIGNAL(timeout()), this, SLOT(sltTimeIsOut()));
+    connect(m_pTimer, &QTimer::timeout, this, &UINetworkRequestWidget::sltTimeIsOut);
 
     /* Setup main-layout: */
-    m_pMainLayout->setContentsMargins(6, 6, 6, 6);
+    const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+    const int iT = qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin) / 2;
+    const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2;
+    const int iB = qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin) / 2;
+    m_pMainLayout->setContentsMargins(iL, iT, iR, iB);
 
     /* Setup progress-bar: */
     m_pProgressBar->setRange(0, 0);
@@ -75,13 +84,13 @@ UINetworkRequestWidget::UINetworkRequestWidget(UINetworkManagerDialog *pParent,
     m_pRetryButton->removeBorder();
     m_pRetryButton->setFocusPolicy(Qt::NoFocus);
     m_pRetryButton->setIcon(UIIconPool::iconSet(":/refresh_16px.png"));
-    connect(m_pRetryButton, SIGNAL(clicked(bool)), this, SIGNAL(sigRetry()));
+    connect(m_pRetryButton, &QIToolButton::clicked, this, &UINetworkRequestWidget::sigRetry);
 
     /* Setup cancel-button: */
     m_pCancelButton->removeBorder();
     m_pCancelButton->setFocusPolicy(Qt::NoFocus);
     m_pCancelButton->setIcon(UIIconPool::iconSet(":/cancel_16px.png"));
-    connect(m_pCancelButton, SIGNAL(clicked(bool)), this, SIGNAL(sigCancel()));
+    connect(m_pCancelButton, &QIToolButton::clicked, this, &UINetworkRequestWidget::sigCancel);
 
     /* Setup error-label: */
     m_pErrorPane->setHidden(true);
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h
index e6cc77b..3881490 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.cpp
index d352b84..40d83c0 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.h b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.h
index d8dbb74..092d2c0 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
index e3d6be7..93f1c89 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -113,20 +113,20 @@ public:
         if (pQueue->isEmpty())
         {
             /* Connect starting-signal of the queue to starting-slot of this step: */
-            connect(pQueue, SIGNAL(sigStartQueue()), this, SLOT(sltStartStep()), Qt::QueuedConnection);
+            connect(pQueue, &UIUpdateQueue::sigStartQueue, this, &UIUpdateStep::sltStartStep, Qt::QueuedConnection);
         }
         /* If queue has at least one step already: */
         else
         {
             /* Reconnect completion-signal of the last-step from completion-signal of the queue to starting-slot of this step: */
-            disconnect(pQueue->lastStep(), SIGNAL(sigStepComplete()), pQueue, SIGNAL(sigQueueFinished()));
-            connect(pQueue->lastStep(), SIGNAL(sigStepComplete()), this, SLOT(sltStartStep()), Qt::QueuedConnection);
+            disconnect(pQueue->lastStep(), &UIUpdateStep::sigStepComplete, pQueue, &UIUpdateQueue::sigQueueFinished);
+            connect(pQueue->lastStep(), &UIUpdateStep::sigStepComplete, this, &UIUpdateStep::sltStartStep, Qt::QueuedConnection);
         }
 
         /* Connect completion-signal of this step to the completion-signal of the queue: */
-        connect(this, SIGNAL(sigStepComplete()), pQueue, SIGNAL(sigQueueFinished()), Qt::QueuedConnection);
+        connect(this, &UIUpdateStep::sigStepComplete, pQueue, &UIUpdateQueue::sigQueueFinished, Qt::QueuedConnection);
         /* Connect completion-signal of this step to the destruction-slot of this step: */
-        connect(this, SIGNAL(sigStepComplete()), this, SLOT(deleteLater()), Qt::QueuedConnection);
+        connect(this, &UIUpdateStep::sigStepComplete, this, &UIUpdateStep::deleteLater, Qt::QueuedConnection);
 
         /* Remember this step as the last one: */
         pQueue->setLastStep(this);
@@ -406,10 +406,11 @@ private slots:
         /* Create and configure the Extension Pack downloader: */
         UIDownloaderExtensionPack *pDl = UIDownloaderExtensionPack::create();
         /* After downloading finished => propose to install the Extension Pack: */
-        connect(pDl, SIGNAL(sigDownloadFinished(const QString&, const QString&, QString)),
-                this, SLOT(sltHandleDownloadedExtensionPack(const QString&, const QString&, QString)));
+        connect(pDl, &UIDownloaderExtensionPack::sigDownloadFinished,
+                this, &UIUpdateStepVirtualBoxExtensionPack::sltHandleDownloadedExtensionPack);
         /* Also, destroyed downloader is a signal to finish the step: */
-        connect(pDl, SIGNAL(destroyed(QObject*)), this, SIGNAL(sigStepComplete()));
+        connect(pDl, &UIDownloaderExtensionPack::destroyed,
+                this, &UIUpdateStepVirtualBoxExtensionPack::sigStepComplete);
         /* Start downloading: */
         pDl->start();
     }
@@ -485,7 +486,7 @@ UIUpdateManager::UIUpdateManager()
         m_pInstance = this;
 
     /* Configure queue: */
-    connect(m_pQueue, SIGNAL(sigQueueFinished()), this, SLOT(sltHandleUpdateFinishing()));
+    connect(m_pQueue, &UIUpdateQueue::sigQueueFinished, this, &UIUpdateManager::sltHandleUpdateFinishing);
 
 #ifdef VBOX_WITH_UPDATE_REQUEST
     /* Ask updater to check for the first time: */
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h
index bc03cb8..a12770d 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp b/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp
index 66e435a..4f0971d 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.cpp b/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.cpp
index 91d9e6a..7239720 100644
--- a/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.h b/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.h
index 59bb30f..77baf53 100644
--- a/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.h
+++ b/src/VBox/Frontends/VirtualBox/src/objects/UIRichTextString.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/UIDesktopServices.h b/src/VBox/Frontends/VirtualBox/src/platform/UIDesktopServices.h
index e8ccb0a..70c37a6 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/UIDesktopServices.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/UIDesktopServices.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h
index 2ad5ae3..a107751 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.mm
index 63d6fd4..b79a9a6 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/CocoaEventHelper.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2010 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.cpp
index 9ecaf9c..29b4b0e 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h
index 5d45cd0..0ad1475 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/DarwinKeyboard.h
@@ -1,4 +1,4 @@
-/* $Id:  $ */
+/* $Id: DarwinKeyboard.h $ */
 /** @file
  * VBox Qt GUI - Common GUI Library - Darwin Keyboard routines.
  *
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/DockIconPreview.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/DockIconPreview.h
index a6fe371..b4f8927 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/DockIconPreview.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/DockIconPreview.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp
index 0f55852..7c01e7c 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h
index 008ab96..a65f13e 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h
index 45ae2ec..8dad35a 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
index 710b59b..ec2d7c2 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaApplication.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2014 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.h
index 1aa28f4..b5a5c25 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.mm
index 6beb2bd..e26fb3a 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaDockIconPreview.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2010 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h
index 06ca097..64ab2b2 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.mm
index 8620381..67d9211 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UICocoaSpecialControls.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2011 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -468,7 +468,7 @@ QAccessibleInterface *UIAccessibilityInterfaceForUICocoaSegmentedButtonSegment::
 
 QRect UIAccessibilityInterfaceForUICocoaSegmentedButtonSegment::rect() const
 {
-    // TODO: Return the -=real=- segment rectangle.
+    /// @todo Return the -=real=- segment rectangle.
     const QRect myRect = m_pParent->rect();
     return QRect(myRect.x() + myRect.width() / 2 * m_iIndex,
                  myRect.y(), myRect.width() / 2, myRect.height());
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin.cpp
index cfb48cf..7fd5bbb 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_cocoa.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_cocoa.mm
index ea7dd66..b80334a 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_cocoa.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_cocoa.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_p.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_p.h
index 371daf3..fe303b9 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_p.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIDesktopServices_darwin_p.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.cpp
index 5dac5b9..64f498d 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -286,7 +286,7 @@ bool UIWindowMenuManager::eventFilter(QObject *pObject, QEvent *pEvent)
     /* Acquire event type: */
     const QEvent::Type type = pEvent->type();
 
-#ifdef VBOX_OSE // TODO: Do we still need it?
+#ifdef VBOX_OSE /// @todo Do we still need it?
     /* Stupid Qt: Qt doesn't check if a window is minimized when a command is
      * executed. This leads to strange behaviour. The minimized window is
      * partly restored, but not usable. As a workaround we raise the parent
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.h
index 1755cbd..1d1e339 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIWindowMenuManager.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxCocoaHelper.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxCocoaHelper.h
index b95d8f1..e10b681 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxCocoaHelper.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxCocoaHelper.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.h
index 5e6ef35..a2a9402 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.m b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.m
index eabc0b3..b8b4570 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.m
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxIChatTheaterWrapper.m
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2010 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm
index c78d377..d0b73ab 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin-cocoa.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2011 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp
index 46a1999..1f9a682 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h
index 1cee45d..4f71949 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/VBoxUtils-darwin.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/tstDarwinKeyboard.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/tstDarwinKeyboard.cpp
index 5a90cc4..f63fe38 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/tstDarwinKeyboard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/tstDarwinKeyboard.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/vmstarter.mm b/src/VBox/Frontends/VirtualBox/src/platform/darwin/vmstarter.mm
index ea63171..2084a26 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/vmstarter.mm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/vmstarter.mm
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.asm b/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.asm
index d12db0a..1a42baf 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.asm
+++ b/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.asm
@@ -6,7 +6,7 @@
 ;
 
 ;
-; Copyright (C) 2008-2016 Oracle Corporation
+; Copyright (C) 2008-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -23,11 +23,11 @@
 ;   D:\CODING\INNOTEK\VBOX\OUT\OS2.X86\RELEASE\BIN\VIRTUALBOX.EXE
 ;   c0000005
 ;   17d40000
-;   P1=00000008  P2=0000bea4  P3=XXXXXXXX  P4=XXXXXXXX  
+;   P1=00000008  P2=0000bea4  P3=XXXXXXXX  P4=XXXXXXXX
 ;   EAX=00001489  EBX=00000000  ECX=00000000  EDX=00000000
-;   ESI=00000000  EDI=00001489  
-;   DS=be7f  DSACC=00f3  DSLIM=0000003f  
-;   ES=0053  ESACC=f0f3  ESLIM=ffffffff  
+;   ESI=00000000  EDI=00001489
+;   DS=be7f  DSACC=00f3  DSLIM=0000003f
+;   ES=0053  ESACC=f0f3  ESLIM=ffffffff
 ;   FS=150b  FSACC=00f3  FSLIM=00000030
 ;   GS=0000  GSACC=****  GSLIM=********
 ;   CS:EIP=bea7:00000000  CSACC=00f2  CSLIM=00000002
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.cpp b/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.cpp
index 2f288dd..401f0f4 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.h b/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.h
index 4a1b899..d0a5209 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/os2/VBoxHlp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/UIDesktopServices_win.cpp b/src/VBox/Frontends/VirtualBox/src/platform/win/UIDesktopServices_win.cpp
index 3ea8c4d..ce35428 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/UIDesktopServices_win.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/UIDesktopServices_win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.cpp b/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.cpp
index 85c52f4..9e5a067 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.h b/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.h
index f674c3f..c3f0151 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/VBoxUtils-win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBox.rc b/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBox.rc
index 0d6ac8c..706a236 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBox.rc
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBox.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBoxHardened.rc b/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBoxHardened.rc
index 5564b23..46205b1 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBoxHardened.rc
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/VirtualBoxHardened.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp
index b2311e7..f51975c 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h
index 4e54cd4..f0e233e 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/win/WinKeyboard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/x11/UIDesktopServices_x11.cpp b/src/VBox/Frontends/VirtualBox/src/platform/x11/UIDesktopServices_x11.cpp
index 26d402d..91faeb7 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/x11/UIDesktopServices_x11.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/x11/UIDesktopServices_x11.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.cpp b/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.cpp
index a9827bb..3979edf 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.h b/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.h
index fe125c3..08334be 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/x11/VBoxX11Helper.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard-new.cpp b/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard-new.cpp
index 890138f..0d94bc9 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard-new.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard-new.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard.h b/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard.h
index 2f3b091..3426467 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/x11/XKeyboard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/precomp.h b/src/VBox/Frontends/VirtualBox/src/precomp.h
index becd6bb..2728635 100644
--- a/src/VBox/Frontends/VirtualBox/src/precomp.h
+++ b/src/VBox/Frontends/VirtualBox/src/precomp.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -538,7 +538,6 @@
 #include "UIMediumDefs.h"
 #include "UIMediumEnumerator.h"
 #include "UIMediumManager.h"
-#include "UIMediumTypeChangeDialog.h"
 #include "UIMenuBar.h"
 #include "UIMenuBarEditorWindow.h"
 #include "UIMessageCenter.h"
diff --git a/src/VBox/Frontends/VirtualBox/src/precomp_vcc.h b/src/VBox/Frontends/VirtualBox/src/precomp_vcc.h
index 0c79342..06ce223 100644
--- a/src/VBox/Frontends/VirtualBox/src/precomp_vcc.h
+++ b/src/VBox/Frontends/VirtualBox/src/precomp_vcc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
index 65e9d0d..157a959 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
index eb92689..a627788 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp
index 55b4c54..2e688c1 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h
index 2465d47..5f28ef1 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp
index b8de377..28eb338 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.h
index b94eb35..1e9bba5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.cpp
index 4c40248..173f425 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.h
index 42c161d..94f6847 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDataObject_win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.cpp
index 3932ae6..b8a8d07 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.h
index 9ba8fa8..fb148cc 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDDropSource_win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.cpp
index e294a15..da35395 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.h
index 7c5aaf7..90bccb7 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDEnumFormat_win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp
index a39f305..a9f380d 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h
index 7c3c142..271d8e7 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDHandler.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
index 01f059f..5804b44 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
index b11239b..680af47 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIDnDMIMEData.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
index 4c48c6b..e217097 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h
index a516264..da45403 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
index e24f675..6486a26 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1202,7 +1202,7 @@ bool UIKeyboardHandler::eventFilter(QObject *pWatchedObject, QEvent *pEvent)
                 m_iKeyboardHookViewIndex = -1;
 
                 /* Release keyboard: */
-                if (isSessionRunning())
+                if (isSessionRunning() || isSessionStuck())
                     releaseKeyboard();
                 /* And all pressed keys: */
                 releaseAllPressedKeys(true);
@@ -1903,6 +1903,11 @@ bool UIKeyboardHandler::isSessionRunning()
     return uisession()->isRunning();
 }
 
+bool UIKeyboardHandler::isSessionStuck()
+{
+    return uisession()->isStuck();
+}
+
 UIMachineWindow* UIKeyboardHandler::isItListenedWindow(QObject *pWatchedObject) const
 {
     UIMachineWindow *pResultWindow = 0;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
index c5e7b73..11ee050 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -172,6 +172,7 @@ protected:
     bool autoCaptureSetGlobally();
     bool viewHasFocus(ulong uScreenId);
     bool isSessionRunning();
+    bool isSessionStuck();
 
     UIMachineWindow* isItListenedWindow(QObject *pWatchedObject) const;
     UIMachineView* isItListenedView(QObject *pWatchedObject) const;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
index 7bb9350..6840cdd 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.h
index d963ddf..5490919 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h
index a408a54..038b67c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
index 62d79fd..f1c79f7 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1559,7 +1559,10 @@ void UIMachineLogic::sltTakeSnapshot()
 
     /* Assign corresponding icon: */
     if (uisession() && uisession()->machineWindowIcon())
-        pDlg->setPixmap(uisession()->machineWindowIcon()->pixmap(QSize(32, 32)));
+    {
+        const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+        pDlg->setPixmap(uisession()->machineWindowIcon()->pixmap(QSize(iIconMetric, iIconMetric)));
+    }
 
     /* Search for the max available filter index: */
     QString strNameTemplate = UITakeSnapshotDialog::tr("Snapshot %1");
@@ -2504,7 +2507,7 @@ void UIMachineLogic::updateMenuDevicesNetwork(QMenu *pMenu)
     /* Add new actions: */
     foreach (int iSlot, adapterData.keys())
     {
-        QAction *pAction = pMenu->addAction(UIIconPool::iconSet(adapterData[iSlot] ? ":/connect_16px.png": ":/disconnect_16px.png"),
+        QAction *pAction = pMenu->addAction(UIIconPool::iconSetOnOff(":/connect_on_16px.png", ":/connect_16px.png"),
                                             adapterData.size() == 1 ? UIActionPool::tr("&Connect Network Adapter") :
                                                                       UIActionPool::tr("Connect Network Adapter &%1").arg(iSlot + 1),
                                             this, SLOT(sltToggleNetworkAdapterConnection()));
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
index 48e7747..df684aa 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
index fa6783e..51a59ce 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h
index e8f9892..9c2060c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp
index 2d8ac50..03b9adb 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -95,6 +95,17 @@ void UIMachineWindow::destroy(UIMachineWindow *pWhichWindow)
 
 void UIMachineWindow::prepare()
 {
+#ifdef VBOX_WS_X11
+    /* Prepare default class/name values: */
+    const QString strWindowClass = QString("VirtualBox Machine");
+    QString strWindowName = strWindowClass;
+    /* Check if we want Window Manager to distinguish Virtual Machine windows: */
+    if (gEDataManager->distinguishMachineWindowGroups(vboxGlobal().managedVMUuid()))
+        strWindowName = QString("VirtualBox Machine UUID: %1").arg(vboxGlobal().managedVMUuid());
+    /* Assign WM_CLASS property: */
+    vboxGlobal().setWMClass(this, strWindowName, strWindowClass);
+#endif
+
     /* Prepare session-connections: */
     prepareSessionConnections();
 
@@ -307,7 +318,10 @@ void UIMachineWindow::closeEvent(QCloseEvent *pCloseEvent)
                                                                   restrictedCloseActions);
         /* Configure close-dialog: */
         if (uisession() && uisession()->machineWindowIcon())
-            pCloseDlg->setPixmap(uisession()->machineWindowIcon()->pixmap(QSize(32, 32)));
+        {
+            const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+            pCloseDlg->setPixmap(uisession()->machineWindowIcon()->pixmap(QSize(iIconMetric, iIconMetric)));
+        }
 
         /* Make sure close-dialog is valid: */
         if (pCloseDlg->isValid())
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h
index f560e30..07d0309 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp
index a2ff613..ac87429 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -873,18 +873,21 @@ void UIMenuBarEditorWidget::prepare()
         /* Configure main-layout: */
         int iLeft, iTop, iRight, iBottom;
         m_pMainLayout->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
-        /* Standard margins should not be too big: */
-        iLeft   = qMin(iLeft,   10);
-        iTop    = qMin(iTop,    10);
-        iRight  = qMin(iRight,  10);
-        iBottom = qMin(iBottom, 10);
+        /* Acquire metric: */
+        const int iStandardMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
+        const int iMinimumMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        /* Standard margins should not be too small/large: */
+        iLeft   = iStandardMetric;
+        iTop    = iStandardMetric;
+        iRight  = iStandardMetric;
+        iBottom = iStandardMetric;
         /* Top margin should be smaller for the common case: */
-        if (iTop >= 5)
-            iTop -= 5;
+        if (iTop >= iMinimumMetric)
+            iTop -= iMinimumMetric;
 #ifndef VBOX_WS_MAC
         /* Right margin should be bigger for the settings case: */
         if (m_fStartedFromVMSettings)
-            iRight += 5;
+            iRight += iMinimumMetric;
 #endif /* !VBOX_WS_MAC */
         /* Apply margins/spacing finally: */
         m_pMainLayout->setContentsMargins(iLeft, iTop, iRight, iBottom);
@@ -1324,54 +1327,60 @@ void UIMenuBarEditorWidget::paintEvent(QPaintEvent*)
     QColor color3 = pal.color(QPalette::Window).darker(120);
 #endif /* VBOX_WS_WIN || VBOX_WS_X11 */
 
+    /* Acquire metric: */
+    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+
     /* Left corner: */
-    QRadialGradient grad1(QPointF(5, height() - 5), 5);
+    QRadialGradient grad1(QPointF(iMetric, height() - iMetric), iMetric);
     {
         grad1.setColorAt(0, color2);
         grad1.setColorAt(1, color1);
     }
     /* Right corner: */
-    QRadialGradient grad2(QPointF(width() - 5, height() - 5), 5);
+    QRadialGradient grad2(QPointF(width() - iMetric, height() - iMetric), iMetric);
     {
         grad2.setColorAt(0, color2);
         grad2.setColorAt(1, color1);
     }
     /* Bottom line: */
-    QLinearGradient grad3(QPointF(5, height()), QPointF(5, height() - 5));
+    QLinearGradient grad3(QPointF(iMetric, height()), QPointF(iMetric, height() - iMetric));
     {
         grad3.setColorAt(0, color1);
         grad3.setColorAt(1, color2);
     }
     /* Left line: */
-    QLinearGradient grad4(QPointF(0, height() - 5), QPointF(5, height() - 5));
+    QLinearGradient grad4(QPointF(0, height() - iMetric), QPointF(iMetric, height() - iMetric));
     {
         grad4.setColorAt(0, color1);
         grad4.setColorAt(1, color2);
     }
     /* Right line: */
-    QLinearGradient grad5(QPointF(width(), height() - 5), QPointF(width() - 5, height() - 5));
+    QLinearGradient grad5(QPointF(width(), height() - iMetric), QPointF(width() - iMetric, height() - iMetric));
     {
         grad5.setColorAt(0, color1);
         grad5.setColorAt(1, color2);
     }
 
     /* Paint shape/shadow: */
-    painter.fillRect(QRect(5, 0, width() - 5 * 2, height() - 5), color0); // background
-    painter.fillRect(QRect(0,           height() - 5, 5, 5), grad1); // left corner
-    painter.fillRect(QRect(width() - 5, height() - 5, 5, 5), grad2); // right corner
-    painter.fillRect(QRect(5, height() - 5, width() - 5 * 2, 5), grad3); // bottom line
-    painter.fillRect(QRect(0,           0, 5, height() - 5), grad4); // left line
-    painter.fillRect(QRect(width() - 5, 0, 5, height() - 5), grad5); // right line
+    painter.fillRect(QRect(iMetric, 0, width() - iMetric * 2, height() - iMetric), color0); // background
+    painter.fillRect(QRect(0,                 height() - iMetric, iMetric, iMetric), grad1); // left corner
+    painter.fillRect(QRect(width() - iMetric, height() - iMetric, iMetric, iMetric), grad2); // right corner
+    painter.fillRect(QRect(iMetric,           height() - iMetric, width() - iMetric * 2, iMetric), grad3); // bottom line
+    painter.fillRect(QRect(0,                 0, iMetric, height() - iMetric), grad4); // left line
+    painter.fillRect(QRect(width() - iMetric, 0, iMetric, height() - iMetric), grad5); // right line
 
 #if defined(VBOX_WS_WIN) || defined(VBOX_WS_X11)
     /* Paint frames: */
     painter.save();
     painter.setPen(color3);
-    painter.drawLine(QLine(QPoint(5 + 1, 0),                                  QPoint(5 + 1, height() - 1 - 5 - 1)));
-    painter.drawLine(QLine(QPoint(5 + 1, height() - 1 - 5 - 1),               QPoint(width() - 1 - 5 - 1, height() - 1 - 5 - 1)));
-    painter.drawLine(QLine(QPoint(width() - 1 - 5 - 1, height() - 1 - 5 - 1), QPoint(width() - 1 - 5 - 1, 0)));
+    painter.drawLine(QLine(QPoint(iMetric + 1,               0),
+                           QPoint(iMetric + 1,               height() - 1 - iMetric - 1)));
+    painter.drawLine(QLine(QPoint(iMetric + 1,               height() - 1 - iMetric - 1),
+                           QPoint(width() - 1 - iMetric - 1, height() - 1 - iMetric - 1)));
+    painter.drawLine(QLine(QPoint(width() - 1 - iMetric - 1, height() - 1 - iMetric - 1),
+                           QPoint(width() - 1 - iMetric - 1, 0)));
     if (m_fStartedFromVMSettings)
-        painter.drawLine(QLine(QPoint(width() - 1 - 5 - 1, 0), QPoint(5 + 1, 0)));
+        painter.drawLine(QLine(QPoint(width() - 1 - iMetric - 1, 0), QPoint(iMetric + 1, 0)));
     painter.restore();
 #endif /* VBOX_WS_WIN || VBOX_WS_X11 */
 }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.h
index a7b62ae..687f3b8 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
index 8405d0e..99618fb 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.h
index 53870d7..944d7a5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
index d23a179..a38acaa 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h
index 56a38be..6eabd36 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
index 0378a30..ed57e60 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
index 3666ef4..91764ef 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp
index 8fbffda..8427725 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -492,17 +492,20 @@ void UIStatusBarEditorWidget::prepare()
         /* Configure main-layout: */
         int iLeft, iTop, iRight, iBottom;
         m_pMainLayout->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
-        /* Standard margins should not be too big: */
-        iLeft   = qMin(iLeft,   10);
-        iTop    = qMin(iTop,    10);
-        iRight  = qMin(iRight,  10);
-        iBottom = qMin(iBottom, 10);
+        /* Acquire metric: */
+        const int iStandardMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
+        const int iMinimumMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        /* Standard margins should not be too small/large: */
+        iLeft   = iStandardMetric;
+        iTop    = iStandardMetric;
+        iRight  = iStandardMetric;
+        iBottom = iStandardMetric;
         /* Bottom margin should be smaller for the common case: */
-        if (iBottom >= 5)
-            iBottom -= 5;
+        if (iBottom >= iMinimumMetric)
+            iBottom -= iMinimumMetric;
         /* Left margin should be bigger for the settings case: */
         if (m_fStartedFromVMSettings)
-            iLeft += 5;
+            iLeft += iMinimumMetric;
         /* Apply margins/spacing finally: */
         m_pMainLayout->setContentsMargins(iLeft, iTop, iRight, iBottom);
         m_pMainLayout->setSpacing(0);
@@ -622,53 +625,60 @@ void UIStatusBarEditorWidget::paintEvent(QPaintEvent*)
     QColor color3 = pal.color(QPalette::Window).darker(120);
 #endif /* VBOX_WS_WIN || VBOX_WS_X11 */
 
+    /* Acquire metric: */
+    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+
     /* Left corner: */
-    QRadialGradient grad1(QPointF(5, 5), 5);
+    QRadialGradient grad1(QPointF(iMetric, iMetric), iMetric);
     {
         grad1.setColorAt(0, color2);
         grad1.setColorAt(1, color1);
     }
     /* Right corner: */
-    QRadialGradient grad2(QPointF(width() - 5, 5), 5);
+    QRadialGradient grad2(QPointF(width() - iMetric, iMetric), iMetric);
     {
         grad2.setColorAt(0, color2);
         grad2.setColorAt(1, color1);
     }
     /* Top line: */
-    QLinearGradient grad3(QPointF(5, 0), QPointF(5, 5));
+    QLinearGradient grad3(QPointF(iMetric, 0), QPointF(iMetric, iMetric));
     {
         grad3.setColorAt(0, color1);
         grad3.setColorAt(1, color2);
     }
     /* Left line: */
-    QLinearGradient grad4(QPointF(0, 5), QPointF(5, 5));
+    QLinearGradient grad4(QPointF(0, iMetric), QPointF(iMetric, iMetric));
     {
         grad4.setColorAt(0, color1);
         grad4.setColorAt(1, color2);
     }
     /* Right line: */
-    QLinearGradient grad5(QPointF(width(), 5), QPointF(width() - 5, 5));
+    QLinearGradient grad5(QPointF(width(), iMetric), QPointF(width() - iMetric, iMetric));
     {
         grad5.setColorAt(0, color1);
         grad5.setColorAt(1, color2);
     }
 
     /* Paint shape/shadow: */
-    painter.fillRect(QRect(5, 5, width() - 5 * 2, height() - 5), color0); // background
-    painter.fillRect(QRect(0,           0, 5, 5), grad1); // left corner
-    painter.fillRect(QRect(width() - 5, 0, 5, 5), grad2); // right corner
-    painter.fillRect(QRect(5, 0, width() - 5 * 2, 5), grad3); // bottom line
-    painter.fillRect(QRect(0,           5, 5, height() - 5), grad4); // left line
-    painter.fillRect(QRect(width() - 5, 5, 5, height() - 5), grad5); // right line
+    painter.fillRect(QRect(iMetric, iMetric, width() - iMetric * 2, height() - iMetric), color0); // background
+    painter.fillRect(QRect(0,                 0, iMetric, iMetric), grad1); // left corner
+    painter.fillRect(QRect(width() - iMetric, 0, iMetric, iMetric), grad2); // right corner
+    painter.fillRect(QRect(iMetric,           0, width() - iMetric * 2, iMetric), grad3); // bottom line
+    painter.fillRect(QRect(0,                 iMetric, iMetric, height() - iMetric), grad4); // left line
+    painter.fillRect(QRect(width() - iMetric, iMetric, iMetric, height() - iMetric), grad5); // right line
 
 #if defined(VBOX_WS_WIN) || defined(VBOX_WS_X11)
     /* Paint frames: */
     painter.save();
     painter.setPen(color3);
-    painter.drawLine(QLine(QPoint(5 + 1, 5 + 1),                      QPoint(width() - 1 - 5 - 1, 5 + 1)));
-    painter.drawLine(QLine(QPoint(width() - 1 - 5 - 1, 5 + 1),        QPoint(width() - 1 - 5 - 1, height() - 1)));
-    painter.drawLine(QLine(QPoint(width() - 1 - 5 - 1, height() - 1), QPoint(5 + 1, height() - 1)));
-    painter.drawLine(QLine(QPoint(5 + 1, height() - 1),               QPoint(5 + 1, 5 + 1)));
+    painter.drawLine(QLine(QPoint(iMetric + 1,               iMetric + 1),
+                           QPoint(width() - 1 - iMetric - 1, iMetric + 1)));
+    painter.drawLine(QLine(QPoint(width() - 1 - iMetric - 1, iMetric + 1),
+                           QPoint(width() - 1 - iMetric - 1, height() - 1)));
+    painter.drawLine(QLine(QPoint(width() - 1 - iMetric - 1, height() - 1),
+                           QPoint(iMetric + 1,               height() - 1)));
+    painter.drawLine(QLine(QPoint(iMetric + 1,               height() - 1),
+                           QPoint(iMetric + 1,               iMetric + 1)));
     painter.restore();
 #endif /* VBOX_WS_WIN || VBOX_WS_X11 */
 
@@ -679,10 +689,10 @@ void UIStatusBarEditorWidget::paintEvent(QPaintEvent*)
         option.state |= QStyle::State_Horizontal;
         const QRect geo = m_pButtonDropToken->geometry();
         option.rect = !m_fDropAfterTokenButton ?
-                      QRect(geo.topLeft() - QPoint(5, 5),
-                            geo.bottomLeft() + QPoint(0, 5)) :
-                      QRect(geo.topRight() - QPoint(0, 5),
-                            geo.bottomRight() + QPoint(5, 5));
+                      QRect(geo.topLeft() - QPoint(iMetric, iMetric),
+                            geo.bottomLeft() + QPoint(0, iMetric)) :
+                      QRect(geo.topRight() - QPoint(0, iMetric),
+                            geo.bottomRight() + QPoint(iMetric, iMetric));
         QApplication::style()->drawPrimitive(QStyle::PE_IndicatorToolBarSeparator,
                                              &option, &painter);
     }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.h
index 34777b2..acc4833 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIStatusBarEditorWindow.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp
index 33aca4f..6ad32ae 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -29,6 +29,7 @@
 # include <QPushButton>
 
 /* GUI includes: */
+# include "UIIconPool.h"
 # include "UIVMCloseDialog.h"
 # include "UIExtraDataManager.h"
 # include "UIMessageCenter.h"
@@ -183,7 +184,9 @@ void UIVMCloseDialog::prepare()
                 {
                     /* Configure icon: */
                     m_pIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-                    m_pIcon->setPixmap(QPixmap(":/os_unknown.png"));
+                    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+                    const QIcon icon = UIIconPool::iconSet(":/os_unknown.png");
+                    m_pIcon->setPixmap(icon.pixmap(iIconMetric, iIconMetric));
                 }
                 /* Configure layout: */
                 pTopLeftLayout->setSpacing(0);
@@ -199,12 +202,15 @@ void UIVMCloseDialog::prepare()
                 /* Prepare 'choice' layout: */
                 QGridLayout *pChoiceLayout = new QGridLayout;
                 {
+                    /* Prepare icon metric: */
+                    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
                     /* Prepare 'detach' icon: */
                     m_pDetachIcon = new QLabel(this);
                     {
                         /* Configure icon: */
                         m_pDetachIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-                        m_pDetachIcon->setPixmap(QPixmap(":/vm_create_shortcut_16px.png"));
+                        const QIcon icon = UIIconPool::iconSet(":/vm_create_shortcut_16px.png");
+                        m_pDetachIcon->setPixmap(icon.pixmap(iIconMetric, iIconMetric));
                     }
                     /* Prepare 'detach' radio-button: */
                     m_pDetachRadio = new QRadioButton(this);
@@ -218,7 +224,8 @@ void UIVMCloseDialog::prepare()
                     {
                         /* Configure icon: */
                         m_pSaveIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-                        m_pSaveIcon->setPixmap(QPixmap(":/vm_save_state_16px.png"));
+                        const QIcon icon = UIIconPool::iconSet(":/vm_save_state_16px.png");
+                        m_pSaveIcon->setPixmap(icon.pixmap(iIconMetric, iIconMetric));
                     }
                     /* Prepare 'save' radio-button: */
                     m_pSaveRadio = new QRadioButton(this);
@@ -232,7 +239,8 @@ void UIVMCloseDialog::prepare()
                     {
                         /* Configure icon: */
                         m_pShutdownIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-                        m_pShutdownIcon->setPixmap(QPixmap(":/vm_shutdown_16px.png"));
+                        const QIcon icon = UIIconPool::iconSet(":/vm_shutdown_16px.png");
+                        m_pShutdownIcon->setPixmap(icon.pixmap(iIconMetric, iIconMetric));
                     }
                     /* Prepare 'shutdown' radio-button: */
                     m_pShutdownRadio = new QRadioButton(this);
@@ -246,7 +254,8 @@ void UIVMCloseDialog::prepare()
                     {
                         /* Configure icon: */
                         m_pPowerOffIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-                        m_pPowerOffIcon->setPixmap(QPixmap(":/vm_poweroff_16px.png"));
+                        const QIcon icon = UIIconPool::iconSet(":/vm_poweroff_16px.png");
+                        m_pPowerOffIcon->setPixmap(icon.pixmap(iIconMetric, iIconMetric));
                     }
                     /* Prepare 'shutdown' radio-button: */
                     m_pPowerOffRadio = new QRadioButton(this);
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.h
index 9d05ee3..49c5cf8 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIVMCloseDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.cpp
index e5d783b..52972f8 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.h b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.h
index 2c141d7..1fe3a48 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIKeyboardHandlerFullscreen.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
index d8f7b91..d87f0ee 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
index c44899c..8c0d177 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineLogicFullscreen.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp
index f55b5b3..8a9f39a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.h b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.h
index e99c0d3..cf2889a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
index b935ba5..379ef34 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
index 8db5073..d0be856 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.cpp
index d042d57..3d7c097 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -59,7 +59,6 @@ void UIInformationConfiguration::prepareLayout()
     AssertPtrReturnVoid(m_pMainLayout);
     {
         /* Configure layout: */
-        m_pMainLayout->setContentsMargins(2, 0, 0, 0);
         m_pMainLayout->setSpacing(0);
     }
 }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.h
index 7d76185..9fe6071 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp
index 73e3abb..f7d6d07 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h
index e254954..6628592 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationDataItem.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.cpp
index 58c25db..33c8ac9 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -152,9 +152,9 @@ void UIInformationItem::updateTextLayout() const
 {
     /* Details templates: */
     static const char *sSectionBoldTpl =
-        "<tr><td width=22 rowspan=%1 align=left><img src=\"image://%2\" /></td>"
-            "<td><b><nobr>%3</nobr></b></td></tr>"
-            "%4";
+        "<tr><td width=%1 rowspan=%2 align=left><img src=\"image://%3\" /></td>"
+            "<td><b><nobr>%4</nobr></b></td></tr>"
+            "%5";
     static const char *sSectionItemTpl2 =
         "<tr><td width=200><nobr>%1</nobr></td><td/><td>%2</td></tr>";
     const QString &sectionTpl = sSectionBoldTpl;
@@ -162,6 +162,9 @@ void UIInformationItem::updateTextLayout() const
     /* Initialize icon tag: */
     const QString strIconTag = QString("image://%1").arg(m_strIcon);
 
+    /* Get icon metric: */
+    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
+
     /* Compose details report: */
     QString report;
     {
@@ -171,14 +174,16 @@ void UIInformationItem::updateTextLayout() const
             item = item + QString(sSectionItemTpl2).arg(line.first, line.second);
 
         /* Format the entire item: */
-        report = sectionTpl.arg(m_text.count() + 1) /* rows */
+        report = sectionTpl.arg(1.375 * iIconMetric)
+                           .arg(m_text.count() + 1) /* rows */
                            .arg(m_strIcon, /* icon */
                                 m_strName, /* title */
                                 item); /* items */
     }
 
     /* Add pixmap to text-document as image resource: */
-    m_pTextDocument->addResource(QTextDocument::ImageResource, QUrl(strIconTag), UIIconPool::pixmap(m_strIcon));
+    m_pTextDocument->addResource(QTextDocument::ImageResource, QUrl(strIconTag),
+                                 UIIconPool::iconSet(m_strIcon).pixmap(iIconMetric, iIconMetric));
 
     /* Set html-data: */
     m_pTextDocument->setHtml(report);
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.h
index 411193e..7fa6924 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationItem.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.cpp
index 45e5814..7cea3c5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.h
index 444851c..c5935aa 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationModel.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.cpp
index 04869f8..db56616 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -59,7 +59,6 @@ void UIInformationRuntime::prepareLayout()
     AssertPtrReturnVoid(m_pMainLayout);
     {
         /* Configure layout: */
-        m_pMainLayout->setContentsMargins(2, 0, 0, 0);
         m_pMainLayout->setSpacing(0);
     }
 }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.h
index 9477746..0542c2a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.cpp
index 32666a6..43ee39c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.h
index 8e83dfc..07441f3 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp
index 51fa31a..bc5c596 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.h b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.h
index eb11bca..0b4b013 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/information/UIVMInformationDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.cpp
index 3a75ce6..f5d0bff 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.h b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.h
index 6aec848..79bda62 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIKeyboardHandlerNormal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
index 7e9e626..433d2f9 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h
index 8e4b435..209f92d 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineLogicNormal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
index fcbd3e6..8bb386c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.h b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.h
index 0b40073..936ebc6 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
index 1fb9f11..1a968a8 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h
index 0035b6a..660da8c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.cpp
index 4503e85..7149098 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.h b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.h
index 8010f1f..3a96ffa 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIKeyboardHandlerScale.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.cpp
index 81f4f5a..05ecb38 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.h b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.h
index 5668f1c..079198f 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineLogicScale.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
index c1a9479..78a546c 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.h b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.h
index 47e997f..3fb55f2 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp
index b40175b..251139f 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h
index ad67dfb..305d580 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineWindowScale.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.cpp
index edf08fe..2c2bd37 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.h b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.h
index 5f78c5a..ae2460a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIKeyboardHandlerSeamless.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
index 9624db4..059f589 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
index 4504f4f..bf22161 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp
index 6805075..280501a 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h
index a8969fc..e27681d 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
index d79e07c..cdd1fc5 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
index 25a3249..340c952 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
index 3785239..7cb03e9 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h b/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h
index 71d05ea..29e11fa 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIDesktopPane.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIDesktopPane.cpp
index 02e4af0..ccd181f 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIDesktopPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIDesktopPane.cpp
@@ -546,7 +546,10 @@ void UIDesktopPanePrivate::setToolsPaneIcon(const QIcon &icon)
     prepareToolsPane();
 
     /* Assign corresponding icon: */
-    m_pLabelToolsPaneIcon->setPixmap(icon.pixmap(QSize(200, 200)));
+    const QList<QSize> aSizes = icon.availableSizes();
+    const QSize firstOne = aSizes.isEmpty() ? QSize(200, 200) : aSizes.first();
+    const double dRatio = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize) / 32;
+    m_pLabelToolsPaneIcon->setPixmap(icon.pixmap(QSize(firstOne.width() * dRatio, firstOne.height() * dRatio)));
 
     /* Raise corresponding widget: */
     setCurrentWidget(m_pScrollArea);
@@ -611,14 +614,14 @@ void UIDesktopPanePrivate::prepareErrorPane()
 
     /* Create main layout: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(m_pErrBox);
-#if   defined(VBOX_WS_MAC)
+#ifdef VBOX_WS_MAC
     pMainLayout->setContentsMargins(4, 5, 5, 5);
-#elif defined(VBOX_WS_WIN)
-    pMainLayout->setContentsMargins(3, 5, 5, 0);
-#elif defined(VBOX_WS_X11)
-    pMainLayout->setContentsMargins(0, 5, 5, 5);
-#endif
-    pMainLayout->setSpacing(10);
+#else /* !VBOX_WS_MAC */
+    const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 3;
+    const int iT = qApp->style()->pixelMetric(QStyle::PM_LayoutTopMargin) / 3;
+    const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 3;
+    pMainLayout->setContentsMargins(iL, iT, iR, 0);
+#endif /* !VBOX_WS_MAC */
 
     /* Create error label: */
     m_pErrLabel = new QLabel(m_pErrBox);
@@ -684,12 +687,9 @@ void UIDesktopPanePrivate::prepareToolsPane()
                 QHBoxLayout *pLayoutWelcome = new QHBoxLayout;
                 AssertPtrReturnVoid(pLayoutWelcome);
                 {
-                    /* Invent pixel metric: */
-                    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
-
                     /* Configure layout: */
-                    pLayoutWelcome->setContentsMargins(iMetric, 0, 0, 0);
-                    pLayoutWelcome->setSpacing(10);
+                    const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+                    pLayoutWelcome->setContentsMargins(iL, 0, 0, 0);
 
                     /* Create welcome text label: */
                     m_pLabelToolsPaneText = new UILabel;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
index 67c8d6c..9dd5eb5 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
@@ -1320,6 +1320,11 @@ bool UISelectorWindow::eventFilter(QObject *pObject, QEvent *pEvent)
 
 void UISelectorWindow::prepare()
 {
+#ifdef VBOX_WS_X11
+    /* Assign same name to both WM_CLASS name & class for now: */
+    vboxGlobal().setWMClass(this, "VirtualBox Manager", "VirtualBox Manager");
+#endif
+
 #ifdef VBOX_WS_MAC
     /* We have to make sure that we are getting the front most process: */
     ::darwinSetFrontMostProcess();
@@ -1806,7 +1811,7 @@ void UISelectorWindow::prepareToolbar()
         m_pToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
         m_pToolBar->setContextMenuPolicy(Qt::CustomContextMenu);
         m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
-        // TODO: Get rid of hard-coded stuff:
+        /// @todo Get rid of hard-coded stuff:
         const QSize toolBarIconSize = m_pToolBar->iconSize();
         if (toolBarIconSize.width() < 32 || toolBarIconSize.height() < 32)
             m_pToolBar->setIconSize(QSize(32, 32));
@@ -1835,7 +1840,9 @@ void UISelectorWindow::prepareToolbar()
         AssertPtrReturnVoid(m_pTabBarMachine);
         {
             /* Configure tab-bar: */
-            m_pTabBarMachine->setContentsMargins(10, 0, 10, 0);
+            const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+            const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2;
+            m_pTabBarMachine->setContentsMargins(iL, 0, iR, 0);
 
             /* Add into toolbar: */
             m_pActionTabBarMachine = m_pToolBar->addWidget(m_pTabBarMachine);
@@ -1846,7 +1853,9 @@ void UISelectorWindow::prepareToolbar()
         AssertPtrReturnVoid(m_pTabBarGlobal);
         {
             /* Configure tab-bar: */
-            m_pTabBarGlobal->setContentsMargins(10, 0, 10, 0);
+            const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+            const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2;
+            m_pTabBarGlobal->setContentsMargins(iL, 0, iR, 0);
 
             /* Add into toolbar: */
             m_pActionTabBarGlobal = m_pToolBar->addWidget(m_pTabBarGlobal);
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.cpp
index b5e147e..4ee4da9 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.cpp
@@ -330,7 +330,7 @@ void UISnapshotDetailsElement::prepare()
 
 
 /*********************************************************************************************************************************
-*   Class UIScreenshotViewer implementation.                                                                                   *
+*   Class UIScreenshotViewer implementation.                                                                                     *
 *********************************************************************************************************************************/
 
 UIScreenshotViewer::UIScreenshotViewer(const QPixmap &pixmapScreenshot,
@@ -520,7 +520,6 @@ UISnapshotDetailsWidget::UISnapshotDetailsWidget(QWidget *pParent /* = 0 */)
     , m_pButtonBox(0)
     , m_pLayoutDetails(0)
     , m_pScrollAreaDetails(0)
-    , m_fSnapshotNameEdited(false)
 {
     /* Prepare: */
     prepare();
@@ -528,9 +527,6 @@ UISnapshotDetailsWidget::UISnapshotDetailsWidget(QWidget *pParent /* = 0 */)
 
 void UISnapshotDetailsWidget::setData(const CMachine &comMachine)
 {
-    /* Reset defaults: */
-    m_fSnapshotNameEdited = false;
-
     /* Cache old/new data: */
     m_oldData = UIDataSnapshot();
     m_newData = m_oldData;
@@ -547,9 +543,6 @@ void UISnapshotDetailsWidget::setData(const CMachine &comMachine)
 
 void UISnapshotDetailsWidget::setData(const UIDataSnapshot &data, const CSnapshot &comSnapshot)
 {
-    /* Reset defaults: */
-    m_fSnapshotNameEdited = false;
-
     /* Cache old/new data: */
     m_oldData = data;
     m_newData = m_oldData;
@@ -566,9 +559,6 @@ void UISnapshotDetailsWidget::setData(const UIDataSnapshot &data, const CSnapsho
 
 void UISnapshotDetailsWidget::clearData()
 {
-    /* Reset defaults: */
-    m_fSnapshotNameEdited = false;
-
     /* Reset old/new data: */
     m_oldData = UIDataSnapshot();
     m_newData = m_oldData;
@@ -663,11 +653,6 @@ void UISnapshotDetailsWidget::retranslateButtons()
     }
 }
 
-void UISnapshotDetailsWidget::sltHandleNameEdit()
-{
-    m_fSnapshotNameEdited = true;
-}
-
 void UISnapshotDetailsWidget::sltHandleNameChange()
 {
     m_newData.m_strName = m_pEditorName->text();
@@ -783,8 +768,6 @@ void UISnapshotDetailsWidget::prepareTabOptions()
                     QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Minimum);
                     policy.setHorizontalStretch(1);
                     m_pEditorName->setSizePolicy(policy);
-                    connect(m_pEditorName, &QLineEdit::textEdited,
-                            this, &UISnapshotDetailsWidget::sltHandleNameEdit);
                     connect(m_pEditorName, &QLineEdit::textChanged,
                             this, &UISnapshotDetailsWidget::sltHandleNameChange);
 
@@ -885,6 +868,7 @@ void UISnapshotDetailsWidget::prepareTabDetails()
         m_pScrollAreaDetails->setWidgetResizable(true);
         m_pScrollAreaDetails->setFrameShadow(QFrame::Plain);
         m_pScrollAreaDetails->setFrameShape(QFrame::NoFrame);
+        m_pScrollAreaDetails->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);
         m_pScrollAreaDetails->viewport()->setAutoFillBackground(false);
 
         /* Create details widget: */
@@ -895,8 +879,11 @@ void UISnapshotDetailsWidget::prepareTabDetails()
             m_pLayoutDetails = new QVBoxLayout(pWidgetDetails);
             AssertPtrReturnVoid(m_pLayoutDetails);
             {
+                /* Metric: */
+                const int iSpacing = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+
                 /* Configure layout: */
-                m_pLayoutDetails->setSpacing(5);
+                m_pLayoutDetails->setSpacing(iSpacing);
 #ifdef VBOX_WS_MAC
                 m_pLayoutDetails->setContentsMargins(10, 10, 10, 10);
 #endif
@@ -910,7 +897,7 @@ void UISnapshotDetailsWidget::prepareTabDetails()
                     AssertPtrReturnVoid(pLayoutLeft);
                     {
                         /* Configure layout: */
-                        pLayoutLeft->setSpacing(5);
+                        pLayoutLeft->setSpacing(iSpacing);
                         pLayoutLeft->setContentsMargins(0, 0, 0, 0);
 
                         /* Create 'General' element: */
@@ -932,6 +919,7 @@ void UISnapshotDetailsWidget::prepareTabDetails()
                     AssertPtrReturnVoid(pLayoutRight);
                     {
                         /* Configure layout: */
+                        pLayoutLeft->setSpacing(iSpacing);
                         pLayoutRight->setContentsMargins(0, 0, 0, 0);
 
                         /* Create 'Preview' element: */
@@ -954,7 +942,7 @@ void UISnapshotDetailsWidget::prepareTabDetails()
                 QIFlowLayout *pLayout2 = new QIFlowLayout;
                 {
                     /* Configure layout: */
-                    pLayout2->setSpacing(5);
+                    pLayout2->setSpacing(iSpacing);
 
                     /* Create 'Display' element: */
                     m_details[DetailsElementType_Display] = createDetailsElement(DetailsElementType_Display);
@@ -1091,7 +1079,7 @@ void UISnapshotDetailsWidget::revalidate(QWidget *pWidget /* = 0 */)
     if (!pWidget || pWidget == m_pErrorPaneName)
     {
         const bool fError = m_newData.m_strName.isEmpty();
-        m_pErrorPaneName->setVisible(fError && m_fSnapshotNameEdited);
+        m_pErrorPaneName->setVisible(fError && m_comMachine.isNull());
     }
     if (!pWidget || pWidget == m_pErrorPaneDescription)
     {
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.h b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.h
index 0248d88..6a623db 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotDetailsWidget.h
@@ -107,8 +107,6 @@ protected:
 
 private slots:
 
-    /** Handles snapshot name edit. */
-    void sltHandleNameEdit();
     /** Handles snapshot name change. */
     void sltHandleNameChange();
     /** Handles snapshot description change. */
@@ -235,9 +233,6 @@ private:
 
     /** Holds the details element map. */
     QMap<DetailsElementType, UISnapshotDetailsElement*> m_details;
-
-    /** Holds whether the snapshot name was edited. */
-    bool  m_fSnapshotNameEdited;
 };
 
 #endif /* !___UISnapshotDetailsWidget_h___ */
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp
index 3b923a5..564e99f 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp
@@ -1133,7 +1133,7 @@ void UISnapshotPane::sltHandleItemChange(QTreeWidgetItem *pItem)
                 CSession comSession = vboxGlobal().openExistingSession(comSnapshot.GetMachine().GetId());
                 if (!comSession.isNull())
                 {
-                    // TODO: Add settings save validation.
+                    /// @todo Add settings save validation.
 
                     /* Save snapshot name: */
                     comSnapshot.SetName(pSnapshotItem->text(Column_Name));
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.cpp
index 284e9b4..bcba0ff 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneGlobal.cpp
@@ -218,12 +218,6 @@ void UIToolsPaneGlobal::prepare()
 {
     /* Create stacked-layout: */
     m_pLayout = new QStackedLayout(this);
-    AssertPtrReturnVoid(m_pLayout);
-    {
-        /* Configure layout: */
-        m_pLayout->setSpacing(0);
-        m_pLayout->setContentsMargins(3, 4, 5, 0);
-    }
 
     /* Create desktop pane: */
     openTool(ToolTypeGlobal_Desktop);
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp
index 7c11e88..26b49a5 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIToolsPaneMachine.cpp
@@ -271,12 +271,6 @@ void UIToolsPaneMachine::prepare()
 {
     /* Create stacked-layout: */
     m_pLayout = new QStackedLayout(this);
-    AssertPtrReturnVoid(m_pLayout);
-    {
-        /* Configure layout: */
-        m_pLayout->setSpacing(0);
-        m_pLayout->setContentsMargins(3, 4, 5, 0);
-    }
 
     /* Create desktop pane: */
     openTool(ToolTypeMachine_Desktop);
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp
index 97dbd69..6f80777 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIToolsToolbar.cpp
@@ -268,7 +268,7 @@ void UIToolsToolbar::prepareWidgets()
         {
             /* Configure toolbar: */
             m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
-            // TODO: Get rid of hard-coded stuff:
+            /// @todo Get rid of hard-coded stuff:
             const QSize toolBarIconSize = m_pToolBar->iconSize();
             if (toolBarIconSize.width() < 32 || toolBarIconSize.height() < 32)
                 m_pToolBar->setIconSize(QSize(32, 32));
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.cpp
index 6233b62..4d6cb32 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h b/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h
index cb5d4f2..b260172 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIVMItem.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp
index 35b15fe..737c448 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h b/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h
index 48073d0..224c803 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.cpp
index b0e8168..237b5f7 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -22,6 +22,7 @@
 /* Qt includes: */
 # include <QVBoxLayout>
 # include <QStatusBar>
+# include <QStyle>
 
 /* GUI includes: */
 # include "UIGChooser.h"
@@ -108,7 +109,8 @@ void UIGChooser::prepareLayout()
 {
     /* Setup main-layout: */
     m_pMainLayout = new QVBoxLayout(this);
-    m_pMainLayout->setContentsMargins(0, 0, 2, 0);
+    const int iR = qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 9;
+    m_pMainLayout->setContentsMargins(0, 0, iR, 0);
     m_pMainLayout->setSpacing(0);
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.h
index ba9e257..fe322b0 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooser.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp
index 4831c3c..c6c9bb1 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h
index 10f0e0e..184a67b 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerKeyboard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.cpp
index abc4e8e..aa66a65 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.h
index 72d5704..8595d7f 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserHandlerMouse.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp
index 57ee465..2d34d2f 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h
index bf3bcab..e07a21b 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItem.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
index b45ca12..2c11131 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -381,11 +381,11 @@ QVariant UIGChooserItemGroup::data(int iKey) const
     switch (iKey)
     {
         /* Layout hints: */
-        case GroupItemData_HorizonalMargin: return 5;
-        case GroupItemData_VerticalMargin: return 5;
-        case GroupItemData_MajorSpacing: return 10;
-        case GroupItemData_MinorSpacing: return 3;
-        case GroupItemData_RootIndent: return 2;
+        case GroupItemData_HorizonalMargin: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        case GroupItemData_VerticalMargin: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        case GroupItemData_MajorSpacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
+        case GroupItemData_MinorSpacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 5;
+        case GroupItemData_RootIndent: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 6;
 
         /* Default: */
         default: break;
@@ -409,10 +409,11 @@ void UIGChooserItemGroup::prepare()
     m_nameFont = font();
     m_nameFont.setWeight(QFont::Bold);
     m_infoFont = font();
-    m_groupsPixmap = QPixmap(":/group_abstract_16px.png");
-    m_machinesPixmap = QPixmap(":/machine_abstract_16px.png");
-    m_pixmapSizeGroups = m_groupsPixmap.size();
-    m_pixmapSizeMachines = m_machinesPixmap.size();
+    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
+    m_groupsPixmap = UIIconPool::iconSet(":/group_abstract_16px.png").pixmap(iIconMetric, iIconMetric);
+    m_machinesPixmap = UIIconPool::iconSet(":/machine_abstract_16px.png").pixmap(iIconMetric, iIconMetric);
+    m_pixmapSizeGroups = m_groupsPixmap.size() / m_groupsPixmap.devicePixelRatio();
+    m_pixmapSizeMachines = m_machinesPixmap.size() / m_machinesPixmap.devicePixelRatio();
     m_minimumHeaderSize = QSize(0, 0);
 
     /* Items except roots: */
@@ -1559,6 +1560,9 @@ void UIGChooserItemGroup::paintBackground(QPainter *pPainter, const QRect &rect)
     QColor strokeColor = pal.color(QPalette::Active, QPalette::Mid);
     QColor bodyColor = pal.color(QPalette::Active, QPalette::Base);
 
+    /* Invent pixel metric: */
+    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
+
     /* Root-item: */
     if (isRoot())
     {
@@ -1581,10 +1585,10 @@ void UIGChooserItemGroup::paintBackground(QPainter *pPainter, const QRect &rect)
             /* Add clipping: */
             QPainterPath path;
             path.moveTo(iRootIndent, 0);
-            path.lineTo(path.currentPosition().x(), iFullHeaderHeight - 10);
-            path.arcTo(QRectF(path.currentPosition(), QSizeF(20, 20)).translated(0, -10), 180, 90);
-            path.lineTo(rect.width() - 10 - iRootIndent, path.currentPosition().y());
-            path.arcTo(QRectF(path.currentPosition(), QSizeF(20, 20)).translated(-10, -20), 270, 90);
+            path.lineTo(path.currentPosition().x(), iFullHeaderHeight - iMetric);
+            path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iMetric, 2 * iMetric)).translated(0, -iMetric), 180, 90);
+            path.lineTo(rect.width() - iMetric - iRootIndent, path.currentPosition().y());
+            path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iMetric, 2 * iMetric)).translated(-iMetric, -2 * iMetric), 270, 90);
             path.lineTo(path.currentPosition().x(), 0);
             path.closeSubpath();
             pPainter->setClipPath(path);
@@ -1611,14 +1615,14 @@ void UIGChooserItemGroup::paintBackground(QPainter *pPainter, const QRect &rect)
 
         /* Add clipping: */
         QPainterPath path;
-        path.moveTo(10, 0);
-        path.arcTo(QRectF(path.currentPosition(), QSizeF(20, 20)).translated(-10, 0), 90, 90);
-        path.lineTo(path.currentPosition().x(), iFullHeight - 10);
-        path.arcTo(QRectF(path.currentPosition(), QSizeF(20, 20)).translated(0, -10), 180, 90);
-        path.lineTo(rect.width() - 10, path.currentPosition().y());
-        path.arcTo(QRectF(path.currentPosition(), QSizeF(20, 20)).translated(-10, -20), 270, 90);
-        path.lineTo(path.currentPosition().x(), 10);
-        path.arcTo(QRectF(path.currentPosition(), QSizeF(20, 20)).translated(-20, -10), 0, 90);
+        path.moveTo(iMetric, 0);
+        path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iMetric, 2 * iMetric)).translated(-iMetric, 0), 90, 90);
+        path.lineTo(path.currentPosition().x(), iFullHeight - iMetric);
+        path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iMetric, 2 * iMetric)).translated(0, -iMetric), 180, 90);
+        path.lineTo(rect.width() - iMetric, path.currentPosition().y());
+        path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iMetric, 2 * iMetric)).translated(-iMetric, -2 * iMetric), 270, 90);
+        path.lineTo(path.currentPosition().x(), iMetric);
+        path.arcTo(QRectF(path.currentPosition(), QSizeF(2 * iMetric, 2 * iMetric)).translated(-2 * iMetric, -iMetric), 0, 90);
         path.closeSubpath();
         pPainter->setClipPath(path);
 
@@ -1752,7 +1756,7 @@ void UIGChooserItemGroup::paintHeader(QPainter *pPainter, const QRect &rect)
                       /* Text to paint: */
                       m_strInfoMachines);
 
-            iHorizontalIndent -= m_pixmapSizeMachines.width();
+            iHorizontalIndent -= (m_pixmapSizeMachines.width() + iMinorSpacing);
             int iMachinePixmapX = iHorizontalIndent;
             int iMachinePixmapY = m_pixmapSizeMachines.height() == iFullHeaderHeight ?
                                   iVerticalMargin : iVerticalMargin + (iFullHeaderHeight - m_pixmapSizeMachines.height()) / 2;
@@ -1762,6 +1766,9 @@ void UIGChooserItemGroup::paintHeader(QPainter *pPainter, const QRect &rect)
                         QPoint(iMachinePixmapX, iMachinePixmapY),
                         /* Pixmap to paint: */
                         m_machinesPixmap);
+
+            /* Indent between machines and groups: */
+            iHorizontalIndent -= iMinorSpacing;
         }
 
         /* Should we draw group count info? */
@@ -1782,7 +1789,7 @@ void UIGChooserItemGroup::paintHeader(QPainter *pPainter, const QRect &rect)
                       /* Text to paint: */
                       m_strInfoGroups);
 
-            iHorizontalIndent -= m_pixmapSizeGroups.width();
+            iHorizontalIndent -= (m_pixmapSizeGroups.width() + iMinorSpacing);
             int iGroupPixmapX = iHorizontalIndent;
             int iGroupPixmapY = m_pixmapSizeGroups.height() == iFullHeaderHeight ?
                                 iVerticalMargin : iVerticalMargin + (iFullHeaderHeight - m_pixmapSizeGroups.height()) / 2;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
index b776331..925cb9a 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemGroup.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp
index 00cf9d8..17c14ce 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -196,9 +196,9 @@ QVariant UIGChooserItemMachine::data(int iKey) const
     switch (iKey)
     {
         /* Layout hints: */
-        case MachineItemData_Margin: return 5;
-        case MachineItemData_MajorSpacing: return 10;
-        case MachineItemData_MinorSpacing: return 4;
+        case MachineItemData_Margin: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        case MachineItemData_MajorSpacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
+        case MachineItemData_MinorSpacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
         case MachineItemData_TextSpacing: return 0;
 
         /* Pixmaps: */
@@ -973,7 +973,7 @@ void UIGChooserItemMachine::paintMachineInfo(QPainter *pPainter, const QStyleOpt
     {
         /* Prepare variables: */
         int iMachinePixmapX = iLeftColumnIndent;
-        int iMachinePixmapY = (iFullHeight - m_pixmapSize.height()) / 2;
+        int iMachinePixmapY = (iFullHeight - m_pixmap.height() / m_pixmap.devicePixelRatio()) / 2;
         /* Paint pixmap: */
         paintPixmap(/* Painter: */
                     pPainter,
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h
index 52d9025..692d678 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
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 47512ed..857cd81 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-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
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 7675f60..9bf3a57 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-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.cpp
index d75ac89..4ba4de6 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.h
index 28b6cc0..e959278 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.cpp
index b21a523..6454fe9 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -21,6 +21,7 @@
 
 /* Qt includes: */
 # include <QApplication>
+# include <QStyle>
 # include <QVBoxLayout>
 
 /* GUI includes: */
@@ -72,7 +73,8 @@ void UIGDetails::prepareLayout()
 {
     /* Setup main-layout: */
     m_pMainLayout = new QVBoxLayout(this);
-    m_pMainLayout->setContentsMargins(2, 0, 0, 0);
+    const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 9;
+    m_pMainLayout->setContentsMargins(iL, 0, 0, 0);
     m_pMainLayout->setSpacing(0);
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.h
index 78115ee..45e6b19 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
index 6be83f0..0aca9c4 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -45,7 +45,7 @@ UIGDetailsElement::UIGDetailsElement(UIGDetailsSet *pParent, DetailsElementType
     : UIGDetailsItem(pParent)
     , m_pSet(pParent)
     , m_type(type)
-    , m_iCornerRadius(10)
+    , m_iCornerRadius(QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2)
     , m_iMinimumHeaderWidth(0)
     , m_iMinimumHeaderHeight(0)
     , m_pButton(0)
@@ -215,9 +215,8 @@ QVariant UIGDetailsElement::data(int iKey) const
     switch (iKey)
     {
         /* Hints: */
-        case ElementData_Margin: return 5;
-        case ElementData_Spacing: return 10;
-        case ElementData_MinimumTextColumnWidth: return 100;
+        case ElementData_Margin: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
+        case ElementData_Spacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
         /* Default: */
         default: break;
     }
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
index d82002b..5116b3d 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -113,8 +113,7 @@ protected:
     {
         /* Hints: */
         ElementData_Margin,
-        ElementData_Spacing,
-        ElementData_MinimumTextColumnWidth
+        ElementData_Spacing
     };
 
     /** This event handler is delivered after the widget has been resized. */
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
index c8faf07..9f32053 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.h
index fb75c0a..da3ffb6 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElements.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp
index 9999e06..a6d082d 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -127,8 +127,8 @@ QVariant UIGDetailsGroup::data(int iKey) const
     switch (iKey)
     {
         /* Layout hints: */
-        case GroupData_Margin: return 2;
-        case GroupData_Spacing: return 10;
+        case GroupData_Margin: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 6;
+        case GroupData_Spacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 2;
         /* Default: */
         default: break;
     }
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h
index 8a8b645..db8d732 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp
index 7e62cb5..0f2a26a 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h
index a08da5b..265bd63 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsItem.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp
index f7c004f..8478afa 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.h
index 0693f8d..b9bf857 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp
index adac4ed..0e29023 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -232,7 +232,7 @@ QVariant UIGDetailsSet::data(int iKey) const
     {
         /* Layout hints: */
         case SetData_Margin: return 0;
-        case SetData_Spacing: return 3;
+        case SetData_Spacing: return QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 5;
         /* Default: */
         default: break;
     }
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h
index 2364072..e3f8809 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsSet.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.cpp
index 6cdb3c2..c4eff09 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.h
index 4501fea..553b88f 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.cpp b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.cpp
index 79bbd88..d1f45fe 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -51,6 +51,7 @@ UIGMachinePreview::UIGMachinePreview(QIGraphicsWidget *pParent)
     : QIWithRetranslateUI4<QIGraphicsWidget>(pParent)
     , m_pUpdateTimer(new QTimer(this))
     , m_pUpdateTimerMenu(0)
+    , m_dRatio((double)QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 16)
     , m_iMargin(0)
     , m_preset(AspectRatioPreset_16x9)
     , m_pPreviewImg(0)
@@ -65,9 +66,18 @@ UIGMachinePreview::UIGMachinePreview(QIGraphicsWidget *pParent)
     const QIcon full16x10 = UIIconPool::iconSet(":/preview_full_16to10_242x167px.png");
     const QIcon full16x9 = UIIconPool::iconSet(":/preview_full_16to9_242x155px.png");
     const QIcon full4x3 = UIIconPool::iconSet(":/preview_full_4to3_242x192px.png");
-    m_sizes.insert(AspectRatioPreset_16x10, empty16x10.availableSizes().first());
-    m_sizes.insert(AspectRatioPreset_16x9, empty16x9.availableSizes().first());
-    m_sizes.insert(AspectRatioPreset_4x3, empty4x3.availableSizes().first());
+
+    // WORKAROUND:
+    // Since we don't have x3 and x4 HiDPI icons yet,
+    // and we hadn't enabled automatic up-scaling for now,
+    // we have to make sure m_dRatio is within possible bounds.
+    const QList<QSize> sizes = empty16x10.availableSizes();
+    if (sizes.size() >= 2)
+        m_dRatio = qMin(m_dRatio, (double)sizes.last().width() / sizes.first().width());
+
+    m_sizes.insert(AspectRatioPreset_16x10, QSize(242 * m_dRatio, 167 * m_dRatio));
+    m_sizes.insert(AspectRatioPreset_16x9, QSize(242 * m_dRatio, 155 * m_dRatio));
+    m_sizes.insert(AspectRatioPreset_4x3, QSize(242 * m_dRatio, 192 * m_dRatio));
     m_ratios.insert(AspectRatioPreset_16x10, (double)16/10);
     m_ratios.insert(AspectRatioPreset_16x9, (double)16/9);
     m_ratios.insert(AspectRatioPreset_4x3, (double)4/3);
@@ -466,7 +476,8 @@ void UIGMachinePreview::recalculatePreviewRectangle()
 {
     /* Contents rectangle: */
     QRect cr = contentsRect().toRect();
-    m_vRect = cr.adjusted(21 + m_iMargin, 21 + m_iMargin, -21 - m_iMargin, -21 - m_iMargin);
+    m_vRect = cr.adjusted( 21 * m_dRatio + m_iMargin,  21 * m_dRatio + m_iMargin,
+                          -21 * m_dRatio - m_iMargin, -21 * m_dRatio - m_iMargin);
 }
 
 void UIGMachinePreview::restart()
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.h b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.h
index 19c9e76..518b7ee 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.h
+++ b/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGMachinePreview.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -112,6 +112,7 @@ private:
     QTimer *m_pUpdateTimer;
     QMenu *m_pUpdateTimerMenu;
     QHash<PreviewUpdateIntervalType, QAction*> m_actions;
+    double m_dRatio;
     const int m_iMargin;
     QRect m_vRect;
     AspectRatioPreset m_preset;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
index af7495e..bee3632 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h
index 0334186..2fdf311 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
index d094512..7fd5cfe 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h
index 9ecf29a..3a594d0 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.cpp b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.cpp
index 2e151f8..8cf7b17 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.h b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.h
index 6947234..3741136 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsPage.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.cpp b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.cpp
index cff96c1..7226dba 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.h b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.h
index cdd2896..7f8dc13 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp
index 34a8ddb..e2abd3b 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h
index f0ad0c3..2f104bc 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSerializer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.cpp
index e42c648..3b6fca7 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.h b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.h
index 7f98a79..5df914e 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.h
@@ -1,10 +1,10 @@
-/* $Id:  $ */
+/* $Id: UIGlobalSettingsNetworkDetailsNAT.h $ */
 /** @file
  * VBox Qt GUI - UIGlobalSettingsNetworkDetailsNAT class declaration.
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp
index 81b301f..d29e5e6 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.h b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.h
index 0854f9a..cfc0532 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
index 64b7c35..8b87a31 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
@@ -1251,9 +1251,6 @@ void UIMachineSettingsNetworkPage::prepare()
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
     AssertPtrReturnVoid(pMainLayout);
     {
-        /* Configure layout: */
-        pMainLayout->setContentsMargins(0, 5, 0, 5);
-
         /* Creating tab-widget: */
         m_pTabWidget = new QITabWidget;
         AssertPtrReturnVoid(m_pTabWidget);
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp
index 1627074..579af02 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.h b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.h
index 74a8305..b50cda5 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp
index 4883833..1c10f39 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSF.cpp
@@ -212,7 +212,8 @@ private:
         do
         {
             iTextWidth = fm.width(strOneString);
-            if (iTextWidth + iIndentSize > cWidth)
+            if (   iTextWidth
+                && (iTextWidth + iIndentSize > cWidth))
             {
                 iStart = 0;
                 iFinish = strOneString.length();
@@ -248,7 +249,8 @@ private:
                 strOneString.remove(iPosition, 1);
             }
         }
-        while (iTextWidth + iIndentSize > cWidth);
+        while (   iTextWidth
+               && (iTextWidth + iIndentSize > cWidth));
 
         if (iPosition || m_enmFormat == FormatType_EllipsisFile)
             strOneString.insert(iPosition, "...");
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.cpp
index b706137..40c0550 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.h b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.h
index 7093840..b7e1a3c 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSFDetails.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSerial.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSerial.cpp
index 34f45c7..bbc551f 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSerial.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSerial.cpp
@@ -561,9 +561,6 @@ void UIMachineSettingsSerialPage::prepare()
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
     AssertPtrReturnVoid(pMainLayout);
     {
-        /* Configure layout: */
-        pMainLayout->setContentsMargins(0, 5, 0, 5);
-
         /* Creating tab-widget: */
         m_pTabWidget = new QITabWidget;
         AssertPtrReturnVoid(m_pTabWidget);
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
index 1df5424..6c11b64 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.cpp
index c50b75d..e598474 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.h b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.h
index 1a1b40b..61ebaac 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsUSBFilterDetails.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.cpp
index 07ebbef..73bd7f6 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.h
index 6c993bf..202476f 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceEditorWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.cpp
index 7e1b292..04bd547 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.h
index 410815c..90ea1b7 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceExportEditorWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.cpp
index d5eb4f4..f83b293 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.h
index 391b140..dc0390b 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIApplianceImportEditorWidget.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.cpp
index 6cf6d2f..6236fca 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.h
index e13e316..440e87e 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.cpp
index e7a0889..ef316f0 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.h
index 6b621cb..72166b7 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIEmptyFilePathSelector.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.cpp
index 14c6e59..683553c 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.h
index 979e5f1..07fac2d 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilePathSelector.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
index 52837dc..63d9216 100755
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -168,9 +168,7 @@ void UIFilm::prepareLayout()
     /* Configure layout: */
 #ifdef VBOX_WS_MAC
     m_pMainLayout->setContentsMargins(10, 10, 15, 10);
-#else /* VBOX_WS_MAC */
-    m_pMainLayout->setContentsMargins(10, 10, 10, 10);
-#endif /* !VBOX_WS_MAC */
+#endif /* VBOX_WS_MAC */
 
     /* Add strech: */
     m_pMainLayout->addStretch();
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h
index d060464..ac8f9df 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIFilmContainer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
index 1ffb53c..9f9fb17 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h
index f41f2e9..2935a13 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHostComboEditor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp
index 13e10a2..4e943d4 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.h
index dae3ad3..6490694 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIHotKeyEditor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.cpp
index 45499df..7f77f81 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.h b/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.h
index 2ecdfe0..5e19ed9 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UILineTextEdit.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.cpp
index 82894de..d50f89f 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.h
index c4ee6c0..027cf7d 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIMenuBar.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp
index a5a9189..a959747 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.h b/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.h
index fd437af..618a74f 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.cpp
index 0e9e6a0..143a387 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -49,7 +49,6 @@ UIPopupBox::UIPopupBox(QWidget *pParent)
 {
     /* Setup main-layout: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
-    pMainLayout->setContentsMargins(10, 5, 5, 5);
     /* Setup title-layout: */
     QHBoxLayout *pTitleLayout = new QHBoxLayout;
     pTitleLayout->addWidget(m_pTitleIcon);
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.h
index 91035a8..834f180 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupBox.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp
index d9174a0..852c26c 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h
index f7b0738..8daf043 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPane.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.cpp
index 13b1577..0ed8a84 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.h
index 2067e11..e5eae7c 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneButtonPane.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.cpp
index 441f52d..70ad73f 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.h
index 0ba7fb5..27be42b 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneDetails.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.cpp
index 2b587c7..4f9b07d 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.h
index 2421d7f..bca3325 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupPaneMessage.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp
index 534bfc8..1c4b477 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h
index 1d6ba0f..0adb46a 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStack.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.cpp
index 37d6e0a..e43ed4e 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.h
index 17ecc7c..7fb2ea1 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPopupStackViewport.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
index f77a753..810c41d 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -31,6 +31,7 @@
 # include <QSpinBox>
 
 /* GUI includes: */
+# include "UIDesktopWidgetWatchdog.h"
 # include "UIPortForwardingTable.h"
 # include "UIMessageCenter.h"
 # include "UIConverter.h"
@@ -937,8 +938,8 @@ UIPortForwardingTable::UIPortForwardingTable(const UIPortForwardingDataList &rul
     /* Retranslate dialog: */
     retranslateUi();
 
-    /* Minimum Size: */
-    setMinimumSize(600, 250);
+    /* Limit the minimum size to 33% of screen size: */
+    setMinimumSize(gpDesktop->screenGeometry(this).size() / 3);
 }
 
 const UIPortForwardingDataList UIPortForwardingTable::rules() const
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h
index 866e3a3..d1116b6 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.cpp
index f88542e..42aed2d 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -245,6 +245,7 @@ UIRoundRectSegmentedButton::UIRoundRectSegmentedButton(QWidget *pParent, int aCo
     m_pSignalMapper = new QSignalMapper(this);
 
     QHBoxLayout *layout = new QHBoxLayout(this);
+    layout->setContentsMargins(0, 0, 0, 0);
     for (int i=0; i < aCount; ++i)
     {
         QIToolButton *button = new QIToolButton(this);
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.h b/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.h
index 8c647bb..fca9a3b 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UISpecialControls.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp
index 75faa40..0dfeaff 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UITabBar.cpp
@@ -985,7 +985,7 @@ void UITabBar::prepare()
         m_pLayoutMain->setSpacing(0);
         m_pLayoutMain->setContentsMargins(0, 0, 0, 0);
 
-        // TODO: Workout stretch at the and as well,
+        /// @todo Workout stretch at the and as well,
         //       depending on which alignment is set.
         /* Add strech into beginning: */
         m_pLayoutMain->addStretch();
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.cpp
index b01540e..e1a7129 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.h
index bf6cfd8..f3657ae 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIToolBar.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.cpp
index 8b9fc40..797fe88 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.h b/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.h
index ec03372..81a3887 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIWarningPane.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.cpp
index 2c98ac3..56dc7cc 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.h b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.h
index 3ed023b..ce229ff 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxGuestRAMSlider.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.cpp
index d6402e5..0fae221 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.h b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.h
index a2bd5e3..9a9aa08 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxMediaComboBox.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.cpp
index 347871f..1d79768 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.h b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.h
index 22a07c0..c0ae620 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorButton.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.cpp
index 12a1add..674789d 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -20,7 +20,9 @@
 #else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
 /* Qt includes: */
+# include <QApplication>
 # include <QPainter>
+# include <QStyle>
 # include <QGraphicsSceneMouseEvent>
 
 /* GUI includes: */
@@ -32,16 +34,6 @@
 UIGraphicsButton::UIGraphicsButton(QIGraphicsWidget *pParent, const QIcon &icon)
     : QIGraphicsWidget(pParent)
     , m_icon(icon)
-    , m_buttonType(UIGraphicsButtonType_Iconified)
-    , m_fParentSelected(false)
-{
-    /* Refresh finally: */
-    refresh();
-}
-
-UIGraphicsButton::UIGraphicsButton(QIGraphicsWidget *pParent, UIGraphicsButtonType buttonType)
-    : QIGraphicsWidget(pParent)
-    , m_buttonType(buttonType)
     , m_fParentSelected(false)
 {
     /* Refresh finally: */
@@ -60,9 +52,15 @@ QVariant UIGraphicsButton::data(int iKey) const
 {
     switch (iKey)
     {
-        case GraphicsButton_Margin: return 0;
-        case GraphicsButton_IconSize: return m_icon.isNull() ? QSize(16, 16) : m_icon.availableSizes().first();
-        case GraphicsButton_Icon: return m_icon;
+        case GraphicsButton_Margin:
+            return 0;
+        case GraphicsButton_IconSize:
+        {
+            const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
+            return QSize(iMetric, iMetric);
+        }
+        case GraphicsButton_Icon:
+            return m_icon;
         default: break;
     }
     return QVariant();
@@ -88,93 +86,21 @@ QSizeF UIGraphicsButton::sizeHint(Qt::SizeHint which, const QSizeF &constraint /
 void UIGraphicsButton::paint(QPainter *pPainter, const QStyleOptionGraphicsItem* /* pOption */, QWidget* /* pWidget = 0 */)
 {
     /* Prepare variables: */
-    int iMargin = data(GraphicsButton_Margin).toInt();
-    QIcon icon = data(GraphicsButton_Icon).value<QIcon>();
-    QSize iconSize = data(GraphicsButton_IconSize).toSize();
-
-    /* Which type button has: */
-    switch (m_buttonType)
+    const int iMargin = data(GraphicsButton_Margin).toInt();
+    const QIcon icon = data(GraphicsButton_Icon).value<QIcon>();
+    const QSize expectedIconSize = data(GraphicsButton_IconSize).toSize();
+    const QPixmap pixmap = icon.pixmap(expectedIconSize);
+    const QSize actualIconSize = pixmap.size() / pixmap.devicePixelRatio();
+    QPoint position = QPoint(iMargin, iMargin);
+    if (actualIconSize != expectedIconSize)
     {
-        case UIGraphicsButtonType_Iconified:
-        {
-            /* Just draw the pixmap: */
-            pPainter->drawPixmap(QRect(QPoint(iMargin, iMargin), iconSize), icon.pixmap(iconSize));
-            break;
-        }
-        case UIGraphicsButtonType_DirectArrow:
-        {
-            /* Prepare variables: */
-            QPalette pal = palette();
-            QColor buttonColor = pal.color(m_fParentSelected ? QPalette::HighlightedText : QPalette::Mid);
-#ifdef VBOX_WS_MAC
-            /* Mac is using only light standard highlight colors, keeping highlight-text color always black.
-             * User can choose a darker (non-standard) highlight color but it will be his visibility problem.
-             * I think using highlight-text color (black) for arrow-buttons is too ugly,
-             * so the corresponding color will be received from the highlight color: */
-            if (m_fParentSelected)
-                buttonColor = pal.color(QPalette::Highlight).darker(150);
-#endif /* VBOX_WS_MAC */
-
-            /* Setup: */
-            pPainter->setRenderHint(QPainter::Antialiasing);
-            QPen pen = pPainter->pen();
-            pen.setColor(buttonColor);
-            pen.setWidth(2);
-            pen.setCapStyle(Qt::RoundCap);
-
-            /* Draw path: */
-            QPainterPath circlePath;
-            circlePath.moveTo(iMargin, iMargin);
-            circlePath.lineTo(iMargin + iconSize.width() / 2, iMargin);
-            circlePath.arcTo(QRectF(circlePath.currentPosition(), iconSize).translated(-iconSize.width() / 2, 0), 90, -180);
-            circlePath.lineTo(iMargin, iMargin + iconSize.height());
-            circlePath.closeSubpath();
-            pPainter->strokePath(circlePath, pen);
-
-            /* Draw triangle: */
-            QPainterPath linePath;
-            linePath.moveTo(iMargin + 5, iMargin + 5);
-            linePath.lineTo(iMargin + iconSize.height() - 5, iMargin + iconSize.width() / 2);
-            linePath.lineTo(iMargin + 5, iMargin + iconSize.width() - 5);
-            pPainter->strokePath(linePath, pen);
-            break;
-        }
-        case UIGraphicsButtonType_RoundArrow:
-        {
-            /* Prepare variables: */
-            QPalette pal = palette();
-            QColor buttonColor = pal.color(m_fParentSelected ? QPalette::HighlightedText : QPalette::Mid);
-#ifdef VBOX_WS_MAC
-            /* Mac is using only light standard highlight colors, keeping highlight-text color always black.
-             * User can choose a darker (non-standard) highlight color but it will be his visibility problem.
-             * I think using highlight-text color (black) for arrow-buttons is too ugly,
-             * so the corresponding color will be received from the highlight color: */
-            if (m_fParentSelected)
-                buttonColor = pal.color(QPalette::Highlight).darker(150);
-#endif /* VBOX_WS_MAC */
-
-            /* Setup: */
-            pPainter->setRenderHint(QPainter::Antialiasing);
-            QPen pen = pPainter->pen();
-            pen.setColor(buttonColor);
-            pen.setWidth(2);
-            pen.setCapStyle(Qt::RoundCap);
-
-            /* Draw circle: */
-            QPainterPath circlePath;
-            circlePath.moveTo(iMargin, iMargin);
-            circlePath.addEllipse(QRectF(circlePath.currentPosition(), iconSize));
-            pPainter->strokePath(circlePath, pen);
-
-            /* Draw triangle: */
-            QPainterPath linePath;
-            linePath.moveTo(iMargin + 5, iMargin + 5);
-            linePath.lineTo(iMargin + iconSize.height() - 5, iMargin + iconSize.width() / 2);
-            linePath.lineTo(iMargin + 5, iMargin + iconSize.width() - 5);
-            pPainter->strokePath(linePath, pen);
-            break;
-        }
+        const int iDx = (expectedIconSize.width() - actualIconSize.width()) / 2;
+        const int iDy = (expectedIconSize.height() - actualIconSize.height()) / 2;
+        position += QPoint(iDx, iDy);
     }
+
+    /* Just draw the pixmap: */
+    pPainter->drawPixmap(position, pixmap);
 }
 
 void UIGraphicsButton::mousePressEvent(QGraphicsSceneMouseEvent *pEvent)
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.h b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.h
index 87a0197..a6fb2f0 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsButton.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -29,14 +29,6 @@ class QGraphicsSceneMouseEvent;
 class QGraphicsSceneHoverEvent;
 class QPropertyAnimation;
 
-/* Graphics-button types: */
-enum UIGraphicsButtonType
-{
-    UIGraphicsButtonType_Iconified,
-    UIGraphicsButtonType_DirectArrow,
-    UIGraphicsButtonType_RoundArrow
-};
-
 /* Graphics-button representation: */
 class UIGraphicsButton : public QIGraphicsWidget
 {
@@ -51,7 +43,6 @@ public:
 
     /* Constructor: */
     UIGraphicsButton(QIGraphicsWidget *pParent, const QIcon &icon);
-    UIGraphicsButton(QIGraphicsWidget *pParent, UIGraphicsButtonType buttonType);
 
     /* API: Parent stuff: */
     void setParentSelected(bool fParentSelected);
@@ -86,7 +77,6 @@ private:
 
     /* Variables: */
     QIcon m_icon;
-    UIGraphicsButtonType m_buttonType;
     bool m_fParentSelected;
 };
 
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.cpp
index 1306f49..44fc054 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.h b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.h
index e9a9198..83b7b9f 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsRotatorButton.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.cpp
index e43705d..7b8506f 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -82,7 +82,7 @@ public:
         AssertPtrReturn(parent(), QRect());
 
         /* Return the parent's rect for now: */
-        // TODO: Return sub-rect.
+        /// @todo Return sub-rect.
         return parent()->rect();
     }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.h b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.h
index 6a3dfc2..e08aaf9 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsTextPane.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.cpp
index 1c4ac0e..daa01ff 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.h b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.h
index 5cbc53f..db80a25 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsToolBar.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.cpp
index aa13766..ae7c831 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.h b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.h
index 73635c4..3c0e5c6 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.h
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsZoomButton.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp
index 4300581..e25779e 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -24,6 +24,7 @@
 # include <QLayout>
 
 /* Local includes: */
+# include "UIIconPool.h"
 # include "UIWizard.h"
 # include "UIWizardPage.h"
 # include "VBoxGlobal.h"
@@ -247,9 +248,16 @@ void UIWizard::resizeToGoldenRatio()
         int iCurrentWizardWidth = width();
         int iCurrentWizardHeight = height();
 #ifndef VBOX_WS_MAC
+        /* Calculate metric and ratio: */
+        const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+        const double dRatio = (double)iIconMetric / 32;
+        /* Load pixmap to icon first: */
+        QIcon icon = UIIconPool::iconSet(m_strWatermarkName);
+        QSize size = icon.availableSizes().first();
+        size *= dRatio;
         /* We should take into account watermark like its assigned already: */
-        QPixmap watermarkPixmap(m_strWatermarkName);
-        int iWatermarkWidth = watermarkPixmap.width();
+        QPixmap watermarkPixmap(icon.pixmap(size));
+        const int iWatermarkWidth = watermarkPixmap.width() * dRatio;
         iCurrentWizardWidth += iWatermarkWidth;
 #endif /* !VBOX_WS_MAC */
         /* Calculating nearest to 'golden ratio' label width: */
@@ -477,8 +485,15 @@ int UIWizard::proposedWatermarkHeight()
 
 void UIWizard::assignWatermarkHelper()
 {
+    /* Calculate metric and ratio: */
+    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
+    const double dRatio = (double)iIconMetric / 32;
+    /* Load pixmap to icon first: */
+    QIcon icon = UIIconPool::iconSet(m_strWatermarkName);
+    QSize size = icon.availableSizes().first();
+    size *= dRatio;
     /* Create initial watermark: */
-    QPixmap pixWaterMark(m_strWatermarkName);
+    QPixmap pixWaterMark(icon.pixmap(size));
     /* Convert watermark to image which
      * allows to manage pixel data directly: */
     QImage imgWatermark = pixWaterMark.toImage();
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.h b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.h
index b394ce7..40954b9 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.cpp
index 65849f5..02c3c0b 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.h b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.h
index 85bba79..7d3d8a5 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/UIWizardPage.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp
index d14b44c..0124b1c 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -19,9 +19,6 @@
 # include <precomp.h>
 #else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-/* Qt includes: */
-# include <QVariant>
-
 /* GUI includes: */
 # include "UIWizardCloneVD.h"
 # include "UIWizardCloneVDPageBasic1.h"
@@ -38,9 +35,10 @@
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
 
-UIWizardCloneVD::UIWizardCloneVD(QWidget *pParent, const CMedium &sourceVirtualDisk)
+UIWizardCloneVD::UIWizardCloneVD(QWidget *pParent, const CMedium &comSourceVirtualDisk)
     : UIWizard(pParent, WizardType_CloneVD)
-    , m_sourceVirtualDisk(sourceVirtualDisk)
+    , m_comSourceVirtualDisk(comSourceVirtualDisk)
+    , m_enmSourceVirtualDiskDeviceType(m_comSourceVirtualDisk.GetDeviceType())
 {
 #ifndef VBOX_WS_MAC
     /* Assign watermark: */
@@ -54,28 +52,28 @@ UIWizardCloneVD::UIWizardCloneVD(QWidget *pParent, const CMedium &sourceVirtualD
 bool UIWizardCloneVD::copyVirtualDisk()
 {
     /* Gather attributes: */
-    CMedium sourceVirtualDisk = field("sourceVirtualDisk").value<CMedium>();
-    CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>();
-    qulonglong uVariant = field("mediumVariant").toULongLong();
-    QString strMediumPath = field("mediumPath").toString();
-    qulonglong uSize = field("mediumSize").toULongLong();
+    CMedium comSourceVirtualDisk = field("sourceVirtualDisk").value<CMedium>();
+    const CMediumFormat comMediumFormat = field("mediumFormat").value<CMediumFormat>();
+    const qulonglong uVariant = field("mediumVariant").toULongLong();
+    const QString strMediumPath = field("mediumPath").toString();
+    const qulonglong uSize = field("mediumSize").toULongLong();
     /* Check attributes: */
     AssertReturn(!strMediumPath.isNull(), false);
     AssertReturn(uSize > 0, false);
 
     /* Get VBox object: */
-    CVirtualBox vbox = vboxGlobal().virtualBox();
+    CVirtualBox comVBox = vboxGlobal().virtualBox();
 
-    /* Create new virtual hard-disk: */
-    CMedium virtualDisk = vbox.CreateMedium(mediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, KDeviceType_HardDisk);
-    if (!vbox.isOk())
+    /* Create new virtual disk image: */
+    CMedium comVirtualDisk = comVBox.CreateMedium(comMediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, m_enmSourceVirtualDiskDeviceType);
+    if (!comVBox.isOk())
     {
-        msgCenter().cannotCreateHardDiskStorage(vbox, strMediumPath, this);
+        msgCenter().cannotCreateMediumStorage(comVBox, strMediumPath, this);
         return false;
     }
 
     /* Compose medium-variant: */
-    QVector<KMediumVariant> variants(sizeof(qulonglong)*8);
+    QVector<KMediumVariant> variants(sizeof(qulonglong) * 8);
     for (int i = 0; i < variants.size(); ++i)
     {
         qulonglong temp = uVariant;
@@ -83,29 +81,29 @@ bool UIWizardCloneVD::copyVirtualDisk()
         variants[i] = (KMediumVariant)temp;
     }
 
-    /* Copy existing virtual-disk to the new virtual-disk: */
-    CProgress progress = sourceVirtualDisk.CloneTo(virtualDisk, variants, CMedium());
-    if (!sourceVirtualDisk.isOk())
+    /* Copy source image to new one: */
+    CProgress comProgress = comSourceVirtualDisk.CloneTo(comVirtualDisk, variants, CMedium());
+    if (!comSourceVirtualDisk.isOk())
     {
-        msgCenter().cannotCreateHardDiskStorage(sourceVirtualDisk, strMediumPath, this);
+        msgCenter().cannotCreateMediumStorage(comSourceVirtualDisk, strMediumPath, this);
         return false;
     }
 
     /* Show creation progress: */
-    msgCenter().showModalProgressDialog(progress, windowTitle(), ":/progress_media_create_90px.png", this);
-    if (progress.GetCanceled())
+    msgCenter().showModalProgressDialog(comProgress, windowTitle(), ":/progress_media_create_90px.png", this);
+    if (comProgress.GetCanceled())
         return false;
-    if (!progress.isOk() || progress.GetResultCode() != 0)
+    if (!comProgress.isOk() || comProgress.GetResultCode() != 0)
     {
-        msgCenter().cannotCreateHardDiskStorage(progress, strMediumPath, this);
+        msgCenter().cannotCreateMediumStorage(comProgress, strMediumPath, this);
         return false;
     }
 
-    /* Remember created virtual-disk: */
-    m_virtualDisk = virtualDisk;
+    /* Save created image as target one: */
+    m_comTargetVirtualDisk = comVirtualDisk;
 
-    /* Just close the created medium, it is not necessary yet: */
-    m_virtualDisk.Close();
+    /* Just close the created image, it is not required anymore: */
+    m_comTargetVirtualDisk.Close();
 
     return true;
 }
@@ -116,7 +114,7 @@ void UIWizardCloneVD::retranslateUi()
     UIWizard::retranslateUi();
 
     /* Translate wizard: */
-    setWindowTitle(tr("Copy Virtual Hard Disk"));
+    setWindowTitle(tr("Copy Virtual Disk Image"));
     setButtonText(QWizard::FinishButton, tr("Copy"));
 }
 
@@ -127,15 +125,17 @@ void UIWizardCloneVD::prepare()
     {
         case WizardMode_Basic:
         {
-            setPage(Page1, new UIWizardCloneVDPageBasic1(m_sourceVirtualDisk));
-            setPage(Page2, new UIWizardCloneVDPageBasic2);
-            setPage(Page3, new UIWizardCloneVDPageBasic3);
+            setPage(Page1, new UIWizardCloneVDPageBasic1(m_comSourceVirtualDisk,
+                                                         m_enmSourceVirtualDiskDeviceType));
+            setPage(Page2, new UIWizardCloneVDPageBasic2(m_enmSourceVirtualDiskDeviceType));
+            setPage(Page3, new UIWizardCloneVDPageBasic3(m_enmSourceVirtualDiskDeviceType));
             setPage(Page4, new UIWizardCloneVDPageBasic4);
             break;
         }
         case WizardMode_Expert:
         {
-            setPage(PageExpert, new UIWizardCloneVDPageExpert(m_sourceVirtualDisk));
+            setPage(PageExpert, new UIWizardCloneVDPageExpert(m_comSourceVirtualDisk,
+                                                              m_enmSourceVirtualDiskDeviceType));
             break;
         }
         default:
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.h
index 4ff8a18..a02a737 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVD.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,8 +15,8 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UIWizardCloneVD_h__
-#define __UIWizardCloneVD_h__
+#ifndef ___UIWizardCloneVD_h___
+#define ___UIWizardCloneVD_h___
 
 /* GUI includes: */
 #include "UIWizard.h"
@@ -25,14 +25,15 @@
 #include "COMEnums.h"
 #include "CMedium.h"
 
-/* Clone Virtual Hard Drive wizard: */
+
+/** UIWizard subclass to clone virtual disk image files. */
 class UIWizardCloneVD : public UIWizard
 {
     Q_OBJECT;
 
 public:
 
-    /* Page IDs: */
+    /** Basic Page IDs. */
     enum
     {
         Page1,
@@ -41,39 +42,42 @@ public:
         Page4
     };
 
-    /* Page IDs: */
+    /** Expert Page IDs. */
     enum
     {
         PageExpert
     };
 
-    /* Constructor: */
-    UIWizardCloneVD(QWidget *pParent, const CMedium &sourceVirtualDisk);
+    /** Constructs wizard to clone @a comSourceVirtualDisk passing @a pParent to the base-class. */
+    UIWizardCloneVD(QWidget *pParent, const CMedium &comSourceVirtualDisk);
 
-    /* Returns virtual-disk: */
-    CMedium virtualDisk() const { return m_virtualDisk; }
+    /** Returns source virtual-disk. */
+    CMedium sourceVirtualDisk() const { return m_comSourceVirtualDisk; }
+    /** Returns target virtual-disk. */
+    CMedium targetVirtualDisk() const { return m_comTargetVirtualDisk; }
 
-protected:
+    /** Returns the source virtual-disk device type. */
+    KDeviceType sourceVirtualDiskDeviceType() const { return m_enmSourceVirtualDiskDeviceType; }
 
-    /* Copy virtual-disk: */
+    /** Makes a copy of source virtual-disk. */
     bool copyVirtualDisk();
 
-    /* Who will be able to copy virtual-disk: */
-    friend class UIWizardCloneVDPageBasic4;
-    friend class UIWizardCloneVDPageExpert;
-
 private:
 
-    /* Translation stuff: */
-    void retranslateUi();
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
+
+    /** Prepares all. */
+    virtual void prepare() /* override */;
 
-    /* Pages related stuff: */
-    void prepare();
+    /** Holds the source virtual disk wrapper. */
+    CMedium m_comSourceVirtualDisk;
+    /** Holds the target virtual disk wrapper. */
+    CMedium m_comTargetVirtualDisk;
 
-    /* Variables: */
-    CMedium m_sourceVirtualDisk;
-    CMedium m_virtualDisk;
+    /** Holds the source virtual-disk device type. */
+    KDeviceType m_enmSourceVirtualDiskDeviceType;
 };
 
-#endif // __UIWizardCloneVD_h__
+#endif /* !___UIWizardCloneVD_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp
index 6227374..e23c23e 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -19,11 +19,11 @@
 # include <precomp.h>
 #else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-/* Global includes: */
+/* Qt includes: */
 # include <QVBoxLayout>
 # include <QHBoxLayout>
 
-/* Local includes: */
+/* GUI includes: */
 # include "UIWizardCloneVDPageBasic1.h"
 # include "UIWizardCloneVD.h"
 # include "UIIconPool.h"
@@ -41,8 +41,10 @@ UIWizardCloneVDPage1::UIWizardCloneVDPage1()
 
 void UIWizardCloneVDPage1::onHandleOpenSourceDiskClick()
 {
+    /* Get current virtual-disk medium type: */
+    const UIMediumType enmMediumType = UIMediumDefs::mediumTypeToLocal(sourceVirtualDisk().GetDeviceType());
     /* Get source virtual-disk using file-open dialog: */
-    QString strMediumId = vboxGlobal().openMediumWithFileOpenDialog(UIMediumType_HardDisk, thisImp());
+    QString strMediumId = vboxGlobal().openMediumWithFileOpenDialog(enmMediumType, thisImp());
     if (!strMediumId.isNull())
     {
         /* Update medium-combo if necessary: */
@@ -57,12 +59,12 @@ CMedium UIWizardCloneVDPage1::sourceVirtualDisk() const
     return vboxGlobal().medium(m_pSourceDiskSelector->id()).medium();
 }
 
-void UIWizardCloneVDPage1::setSourceVirtualDisk(const CMedium &sourceVirtualDisk)
+void UIWizardCloneVDPage1::setSourceVirtualDisk(const CMedium &comSourceVirtualDisk)
 {
-    m_pSourceDiskSelector->setCurrentItem(sourceVirtualDisk.GetId());
+    m_pSourceDiskSelector->setCurrentItem(comSourceVirtualDisk.GetId());
 }
 
-UIWizardCloneVDPageBasic1::UIWizardCloneVDPageBasic1(const CMedium &sourceVirtualDisk)
+UIWizardCloneVDPageBasic1::UIWizardCloneVDPageBasic1(const CMedium &comSourceVirtualDisk, KDeviceType enmDeviceType)
 {
     /* Create widgets: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
@@ -73,8 +75,8 @@ UIWizardCloneVDPageBasic1::UIWizardCloneVDPageBasic1(const CMedium &sourceVirtua
             m_pSourceDiskSelector = new VBoxMediaComboBox(this);
             {
                 m_pSourceDiskSelector->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
-                m_pSourceDiskSelector->setType(UIMediumType_HardDisk);
-                m_pSourceDiskSelector->setCurrentItem(sourceVirtualDisk.GetId());
+                m_pSourceDiskSelector->setType(UIMediumDefs::mediumTypeToLocal(enmDeviceType));
+                m_pSourceDiskSelector->setCurrentItem(comSourceVirtualDisk.GetId());
                 m_pSourceDiskSelector->repopulate();
             }
             m_pSourceDiskOpenButton = new QIToolButton(this);
@@ -112,13 +114,13 @@ void UIWizardCloneVDPageBasic1::sltHandleOpenSourceDiskClick()
 void UIWizardCloneVDPageBasic1::retranslateUi()
 {
     /* Translate page: */
-    setTitle(UIWizardCloneVD::tr("Hard disk to copy"));
+    setTitle(UIWizardCloneVD::tr("Disk image to copy"));
 
     /* Translate widgets: */
-    m_pLabel->setText(UIWizardCloneVD::tr("<p>Please select the virtual hard disk file that you would like to copy "
+    m_pLabel->setText(UIWizardCloneVD::tr("<p>Please select the virtual disk image 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>"));
-    m_pSourceDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a virtual hard disk file to copy..."));
+    m_pSourceDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a virtual disk image file to copy..."));
 }
 
 void UIWizardCloneVDPageBasic1::initializePage()
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.h
index f10e9c3..7506511 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic1.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,8 +15,8 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UIWizardCloneVDPageBasic1_h__
-#define __UIWizardCloneVDPageBasic1_h__
+#ifndef ___UIWizardCloneVDPageBasic1_h___
+#define ___UIWizardCloneVDPageBasic1_h___
 
 /* GUI includes: */
 #include "UIWizardPage.h"
@@ -30,27 +30,31 @@ class VBoxMediaComboBox;
 class QIToolButton;
 class QIRichTextLabel;
 
-/* 1st page of the Clone Virtual Hard Drive wizard (base part): */
+
+/** 1st page of the Clone Virtual Disk Image wizard (base part): */
 class UIWizardCloneVDPage1 : public UIWizardPageBase
 {
 protected:
 
-    /* Constructor: */
+    /** Constructs page basis. */
     UIWizardCloneVDPage1();
 
-    /* Handlers: */
+    /** Handles command to open source disk. */
     void onHandleOpenSourceDiskClick();
 
-    /* Stuff for 'sourceVirtualDisk' field: */
+    /** Returns 'sourceVirtualDisk' field value. */
     CMedium sourceVirtualDisk() const;
-    void setSourceVirtualDisk(const CMedium &sourceVirtualDisk);
+    /** Defines 'sourceVirtualDisk' field value. */
+    void setSourceVirtualDisk(const CMedium &comSourceVirtualDisk);
 
-    /* Widgets: */
+    /** Holds the source media combo-box instance. */
     VBoxMediaComboBox *m_pSourceDiskSelector;
-    QIToolButton *m_pSourceDiskOpenButton;
+    /** Holds the open-source-disk button instance. */
+    QIToolButton      *m_pSourceDiskOpenButton;
 };
 
-/* 1st page of the Clone Virtual Hard Drive wizard (basic extension): */
+
+/** 1st page of the Clone Virtual Disk Image wizard (basic extension): */
 class UIWizardCloneVDPageBasic1 : public UIWizardPage, public UIWizardCloneVDPage1
 {
     Q_OBJECT;
@@ -58,33 +62,34 @@ class UIWizardCloneVDPageBasic1 : public UIWizardPage, public UIWizardCloneVDPag
 
 public:
 
-    /* Constructor: */
-    UIWizardCloneVDPageBasic1(const CMedium &sourceVirtualDisk);
+    /** Constructs basic page.
+      * @param  comSourceVirtualDisk  Brings the initial source disk to make copy from. */
+    UIWizardCloneVDPageBasic1(const CMedium &comSourceVirtualDisk, KDeviceType enmDeviceType);
 
 protected:
 
-    /* Wrapper to access 'this' from base part: */
-    UIWizardPage* thisImp() { return this; }
+    /** Allows to access 'this' from base part. */
+    UIWizardPage *thisImp() { return this; }
 
 private slots:
 
-    /* Handlers for source virtual-disk change: */
+    /** Handles command to open source disk. */
     void sltHandleOpenSourceDiskClick();
 
 private:
 
-    /* Translation stuff: */
-    void retranslateUi();
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
 
-    /* Prepare stuff: */
-    void initializePage();
+    /** Prepares the page. */
+    virtual void initializePage() /* override */;
 
-    /* Validation stuff: */
-    bool isComplete() const;
+    /** Returns whether the page is complete. */
+    virtual bool isComplete() const /* override */;
 
-    /* Widgets: */
+    /** Holds the description label instance. */
     QIRichTextLabel *m_pLabel;
 };
 
-#endif // __UIWizardCloneVDPageBasic1_h__
+#endif /* !___UIWizardCloneVDPageBasic1_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp
index 29614de..7567226 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -40,12 +40,12 @@ UIWizardCloneVDPage2::UIWizardCloneVDPage2()
 {
 }
 
-void UIWizardCloneVDPage2::addFormatButton(QWidget *pParent, QVBoxLayout *pFormatLayout, CMediumFormat medFormat, bool fPreferred /* = false */)
+void UIWizardCloneVDPage2::addFormatButton(QWidget *pParent, QVBoxLayout *pFormatLayout, KDeviceType enmDeviceType, CMediumFormat comMediumFormat, bool fPreferred /* = false */)
 {
     /* Check that medium format supports creation: */
     ULONG uFormatCapabilities = 0;
     QVector<KMediumFormatCapabilities> capabilities;
-    capabilities = medFormat.GetCapabilities();
+    capabilities = comMediumFormat.GetCapabilities();
     for (int i = 0; i < capabilities.size(); i++)
         uFormatCapabilities |= capabilities[i];
 
@@ -53,11 +53,11 @@ void UIWizardCloneVDPage2::addFormatButton(QWidget *pParent, QVBoxLayout *pForma
           uFormatCapabilities & KMediumFormatCapabilities_CreateDynamic))
         return;
 
-    /* Check that medium format supports creation of virtual hard-disks: */
+    /* Check that medium format supports creation of virtual disk images: */
     QVector<QString> fileExtensions;
     QVector<KDeviceType> deviceTypes;
-    medFormat.DescribeFileExtensions(fileExtensions, deviceTypes);
-    if (!deviceTypes.contains(KDeviceType_HardDisk))
+    comMediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes);
+    if (!deviceTypes.contains(enmDeviceType))
         return;
 
     /* Create/add corresponding radio-button: */
@@ -72,8 +72,8 @@ void UIWizardCloneVDPage2::addFormatButton(QWidget *pParent, QVBoxLayout *pForma
             pFormatButton->setFont(font);
         }
         pFormatLayout->addWidget(pFormatButton);
-        m_formats << medFormat;
-        m_formatNames << medFormat.GetName();
+        m_formats << comMediumFormat;
+        m_formatNames << comMediumFormat.GetName();
         m_pFormatButtonGroup->addButton(pFormatButton, m_formatNames.size() - 1);
     }
 }
@@ -83,9 +83,9 @@ CMediumFormat UIWizardCloneVDPage2::mediumFormat() const
     return m_pFormatButtonGroup->checkedButton() ? m_formats[m_pFormatButtonGroup->checkedId()] : CMediumFormat();
 }
 
-void UIWizardCloneVDPage2::setMediumFormat(const CMediumFormat &mediumFormat)
+void UIWizardCloneVDPage2::setMediumFormat(const CMediumFormat &comMediumFormat)
 {
-    int iPosition = m_formats.indexOf(mediumFormat);
+    int iPosition = m_formats.indexOf(comMediumFormat);
     if (iPosition >= 0)
     {
         m_pFormatButtonGroup->button(iPosition)->click();
@@ -93,7 +93,7 @@ void UIWizardCloneVDPage2::setMediumFormat(const CMediumFormat &mediumFormat)
     }
 }
 
-UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2()
+UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2(KDeviceType enmDeviceType)
 {
     /* Create widgets: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
@@ -106,7 +106,7 @@ UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2()
                 /* Enumerate medium formats in special order: */
                 CSystemProperties properties = vboxGlobal().virtualBox().GetSystemProperties();
                 const QVector<CMediumFormat> &formats = properties.GetMediumFormats();
-                QMap<QString, CMediumFormat> vdi, preferred;
+                QMap<QString, CMediumFormat> vdi, preferred, others;
                 foreach (const CMediumFormat &format, formats)
                 {
                     /* VDI goes first: */
@@ -118,14 +118,20 @@ UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2()
                         /* Then preferred: */
                         if (capabilities.contains(KMediumFormatCapabilities_Preferred))
                             preferred[format.GetId()] = format;
+                        /* Then others: */
+                        else
+                            others[format.GetId()] = format;
                     }
                 }
 
                 /* Create buttons for VDI and preferred: */
                 foreach (const QString &strId, vdi.keys())
-                    addFormatButton(this, pFormatLayout, vdi.value(strId));
+                    addFormatButton(this, pFormatLayout, enmDeviceType, vdi.value(strId));
                 foreach (const QString &strId, preferred.keys())
-                    addFormatButton(this, pFormatLayout, preferred.value(strId));
+                    addFormatButton(this, pFormatLayout, enmDeviceType, preferred.value(strId));
+                if (enmDeviceType == KDeviceType_DVD || enmDeviceType == KDeviceType_Floppy)
+                    foreach (const QString &strId, others.keys())
+                        addFormatButton(this, pFormatLayout, enmDeviceType, others.value(strId));
 
                 if (!m_pFormatButtonGroup->buttons().isEmpty())
                 {
@@ -151,11 +157,11 @@ UIWizardCloneVDPageBasic2::UIWizardCloneVDPageBasic2()
 void UIWizardCloneVDPageBasic2::retranslateUi()
 {
     /* Translate page: */
-    setTitle(UIWizardCloneVD::tr("Hard disk file type"));
+    setTitle(UIWizardCloneVD::tr("Disk image file type"));
 
     /* Translate widgets: */
     m_pLabel->setText(UIWizardCloneVD::tr("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 "
+                                          "for the new virtual disk image. If you do not need to use it "
                                           "with other virtualization software you can leave this setting unchanged."));
     QList<QAbstractButton*> buttons = m_pFormatButtonGroup->buttons();
     for (int i = 0; i < buttons.size(); ++i)
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.h
index 30bb80e..a20be13 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic2.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,8 +15,8 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UIWizardCloneVDPageBasic2_h__
-#define __UIWizardCloneVDPageBasic2_h__
+#ifndef ___UIWizardCloneVDPageBasic2_h___
+#define ___UIWizardCloneVDPageBasic2_h___
 
 /* GUI includes: */
 #include "UIWizardPage.h"
@@ -31,28 +31,42 @@ class QButtonGroup;
 class QRadioButton;
 class QIRichTextLabel;
 
-/* 2nd page of the Clone Virtual Hard Drive wizard (base part): */
+
+/** 2nd page of the Clone Virtual Disk Image wizard (base part): */
 class UIWizardCloneVDPage2 : public UIWizardPageBase
 {
 protected:
 
-    /* Constructor: */
+    /** Constructs page basis. */
     UIWizardCloneVDPage2();
 
-    /* Helping stuff: */
-    void addFormatButton(QWidget *pParent, QVBoxLayout *pFormatsLayout, CMediumFormat medFormat, bool fPreferred = false);
-
-    /* Stuff for 'mediumFormat' field: */
+    /** Adds format button.
+      * @param  pParent          Brings the parent to add button to.
+      * @param  pFormatsLayout   Brings the layout to insert button to.
+      * @param  enmDeviceType    Brings the device type all buttons should be restricted to.
+      * @param  comMediumFormat  Brings the medium format object to acquire format from.
+      * @param  fPreferred       Brings whether curretn format is preferred or not. */
+    void addFormatButton(QWidget *pParent,
+                         QVBoxLayout *pFormatsLayout,
+                         KDeviceType enmDeviceType,
+                         CMediumFormat comMediumFormat,
+                         bool fPreferred = false);
+
+    /** Returns 'mediumFormat' field value. */
     CMediumFormat mediumFormat() const;
-    void setMediumFormat(const CMediumFormat &mediumFormat);
-
-    /* Variables: */
-    QButtonGroup *m_pFormatButtonGroup;
-    QList<CMediumFormat> m_formats;
-    QStringList m_formatNames;
+    /** Defines 'mediumFormat' field value. */
+    void setMediumFormat(const CMediumFormat &comMediumFormat);
+
+    /** Holds the format button-group instance. */
+    QButtonGroup         *m_pFormatButtonGroup;
+    /** Holds the format description list. */
+    QList<CMediumFormat>  m_formats;
+    /** Holds the format name list. */
+    QStringList           m_formatNames;
 };
 
-/* 2nd page of the Clone Virtual Hard Drive wizard (basic extension): */
+
+/** 2nd page of the Clone Virtual Disk Image wizard (basic extension): */
 class UIWizardCloneVDPageBasic2 : public UIWizardPage, public UIWizardCloneVDPage2
 {
     Q_OBJECT;
@@ -60,26 +74,27 @@ class UIWizardCloneVDPageBasic2 : public UIWizardPage, public UIWizardCloneVDPag
 
 public:
 
-    /* Constructor: */
-    UIWizardCloneVDPageBasic2();
+    /** Constructs basic page.
+      * @param  enmDeviceType  Brings the device type to limit format to. */
+    UIWizardCloneVDPageBasic2(KDeviceType enmDeviceType);
 
 private:
 
-    /* Translation stuff: */
-    void retranslateUi();
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
 
-    /* Prepare stuff: */
-    void initializePage();
+    /** Prepares the page. */
+    virtual void initializePage() /* override */;
 
-    /* Validation stuff: */
-    bool isComplete() const;
+    /** Returns whether the page is complete. */
+    virtual bool isComplete() const /* override */;
 
-    /* Navigation stuff: */
-    int nextId() const;
+    /** Returns the ID of the next page to traverse to. */
+    virtual int nextId() const /* override */;
 
-    /* Widgets: */
+    /** Holds the description label instance. */
     QIRichTextLabel *m_pLabel;
 };
 
-#endif // __UIWizardCloneVDPageBasic2_h__
+#endif /* !___UIWizardCloneVDPageBasic2_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp
index 7880513..c950b20 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -77,7 +77,7 @@ void UIWizardCloneVDPage3::setMediumVariant(qulonglong uMediumVariant)
     m_pSplitBox->setChecked(uMediumVariant & (qulonglong)KMediumVariant_VmdkSplit2G);
 }
 
-UIWizardCloneVDPageBasic3::UIWizardCloneVDPageBasic3()
+UIWizardCloneVDPageBasic3::UIWizardCloneVDPageBasic3(KDeviceType enmDeviceType)
 {
     /* Create widgets: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
@@ -91,11 +91,18 @@ UIWizardCloneVDPageBasic3::UIWizardCloneVDPageBasic3()
             m_pVariantButtonGroup = new QButtonGroup(this);
             {
                 m_pDynamicalButton = new QRadioButton(this);
+                if (enmDeviceType == KDeviceType_HardDisk)
                 {
                     m_pDynamicalButton->click();
                     m_pDynamicalButton->setFocus();
                 }
                 m_pFixedButton = new QRadioButton(this);
+                if (   enmDeviceType == KDeviceType_DVD
+                    || enmDeviceType == KDeviceType_Floppy)
+                {
+                    m_pFixedButton->click();
+                    m_pFixedButton->setFocus();
+                }
                 m_pVariantButtonGroup->addButton(m_pDynamicalButton, 0);
                 m_pVariantButtonGroup->addButton(m_pFixedButton, 1);
             }
@@ -126,14 +133,14 @@ void UIWizardCloneVDPageBasic3::retranslateUi()
     setTitle(UIWizardCloneVD::tr("Storage on physical hard disk"));
 
     /* Translate widgets: */
-    m_pDescriptionLabel->setText(UIWizardCloneVD::tr("Please choose whether the new virtual hard disk file should grow as it is used "
+    m_pDescriptionLabel->setText(UIWizardCloneVD::tr("Please choose whether the new virtual disk image file should grow as it is used "
                                                      "(dynamically allocated) or if it should be created at its maximum size (fixed size)."));
-    m_pDynamicLabel->setText(UIWizardCloneVD::tr("<p>A <b>dynamically allocated</b> hard disk file will only use space "
+    m_pDynamicLabel->setText(UIWizardCloneVD::tr("<p>A <b>dynamically allocated</b> disk image 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>"));
-    m_pFixedLabel->setText(UIWizardCloneVD::tr("<p>A <b>fixed size</b> hard disk file may take longer to create on some "
+    m_pFixedLabel->setText(UIWizardCloneVD::tr("<p>A <b>fixed size</b> disk image file may take longer to create on some "
                                                "systems but is often faster to use.</p>"));
-    m_pSplitLabel->setText(UIWizardCloneVD::tr("<p>You can also choose to <b>split</b> the hard disk file into several files "
+    m_pSplitLabel->setText(UIWizardCloneVD::tr("<p>You can also choose to <b>split</b> the disk image 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."));
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.h
index 97dd79a..2ead43d 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic3.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,38 +15,47 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UIWizardCloneVDPageBasic3_h__
-#define __UIWizardCloneVDPageBasic3_h__
+#ifndef ___UIWizardCloneVDPageBasic3_h___
+#define ___UIWizardCloneVDPageBasic3_h___
 
-/* Local includes: */
+/* GUI includes: */
 #include "UIWizardPage.h"
 
+/* COM includes: */
+#include "COMEnums.h"
+
 /* Forward declarations: */
 class QButtonGroup;
 class QRadioButton;
 class QCheckBox;
 class QIRichTextLabel;
 
-/* 3rd page of the Clone Virtual Hard Drive wizard (base part): */
+
+/** 3rd page of the Clone Virtual Disk Image wizard (base part): */
 class UIWizardCloneVDPage3 : public UIWizardPageBase
 {
 protected:
 
-    /* Constructor: */
+    /** Constructs page basis. */
     UIWizardCloneVDPage3();
 
-    /* Stuff for 'variant' field: */
+    /** Returns 'mediumVariant' field value. */
     qulonglong mediumVariant() const;
+    /** Defines 'mediumVariant' field value. */
     void setMediumVariant(qulonglong uMediumVariant);
 
-    /* Widgets: */
+    /** Holds the variant button-group instance. */
     QButtonGroup *m_pVariantButtonGroup;
+    /** Holds the 'Dynamical' button instance. */
     QRadioButton *m_pDynamicalButton;
+    /** Holds the 'Fixed' button instance. */
     QRadioButton *m_pFixedButton;
-    QCheckBox *m_pSplitBox;
+    /** Holds the 'Split to 2GB files' check-box instance. */
+    QCheckBox    *m_pSplitBox;
 };
 
-/* 3rd page of the Clone Virtual Hard Drive wizard (basic extension): */
+
+/** 3rd page of the Clone Virtual Disk Image wizard (basic extension): */
 class UIWizardCloneVDPageBasic3 : public UIWizardPage, public UIWizardCloneVDPage3
 {
     Q_OBJECT;
@@ -54,26 +63,29 @@ class UIWizardCloneVDPageBasic3 : public UIWizardPage, public UIWizardCloneVDPag
 
 public:
 
-    /* Constructor: */
-    UIWizardCloneVDPageBasic3();
+    /** Constructs basic page. */
+    UIWizardCloneVDPageBasic3(KDeviceType enmDeviceType);
 
 private:
 
-    /* Translation stuff: */
-    void retranslateUi();
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
 
-    /* Prepare stuff: */
-    void initializePage();
+    /** Prepares the page. */
+    virtual void initializePage() /* override */;
 
-    /* Validation stuff: */
-    bool isComplete() const;
+    /** Returns whether the page is complete. */
+    virtual bool isComplete() const /* override */;
 
-    /* Widgets: */
+    /** Holds the description label instance. */
     QIRichTextLabel *m_pDescriptionLabel;
+    /** Holds the 'Dynamic' description label instance. */
     QIRichTextLabel *m_pDynamicLabel;
+    /** Holds the 'Fixed' description label instance. */
     QIRichTextLabel *m_pFixedLabel;
+    /** Holds the 'Split to 2GB files' description label instance. */
     QIRichTextLabel *m_pSplitLabel;
 };
 
-#endif // __UIWizardCloneVDPageBasic3_h__
+#endif /* !___UIWizardCloneVDPageBasic3_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp
index 691e470..aacd22c 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -76,7 +76,7 @@ void UIWizardCloneVDPage4::onSelectLocationButtonClicked()
     mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes);
     QStringList validExtensionList;
     for (int i = 0; i < fileExtensions.size(); ++i)
-        if (deviceTypes[i] == KDeviceType_HardDisk)
+        if (deviceTypes[i] == static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType())
             validExtensionList << QString("*.%1").arg(fileExtensions[i]);
     /* Compose full filter list: */
     QString strBackendsList = QString("%1 (%2)").arg(mediumFormat.GetName()).arg(validExtensionList.join(" "));
@@ -84,7 +84,7 @@ void UIWizardCloneVDPage4::onSelectLocationButtonClicked()
     /* Open corresponding file-dialog: */
     QString strChosenFilePath = QIFileDialog::getSaveFileName(folder.absoluteFilePath(strFileName),
                                                               strBackendsList, thisImp(),
-                                                              UIWizardCloneVD::tr("Please choose a location for new virtual hard disk file"));
+                                                              UIWizardCloneVD::tr("Please choose a location for new virtual disk image file"));
 
     /* If there was something really chosen: */
     if (!strChosenFilePath.isEmpty())
@@ -128,28 +128,37 @@ QString UIWizardCloneVDPage4::absoluteFilePath(const QString &strFileName, const
         /* Resolve path on the basis of default path we have: */
         fileInfo = QFileInfo(strDefaultPath, strFileName);
     }
-    /* Return full absolute hard disk file path: */
+    /* Return full absolute disk image file path: */
     return QDir::toNativeSeparators(fileInfo.absoluteFilePath());
 }
 
 /* static */
-QString UIWizardCloneVDPage4::defaultExtension(const CMediumFormat &mediumFormatRef)
+void UIWizardCloneVDPage4::acquireExtensions(const CMediumFormat &comMediumFormat, KDeviceType enmDeviceType,
+                                             QStringList &aAllowedExtensions, QString &strDefaultExtension)
 {
     /* Load extension / device list: */
     QVector<QString> fileExtensions;
     QVector<KDeviceType> deviceTypes;
-    CMediumFormat mediumFormat(mediumFormatRef);
+    CMediumFormat mediumFormat(comMediumFormat);
     mediumFormat.DescribeFileExtensions(fileExtensions, deviceTypes);
     for (int i = 0; i < fileExtensions.size(); ++i)
-        if (deviceTypes[i] == KDeviceType_HardDisk)
-            return fileExtensions[i].toLower();
-    AssertMsgFailed(("Extension can't be NULL!\n"));
-    return QString();
+        if (deviceTypes[i] == enmDeviceType)
+            aAllowedExtensions << fileExtensions[i].toLower();
+    AssertReturnVoid(!aAllowedExtensions.isEmpty());
+    strDefaultExtension = aAllowedExtensions.first();
 }
 
 QString UIWizardCloneVDPage4::mediumPath() const
 {
-    return absoluteFilePath(toFileName(m_pDestinationDiskEditor->text(), m_strDefaultExtension), m_strDefaultPath);
+    /* Acquire chosen file path, and what is important user suffix: */
+    const QString strChosenFilePath = m_pDestinationDiskEditor->text();
+    QString strSuffix = QFileInfo(strChosenFilePath).suffix().toLower();
+    /* If there is no suffix of it's not allowed: */
+    if (   strSuffix.isEmpty()
+        || !m_aAllowedExtensions.contains(strSuffix))
+        strSuffix = m_strDefaultExtension;
+    /* Compose full file path finally: */
+    return absoluteFilePath(toFileName(m_pDestinationDiskEditor->text(), strSuffix), m_strDefaultPath);
 }
 
 qulonglong UIWizardCloneVDPage4::mediumSize() const
@@ -198,12 +207,12 @@ void UIWizardCloneVDPageBasic4::sltSelectLocationButtonClicked()
 void UIWizardCloneVDPageBasic4::retranslateUi()
 {
     /* Translate page: */
-    setTitle(UIWizardCloneVD::tr("New hard disk to create"));
+    setTitle(UIWizardCloneVD::tr("New disk image to create"));
 
     /* Translate widgets: */
-    m_pLabel->setText(UIWizardCloneVD::tr("Please type the name of the new virtual hard disk file into the box below or "
+    m_pLabel->setText(UIWizardCloneVD::tr("Please type the name of the new virtual disk image file into the box below or "
                                           "click on the folder icon to select a different folder to create the file in."));
-    m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual hard disk file..."));
+    m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual disk image file..."));
 }
 
 void UIWizardCloneVDPageBasic4::initializePage()
@@ -216,9 +225,11 @@ void UIWizardCloneVDPageBasic4::initializePage()
     /* Get default path for virtual-disk copy: */
     m_strDefaultPath = sourceFileInfo.absolutePath();
     /* Get default extension for virtual-disk copy: */
-    m_strDefaultExtension = defaultExtension(field("mediumFormat").value<CMediumFormat>());
+    acquireExtensions(field("mediumFormat").value<CMediumFormat>(),
+                      static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(),
+                      m_aAllowedExtensions, m_strDefaultExtension);
     /* Compose default-name for virtual-disk copy: */
-    QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual hard drive name").arg(sourceFileInfo.baseName());
+    QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.completeBaseName());
     /* Set default-name as text for location editor: */
     m_pDestinationDiskEditor->setText(strMediumName);
 }
@@ -245,7 +256,7 @@ bool UIWizardCloneVDPageBasic4::validatePage()
         /* Lock finish button: */
         startProcessing();
 
-        /* Try to copy virtual hard drive file: */
+        /* Try to copy virtual disk image file: */
         fResult = qobject_cast<UIWizardCloneVD*>(wizard())->copyVirtualDisk();
 
         /* Unlock finish button: */
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.h
index 3428529..cee367c 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageBasic4.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,8 +15,8 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UIWizardCloneVDPageBasic4_h__
-#define __UIWizardCloneVDPageBasic4_h__
+#ifndef ___UIWizardCloneVDPageBasic4_h___
+#define ___UIWizardCloneVDPageBasic4_h___
 
 /* Qt includes: */
 #include <QVariant>
@@ -24,44 +24,57 @@
 /* GUI includes: */
 #include "UIWizardPage.h"
 
+/* COM includes: */
+#include "COMEnums.h"
+
 /* Forward declarations: */
 class CMediumFormat;
 class QLineEdit;
 class QIToolButton;
 class QIRichTextLabel;
 
-/* 4th page of the Clone Virtual Hard Drive wizard (base part): */
+
+/** 4th page of the Clone Virtual Disk Image wizard (base part): */
 class UIWizardCloneVDPage4 : public UIWizardPageBase
 {
 protected:
 
-    /* Constructor: */
+    /** Constructs page basis. */
     UIWizardCloneVDPage4();
 
-    /* Handlers: */
+    /** Handles command to open target disk. */
     void onSelectLocationButtonClicked();
 
-    /* Location-editors stuff: */
+    /** Helps to compose full file name on the basis of incoming @a strName and @a strExtension. */
     static QString toFileName(const QString &strName, const QString &strExtension);
+    /** Converts the @a strFileName to absolute one if necessary using @a strDefaultPath as advice. */
     static QString absoluteFilePath(const QString &strFileName, const QString &strDefaultPath);
-    static QString defaultExtension(const CMediumFormat &mediumFormatRef);
+    /** Acquires the list of @a aAllowedExtensions and @a strDefaultExtension
+      * on the basis of incoming @a comMediumFormat and @a enmDeviceType. */
+    static void acquireExtensions(const CMediumFormat &comMediumFormat, KDeviceType enmDeviceType,
+                                  QStringList &aAllowedExtensions, QString &strDefaultExtension);
 
-    /* Stuff for 'mediumPath' field: */
+    /** Returns 'mediumPath' field value. */
     QString mediumPath() const;
 
-    /* Stuff for 'mediumSize' field: */
+    /** Returns 'mediumSize' field value. */
     qulonglong mediumSize() const;
 
-    /* Variables: */
-    QString m_strDefaultPath;
-    QString m_strDefaultExtension;
+    /** Holds the default path. */
+    QString      m_strDefaultPath;
+    /** Holds the default extension. */
+    QString      m_strDefaultExtension;
+    /** Holds the allowed extensions. */
+    QStringList  m_aAllowedExtensions;
 
-    /* Widgets: */
-    QLineEdit *m_pDestinationDiskEditor;
+    /** Holds the target disk path editor instance. */
+    QLineEdit    *m_pDestinationDiskEditor;
+    /** Holds the open-target-disk button instance. */
     QIToolButton *m_pDestinationDiskOpenButton;
 };
 
-/* 4th page of the Clone Virtual Hard Drive wizard (basic extension): */
+
+/** 4th page of the Clone Virtual Disk Image wizard (basic extension): */
 class UIWizardCloneVDPageBasic4 : public UIWizardPage, public UIWizardCloneVDPage4
 {
     Q_OBJECT;
@@ -70,36 +83,40 @@ class UIWizardCloneVDPageBasic4 : public UIWizardPage, public UIWizardCloneVDPag
 
 public:
 
-    /* Constructor: */
+    /** Constructs basic page. */
     UIWizardCloneVDPageBasic4();
 
 protected:
 
-    /* Wrapper to access 'this' from base part: */
+    /** Allows to access 'wizard()' from base part. */
+    UIWizard* wizardImp() { return wizard(); }
+    /** Allows to access 'this' from base part. */
     UIWizardPage* thisImp() { return this; }
-    /* Wrapper to access 'wizard-field' from base part: */
+    /** Allows to access 'field()' from base part. */
     QVariant fieldImp(const QString &strFieldName) const { return UIWizardPage::field(strFieldName); }
 
 private slots:
 
-    /* Location editor stuff: */
+    /** Handles command to open target disk. */
     void sltSelectLocationButtonClicked();
 
 private:
 
-    /* Translation stuff: */
-    void retranslateUi();
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
+
+    /** Prepares the page. */
+    virtual void initializePage() /* override */;
 
-    /* Prepare stuff: */
-    void initializePage();
+    /** Returns whether the page is complete. */
+    virtual bool isComplete() const /* override */;
 
-    /* Validation stuff: */
-    bool isComplete() const;
-    bool validatePage();
+    /** Returns whether the page is valid. */
+    virtual bool validatePage() /* override */;
 
-    /* Widgets: */
+    /** Holds the description label instance. */
     QIRichTextLabel *m_pLabel;
 };
 
-#endif // __UIWizardCloneVDPageBasic4_h__
+#endif /* !___UIWizardCloneVDPageBasic4_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp
index 3718738..9c70534 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -43,13 +43,11 @@
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
 
-UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(const CMedium &sourceVirtualDisk)
+UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(const CMedium &comSourceVirtualDisk, KDeviceType enmDeviceType)
 {
     /* Create widgets: */
     QGridLayout *pMainLayout = new QGridLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 6, 8, 6);
-        pMainLayout->setSpacing(10);
         m_pSourceDiskCnt = new QGroupBox(this);
         {
             m_pSourceDiskCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
@@ -58,8 +56,8 @@ UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(const CMedium &sourceVirtua
                 m_pSourceDiskSelector = new VBoxMediaComboBox(m_pSourceDiskCnt);
                 {
                     m_pSourceDiskSelector->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
-                    m_pSourceDiskSelector->setType(UIMediumType_HardDisk);
-                    m_pSourceDiskSelector->setCurrentItem(sourceVirtualDisk.GetId());
+                    m_pSourceDiskSelector->setType(UIMediumDefs::mediumTypeToLocal(enmDeviceType));
+                    m_pSourceDiskSelector->setCurrentItem(comSourceVirtualDisk.GetId());
                     m_pSourceDiskSelector->repopulate();
                 }
                 m_pSourceDiskOpenButton = new QIToolButton(m_pSourceDiskCnt);
@@ -116,11 +114,11 @@ UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(const CMedium &sourceVirtua
 
                     /* Create buttons for VDI, preferred and others: */
                     foreach (const QString &strId, vdi.keys())
-                        addFormatButton(this, pFormatCntLayout, vdi.value(strId), true);
+                        addFormatButton(this, pFormatCntLayout, enmDeviceType, vdi.value(strId), true);
                     foreach (const QString &strId, preferred.keys())
-                        addFormatButton(this, pFormatCntLayout, preferred.value(strId), true);
+                        addFormatButton(this, pFormatCntLayout, enmDeviceType, preferred.value(strId), true);
                     foreach (const QString &strId, others.keys())
-                        addFormatButton(this, pFormatCntLayout, others.value(strId));
+                        addFormatButton(this, pFormatCntLayout, enmDeviceType, others.value(strId));
 
                     if (!m_pFormatButtonGroup->buttons().isEmpty())
                     {
@@ -138,11 +136,18 @@ UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(const CMedium &sourceVirtua
                 m_pVariantButtonGroup = new QButtonGroup(m_pVariantCnt);
                 {
                     m_pDynamicalButton = new QRadioButton(m_pVariantCnt);
+                    if (enmDeviceType == KDeviceType_HardDisk)
                     {
                         m_pDynamicalButton->click();
                         m_pDynamicalButton->setFocus();
                     }
                     m_pFixedButton = new QRadioButton(m_pVariantCnt);
+                    if (   enmDeviceType == KDeviceType_DVD
+                        || enmDeviceType == KDeviceType_Floppy)
+                    {
+                        m_pFixedButton->click();
+                        m_pFixedButton->setFocus();
+                    }
                     m_pVariantButtonGroup->addButton(m_pDynamicalButton, 0);
                     m_pVariantButtonGroup->addButton(m_pFixedButton, 1);
                 }
@@ -156,8 +161,6 @@ UIWizardCloneVDPageExpert::UIWizardCloneVDPageExpert(const CMedium &sourceVirtua
         pMainLayout->addWidget(m_pDestinationCnt, 1, 0, 1, 2);
         pMainLayout->addWidget(m_pFormatCnt, 2, 0, Qt::AlignTop);
         pMainLayout->addWidget(m_pVariantCnt, 2, 1, Qt::AlignTop);
-        sltHandleSourceDiskChange();
-        sltMediumFormatChanged();
     }
 
     /* Setup connections: */
@@ -187,7 +190,7 @@ void UIWizardCloneVDPageExpert::sltHandleSourceDiskChange()
     /* Get default path for virtual-disk copy: */
     m_strDefaultPath = sourceFileInfo.absolutePath();
     /* Compose name for virtual-disk copy: */
-    QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual hard drive name").arg(sourceFileInfo.baseName());
+    QString strMediumName = UIWizardCloneVD::tr("%1_copy", "copied virtual disk image name").arg(sourceFileInfo.baseName());
     /* Set text to location editor: */
     m_pDestinationDiskEditor->setText(strMediumName);
 
@@ -229,7 +232,8 @@ void UIWizardCloneVDPageExpert::sltMediumFormatChanged()
     m_pSplitBox->setEnabled(fIsCreateSplitPossible);
 
     /* Compose virtual-disk extension: */
-    m_strDefaultExtension = defaultExtension(mf);
+    acquireExtensions(mf, static_cast<UIWizardCloneVD*>(wizardImp())->sourceVirtualDiskDeviceType(),
+                      m_aAllowedExtensions, m_strDefaultExtension);
 
     /* Broadcast complete-change: */
     emit completeChanged();
@@ -244,11 +248,11 @@ void UIWizardCloneVDPageExpert::sltSelectLocationButtonClicked()
 void UIWizardCloneVDPageExpert::retranslateUi()
 {
     /* Translate widgets: */
-    m_pSourceDiskCnt->setTitle(UIWizardCloneVD::tr("Hard disk to &copy"));
-    m_pSourceDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a virtual hard disk file to copy..."));
-    m_pDestinationCnt->setTitle(UIWizardCloneVD::tr("&New hard disk to create"));
-    m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual hard disk file..."));
-    m_pFormatCnt->setTitle(UIWizardCloneVD::tr("Hard disk file &type"));
+    m_pSourceDiskCnt->setTitle(UIWizardCloneVD::tr("Disk image to &copy"));
+    m_pSourceDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a virtual disk image file to copy..."));
+    m_pDestinationCnt->setTitle(UIWizardCloneVD::tr("&New disk image to create"));
+    m_pDestinationDiskOpenButton->setToolTip(UIWizardCloneVD::tr("Choose a location for new virtual disk image file..."));
+    m_pFormatCnt->setTitle(UIWizardCloneVD::tr("Disk image file &type"));
     QList<QAbstractButton*> buttons = m_pFormatButtonGroup->buttons();
     for (int i = 0; i < buttons.size(); ++i)
     {
@@ -265,6 +269,9 @@ void UIWizardCloneVDPageExpert::initializePage()
 {
     /* Translate page: */
     retranslateUi();
+
+    sltHandleSourceDiskChange();
+    sltMediumFormatChanged();
 }
 
 bool UIWizardCloneVDPageExpert::isComplete() const
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.h
index 607fbca..6011d46 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevd/UIWizardCloneVDPageExpert.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,10 +15,10 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UIWizardCloneVDPageExpert_h__
-#define __UIWizardCloneVDPageExpert_h__
+#ifndef ___UIWizardCloneVDPageExpert_h___
+#define ___UIWizardCloneVDPageExpert_h___
 
-/* Local includes: */
+/* GUI includes: */
 #include "UIWizardCloneVDPageBasic1.h"
 #include "UIWizardCloneVDPageBasic2.h"
 #include "UIWizardCloneVDPageBasic3.h"
@@ -27,7 +27,8 @@
 /* Forward declarations: */
 class QGroupBox;
 
-/* Expert page of the Clone Virtual Hard Drive wizard: */
+
+/** Expert page of the Clone Virtual Disk Image wizard: */
 class UIWizardCloneVDPageExpert : public UIWizardPage,
                                   public UIWizardCloneVDPage1,
                                   public UIWizardCloneVDPage2,
@@ -43,46 +44,56 @@ class UIWizardCloneVDPageExpert : public UIWizardPage,
 
 public:
 
-    /* Constructor: */
-    UIWizardCloneVDPageExpert(const CMedium &sourceVirtualDisk);
+    /** Constructs basic page.
+      * @param  comSourceVirtualDisk  Brings the initial source disk to make copy from.
+      * @param  enmDeviceType         Brings the device type to limit format to. */
+    UIWizardCloneVDPageExpert(const CMedium &comSourceVirtualDisk, KDeviceType enmDeviceType);
 
 protected:
 
-    /* Wrapper to access 'this' from base part: */
+    /** Allows to access 'wizard()' from base part. */
+    UIWizard* wizardImp() { return wizard(); }
+    /** Allows to access 'this' from base part. */
     UIWizardPage* thisImp() { return this; }
-    /* Wrapper to access 'wizard-field' from base part: */
+    /** Allows to access 'field()' from base part. */
     QVariant fieldImp(const QString &strFieldName) const { return UIWizardPage::field(strFieldName); }
 
 private slots:
 
-    /* Source virtual-disk stuff: */
+    /** Handles source disk change. */
     void sltHandleSourceDiskChange();
+    /** Handles command to open source disk. */
     void sltHandleOpenSourceDiskClick();
 
-    /* Medium format stuff: */
+    /** Handles medium format change. */
     void sltMediumFormatChanged();
 
-    /* Location editor stuff: */
+    /** Handles target disk change. */
     void sltSelectLocationButtonClicked();
 
 private:
 
-    /* Translation stuff: */
-    void retranslateUi();
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
+
+    /** Prepares the page. */
+    virtual void initializePage() /* override */;
 
-    /* Prepare stuff: */
-    void initializePage();
+    /** Returns whether the page is complete. */
+    virtual bool isComplete() const /* override */;
 
-    /* Validation stuff: */
-    bool isComplete() const;
-    bool validatePage();
+    /** Returns whether the page is valid. */
+    virtual bool validatePage() /* override */;
 
-    /* Widgets: */
+    /** Holds the source disk container instance. */
     QGroupBox *m_pSourceDiskCnt;
+    /** Holds the format container instance. */
     QGroupBox *m_pFormatCnt;
+    /** Holds the variant container instance. */
     QGroupBox *m_pVariantCnt;
+    /** Holds the target disk container instance. */
     QGroupBox *m_pDestinationCnt;
 };
 
-#endif // __UIWizardCloneVDPageExpert_h__
+#endif /* !___UIWizardCloneVDPageExpert_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp
index 0cd81bd..bbc8f99 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.h
index 82a4bc8..9a22173 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVM.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.cpp
index a1b47ab..7f64c5a 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.h
index 070980c..bce1e8c 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic1.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.cpp
index 722aa9b..a76709b 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.h
index b23774d..ab40086 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic2.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.cpp
index d6479e4..08256d6 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.h
index aa33ba3..914fd18 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageBasic3.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.cpp
index 1f2e7f4..973bc09 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -42,8 +42,6 @@ UIWizardCloneVMPageExpert::UIWizardCloneVMPageExpert(const QString &strOriginalN
     /* Create widgets: */
     QGridLayout *pMainLayout = new QGridLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 6, 8, 6);
-        pMainLayout->setSpacing(10);
         m_pNameCnt = new QGroupBox(this);
         {
             QVBoxLayout *pNameCntLayout = new QVBoxLayout(m_pNameCnt);
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.h b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.h
index be01efb..7e17444 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/clonevm/UIWizardCloneVMPageExpert.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp
index 86afffb..b9c89fe 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.h
index 4453ceb..0cd3892 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportApp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppDefs.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppDefs.h
index b24eb9e..b9cd866 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp
index 0b6acf5..e7bc4ad 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.h
index f42f073..70d99f2 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic1.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp
index f5efab9..c040e58 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h
index a7d6090..cedd73d 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic2.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h
index 6c2fd65..7c5ef2f 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic3.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.cpp
index bcbc43f..e540a5c 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.h
index f113753..dbf6d29 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageBasic4.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp
index 455b0f0..22475c6 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.cpp
@@ -46,8 +46,6 @@ UIWizardExportAppPageExpert::UIWizardExportAppPageExpert(const QStringList &sele
     /* Create widgets: */
     QGridLayout *pMainLayout = new QGridLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 6, 8, 6);
-        pMainLayout->setSpacing(10);
         m_pSelectorCnt = new QGroupBox(this);
         {
             QVBoxLayout *pSelectorCntLayout = new QVBoxLayout(m_pSelectorCnt);
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h
index 9b534e3..26f7d8f 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/exportappliance/UIWizardExportAppPageExpert.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.cpp
index cceb63d..59f08be 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.h b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.h
index 75cbc7b..8124eaa 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRun.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.cpp
index 0bd838a..6253c8f 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -67,8 +67,6 @@ UIWizardFirstRunPageBasic::UIWizardFirstRunPageBasic(const QString &strMachineId
     /* Create widgets: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 0, 8, 0);
-        pMainLayout->setSpacing(10);
         m_pLabel = new QIRichTextLabel(this);
         QHBoxLayout *pSourceDiskLayout = new QHBoxLayout;
         {
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.h b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.h
index eebe336..2278f3d 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/firstrun/UIWizardFirstRunPageBasic.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.cpp
index 28e389b..cd47520 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.h b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.h
index 56e325d..2958aa4 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportApp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppDefs.h b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppDefs.h
index c1cae86..d3f66f1 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppDefs.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.cpp
index 0224e0f..fbfd88d 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.h b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.h
index 8eaa26e..756c1c9 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic1.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.cpp
index 2d3e9c7..0894208 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.h b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.h
index 7be8367..96081f2 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageBasic2.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.cpp
index 0493dd2..1af4cfc 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -39,8 +39,6 @@ UIWizardImportAppPageExpert::UIWizardImportAppPageExpert(const QString &strFileN
     /* Create widgets: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 6, 8, 6);
-        pMainLayout->setSpacing(10);
         m_pApplianceCnt = new QGroupBox(this);
         {
             QVBoxLayout *pApplianceCntLayout = new QVBoxLayout(m_pApplianceCnt);
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.h b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.h
index 7e8b521..5698c3a 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIWizardImportAppPageExpert.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp
index 9cdb6b9..92cf5c9 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.h
index e2ccbb9..f33875b 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVD.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.cpp
index acaf8b4..908fc42 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.h
index a6d35c3..788eb13 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic1.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.cpp
index f62cd28..7f9d55f 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.h
index 1bd56c7..eb33ff2 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic2.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.cpp
index d2e80b6..a13f625 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.h
index f3bfbf5..14376b0 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageBasic3.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp
index a30f311..bac76dd 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -54,8 +54,6 @@ UIWizardNewVDPageExpert::UIWizardNewVDPageExpert(const QString &strDefaultName,
     /* Create widgets: */
     QGridLayout *pMainLayout = new QGridLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 6, 8, 6);
-        pMainLayout->setSpacing(10);
         m_pLocationCnt = new QGroupBox(this);
         {
             m_pLocationCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h
index b94bce4..44f6b0d 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvd/UIWizardNewVDPageExpert.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp
index 7de688b..19703b0 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.h
index b985ac7..3556487 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVM.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
index ca48aff..f4552e6 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.h
index e58fae1..091e444 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic1.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.cpp
index 4564093..f552ba3 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.h
index f81389d..86b9689 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic2.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.cpp
index 2755747..c40d881 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.h
index 799d227..8416080 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageBasic3.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp
index dbe6383..703b83d 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -49,8 +49,6 @@ UIWizardNewVMPageExpert::UIWizardNewVMPageExpert(const QString &strGroup)
     /* Create widgets: */
     QVBoxLayout *pMainLayout = new QVBoxLayout(this);
     {
-        pMainLayout->setContentsMargins(8, 6, 8, 6);
-        pMainLayout->setSpacing(10);
         m_pNameAndSystemCnt = new QGroupBox(this);
         {
             m_pNameAndSystemCnt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
diff --git a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h
index 9917785..f967cde 100644
--- a/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h
+++ b/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UIWizardNewVMPageExpert.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/DragAndDrop/DnDDroppedFiles.cpp b/src/VBox/GuestHost/DragAndDrop/DnDDroppedFiles.cpp
index b64cfd3..fcb8870 100644
--- a/src/VBox/GuestHost/DragAndDrop/DnDDroppedFiles.cpp
+++ b/src/VBox/GuestHost/DragAndDrop/DnDDroppedFiles.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -151,11 +151,11 @@ int DnDDroppedFiles::OpenEx(const char *pszPath, uint32_t fFlags)
         rc = RTDirCreateUniqueNumbered(pszDropDir, sizeof(pszDropDir), RTFS_UNIX_IRWXU, 3, '-');
         if (RT_SUCCESS(rc))
         {
-            PRTDIR phDir;
-            rc = RTDirOpen(&phDir, pszDropDir);
+            RTDIR hDir;
+            rc = RTDirOpen(&hDir, pszDropDir);
             if (RT_SUCCESS(rc))
             {
-                this->m_hDir       = phDir;
+                this->m_hDir       = hDir;
                 this->m_strPathAbs = pszDropDir;
                 this->m_fOpen      = fFlags;
             }
diff --git a/src/VBox/GuestHost/DragAndDrop/DnDMIME.cpp b/src/VBox/GuestHost/DragAndDrop/DnDMIME.cpp
index 68194ef..44ccd89 100644
--- a/src/VBox/GuestHost/DragAndDrop/DnDMIME.cpp
+++ b/src/VBox/GuestHost/DragAndDrop/DnDMIME.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/DragAndDrop/DnDPath.cpp b/src/VBox/GuestHost/DragAndDrop/DnDPath.cpp
index ea7759e..00ef872 100644
--- a/src/VBox/GuestHost/DragAndDrop/DnDPath.cpp
+++ b/src/VBox/GuestHost/DragAndDrop/DnDPath.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp b/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp
index 5fe630f..e0b9893 100644
--- a/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp
+++ b/src/VBox/GuestHost/DragAndDrop/DnDURIList.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -127,17 +127,18 @@ int DnDURIList::appendPathRecursive(const char *pcszSrcPath,
         if (RTFS_IS_DIRECTORY(objInfo.Attr.fMode))
         {
             rc = addEntry(pcszSrcPath, &pcszDstPath[cchDstBase], fFlags);
-
             if (RT_SUCCESS(rc))
             {
-                PRTDIR hDir;
+                RTDIR hDir;
                 rc = RTDirOpen(&hDir, pcszSrcPath);
                 if (RT_SUCCESS(rc))
                 {
+                    size_t        cbDirEntry = 0;
+                    PRTDIRENTRYEX pDirEntry  = NULL;
                     do
                     {
-                        RTDIRENTRY DirEntry;
-                        rc = RTDirRead(hDir, &DirEntry, NULL);
+                        /* Retrieve the next directory entry. */
+                        rc = RTDirReadExA(hDir, &pDirEntry, &cbDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
                         if (RT_FAILURE(rc))
                         {
                             if (rc == VERR_NO_MORE_FILES)
@@ -145,19 +146,18 @@ int DnDURIList::appendPathRecursive(const char *pcszSrcPath,
                             break;
                         }
 
-                        switch (DirEntry.enmType)
+                        switch (pDirEntry->Info.Attr.fMode & RTFS_TYPE_MASK)
                         {
-                            case RTDIRENTRYTYPE_DIRECTORY:
+                            case RTFS_TYPE_DIRECTORY:
                             {
                                 /* Skip "." and ".." entries. */
-                                if (   RTStrCmp(DirEntry.szName, ".")  == 0
-                                    || RTStrCmp(DirEntry.szName, "..") == 0)
+                                if (RTDirEntryExIsStdDotLink(pDirEntry))
                                     break;
 
-                                char *pszSrc = RTPathJoinA(pcszSrcPath, DirEntry.szName);
+                                char *pszSrc = RTPathJoinA(pcszSrcPath, pDirEntry->szName);
                                 if (pszSrc)
                                 {
-                                    char *pszDst = RTPathJoinA(pcszDstPath, DirEntry.szName);
+                                    char *pszDst = RTPathJoinA(pcszDstPath, pDirEntry->szName);
                                     if (pszDst)
                                     {
                                         rc = appendPathRecursive(pszSrc, pszDst, pcszDstBase, cchDstBase, fFlags);
@@ -173,12 +173,12 @@ int DnDURIList::appendPathRecursive(const char *pcszSrcPath,
                                 break;
                             }
 
-                            case RTDIRENTRYTYPE_FILE:
+                            case RTFS_TYPE_FILE:
                             {
-                                char *pszSrc = RTPathJoinA(pcszSrcPath, DirEntry.szName);
+                                char *pszSrc = RTPathJoinA(pcszSrcPath, pDirEntry->szName);
                                 if (pszSrc)
                                 {
-                                    char *pszDst = RTPathJoinA(pcszDstPath, DirEntry.szName);
+                                    char *pszDst = RTPathJoinA(pcszDstPath, pDirEntry->szName);
                                     if (pszDst)
                                     {
                                         rc = addEntry(pszSrc, &pszDst[cchDstBase], fFlags);
@@ -192,7 +192,7 @@ int DnDURIList::appendPathRecursive(const char *pcszSrcPath,
                                     rc = VERR_NO_MEMORY;
                                 break;
                             }
-                            case RTDIRENTRYTYPE_SYMLINK:
+                            case RTFS_TYPE_SYMLINK:
                             {
                                 if (fFlags & DNDURILIST_FLAGS_RESOLVE_SYMLINKS)
                                 {
@@ -230,6 +230,7 @@ int DnDURIList::appendPathRecursive(const char *pcszSrcPath,
 
                     } while (RT_SUCCESS(rc));
 
+                    RTDirReadExAFree(&pDirEntry, &cbDirEntry);
                     RTDirClose(hDir);
                 }
             }
diff --git a/src/VBox/GuestHost/DragAndDrop/DnDURIObject.cpp b/src/VBox/GuestHost/DragAndDrop/DnDURIObject.cpp
index 1feedac..4f839c8 100644
--- a/src/VBox/GuestHost/DragAndDrop/DnDURIObject.cpp
+++ b/src/VBox/GuestHost/DragAndDrop/DnDURIObject.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/HGSMI/.scm-settings b/src/VBox/GuestHost/HGSMI/.scm-settings
new file mode 100644
index 0000000..04948d3
--- /dev/null
+++ b/src/VBox/GuestHost/HGSMI/.scm-settings
@@ -0,0 +1,21 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for HGSMI.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# @bugref{8524} r114561: MIT license of files upstreamed to the Linux kernel to
+#               encourage other kernels to pick them up.
+HGSMICommon.cpp: --license-mit
+
diff --git a/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp b/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
index e15d432..5094b36 100644
--- a/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
+++ b/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
@@ -6,22 +6,25 @@
 /*
  * Copyright (C) 2006-2017 Oracle Corporation
  *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 
diff --git a/src/VBox/GuestHost/HGSMI/HGSMIMemAlloc.cpp b/src/VBox/GuestHost/HGSMI/HGSMIMemAlloc.cpp
index 8c50c51..5208229 100644
--- a/src/VBox/GuestHost/HGSMI/HGSMIMemAlloc.cpp
+++ b/src/VBox/GuestHost/HGSMI/HGSMIMemAlloc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -561,10 +561,14 @@ void HGSMIMAUninit(HGSMIMADATA *pMA)
 {
     HGSMIMABLOCK *pIter;
     HGSMIMABLOCK *pNext;
-    RTListForEachSafe(&pMA->listBlocks, pIter, pNext, HGSMIMABLOCK, nodeBlock)
+    /* If it has been initialized. */
+    if (pMA->listBlocks.pNext)
     {
-        RTListNodeRemove(&pIter->nodeBlock);
-        hgsmiMABlockFree(pMA, pIter);
+        RTListForEachSafe(&pMA->listBlocks, pIter, pNext, HGSMIMABLOCK, nodeBlock)
+        {
+            RTListNodeRemove(&pIter->nodeBlock);
+            hgsmiMABlockFree(pMA, pIter);
+        }
     }
 
     RT_ZERO(*pMA);
diff --git a/src/VBox/GuestHost/OpenGL/.scm-settings b/src/VBox/GuestHost/OpenGL/.scm-settings
new file mode 100644
index 0000000..f780967
--- /dev/null
+++ b/src/VBox/GuestHost/OpenGL/.scm-settings
@@ -0,0 +1,49 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the OpenGL guest/host code.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# The basic config here is external copyright, however there are lots of exceptions
+/*.h:                                      --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/include/cr_blitter.h:                     --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_compositor.h:                  --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_dump.h:                        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_glext.h:                       --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_htable.h:                      --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_sortarray.h:                   --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/cr_vreg.h:                        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/state/cr_framebuffer.h:           --no-external-copyright --convert-tabs --strip-trailing-blanks
+/include/state/cr_glsl.h:                  --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_bits_globalop.h:      --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+
+/*.c:                                      --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/packer/pack_framebuffer.c:                --no-external-copyright --convert-tabs --strip-trailing-blanks
+/packer/pack_shaders.c:                    --no-external-copyright --convert-tabs --strip-trailing-blanks
+/packer/pack_visibleregion.c:              --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_framebuffer.c:        --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_glsl.c:               --no-external-copyright --convert-tabs --strip-trailing-blanks
+/state_tracker/state_snapshot.c:           --no-external-copyright --convert-tabs --strip-trailing-blanks
+/util/error.c:                             --no-external-copyright --convert-tabs --strip-trailing-blanks
+/util/vboxhgcm.c:                          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/util/vboxhgsmi.c:                         --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+/*.def:                                    --external-copyright
+/*.py:                                     --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+
+--filter-out-files *_special
+--filter-out-files /LICENSE
+--filter-out-files *.txt
+
diff --git a/src/VBox/GuestHost/OpenGL/error/VBoxOGLerrorspu.rc b/src/VBox/GuestHost/OpenGL/error/VBoxOGLerrorspu.rc
index 2424a90..b00cd8a 100644
--- a/src/VBox/GuestHost/OpenGL/error/VBoxOGLerrorspu.rc
+++ b/src/VBox/GuestHost/OpenGL/error/VBoxOGLerrorspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/error/errorspu.rc b/src/VBox/GuestHost/OpenGL/error/errorspu.rc
index b0af5df..ccef591 100644
--- a/src/VBox/GuestHost/OpenGL/error/errorspu.rc
+++ b/src/VBox/GuestHost/OpenGL/error/errorspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc b/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc
index b75bbc9..85911d8 100644
Binary files a/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc and b/src/VBox/GuestHost/OpenGL/glapi_parser/apiutil.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_blitter.h b/src/VBox/GuestHost/OpenGL/include/cr_blitter.h
index ffc4513..8b476d1 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_blitter.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_blitter.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_compositor.h b/src/VBox/GuestHost/OpenGL/include/cr_compositor.h
index d2a8fc1..e846440 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_compositor.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_compositor.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_dump.h b/src/VBox/GuestHost/OpenGL/include/cr_dump.h
index e08e043..bfd6f1f 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_dump.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_dump.h
@@ -4,7 +4,7 @@
  * Debugging: Dump API
  */
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_glext.h b/src/VBox/GuestHost/OpenGL/include/cr_glext.h
index 2a14f45..30a64b1 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_glext.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_glext.h
@@ -4,7 +4,7 @@
  * GL chromium platform specifics
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_htable.h b/src/VBox/GuestHost/OpenGL/include/cr_htable.h
index 1f9d72d..6090f7e 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_htable.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_htable.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_sortarray.h b/src/VBox/GuestHost/OpenGL/include/cr_sortarray.h
index 201d610..05c80a5 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_sortarray.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_sortarray.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_vreg.h b/src/VBox/GuestHost/OpenGL/include/cr_vreg.h
index 16556e9..5ff6a3d 100644
--- a/src/VBox/GuestHost/OpenGL/include/cr_vreg.h
+++ b/src/VBox/GuestHost/OpenGL/include/cr_vreg.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h b/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h
index 1b5e430..437bd20 100644
--- a/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h
+++ b/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h b/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h
index 4f18629..553c623 100644
--- a/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h
+++ b/src/VBox/GuestHost/OpenGL/include/state/cr_glsl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_client.c b/src/VBox/GuestHost/OpenGL/packer/pack_client.c
index 5a8789b..e924769 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_client.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_client.c
@@ -672,7 +672,7 @@ crPackDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indice
     packet_length += sizeof(GLint);
     if (elementsBuffer && elementsBuffer->id)
     {
-        /*@todo not sure it's possible, and not sure what to do*/
+        /** @todo not sure it's possible, and not sure what to do*/
         if (!elementsBuffer->data)
         {
             crWarning("crPackDrawElements: trying to use bound but empty elements buffer, ignoring.");
@@ -719,7 +719,7 @@ crPackDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count,
     packet_length += sizeof(GLint);
     if (elementsBuffer && elementsBuffer->id)
     {
-        /*@todo not sure it's possible, and not sure what to do*/
+        /** @todo not sure it's possible, and not sure what to do*/
         if (!elementsBuffer->data)
         {
             crWarning("crPackDrawElements: trying to use bound but empty elements buffer, ignoring.");
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc b/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc
index 8df514a..cb39901 100644
Binary files a/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc and b/src/VBox/GuestHost/OpenGL/packer/pack_currenttypes.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c b/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
index 40f2a76..bc7d7c7 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -20,7 +20,7 @@
 #include "cr_error.h"
 #include "cr_string.h"
 
-void PACK_APIENTRY 
+void PACK_APIENTRY
 crPackDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers)
 {
     unsigned char *data_ptr;
@@ -37,7 +37,7 @@ crPackDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers)
     crPackFree(data_ptr);
 }
 
-void PACK_APIENTRY 
+void PACK_APIENTRY
 crPackDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers)
 {
     unsigned char *data_ptr;
@@ -54,7 +54,7 @@ crPackDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers)
     crPackFree(data_ptr);
 }
 
-void PACK_APIENTRY 
+void PACK_APIENTRY
 crPackDeleteRenderbuffersEXTSWAP(GLsizei n, const GLuint * renderbuffers)
 {
     (void) n;
@@ -62,7 +62,7 @@ crPackDeleteRenderbuffersEXTSWAP(GLsizei n, const GLuint * renderbuffers)
     crError ("No swap version");
 }
 
-void PACK_APIENTRY 
+void PACK_APIENTRY
 crPackDeleteFramebuffersEXTSWAP(GLsizei n, const GLuint * framebuffers)
 {
     (void) n;
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c b/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
index d34bd32..3220695 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -55,7 +55,7 @@ void PACK_APIENTRY crPackShaderSource(GLuint shader, GLsizei count, const char *
         pLocalLength[i] = ((length && (length[i]>=0)) ? length[i] : crStrlen(string[i]))+1;
         packet_length += pLocalLength[i];
     }
-    
+
     if (length)
     {
         packet_length += count*sizeof(*length);
@@ -407,7 +407,7 @@ void PACK_APIENTRY crPackDrawBuffers(GLsizei n, const GLenum *bufs)
     CR_UNLOCK_PACKER_CONTEXT(pc);
 }
 
-/*@todo next 8 functions are bit hacky, 
+/** @todo next 8 functions are bit hacky,
  * we expect packspu to pass a single structure with all output parameters via first output pointer.
  * it'd be better to add CRMessageMultiReadback one day.
  */
@@ -473,35 +473,35 @@ void PACK_APIENTRY crPackGetAttachedShaders(GLuint program, GLsizei maxCount, GL
 
 void PACK_APIENTRY crPackGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj, int * writeback)
 {
-	CR_GET_PACKER_CONTEXT(pc);
-	unsigned char *data_ptr;
-	(void) pc; (void) obj;
-	CR_GET_BUFFERED_POINTER(pc, 32);
-	WRITE_DATA(0, GLint, 32);
-	WRITE_DATA(4, GLenum, CR_GETATTACHEDOBJECTSARB_EXTEND_OPCODE);
-	WRITE_DATA(8, VBoxGLhandleARB, containerObj);
-	WRITE_DATA(12, GLsizei, maxCount);
-	WRITE_NETWORK_POINTER(16, (void *) count);
-	WRITE_NETWORK_POINTER(24, (void *) writeback);
-	WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
-	CR_CMDBLOCK_CHECK_FLUSH(pc);
+        CR_GET_PACKER_CONTEXT(pc);
+        unsigned char *data_ptr;
+        (void) pc; (void) obj;
+        CR_GET_BUFFERED_POINTER(pc, 32);
+        WRITE_DATA(0, GLint, 32);
+        WRITE_DATA(4, GLenum, CR_GETATTACHEDOBJECTSARB_EXTEND_OPCODE);
+        WRITE_DATA(8, VBoxGLhandleARB, containerObj);
+        WRITE_DATA(12, GLsizei, maxCount);
+        WRITE_NETWORK_POINTER(16, (void *) count);
+        WRITE_NETWORK_POINTER(24, (void *) writeback);
+        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+        CR_CMDBLOCK_CHECK_FLUSH(pc);
     CR_UNLOCK_PACKER_CONTEXT(pc);
 }
 
 void PACK_APIENTRY crPackGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback)
 {
-	CR_GET_PACKER_CONTEXT(pc);
-	unsigned char *data_ptr;
-	(void) pc; (void) infoLog;
-	CR_GET_BUFFERED_POINTER(pc, 32);
-	WRITE_DATA(0, GLint, 32);
-	WRITE_DATA(4, GLenum, CR_GETINFOLOGARB_EXTEND_OPCODE);
-	WRITE_DATA(8, VBoxGLhandleARB, obj);
-	WRITE_DATA(12, GLsizei, maxLength);
-	WRITE_NETWORK_POINTER(16, (void *) length);
-	WRITE_NETWORK_POINTER(24, (void *) writeback);
-	WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
-	CR_CMDBLOCK_CHECK_FLUSH(pc);
+        CR_GET_PACKER_CONTEXT(pc);
+        unsigned char *data_ptr;
+        (void) pc; (void) infoLog;
+        CR_GET_BUFFERED_POINTER(pc, 32);
+        WRITE_DATA(0, GLint, 32);
+        WRITE_DATA(4, GLenum, CR_GETINFOLOGARB_EXTEND_OPCODE);
+        WRITE_DATA(8, VBoxGLhandleARB, obj);
+        WRITE_DATA(12, GLsizei, maxLength);
+        WRITE_NETWORK_POINTER(16, (void *) length);
+        WRITE_NETWORK_POINTER(24, (void *) writeback);
+        WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+        CR_CMDBLOCK_CHECK_FLUSH(pc);
     CR_UNLOCK_PACKER_CONTEXT(pc);
 }
 
@@ -561,7 +561,7 @@ void PACK_APIENTRY crPackGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei
 
 void PACK_APIENTRY crPackGetUniformsLocations(GLuint program, GLsizei maxcbData, GLsizei * cbData, GLvoid * pData, int * writeback)
 {
-	CR_GET_PACKER_CONTEXT(pc);
+        CR_GET_PACKER_CONTEXT(pc);
     unsigned char *data_ptr;
     (void) pData;
     CR_GET_BUFFERED_POINTER(pc, 32);
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c b/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
index 566d3fe..ec16247 100644
--- a/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
+++ b/src/VBox/GuestHost/OpenGL/packer/pack_visibleregion.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc b/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc
index 72fb67c..74422fc 100644
Binary files a/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc and b/src/VBox/GuestHost/OpenGL/state_tracker/convert.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp b/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp
index e5c4c41..e05ae81 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp
@@ -4,7 +4,7 @@
  * Blitter API implementation
  */
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py b/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py
index d33e946..dc7da7b 100755
--- a/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/get_components.py
@@ -139,4 +139,3 @@ print("""
 }
 """)
 
-
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc b/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc
index b259cdc..339b668 100644
Binary files a/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc and b/src/VBox/GuestHost/OpenGL/state_tracker/get_components.pyc differ
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_attrib.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_attrib.c
index 68cbdb6..a226a8d 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_attrib.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_attrib.c
@@ -55,7 +55,7 @@ void crStateAttribInit (CRAttribState *a)
     a->viewportStackDepth = 0;
 }
 
-/*@todo check if NV rect needed too*/
+/** @todo check if NV rect needed too*/
 static void
 copy_texunit(CRTextureUnit *dest, const CRTextureUnit *src)
 {
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_bits_globalop.h b/src/VBox/GuestHost/OpenGL/state_tracker/state_bits_globalop.h
index 5406129..b943979 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_bits_globalop.h
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_bits_globalop.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_bufferobject.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_bufferobject.c
index a659d64..373b24f 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_bufferobject.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_bufferobject.c
@@ -996,7 +996,7 @@ static void crStateBufferObjectSyncCB(unsigned long key, void *data1, void *data
 
     if (pBufferObj->data)
     {
-        /*@todo http://www.opengl.org/registry/specs/ARB/pixel_buffer_object.txt
+        /** @todo http://www.opengl.org/registry/specs/ARB/pixel_buffer_object.txt
           "While it is entirely legal to create a buffer object by binding
           it to GL_ARRAY_BUFFER and loading it with data, then using it
           with the GL_PIXEL_UNPACK_BUFFER_ARB or GL_PIXEL_PACK_BUFFER_ARB
@@ -1124,4 +1124,3 @@ void crStateBufferObjectSwitch(CRBufferObjectBits *bb, CRbitvalue *bitID,
     }
 }
 
-
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_fence.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_fence.c
index 038839b..054f1c4 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_fence.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_fence.c
@@ -48,4 +48,3 @@ void APIENTRY crStateGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
     (void)fence; (void)pname; (void)params;
 }
 
-
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
index 0b570eb..f26aed0 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -174,7 +174,7 @@ static void crStateCheckFBOAttachments(CRFramebufferObject *pFBO, GLuint rbo, GL
     CRFBOAttachmentPoint *ap;
     int u;
 
-    if (!pFBO) 
+    if (!pFBO)
         return;
 
     for (u=0; u<CR_MAX_COLOR_ATTACHMENTS; ++u)
@@ -393,7 +393,7 @@ crStateBindFramebufferEXT(GLenum target, GLuint framebuffer)
         CR_STATE_SHAREDOBJ_USAGE_SET(pFBO, g);
     }
 
-    /* @todo: http://www.opengl.org/registry/specs/ARB/framebuffer_object.txt 
+    /** @todo http://www.opengl.org/registry/specs/ARB/framebuffer_object.txt
      * FBO status might change when binding a different FBO here...but I doubt it happens.
      * So no status reset here until a proper check.
      */
@@ -478,7 +478,7 @@ crStateDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers)
     }
 }
 
-/*@todo: move this function somewhere else*/
+/** @todo move this function somewhere else*/
 /*return floor of base 2 log of x. log(0)==0*/
 static unsigned int crLog2Floor(unsigned int x)
 {
@@ -873,7 +873,7 @@ DECLEXPORT(void) STATE_APIENTRY
 crStateGenerateMipmapEXT(GLenum target)
 {
     (void)target;
-    /*@todo*/
+    /** @todo */
 }
 
 static void crStateSyncRenderbuffersCB(unsigned long key, void *data1, void *data2)
@@ -899,7 +899,7 @@ static void crStateSyncAP(CRFBOAttachmentPoint *pAP, GLenum ap, CRContext *ctx)
     {
         case GL_TEXTURE:
             CRASSERT(pAP->name!=0);
-            
+
             tobj = (CRTextureObj *) crHashtableSearch(ctx->shared->textureTable, pAP->name);
             if (tobj)
             {
@@ -986,8 +986,8 @@ crStateFramebufferObjectSwitch(CRContext *from, CRContext *to)
 
         diff_api.BindRenderbufferEXT(GL_RENDERBUFFER_EXT, to->framebufferobject.renderbuffer?
             to->framebufferobject.renderbuffer->hwid:0);
-    } 
-    else 
+    }
+    else
     {
         if (to->framebufferobject.drawFB!=from->framebufferobject.drawFB
             || to->framebufferobject.readFB!=from->framebufferobject.readFB)
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c
index 830b020..fd50247 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -138,7 +138,7 @@ static void crStateFakeDecRefCountCB(unsigned long key, void *data1, void *data2
     (void) key; (void)ctx;
 
     pRealShader = crStateGetShaderObj(pShader->id);
-    
+
     if (pRealShader)
     {
         crStateShaderDecRefCount(pRealShader);
@@ -187,7 +187,7 @@ DECLEXPORT(void) STATE_APIENTRY crStateGLSLDestroy(CRContext *ctx)
 {
     CRContext *g = GetCurrentContext();
 
-    /*@todo: hack to allow crStateFreeGLSLProgram to work correctly, 
+    /** @todo hack to allow crStateFreeGLSLProgram to work correctly,
       as the current context isn't the one being destroyed*/
 #ifdef CHROMIUM_THREADSAFE
     CRASSERT(g != ctx);
@@ -670,7 +670,7 @@ DECLEXPORT(void) STATE_APIENTRY crStateBindAttribLocation(GLuint program, GLuint
     }
     pAttribs[pProgram->currentState.cAttribs].index = index;
     pAttribs[pProgram->currentState.cAttribs].name = crStrdup(name);
-    
+
     pProgram->currentState.cAttribs++;
     if (pProgram->currentState.pAttribs) crFree(pProgram->currentState.pAttribs);
     pProgram->currentState.pAttribs = pAttribs;
@@ -826,10 +826,10 @@ DECLEXPORT(GLboolean) STATE_APIENTRY crStateIsProgramAttribsCached(GLuint progra
 #endif
 }
 
-/*@todo: one of those functions should ignore uniforms starting with "gl"*/
+/** @todo one of those functions should ignore uniforms starting with "gl"*/
 
 #ifdef IN_GUEST
-DECLEXPORT(void) STATE_APIENTRY 
+DECLEXPORT(void) STATE_APIENTRY
 crStateGLSLProgramCacheUniforms(GLuint program, GLsizei cbData, GLvoid *pData)
 {
     CRGLSLProgram *pProgram = crStateGetProgramObj(program);
@@ -980,7 +980,7 @@ crStateGLSLProgramCacheAttribs(GLuint program, GLsizei cbData, GLvoid *pData)
     CRASSERT(cbRead==cbData);
 }
 #else /* IN_GUEST */
-static GLboolean crStateGLSLProgramCacheOneUniform(GLuint location, GLsizei cbName, GLchar *pName, 
+static GLboolean crStateGLSLProgramCacheOneUniform(GLuint location, GLsizei cbName, GLchar *pName,
                                                    char **pCurrent, GLsizei *pcbWritten, GLsizei maxcbData)
 {
     *pcbWritten += sizeof(GLint)+sizeof(GLsizei)+cbName;
@@ -1003,7 +1003,7 @@ static GLboolean crStateGLSLProgramCacheOneUniform(GLuint location, GLsizei cbNa
     return GL_TRUE;
 }
 
-DECLEXPORT(void) STATE_APIENTRY 
+DECLEXPORT(void) STATE_APIENTRY
 crStateGLSLProgramCacheUniforms(GLuint program, GLsizei maxcbData, GLsizei *cbData, GLvoid *pData)
 {
     CRGLSLProgram *pProgram = crStateGetProgramObj(program);
@@ -1020,7 +1020,7 @@ crStateGLSLProgramCacheUniforms(GLuint program, GLsizei maxcbData, GLsizei *cbDa
     /*
      * OpenGL spec says about GL_ACTIVE_UNIFORM_MAX_LENGTH:
      * "If no active uniform variable exist, 0 is returned."
-     */ 
+     */
     diff_api.GetProgramiv(pProgram->hwid, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformLen);
     if (maxUniformLen > 0)
         diff_api.GetProgramiv(pProgram->hwid, GL_ACTIVE_UNIFORMS, &activeUniforms);
@@ -1076,7 +1076,7 @@ crStateGLSLProgramCacheUniforms(GLuint program, GLsizei maxcbData, GLsizei *cbDa
                 /*For array uniforms it's valid to query location of 1st element as both uniform and uniform[0].
                  *The name returned by glGetActiveUniform is driver dependent,
                  *atleast it's with [0] on win/ati and without [0] on linux/nvidia.
-                 */                
+                 */
                 if (!pIndexStr)
                 {
                     pIndexStr = name+cbName;
@@ -1363,7 +1363,7 @@ static void crStateAttachShaderCB(unsigned long key, void *data1, void *data2)
     CRGLSLShader *pShader = (CRGLSLShader*) data1;
     CRGLSLProgram *pProgram = (CRGLSLProgram *) data2;
     (void) key;
-    
+
     if (pShader->source)
     {
         diff_api.ShaderSource(pShader->hwid, 1, (const char**)&pShader->source, NULL);
@@ -1379,7 +1379,7 @@ static void crStateDetachShaderCB(unsigned long key, void *data1, void *data2)
     CRGLSLShader *pShader = (CRGLSLShader*) data1;
     CRGLSLProgram *pProgram = (CRGLSLProgram *) data2;
     (void) key;
-    
+
     diff_api.DetachShader(pProgram->hwid, pShader->hwid);
 }
 
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c
index db000b2..61e73a1 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c
@@ -435,7 +435,7 @@ crStateCreateContextId(int i, const CRLimitsState *limits, GLint visBits, CRCont
     return ctx;
 }
 
-/*@todo crStateAttribDestroy*/
+/** @todo crStateAttribDestroy*/
 static void
 crStateFreeContext(CRContext *ctx)
 {
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_polygon.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_polygon.c
index 282b24b..b00e8e8 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_polygon.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_polygon.c
@@ -185,7 +185,7 @@ void STATE_APIENTRY crStatePolygonStipple (const GLubyte *p)
         return;
     }
 
-    /*@todo track mask if buffer is bound?*/
+    /** @todo track mask if buffer is bound?*/
     if (!crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB))
     {
         crMemcpy((char*)poly->stipple, (char*)p, 128);
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_program.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_program.c
index e3bd4f0..05253ce 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_program.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_program.c
@@ -2305,7 +2305,7 @@ crStateProgramSwitch(CRProgramBits *b, CRbitvalue *bitID,
     }
 }
 
-/*@todo support NVprograms and add some data validity checks*/
+/** @todo support NVprograms and add some data validity checks*/
 static void
 DiffProgramCallback(unsigned long key, void *pProg, void *pCtx)
 {
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c
index 63fad73..80ebfb7 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -37,11 +37,11 @@
  * The drawback is we have to deal with all the pointers around those structures,
  * we'd have to update this code if we'd change state tracking.
  * On the bright side it's fast, though it's not really needed as it's not that often operation.
- * It could also worth to split those functions into appropriate parts, 
+ * It could also worth to split those functions into appropriate parts,
  * similar to the way context creation is being done.
  *
  * Second way would be to implement full dispatch api table and substitute diff_api during saving/loading.
- * Then if we implement that api in a similar way to packer/unpacker with a change to store/load 
+ * Then if we implement that api in a similar way to packer/unpacker with a change to store/load
  * via provided pSSM handle instead of pack buffer,
  * saving state could be done by simple diffing against empty "dummy" context.
  * Restoring state in such case would look like unpacking commands from pSSM instead of network buffer.
@@ -399,7 +399,7 @@ static int32_t crStateSaveTextureObjData(CRTextureObj *pTexture, PSSMHANDLE pSSM
 {
     int32_t rc, face, i;
     GLint bound = 0;
-    
+
     CRASSERT(pTexture && pSSM);
 
     crDebug("crStateSaveTextureObjData %u. START", pTexture->id);
@@ -418,7 +418,7 @@ static int32_t crStateSaveTextureObjData(CRTextureObj *pTexture, PSSMHANDLE pSSM
                 AssertRCReturn(rc, rc);
             }
 #ifdef CR_STATE_NO_TEXTURE_IMAGE_STORE
-            /* Note, this is not a bug. 
+            /* Note, this is not a bug.
              * Even with CR_STATE_NO_TEXTURE_IMAGE_STORE defined, it's possible that ptl->img!=NULL.
              * For ex. we're saving snapshot right after it was loaded
              * and some context hasn't been used by the guest application yet
@@ -514,7 +514,7 @@ static int32_t crStateSaveTextureObjData(CRTextureObj *pTexture, PSSMHANDLE pSSM
                     }
 #endif
 
-                    /*@todo: ugly workaround for crashes inside ati driver,
+                    /** @todo ugly workaround for crashes inside ati driver,
                      *       they overwrite their own allocated memory in cases where texlevel >=4
                              and width or height <=2.
                      */
@@ -558,7 +558,7 @@ static int32_t crStateSaveTextureObjData(CRTextureObj *pTexture, PSSMHANDLE pSSM
 static int32_t crStateLoadTextureObjData(CRTextureObj *pTexture, PSSMHANDLE pSSM)
 {
     int32_t rc, face, i;
-    
+
     CRASSERT(pTexture && pSSM);
 
     for (face = 0; face < 6; face++) {
@@ -622,7 +622,7 @@ static int32_t crStateSaveMatrixStack(CRMatrixStack *pStack, PSSMHANDLE pSSM)
 static int32_t crStateLoadMatrixStack(CRMatrixStack *pStack, PSSMHANDLE pSSM)
 {
     int32_t rc;
-    
+
     CRASSERT(pStack && pSSM);
 
     rc = SSMR3GetMem(pSSM, pStack->stack, sizeof(CRmatrix) * pStack->maxDepth);
@@ -1220,7 +1220,7 @@ static void crStateSaveGLSLProgramCB(unsigned long key, void *data1, void *data2
                 CRASSERT(rc == VINF_SUCCESS);
 
                 crStateSaveString(name, pSSM);
-            
+
                 if (crStateIsIntUniform(type))
                 {
                     diff_api.GetUniformiv(pProgram->hwid, location, &idata[0]);
@@ -1596,7 +1596,7 @@ int32_t crStateSaveContext(CRContext *pContext, PSSMHANDLE pSSM)
     AssertRCReturn(rc, rc);
 
     /* Save attrib stack*/
-    /*@todo could go up to used stack depth here?*/
+    /** @todo could go up to used stack depth here?*/
     for ( i = 0 ; i < CR_MAX_ATTRIB_STACK_DEPTH ; i++)
     {
         if (pContext->attrib.enableStack[i].clip)
@@ -2111,12 +2111,12 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
 # endif
 #endif /*CR_ARB_vertex_buffer_object*/
 
-    /*@todo CR_NV_vertex_program*/
+    /** @todo CR_NV_vertex_program*/
     crStateCopyEvalPtrs1D(pTmpContext->eval.eval1D, pContext->eval.eval1D);
     crStateCopyEvalPtrs2D(pTmpContext->eval.eval2D, pContext->eval.eval2D);
-    
-    SLC_COPYPTR(feedback.buffer);  /*@todo*/
-    SLC_COPYPTR(selection.buffer); /*@todo*/
+
+    SLC_COPYPTR(feedback.buffer);  /** @todo */
+    SLC_COPYPTR(selection.buffer); /** @todo */
 
     SLC_COPYPTR(lighting.light);
 
@@ -2124,7 +2124,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
     SLC_COPYPTR(limits.extensions);
 
 #if CR_ARB_occlusion_query
-    SLC_COPYPTR(occlusion.objects); /*@todo*/
+    SLC_COPYPTR(occlusion.objects); /** @todo */
 #endif
 
     SLC_COPYPTR(program.errorString);
@@ -2386,7 +2386,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
             pBufferObj->data = crAlloc(pBufferObj->size);
             rc = SSMR3GetMem(pSSM, pBufferObj->data, pBufferObj->size);
             AssertRCReturn(rc, rc);
-        } 
+        }
         else if (pBufferObj->id!=0 && pBufferObj->size>0)
         {
             rc = SSMR3GetMem(pSSM, &pBufferObj->data, sizeof(pBufferObj->data));
@@ -2402,7 +2402,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
 
 
         if (key!=0)
-            crHashtableAdd(pContext->shared->buffersTable, key, pBufferObj);        
+            crHashtableAdd(pContext->shared->buffersTable, key, pBufferObj);
     }
     /* Load pointers */
 #define CRS_GET_BO(name) (((name)==0) ? (pContext->bufferobject.nullBuffer) : crHashtableSearch(pContext->shared->buffersTable, name))
@@ -2457,7 +2457,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
         AssertRCReturn(rc, rc);
         crHashtableAdd(pContext->program.programHash, pProgram->id, pProgram);
         //DIRTY(pProgram->dirtyProgram, pContext->neg_bitid);
-        
+
     }
     /* Load Pointers */
     rc = SSMR3GetU32(pSSM, &ui);
@@ -2527,17 +2527,17 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
 
     rc = SSMR3GetU32(pSSM, &ui);
     AssertRCReturn(rc, rc);
-    pContext->framebufferobject.drawFB = ui==0 ? NULL 
+    pContext->framebufferobject.drawFB = ui==0 ? NULL
                                                : crHashtableSearch(pContext->shared->fbTable, ui);
 
     rc = SSMR3GetU32(pSSM, &ui);
     AssertRCReturn(rc, rc);
-    pContext->framebufferobject.readFB = ui==0 ? NULL 
+    pContext->framebufferobject.readFB = ui==0 ? NULL
                                                : crHashtableSearch(pContext->shared->fbTable, ui);
 
     rc = SSMR3GetU32(pSSM, &ui);
     AssertRCReturn(rc, rc);
-    pContext->framebufferobject.renderbuffer = ui==0 ? NULL 
+    pContext->framebufferobject.renderbuffer = ui==0 ? NULL
                                                      : crHashtableSearch(pContext->shared->rbTable, ui);
 
     /* Mark FBOs/RBOs for resending to GPU */
@@ -2590,7 +2590,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
             crHashtableAdd(pProgram->currentState.attachedShaders, key, crHashtableSearch(pContext->glsl.shaders, key));
         }
 
-        if (pProgram->activeState.attachedShaders)  
+        if (pProgram->activeState.attachedShaders)
         {
             pProgram->activeState.attachedShaders = crAllocHashtable();
 
@@ -2605,7 +2605,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
             }
         }
 
-        if (pProgram->currentState.cAttribs) 
+        if (pProgram->currentState.cAttribs)
             pProgram->currentState.pAttribs = (CRGLSLAttrib*) crAlloc(pProgram->currentState.cAttribs*sizeof(CRGLSLAttrib));
         for (k=0; k<pProgram->currentState.cAttribs; ++k)
         {
@@ -2614,7 +2614,7 @@ int32_t crStateLoadContext(CRContext *pContext, CRHashTable * pCtxTable, PFNCRST
             pProgram->currentState.pAttribs[k].name = crStateLoadString(pSSM);
         }
 
-        if (pProgram->activeState.cAttribs) 
+        if (pProgram->activeState.cAttribs)
             pProgram->activeState.pAttribs = (CRGLSLAttrib*) crAlloc(pProgram->activeState.cAttribs*sizeof(CRGLSLAttrib));
         for (k=0; k<pProgram->activeState.cAttribs; ++k)
         {
diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c
index 8c25772..5184feb 100644
--- a/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c
+++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c
@@ -3320,7 +3320,7 @@ crStatePrioritizeTextures(GLsizei n, const GLuint *textures,
         /* so far the code just ensures the tex object is created to make
          * the crserverlib code be able to pass it to host ogl */
 
-        /* TODO: store texture priorities in the state data to be able to restore it properly
+        /** @todo store texture priorities in the state data to be able to restore it properly
          * on save state load */
     }
 
@@ -3335,7 +3335,7 @@ crStateAreTexturesResident(GLsizei n, const GLuint *textures,
     UNUSED(n);
     UNUSED(textures);
     UNUSED(residences);
-    /* TODO: */
+    /** @todo */
     return GL_TRUE;
 }
 
diff --git a/src/VBox/GuestHost/OpenGL/util/VBoxOGLcrutil.rc b/src/VBox/GuestHost/OpenGL/util/VBoxOGLcrutil.rc
index b69e742..81fc2b0 100644
--- a/src/VBox/GuestHost/OpenGL/util/VBoxOGLcrutil.rc
+++ b/src/VBox/GuestHost/OpenGL/util/VBoxOGLcrutil.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/util/blitter.cpp b/src/VBox/GuestHost/OpenGL/util/blitter.cpp
index 1f9ff47..df9a31f 100644
--- a/src/VBox/GuestHost/OpenGL/util/blitter.cpp
+++ b/src/VBox/GuestHost/OpenGL/util/blitter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -16,9 +16,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #ifdef IN_VMSVGA3D
 # include <OpenGL/OpenGL.h>
 # include <OpenGL/gl3.h>
@@ -832,7 +832,7 @@ static int crBltInitOnMakeCurent(PCR_BLITTER pBlitter)
     else
         crWarning("GL_ARB_pixel_buffer_object not supported");
 
-    /* BlitFramebuffer seems to be buggy on Intel, 
+    /* BlitFramebuffer seems to be buggy on Intel,
      * try always glDrawXxx for now */
     if (!pBlitter->Flags.ForceDrawBlit && crStrstr(pszExtension, "GL_EXT_framebuffer_blit"))
     {
@@ -1000,7 +1000,7 @@ void CrBltBlitTexTex(PCR_BLITTER pBlitter, const VBOXVR_TEXTURE *pSrc, const RTR
 
     pBlitter->pDispatch->BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, pBlitter->idFBO);
 
-    /* TODO: mag/min filters ? */
+    /** @todo mag/min filters ? */
 
     pBlitter->pDispatch->FramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, pDst->target, pDst->hwid, 0);
 
@@ -1160,7 +1160,7 @@ VBOXBLITTERDECL(bool) CrGlslIsSupported(CR_GLSL_CACHE *pCache)
 
     crWarning("GLSL unsuported, gl version %d", pCache->iGlVersion);
 
-    /* @todo: we could also check for GL_ARB_shader_objects and GL_ARB_fragment_shader,
+    /** @todo we could also check for GL_ARB_shader_objects and GL_ARB_fragment_shader,
      * but seems like chromium does not support properly gl*Object versions of shader functions used with those extensions */
     return false;
 }
diff --git a/src/VBox/GuestHost/OpenGL/util/bmpscale.cpp b/src/VBox/GuestHost/OpenGL/util/bmpscale.cpp
index 6c8d8a8..7ceca58 100644
--- a/src/VBox/GuestHost/OpenGL/util/bmpscale.cpp
+++ b/src/VBox/GuestHost/OpenGL/util/bmpscale.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/util/compositor.cpp b/src/VBox/GuestHost/OpenGL/util/compositor.cpp
index 0ed308b..7f0b379 100644
--- a/src/VBox/GuestHost/OpenGL/util/compositor.cpp
+++ b/src/VBox/GuestHost/OpenGL/util/compositor.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,15 +15,16 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include "../include/cr_compositor.h"
 
 
-/*******************************************************************************
-*   Defined Constants And Macros                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
 #define VBOXVR_SCR_COMPOSITOR_RECTS_UNDEFINED UINT32_MAX
 #ifdef IN_VMSVGA3D
 # define WARN AssertMsgFailed
@@ -513,7 +514,7 @@ VBOXVREGDECL(int) CrVrScrCompositorEntryRegionsSet(PVBOXVR_SCR_COMPOSITOR pCompo
                                                    PCRTPOINT pPos, uint32_t cRegions, PCRTRECT paRegions,
                                                    bool fPosRelated, bool *pfChanged)
 {
-    /* @todo: the fChanged sate calculation is really rough now, this is enough for now though */
+    /** @todo the fChanged sate calculation is really rough now, this is enough for now though */
     bool fChanged = false, fPosChanged = false;
     bool fWasInList = CrVrScrCompositorEntryIsInList(pEntry);
     RTRECT *paTranslatedRects = NULL;
diff --git a/src/VBox/GuestHost/OpenGL/util/error.c b/src/VBox/GuestHost/OpenGL/util/error.c
index 8371695..ca981ed 100644
--- a/src/VBox/GuestHost/OpenGL/util/error.c
+++ b/src/VBox/GuestHost/OpenGL/util/error.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/util/htable.cpp b/src/VBox/GuestHost/OpenGL/util/htable.cpp
index 9e67910..fbfa2f6 100644
--- a/src/VBox/GuestHost/OpenGL/util/htable.cpp
+++ b/src/VBox/GuestHost/OpenGL/util/htable.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/util/net.c b/src/VBox/GuestHost/OpenGL/util/net.c
index e36be1d..1069e83 100644
--- a/src/VBox/GuestHost/OpenGL/util/net.c
+++ b/src/VBox/GuestHost/OpenGL/util/net.c
@@ -440,7 +440,7 @@ void crNetInit( CRNetReceiveFunc recvFunc, CRNetCloseFunc closeFunc )
     else
     {
 #ifdef WINDOWS
-        /* @todo: do we actually need that WSA stuff with VBox at all? */
+        /** @todo do we actually need that WSA stuff with VBox at all? */
         WORD wVersionRequested = MAKEWORD(2, 0);
         WSADATA wsaData;
         int err;
diff --git a/src/VBox/GuestHost/OpenGL/util/pixel.c b/src/VBox/GuestHost/OpenGL/util/pixel.c
index eb6f503..cfa2739 100644
--- a/src/VBox/GuestHost/OpenGL/util/pixel.c
+++ b/src/VBox/GuestHost/OpenGL/util/pixel.c
@@ -1692,7 +1692,7 @@ void crPixelCopy3D( GLsizei width, GLsizei height, GLsizei depth,
     (void)srcFormat;
     (void)dstPacking;
 
-    /*@todo this should be implemented properly*/
+    /** @todo this should be implemented properly*/
 
 #ifndef DEBUG_misha
     crWarning( "crPixelCopy3D:  simply crMemcpy'ing from srcPtr to dstPtr" );
diff --git a/src/VBox/GuestHost/OpenGL/util/sortarray.cpp b/src/VBox/GuestHost/OpenGL/util/sortarray.cpp
index 794bca3..f18e724 100644
--- a/src/VBox/GuestHost/OpenGL/util/sortarray.cpp
+++ b/src/VBox/GuestHost/OpenGL/util/sortarray.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/util/util.rc b/src/VBox/GuestHost/OpenGL/util/util.rc
index 4fe0eee..a6eecc2 100644
--- a/src/VBox/GuestHost/OpenGL/util/util.rc
+++ b/src/VBox/GuestHost/OpenGL/util/util.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c
index 0500197..a4087a0 100644
--- a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c
+++ b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -45,7 +45,7 @@
 #include <VBoxCrHgsmi.h>
 #endif
 
-/*@todo move define somewhere else, and make sure it's less than VBGLR0_MAX_HGCM_KERNEL_PARM*/
+/** @todo move define somewhere else, and make sure it's less than VBGLR0_MAX_HGCM_KERNEL_PARM*/
 /*If we fail to pass data in one chunk, send it in chunks of this size instead*/
 #define CR_HGCM_SPLIT_BUFFER_SIZE (8*_1M)
 
@@ -544,7 +544,7 @@ static bool _crVBoxHGCMReadBytes(CRConnection *conn, void *buf, uint32_t len)
 #endif
 
 #ifndef IN_GUEST
-/*@todo get rid of it*/
+/** @todo get rid of it*/
 static bool _crVBoxHGCMWriteBytes(CRConnection *conn, const void *buf, uint32_t len)
 {
     CRASSERT(conn && buf);
@@ -592,7 +592,7 @@ static int crVBoxHGCMCall(CRConnection *conn, PVBGLIOCHGCMCALL pData, unsigned c
         rc = VBoxCrHgsmiCtlConCall(pClient->pHgsmi, pData, cbData);
     else
 # endif
-    {        
+    {
         rc = VbglR3HGCMCall(pData, cbData);
         if (RT_SUCCESS(rc))
         { /* likely */ }
@@ -915,7 +915,7 @@ static void crVBoxHGCMSend(CRConnection *conn, void **bufp,
     if (!bufp) /* We're sending a user-allocated buffer. */
     {
 #ifndef IN_GUEST
-            /**@todo remove temp buffer allocation in unpacker*/
+            /** @todo remove temp buffer allocation in unpacker*/
             /* we're at the host side, so just store data until guest polls us */
             _crVBoxHGCMWriteBytes(conn, start, len);
 #else
@@ -1022,7 +1022,7 @@ static void _crVBoxHGCMFree(CRConnection *conn, void *buf)
 
     CRASSERT(hgcm_buffer->magic == CR_VBOXHGCM_BUFFER_MAGIC);
 
-    /*@todo wrong len for redir buffers*/
+    /** @todo wrong len for redir buffers*/
     conn->recv_credits += hgcm_buffer->len;
 
     switch (hgcm_buffer->kind)
@@ -1032,7 +1032,7 @@ static void _crVBoxHGCMFree(CRConnection *conn, void *buf)
             crLockMutex(&g_crvboxhgcm.mutex);
 #endif
             if (g_crvboxhgcm.bufpool) {
-                /**@todo o'rly? */
+                /** @todo o'rly? */
                 /* pool may have been deallocated just a bit earlier in response
                  * to a SIGPIPE (Broken Pipe) signal.
                  */
@@ -1375,7 +1375,7 @@ static bool _crVBoxCommonDoDisconnectLocked( CRConnection *conn )
     return false;
 }
 
-/*@todo same, replace DeviceIoControl with vbglR3DoIOCtl */
+/** @todo same, replace DeviceIoControl with vbglR3DoIOCtl */
 static void crVBoxHGCMDoDisconnect( CRConnection *conn )
 {
     bool fHasActiveCons = false;
@@ -2188,7 +2188,7 @@ void crVBoxHGCMInit(CRNetReceiveFuncList *rfl, CRNetCloseFuncList *cfl, unsigned
     g_crvboxhgcm.conns     = NULL;
 
     /* Can't open VBox guest driver here, because it gets called for host side as well */
-    /*@todo as we have 2 dll versions, can do it now.*/
+    /** @todo as we have 2 dll versions, can do it now.*/
 
 #ifdef RT_OS_WINDOWS
     g_crvboxhgcm.pDirectDraw = NULL;
diff --git a/src/VBox/GuestHost/OpenGL/util/vboxhgsmi.c b/src/VBox/GuestHost/OpenGL/util/vboxhgsmi.c
index 339190c..a1f99d6 100644
--- a/src/VBox/GuestHost/OpenGL/util/vboxhgsmi.c
+++ b/src/VBox/GuestHost/OpenGL/util/vboxhgsmi.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -617,7 +617,7 @@ static void _crVBoxHGSMIWriteExact(CRConnection *conn, PCRVBOXHGSMI_CLIENT pClie
         if (RT_SUCCESS(rc))
         {
             _crVBoxHGSMIWaitCmd(pClient);
-                /* @todo: do we need to wait for completion actually?
+                /** @todo do we need to wait for completion actually?
                  * NOTE: in case we do not need completion,
                  * we MUST specify bDoNotSignalCompletion flag for the command buffer */
 //                CRVBOXHGSMI_BUF_WAIT(pClient->pCmdBuffer);
@@ -651,7 +651,7 @@ static void _crVBoxHGSMIWriteExact(CRConnection *conn, PCRVBOXHGSMI_CLIENT pClie
         if (RT_SUCCESS(rc))
         {
             _crVBoxHGSMIWaitCmd(pClient);
-                /* @todo: do we need to wait for completion actually?
+                /** @todo do we need to wait for completion actually?
                  * NOTE: in case we do not need completion,
                  * we MUST specify bDoNotSignalCompletion flag for the command buffer */
 //                CRVBOXHGSMI_BUF_WAIT(pClient->pCmdBuffer);
@@ -923,7 +923,7 @@ static void crVBoxHGSMISend(CRConnection *conn, void **bufp,
     {
         pClient = _crVBoxHGSMIClientGet();
 #ifndef IN_GUEST
-            //@todo remove temp buffer allocation in unpacker
+            /// @todo remove temp buffer allocation in unpacker
             /* we're at the host side, so just store data until guest polls us */
             _crVBoxHGCMWriteBytes(conn, start, len);
 #else
@@ -1009,7 +1009,7 @@ static void _crVBoxHGSMIFree(CRConnection *conn, void *buf)
     }
     else
     {
-        /*@todo wrong len for redir buffers*/
+        /** @todo wrong len for redir buffers*/
         conn->recv_credits += hgsmi_buffer->u32Len;
 
 #ifdef CHROMIUM_THREADSAFE
@@ -1244,7 +1244,7 @@ static int crVBoxHGSMIDoConnect( CRConnection *conn )
 #endif
 }
 
-/*@todo same, replace DeviceIoControl with vbglR3DoIOCtl */
+/** @todo same, replace DeviceIoControl with vbglR3DoIOCtl */
 static void crVBoxHGSMIDoDisconnect( CRConnection *conn )
 {
     VBOXCRHGSMIPROFILE_FUNC_PROLOGUE();
@@ -1260,7 +1260,7 @@ static void crVBoxHGSMIDoDisconnect( CRConnection *conn )
     conn->pBuffer = NULL;
     conn->cbBuffer = 0;
 
-    //@todo hold lock here?
+    /// @todo hold lock here?
     if (conn->type == CR_VBOXHGCM)
     {
         --g_crvboxhgsmi.num_conns;
@@ -1347,7 +1347,7 @@ static DECLCALLBACK(void) _crVBoxHGSMIClientDestroy(HVBOXCRHGSMI_CLIENT hClient)
 {
     Assert(0);
 
-    /* @todo */
+    /** @todo */
 }
 
 
@@ -1394,7 +1394,7 @@ bool crVBoxHGSMIInit(CRNetReceiveFuncList *rfl, CRNetCloseFuncList *cfl, unsigne
     g_crvboxhgsmi.mempool = crBufferPoolInit(16);
 
     /* Can't open VBox guest driver here, because it gets called for host side as well */
-    /*@todo as we have 2 dll versions, can do it now.*/
+    /** @todo as we have 2 dll versions, can do it now.*/
 
 #ifdef RT_OS_WINDOWS
     g_crvboxhgsmi.hGuestDrv = INVALID_HANDLE_VALUE;
@@ -1482,7 +1482,7 @@ void crVBoxHGSMIConnection(CRConnection *conn)
     conn->cbBuffer = 0;
     conn->allow_redir_ptr = 1;
 
-    //@todo remove this crap at all later
+    /// @todo remove this crap at all later
     conn->cbHostBufferAllocated = 0;//2*1024;
     conn->pHostBuffer = NULL;//(uint8_t*) crAlloc(conn->cbHostBufferAllocated);
 //    CRASSERT(conn->pHostBuffer);
diff --git a/src/VBox/GuestHost/OpenGL/util/vreg.cpp b/src/VBox/GuestHost/OpenGL/util/vreg.cpp
index 72f87e8..9cc55a0 100644
--- a/src/VBox/GuestHost/OpenGL/util/vreg.cpp
+++ b/src/VBox/GuestHost/OpenGL/util/vreg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,9 +15,10 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #ifdef IN_VMSVGA3D
 # include "../include/cr_vreg.h"
 # define WARN AssertMsgFailed
@@ -98,15 +99,15 @@ DECLINLINE(int) vboxVrLaCreate(LOOKASIDE_LIST_EX *pCache, size_t cbElement)
 #endif /* IN_RING0 */
 
 
-/*******************************************************************************
-*   Defined Constants And Macros                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
 #define VBOXVR_INVALID_COORD    (~0U)
 
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 static volatile int32_t g_cVBoxVrInits = 0;
 
 
@@ -811,7 +812,7 @@ static int vboxVrListIntersectNoJoin(PVBOXVR_LIST pList, PCVBOXVR_LIST pList2, b
                     /*just to ensure the VBoxRectCovers is true for equal rects */
                     Assert(VBoxRectCmp(pRect2, &RegRect1));
 
-                    /* @todo: this can have false-alarming sometimes if the separated rects will then be joind into the original rect,
+                    /** @todo this can have false-alarming sometimes if the separated rects will then be joind into the original rect,
                      * so far this should not be a problem for VReg clients, so keep it this way for now  */
                     fChanged = true;
 
@@ -960,7 +961,7 @@ VBOXVREGDECL(int) VBoxVrListRectsSet(PVBOXVR_LIST pList, uint32_t cRects, PCRTRE
     if (!cRects && VBoxVrListIsEmpty(pList))
         return VINF_SUCCESS;
 
-    /* @todo: fChanged will have false alarming here, fix if needed */
+    /** @todo fChanged will have false alarming here, fix if needed */
     VBoxVrListClear(pList);
 
     int rc = VBoxVrListRectsAdd(pList, cRects, aRects, NULL);
diff --git a/src/VBox/GuestHost/SharedClipboard/clipboard-helper.cpp b/src/VBox/GuestHost/SharedClipboard/clipboard-helper.cpp
index fbf9121..575f2da 100644
--- a/src/VBox/GuestHost/SharedClipboard/clipboard-helper.cpp
+++ b/src/VBox/GuestHost/SharedClipboard/clipboard-helper.cpp
@@ -6,7 +6,7 @@
 /*
  * Includes contributions from François Revol
  *
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp b/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp
index 98c89da..09a4f85 100644
--- a/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp
+++ b/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -48,11 +48,19 @@
 #include <iprt/thread.h>
 
 #include <VBox/log.h>
+#include <VBox/version.h>
 
 #include <VBox/GuestHost/SharedClipboard.h>
 #include <VBox/GuestHost/clipboard-helper.h>
 #include <VBox/HostServices/VBoxClipboardSvc.h>
 
+/* The serialisation mechanism looks like it is not needed (everything using it
+ * runs on one thread, and the flag is always cleared at the end of calls which
+ * use it).  So we will remove it after the 5.2 series. */
+#if (VBOX_VERSION_MAJOR * 100000 + VBOX_VERSION_MINOR * 1000 + VBOX_VERION_BUILD >= 502051)
+# define VBOX_AFTER_5_2
+#endif
+
 class formats;
 static Atom clipGetAtom(CLIPBACKEND *pCtx, const char *pszName);
 
@@ -214,12 +222,14 @@ struct _CLIPBACKEND
     void (*fixesSelectInput)(Display *, Window, Atom, unsigned long);
     /** The first XFixes event number */
     int fixesEventBase;
+#ifndef VBOX_AFTER_5_2
     /** The Xt Intrinsics can only handle one outstanding clipboard operation
      * at a time, so we keep track of whether one is in process. */
     bool fBusy;
     /** We can't handle a clipboard update event while we are busy, so remember
      * it for later. */
     bool fUpdateNeeded;
+#endif
 };
 
 /** The number of simultaneous instances we support.  For all normal purposes
@@ -529,6 +539,7 @@ static void clipUpdateX11Targets(CLIPBACKEND *pCtx, CLIPX11FORMAT *pTargets,
                                  size_t cTargets)
 {
     LogRel2 (("%s: called\n", __FUNCTION__));
+#ifndef VBOX_AFTER_5_2
     pCtx->fBusy = false;
     if (pCtx->fUpdateNeeded)
     {
@@ -537,6 +548,7 @@ static void clipUpdateX11Targets(CLIPBACKEND *pCtx, CLIPX11FORMAT *pTargets,
         clipQueryX11CBFormats(pCtx);
         return;
     }
+#endif
     if (pTargets == NULL) {
         /* No data available */
         clipReportEmptyX11CB(pCtx);
@@ -619,12 +631,14 @@ static void clipQueryX11CBFormats(CLIPBACKEND *pCtx)
 {
     LogRel2 (("%s: requesting the targets that the X11 clipboard offers\n",
            __PRETTY_FUNCTION__));
+#ifndef VBOX_AFTER_5_2
     if (pCtx->fBusy)
     {
         pCtx->fUpdateNeeded = true;
         return;
     }
     pCtx->fBusy = true;
+#endif
 #ifndef TESTCASE
     XtGetSelectionValue(pCtx->widget,
                         clipGetAtom(pCtx, "CLIPBOARD"),
@@ -919,16 +933,12 @@ CLIPBACKEND *ClipConstructX11(VBOXCLIPBOARDCONTEXT *pFrontend, bool fHeadless)
  */
 void ClipDestructX11(CLIPBACKEND *pCtx)
 {
-    /*
-     * Immediately return if we are not connected to the X server.
-     */
-    if (!pCtx->fHaveX11)
-        return;
-
-    /* We set this to NULL when the event thread exits.  It really should
-     * have exited at this point, when we are about to unload the code from
-     * memory. */
-    Assert(pCtx->widget == NULL);
+    if (pCtx->fHaveX11)
+        /* We set this to NULL when the event thread exits.  It really should
+         * have exited at this point, when we are about to unload the code from
+         * memory. */
+        Assert(pCtx->widget == NULL);
+    RTMemFree(pCtx);
 }
 
 /**
@@ -1739,13 +1749,17 @@ static void clipConvertX11CB(void *pClientData, void *pvSrc, unsigned cbSrc)
     AssertPtr(pReq->mCtx);
     Assert(pReq->mFormat != 0);  /* sanity */
     int rc = VINF_SUCCESS;
+#ifndef VBOX_AFTER_5_2
     CLIPBACKEND *pCtx = pReq->mCtx;
+#endif
     void *pvDest = NULL;
     uint32_t cbDest = 0;
 
+#ifndef VBOX_AFTER_5_2
     pCtx->fBusy = false;
     if (pCtx->fUpdateNeeded)
         clipQueryX11CBFormats(pCtx);
+#endif
     if (pvSrc == NULL)
         /* The clipboard selection may have changed before we could get it. */
         rc = VERR_NO_DATA;
@@ -1914,12 +1928,15 @@ static void vboxClipboardReadX11Worker(void *pUserData,
     LogRelFlowFunc (("pReq->mFormat = %02X\n", pReq->mFormat));
 
     int rc = VINF_SUCCESS;
+#ifndef VBOX_AFTER_5_2
     bool fBusy = pCtx->fBusy;
     pCtx->fBusy = true;
     if (fBusy)
         /* If the clipboard is busy just fend off the request. */
         rc = VERR_TRY_AGAIN;
-    else if (pReq->mFormat == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT)
+    else
+#endif
+    if (pReq->mFormat == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT)
     {
         /*
          * VBox wants to read data in the given format.
@@ -1958,7 +1975,12 @@ static void vboxClipboardReadX11Worker(void *pUserData,
             getSelectionValue(pCtx, pCtx->X11HTMLFormat, pReq);
     }
     else
+    {
         rc = VERR_NOT_IMPLEMENTED;
+#ifndef VBOX_AFTER_5_2
+        pCtx->fBusy = false;
+#endif
+    }
     if (RT_FAILURE(rc))
     {
         /* The clipboard callback was never scheduled, so we must signal
@@ -2185,6 +2207,8 @@ void testRequestData(CLIPBACKEND *pCtx, CLIPX11FORMAT target, void *closure)
         format = 0;
     }
     clipConvertX11CB(closure, pValue, count * format / 8);
+    if (pValue)
+        RTMemFree(pValue);
 }
 
 /* The formats currently on offer from X11 via the shared clipboard */
@@ -2344,7 +2368,8 @@ void ClipCompleteDataRequestFromX11(VBOXCLIPBOARDCONTEXT *pCtx, int rc, CLIPREAD
     if (cb <= MAX_BUF_SIZE)
     {
         g_completedRC = rc;
-        memcpy(g_completedBuf, pv, cb);
+        if (cb != 0)
+            memcpy(g_completedBuf, pv, cb);
     }
     else
         g_completedRC = VERR_BUFFER_OVERFLOW;
@@ -2552,6 +2577,32 @@ static void testNoSelectionOwnership(CLIPBACKEND *pCtx, const char *pcszTestCtx)
     RTTESTI_CHECK_MSG(!g_ownsSel, ("context: %s\n", pcszTestCtx));
 }
 
+static void testBadFormatRequestFromHost(RTTEST hTest, CLIPBACKEND *pCtx)
+{
+    clipSetSelectionValues("UTF8_STRING", XA_STRING, "hello world",
+                           sizeof("hello world"), 8);
+    clipSendTargetUpdate(pCtx);
+    if (clipQueryFormats() != VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT)
+        RTTestFailed(hTest, "Wrong targets reported: %02X\n",
+                     clipQueryFormats());
+    else
+    {
+        char *pc;
+        CLIPREADCBREQ *pReq = (CLIPREADCBREQ *)&pReq, *pReqRet = NULL;
+        ClipRequestDataFromX11(pCtx, 100, pReq);  /* Bad format. */
+        int rc = VINF_SUCCESS;
+        uint32_t cbActual = 0;
+        clipGetCompletedRequest(&rc, &pc, &cbActual, &pReqRet);
+        if (rc != VERR_NOT_IMPLEMENTED)
+            RTTestFailed(hTest, "Wrong return code, expected VERR_NOT_IMPLEMENTED, got %Rrc\n",
+                         rc);
+        clipSetSelectionValues("", XA_STRING, "", sizeof(""), 8);
+        clipSendTargetUpdate(pCtx);
+        if (clipQueryFormats() == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT)
+            RTTestFailed(hTest, "Failed to report targets after bad host request.\n");
+    }
+}
+
 int main()
 {
     /*
@@ -2755,6 +2806,11 @@ int main()
     RTTEST_CHECK_MSG(hTest, g_ownsSel,
                      (hTest, "VBox grabbed the clipboard with unknown data and we ignored it\n"));
     testStringFromVBoxFailed(hTest, pCtx, "UTF8_STRING");
+
+    /*** VBox requests a bad format ***/
+    RTTestSub(hTest, "recovery from a bad format request");
+    testBadFormatRequestFromHost(hTest, pCtx);
+
     rc = ClipStopX11(pCtx);
     AssertRCReturn(rc, 1);
     ClipDestructX11(pCtx);
diff --git a/src/VBox/HostDrivers/.scm-settings b/src/VBox/HostDrivers/.scm-settings
new file mode 100644
index 0000000..9311c59
--- /dev/null
+++ b/src/VBox/HostDrivers/.scm-settings
@@ -0,0 +1,60 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the host installers.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+# Driver code is dual licensed.
+--license-ose-dual
+
+/adpctl/*: --license-ose-gpl
+
+# External stuff.
+/Support/freebsd/SUPDrv-freebsd.c:              --external-copyright
+/Support/freebsd/SUPDrv-freebsd.def:            --no-update-copyright-year --no-update-license
+/Support/os2/SUPDrv-os2.cpp:                    --external-copyright
+/Support/os2/SUPDrvA-os2.asm:                   --external-copyright
+/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c:       --external-copyright
+/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c:       --external-copyright
+--filter-out-files /VBoxUSB/solaris/include/usbai_private.h
+
+# No license header (public domain).
+/VBoxUSB/os2/usbcalls.c:                        --external-copyright
+/VBoxUSB/os2/usbcalls.h:                        --external-copyright --no-convert-tabs
+
+# Trivial dual C and assembly include files which cannot have comments.
+/Support/win/import-template-kernel32.h: --no-update-copyright-year --no-update-license
+/Support/win/import-template-ntdll.h:    --no-update-copyright-year --no-update-license
+
+# Ignore binary files
+--filter-out-files /Support/win/Certificates/*.taf
+--filter-out-files /Support/win/Certificates/*.cer
+
+# Misc
+/linux/build_in_tmp: --treat-as .sh
+/*/solaris/*.conf: --treat-as .sh
+--filter-out-files /VBoxNetAdp/solaris/hostname.vboxnet0
+--filter-out-files /VBoxNetFlt/win/nobj/VBoxNetFltNobj.rgs
+/VBoxNetFlt/win/nobj/VBoxNetFltNobjT.idl: --treat-as .h
+/Support/solaris/mod.sh: --no-convert-tabs
+/Support/linux/SUPDrv-linux.mod.c: --no-convert-tabs
diff --git a/src/VBox/HostDrivers/Makefile.kmk b/src/VBox/HostDrivers/Makefile.kmk
index 43664f0..8886637 100644
--- a/src/VBox/HostDrivers/Makefile.kmk
+++ b/src/VBox/HostDrivers/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../..
 include $(KBUILD_PATH)/subheader.kmk
@@ -66,26 +75,12 @@ if   defined(VBOX_WITH_TESTCASES) \
  && !defined(VBOX_WITHOUT_LINUX_TEST_BUILDS) \
  && "$(KBUILD_TARGET)" == "linux" \
  && "$(KBUILD_HOST_ARCH)" == "$(KBUILD_TARGET_ARCH)"
- VBOX_LNX_MOD_TEST        = $(PATH_TARGET)/tsthost_mod
- VBOX_LNX_MOD_TEST_TARGET = $(PATH_TARGET)/tsthost_mod.run
- TESTING     += $(VBOX_LNX_MOD_TEST_TARGET)
- OTHERS      += $(VBOX_LNX_MOD_TEST_TARGET)
- OTHER_CLEAN += $(VBOX_LNX_MOD_TEST_TARGET)
- $$(VBOX_LNX_MOD_TEST_TARGET): \
- 		$$(vboxdrv-mod_2_STAGE_TARGETS) \
- 		$$(VBoxNetFlt-src_2_STAGE_TARGETS) \
- 		$$(VBoxNetAdp-src_2_STAGE_TARGETS) \
- 		$$(VBoxPci-src_2_STAGE_TARGETS) \
-		$$(HostDrivers-scripts_2_STAGE_TARGETS)
-	$(QUIET)$(call MSG_L1,Doing a test build of the host kernel modules)
-	$(QUIET)$(RM) -f -- "$@"
-	$(QUIET)$(RM) -Rf -- "$(VBOX_LNX_MOD_TEST)"
-	$(QUIET)$(MKDIR) -p -- "$(VBOX_LNX_MOD_TEST)"
-	$(QUIET)$(CP) -R -- "$(PATH_STAGE_BIN)/src/" "$(VBOX_LNX_MOD_TEST)/"
-	+ $(QUIET)make -C $(VBOX_LNX_MOD_TEST) clean
-	+ $(QUIET)make -C $(VBOX_LNX_MOD_TEST)
-	$(QUIET)$(RM) -Rf -- $(VBOX_LNX_MOD_TEST)
-	$(QUIET)$(APPEND) -t "$@" "done"
+
+ ifneq ($(KERN_DIR),)
+  $(foreach module, vboxdrv-src $(if $(VBOX_WITH_NETFLT),VBoxNetFlt-src) \
+   $(if $(VBOX_WITH_NETADP),VBoxNetAdp-src) $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBoxPci-src), \
+   $(eval $(VBOX_LINUX_GENERATE_KMOD_TEST)))
+ endif
 
 endif
 
diff --git a/src/VBox/HostDrivers/Support/Makefile.kmk b/src/VBox/HostDrivers/Support/Makefile.kmk
index db9b397..deadc6a 100644
--- a/src/VBox/HostDrivers/Support/Makefile.kmk
+++ b/src/VBox/HostDrivers/Support/Makefile.kmk
@@ -57,8 +57,8 @@ if  !defined(VBOX_ONLY_DOCS) \
   LIBRARIES       += SUPR0IdcClient
   SYSMODS.os2     += VBoxDrv
  endif
- INSTALLS.linux   += vboxdrv-mod
- INSTALLS.freebsd += vboxdrv-mod
+ INSTALLS.linux   += vboxdrv-src
+ INSTALLS.freebsd += vboxdrv-src
 
  #
  # Include sub-makefile(s).
@@ -725,19 +725,19 @@ if1of ($(KBUILD_TARGET), linux freebsd)
  #
  # Targets for installing the linux sources.
  #
- vboxdrv-mod_INST    = bin/src/vboxdrv/
- vboxdrv-mod_SOURCES = \
+ vboxdrv-src_INST    = bin/src/vboxdrv/
+ vboxdrv-src_SOURCES = \
  	$(subst $(DQUOTE),,$(FILES_VBOXDRV_NOBIN)) \
- 	$(vboxdrv-mod_0_OUTDIR)/Makefile
- vboxdrv-mod_EXEC_SOURCES  = \
+ 	$(vboxdrv-src_0_OUTDIR)/Makefile
+ vboxdrv-src_EXEC_SOURCES  = \
  	$(subst $(DQUOTE),,$(FILES_VBOXDRV_BIN))
- vboxdrv-mod_CLEAN   = \
- 	$(vboxdrv-mod_0_OUTDIR)/Makefile \
- 	$(PATH_TARGET)/vboxdrv-mod-1.dep \
+ vboxdrv-src_CLEAN   = \
+ 	$(vboxdrv-src_0_OUTDIR)/Makefile \
+ 	$(PATH_TARGET)/vboxdrv-src-1.dep \
 
  # Scripts needed for building the kernel modules
- includedep $(PATH_TARGET)/vboxdrv-mod-1.dep
- $$(vboxdrv-mod_0_OUTDIR)/Makefile: \
+ includedep $(PATH_TARGET)/vboxdrv-src-1.dep
+ $$(vboxdrv-src_0_OUTDIR)/Makefile: \
 		$(PATH_SUB_CURRENT)/$(KBUILD_TARGET)/Makefile \
 		$$(if $$(eq $$(Support/$(KBUILD_TARGET)/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \
 		| $$(dir $$@)
@@ -747,7 +747,7 @@ if1of ($(KBUILD_TARGET), linux freebsd)
 		$(if-expr ($(VBOX_VERSION_BUILD) % 2) == 0 \
 		 , -e "s;-DVBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV;;g" -e "s;-DIPRT_WITH_EFLAGS_AC_PRESERVING;;g",) \
 		--output $@ $<
-	%$(QUIET2)$(APPEND) -t '$(PATH_TARGET)/vboxdrv-mod-1.dep' \
+	%$(QUIET2)$(APPEND) -t '$(PATH_TARGET)/vboxdrv-src-1.dep' \
 		'Support/$(KBUILD_TARGET)/Makefile_VBOX_HARDENED=$(VBOX_WITH_HARDENING)'
 endif # linux freebsd
 
diff --git a/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp b/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
index f46805b..bf8a8f2 100644
--- a/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrv.cpp b/src/VBox/HostDrivers/Support/SUPDrv.cpp
index 051c2c9..036998c 100644
--- a/src/VBox/HostDrivers/Support/SUPDrv.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrv.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -2389,14 +2389,14 @@ static int supdrvIOCtlInnerUnrestricted(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt,
             /* validate */
             PSUPUCODEREV pReq = (PSUPUCODEREV)pReqHdr;
             REQ_CHECK_SIZES(SUP_IOCTL_UCODE_REV);
-    
+
             /* execute */
             pReq->Hdr.rc = SUPR0QueryUcodeRev(pSession, &pReq->u.Out.MicrocodeRev);
             if (RT_FAILURE(pReq->Hdr.rc))
                 pReq->Hdr.cbOut = sizeof(pReq->Hdr);
             return 0;
         }
-    
+
         default:
             Log(("Unknown IOCTL %#lx\n", (long)uIOCtl));
             break;
@@ -4421,7 +4421,7 @@ int VBOXCALL supdrvQueryUcodeRev(uint32_t *puRevision)
                     *puRevision = RT_HIDWORD(uRevMsr);
                     rc = VINF_SUCCESS;
                 }
-            } 
+            }
             else if (ASMIsAmdCpuEx(uVendorEBX, uVendorECX, uVendorEDX))
             {
                 /* Not well documented, but at least all AMD64 CPUs support this. */
diff --git a/src/VBox/HostDrivers/Support/SUPDrv.d b/src/VBox/HostDrivers/Support/SUPDrv.d
index eff80be..d055e2b 100644
--- a/src/VBox/HostDrivers/Support/SUPDrv.d
+++ b/src/VBox/HostDrivers/Support/SUPDrv.d
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2015 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
@@ -30,4 +39,3 @@ provider vboxdrv
 #pragma D attributes Evolving/Evolving/Common provider vboxdrv name
 #pragma D attributes Evolving/Evolving/Common provider vboxdrv args
 
-
diff --git a/src/VBox/HostDrivers/Support/SUPDrvGip.cpp b/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
index 6b3e73e..17d05f4 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvIDC.h b/src/VBox/HostDrivers/Support/SUPDrvIDC.h
index 8015f8d..5662b05 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvIDC.h
+++ b/src/VBox/HostDrivers/Support/SUPDrvIDC.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvIOC.h b/src/VBox/HostDrivers/Support/SUPDrvIOC.h
index d3ca225..07e73dc 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvIOC.h
+++ b/src/VBox/HostDrivers/Support/SUPDrvIOC.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvInternal.h b/src/VBox/HostDrivers/Support/SUPDrvInternal.h
index 15af8c4..7dc4b88 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPDrvInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvSem.cpp b/src/VBox/HostDrivers/Support/SUPDrvSem.cpp
index ff705c3..709bd6d 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvSem.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrvSem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp b/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
index 3a86579..1737d8c 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvTracerA.asm b/src/VBox/HostDrivers/Support/SUPDrvTracerA.asm
index ed0b029..13e05aa 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvTracerA.asm
+++ b/src/VBox/HostDrivers/Support/SUPDrvTracerA.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPLib.cpp b/src/VBox/HostDrivers/Support/SUPLib.cpp
index e2b162d..1377122 100644
--- a/src/VBox/HostDrivers/Support/SUPLib.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLib.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPLibAll.cpp b/src/VBox/HostDrivers/Support/SUPLibAll.cpp
index 5db323a..7aa174c 100644
--- a/src/VBox/HostDrivers/Support/SUPLibAll.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLibAll.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPLibInternal.h b/src/VBox/HostDrivers/Support/SUPLibInternal.h
index 4d446f5..82a43f4 100644
--- a/src/VBox/HostDrivers/Support/SUPLibInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPLibInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
index d7fe770..47f7d8e 100644
--- a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPLibSem.cpp b/src/VBox/HostDrivers/Support/SUPLibSem.cpp
index 8cb1a39..660c382 100644
--- a/src/VBox/HostDrivers/Support/SUPLibSem.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLibSem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPLibTracerA.asm b/src/VBox/HostDrivers/Support/SUPLibTracerA.asm
index 2ebb3cd..739c091 100644
--- a/src/VBox/HostDrivers/Support/SUPLibTracerA.asm
+++ b/src/VBox/HostDrivers/Support/SUPLibTracerA.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -220,4 +220,3 @@ EXPORTEDNAME SUPTracerFireProbe
         ret
 ENDPROC SUPTracerFireProbe
 
-
diff --git a/src/VBox/HostDrivers/Support/SUPR0-def-lx.sed b/src/VBox/HostDrivers/Support/SUPR0-def-lx.sed
index 8343427..2b7edd7 100644
--- a/src/VBox/HostDrivers/Support/SUPR0-def-lx.sed
+++ b/src/VBox/HostDrivers/Support/SUPR0-def-lx.sed
@@ -3,7 +3,8 @@
 # IPRT - SED script for generating SUPR0.def - OS/2 LX.
 #
 
-# Copyright (C) 2012-2015 Oracle Corporation
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed b/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed
index 765b494..fc20c3e 100644
--- a/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed
+++ b/src/VBox/HostDrivers/Support/SUPR0-def-pe.sed
@@ -3,7 +3,8 @@
 # IPRT - SED script for generating SUPR0.def
 #
 
-# Copyright (C) 2012-2015 Oracle Corporation
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR0IdcClient.c b/src/VBox/HostDrivers/Support/SUPR0IdcClient.c
index 644ded9..3b45d32 100644
--- a/src/VBox/HostDrivers/Support/SUPR0IdcClient.c
+++ b/src/VBox/HostDrivers/Support/SUPR0IdcClient.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR0IdcClientComponent.c b/src/VBox/HostDrivers/Support/SUPR0IdcClientComponent.c
index 7790b5c..940a24a 100644
--- a/src/VBox/HostDrivers/Support/SUPR0IdcClientComponent.c
+++ b/src/VBox/HostDrivers/Support/SUPR0IdcClientComponent.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR0IdcClientInternal.h b/src/VBox/HostDrivers/Support/SUPR0IdcClientInternal.h
index 73a66eb..54c796b 100644
--- a/src/VBox/HostDrivers/Support/SUPR0IdcClientInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPR0IdcClientInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c b/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c
index ded4528..a707f8b 100644
--- a/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c
+++ b/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedIPRT.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedIPRT.cpp
index 1598788..cf1f37d 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedIPRT.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedIPRT.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
index 894ff5d..968eb46 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -598,6 +598,7 @@ static const SUPARGPURGEDESC g_aSupArgPurgeDescs[] =
     { RT_STR_TUPLE("-platformpluginpath"),          true },
 };
 
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplate.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
index 15b6aa5..7ed029d 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplate.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplateTestcase.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplateTestcase.cpp
index 4064401..b6fa59d 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplateTestcase.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMainTemplateTestcase.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp
index 035de44..551247a 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedNoCrt.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
index 6f7db86..4c0b84b 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedVerify.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPSvc.cpp b/src/VBox/HostDrivers/Support/SUPSvc.cpp
index c50288b..28c6d8b 100644
--- a/src/VBox/HostDrivers/Support/SUPSvc.cpp
+++ b/src/VBox/HostDrivers/Support/SUPSvc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPSvcGlobal.cpp b/src/VBox/HostDrivers/Support/SUPSvcGlobal.cpp
index 624ad5a..ebc0ef1 100644
--- a/src/VBox/HostDrivers/Support/SUPSvcGlobal.cpp
+++ b/src/VBox/HostDrivers/Support/SUPSvcGlobal.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPSvcGrant.cpp b/src/VBox/HostDrivers/Support/SUPSvcGrant.cpp
index 7c64353..c33ddf5 100644
--- a/src/VBox/HostDrivers/Support/SUPSvcGrant.cpp
+++ b/src/VBox/HostDrivers/Support/SUPSvcGrant.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/SUPSvcInternal.h b/src/VBox/HostDrivers/Support/SUPSvcInternal.h
index 51e7ee9..cc62fdf 100644
--- a/src/VBox/HostDrivers/Support/SUPSvcInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPSvcInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp b/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
index fce17df..7859826 100644
--- a/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
+++ b/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/darwin/SUPLib-darwin.cpp b/src/VBox/HostDrivers/Support/darwin/SUPLib-darwin.cpp
index d6d3e9e..893cbf1 100644
--- a/src/VBox/HostDrivers/Support/darwin/SUPLib-darwin.cpp
+++ b/src/VBox/HostDrivers/Support/darwin/SUPLib-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/darwin/SUPR0IdcClient-darwin.c b/src/VBox/HostDrivers/Support/darwin/SUPR0IdcClient-darwin.c
index 53299c8..52b18d4 100644
--- a/src/VBox/HostDrivers/Support/darwin/SUPR0IdcClient-darwin.c
+++ b/src/VBox/HostDrivers/Support/darwin/SUPR0IdcClient-darwin.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/darwin/load.sh b/src/VBox/HostDrivers/Support/darwin/load.sh
index c0162e2..a8d0a4d 100755
--- a/src/VBox/HostDrivers/Support/darwin/load.sh
+++ b/src/VBox/HostDrivers/Support/darwin/load.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/darwin/sys/dtrace_glue.h b/src/VBox/HostDrivers/Support/darwin/sys/dtrace_glue.h
index 0895d70..bfd2ad7 100644
--- a/src/VBox/HostDrivers/Support/darwin/sys/dtrace_glue.h
+++ b/src/VBox/HostDrivers/Support/darwin/sys/dtrace_glue.h
@@ -1,8 +1,32 @@
+/* $Id: dtrace_glue.h $ */
+/** @file
+ * VirtualBox Support Driver - Darwin, mock-up of missing sys/dtrace-glue.h.
+ */
+
 /*
- * Mock-up of missing sys/dtrace-glue.h.
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
+
 #define _KERNEL
 typedef struct solaris_cred cred_t;
 typedef struct solaris_kthread kthread_t;
 typedef struct solaris_x86_saved_state x86_saved_state_t;
 typedef unsigned int model_t;
+
diff --git a/src/VBox/HostDrivers/Support/freebsd/Makefile b/src/VBox/HostDrivers/Support/freebsd/Makefile
index 5a7aa2d..c81fbc7 100644
--- a/src/VBox/HostDrivers/Support/freebsd/Makefile
+++ b/src/VBox/HostDrivers/Support/freebsd/Makefile
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -58,7 +58,8 @@ SRCS += \
 .PATH:	${.CURDIR}/common/err
 SRCS += \
 	RTErrConvertFromErrno.c \
-	RTErrConvertToErrno.c
+	RTErrConvertToErrno.c \
+	errinfo.c
 
 .PATH:	${.CURDIR}/common/log
 SRCS += \
@@ -87,6 +88,7 @@ SRCS += \
 
 .PATH:	${.CURDIR}/common/string
 SRCS += \
+	RTStrCat.c \
 	RTStrNCmp.c \
 	RTStrNLen.c \
 	RTStrCopy.c \
diff --git a/src/VBox/HostDrivers/Support/freebsd/SUPLib-freebsd.cpp b/src/VBox/HostDrivers/Support/freebsd/SUPLib-freebsd.cpp
index b32d5b0..efdef33 100644
--- a/src/VBox/HostDrivers/Support/freebsd/SUPLib-freebsd.cpp
+++ b/src/VBox/HostDrivers/Support/freebsd/SUPLib-freebsd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/freebsd/SUPR0IdcClient-freebsd.c b/src/VBox/HostDrivers/Support/freebsd/SUPR0IdcClient-freebsd.c
index e9ee2bc..5bdff69 100644
--- a/src/VBox/HostDrivers/Support/freebsd/SUPR0IdcClient-freebsd.c
+++ b/src/VBox/HostDrivers/Support/freebsd/SUPR0IdcClient-freebsd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv b/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
index 69623c4..2fd914d 100755
--- a/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
+++ b/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxdrv $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -100,6 +100,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/alloc/alloc.cpp=>alloc/alloc.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp=>common/err/RTErrConvertFromErrno.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertToErrno.cpp=>common/err/RTErrConvertToErrno.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/err/errinfo.cpp=>common/err/errinfo.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/log.cpp=>common/log/log.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logellipsis.cpp=>common/log/logellipsis.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logrel.cpp=>common/log/logrel.c \
@@ -120,6 +121,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/once.cpp=>common/misc/once.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/term.cpp=>common/misc/term.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/thread.cpp=>common/misc/thread.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCat.cpp=>common/string/RTStrCat.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyP.cpp=>common/string/RTStrCopyP.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopy.cpp=>common/string/RTStrCopy.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyEx.cpp=>common/string/RTStrCopyEx.c \
diff --git a/src/VBox/HostDrivers/Support/linux/Makefile b/src/VBox/HostDrivers/Support/linux/Makefile
index d199047..68c190f 100644
--- a/src/VBox/HostDrivers/Support/linux/Makefile
+++ b/src/VBox/HostDrivers/Support/linux/Makefile
@@ -4,7 +4,6 @@
 #
 
 #
-#
 # Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -69,6 +68,7 @@ MOD_OBJS = \
 	common/checksum/ipv6.o \
 	common/err/RTErrConvertFromErrno.o \
 	common/err/RTErrConvertToErrno.o \
+	common/err/errinfo.o \
 	common/log/log.o \
 	common/log/logellipsis.o \
 	common/log/logrel.o \
@@ -86,6 +86,7 @@ MOD_OBJS = \
 	common/misc/handletable.o \
 	common/misc/handletablectx.o \
 	common/misc/thread.o \
+	common/string/RTStrCat.o \
 	common/string/RTStrCopy.o \
 	common/string/RTStrCopyEx.o \
 	common/string/RTStrCopyP.o \
diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
index fecdba9..e4fbfbe 100644
--- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
+++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
@@ -1,10 +1,10 @@
-/* $Rev: 115809 $ */
+/* $Rev: 118839 $ */
 /** @file
  * VBoxDrv - The VirtualBox Support Driver - Linux specifics.
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.mod.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.mod.c
index 43e53aa..2c73478 100644
--- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.mod.c
+++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.mod.c
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/linux/SUPLib-linux.cpp b/src/VBox/HostDrivers/Support/linux/SUPLib-linux.cpp
index d05b37a..b85ab22 100644
--- a/src/VBox/HostDrivers/Support/linux/SUPLib-linux.cpp
+++ b/src/VBox/HostDrivers/Support/linux/SUPLib-linux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/linux/SUPR0IdcClient-linux.c b/src/VBox/HostDrivers/Support/linux/SUPR0IdcClient-linux.c
index e35c553..1a82230 100644
--- a/src/VBox/HostDrivers/Support/linux/SUPR0IdcClient-linux.c
+++ b/src/VBox/HostDrivers/Support/linux/SUPR0IdcClient-linux.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/linux/files_vboxdrv b/src/VBox/HostDrivers/Support/linux/files_vboxdrv
index c767b92..ccd8b2b 100755
--- a/src/VBox/HostDrivers/Support/linux/files_vboxdrv
+++ b/src/VBox/HostDrivers/Support/linux/files_vboxdrv
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxdrv $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -101,6 +101,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/checksum/ipv6.cpp=>common/checksum/ipv6.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp=>common/err/RTErrConvertFromErrno.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/err/RTErrConvertToErrno.cpp=>common/err/RTErrConvertToErrno.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/err/errinfo.cpp=>common/err/errinfo.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/log.cpp=>common/log/log.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logellipsis.cpp=>common/log/logellipsis.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/log/logrel.cpp=>common/log/logrel.c \
@@ -126,6 +127,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/handletable.h=>common/misc/handletable.h \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/handletablectx.cpp=>common/misc/handletablectx.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/misc/thread.cpp=>common/misc/thread.c \
+    ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCat.cpp=>common/string/RTStrCat.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopy.cpp=>common/string/RTStrCopy.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyEx.cpp=>common/string/RTStrCopyEx.c \
     ${PATH_ROOT}/src/VBox/Runtime/common/string/RTStrCopyP.cpp=>common/string/RTStrCopyP.c \
diff --git a/src/VBox/HostDrivers/Support/os2/SUPDrv-os2.def b/src/VBox/HostDrivers/Support/os2/SUPDrv-os2.def
index e454e67..0c10ecf 100644
--- a/src/VBox/HostDrivers/Support/os2/SUPDrv-os2.def
+++ b/src/VBox/HostDrivers/Support/os2/SUPDrv-os2.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2007-2016 Oracle Corporation
+; Copyright (C) 2007-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/os2/SUPDrvA-os2.asm b/src/VBox/HostDrivers/Support/os2/SUPDrvA-os2.asm
index 5992ecd..b27fcd0 100644
--- a/src/VBox/HostDrivers/Support/os2/SUPDrvA-os2.asm
+++ b/src/VBox/HostDrivers/Support/os2/SUPDrvA-os2.asm
@@ -971,4 +971,3 @@ segment DATA32
 g_pfnDos16Write:
     dd  DOS16WRITE  ; flat
 
-
diff --git a/src/VBox/HostDrivers/Support/os2/SUPLib-os2.cpp b/src/VBox/HostDrivers/Support/os2/SUPLib-os2.cpp
index 8dcfd9e..f4c005b 100644
--- a/src/VBox/HostDrivers/Support/os2/SUPLib-os2.cpp
+++ b/src/VBox/HostDrivers/Support/os2/SUPLib-os2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/os2/SUPR0IdcClient-os2.c b/src/VBox/HostDrivers/Support/os2/SUPR0IdcClient-os2.c
index e7b913a..c4362ca 100644
--- a/src/VBox/HostDrivers/Support/os2/SUPR0IdcClient-os2.c
+++ b/src/VBox/HostDrivers/Support/os2/SUPR0IdcClient-os2.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c b/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c
index 3c04f56..75a9bbf 100644
--- a/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c
+++ b/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp b/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp
index a2174f4..e5804d6 100644
--- a/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp
+++ b/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/solaris/SUPR0IdcClient-solaris.c b/src/VBox/HostDrivers/Support/solaris/SUPR0IdcClient-solaris.c
index a17b1ad..7ead5a7 100644
--- a/src/VBox/HostDrivers/Support/solaris/SUPR0IdcClient-solaris.c
+++ b/src/VBox/HostDrivers/Support/solaris/SUPR0IdcClient-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/solaris/load.sh b/src/VBox/HostDrivers/Support/solaris/load.sh
index 0872ab4..5a8bd9d 100755
--- a/src/VBox/HostDrivers/Support/solaris/load.sh
+++ b/src/VBox/HostDrivers/Support/solaris/load.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf b/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf
index 1a0f70d..3692c6b 100644
--- a/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf
+++ b/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/SUPInstall.cpp b/src/VBox/HostDrivers/Support/testcase/SUPInstall.cpp
index 688246f..c5ed19d 100644
--- a/src/VBox/HostDrivers/Support/testcase/SUPInstall.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/SUPInstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/SUPLoggerCtl.cpp b/src/VBox/HostDrivers/Support/testcase/SUPLoggerCtl.cpp
index 08dd4ce..7f4a92e 100644
--- a/src/VBox/HostDrivers/Support/testcase/SUPLoggerCtl.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/SUPLoggerCtl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/SUPUninstall.cpp b/src/VBox/HostDrivers/Support/testcase/SUPUninstall.cpp
index 7f78735..5841cb0 100644
--- a/src/VBox/HostDrivers/Support/testcase/SUPUninstall.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/SUPUninstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstContiguous.cpp b/src/VBox/HostDrivers/Support/testcase/tstContiguous.cpp
index aaacca6..c4ead9e 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstContiguous.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstContiguous.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp b/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp
index d4fb5f5..18a0102 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstGIP-2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstGetPagingMode.cpp b/src/VBox/HostDrivers/Support/testcase/tstGetPagingMode.cpp
index f94b120..540e1fb 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstGetPagingMode.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstGetPagingMode.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstInit.cpp b/src/VBox/HostDrivers/Support/testcase/tstInit.cpp
index 5567636..473888d 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstInit.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstInit.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstInt.cpp b/src/VBox/HostDrivers/Support/testcase/tstInt.cpp
index 3ec5020..9d7dd3c 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstInt.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstInt.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstLow.cpp b/src/VBox/HostDrivers/Support/testcase/tstLow.cpp
index 38bbe7a..505b054 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstLow.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstLow.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstNtQueryStuff.cpp b/src/VBox/HostDrivers/Support/testcase/tstNtQueryStuff.cpp
index 53a45e5..afbd4a5 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstNtQueryStuff.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstNtQueryStuff.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstPage.cpp b/src/VBox/HostDrivers/Support/testcase/tstPage.cpp
index 43f9864..e8ad6b6 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstPage.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstPage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstPin.cpp b/src/VBox/HostDrivers/Support/testcase/tstPin.cpp
index e44b51f..8c02866 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstPin.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstPin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstSupLoadModule.cpp b/src/VBox/HostDrivers/Support/testcase/tstSupLoadModule.cpp
index e6b77dd..e8f1e85 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstSupLoadModule.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstSupLoadModule.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -105,7 +105,7 @@ int main(int argc, char **argv)
                 return 1;
 
             case 'V':
-                RTPrintf("$Revision: 109048 $\n");
+                RTPrintf("$Revision: 118839 $\n");
                 return 0;
 
             default:
diff --git a/src/VBox/HostDrivers/Support/testcase/tstSupSem-Zombie.cpp b/src/VBox/HostDrivers/Support/testcase/tstSupSem-Zombie.cpp
index 8f15192..5e57331 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstSupSem-Zombie.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstSupSem-Zombie.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp b/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
index 202cd51..b3a20af 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstSupSem.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstSupTscDelta.cpp b/src/VBox/HostDrivers/Support/testcase/tstSupTscDelta.cpp
index 524844d..d2f088a 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstSupTscDelta.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstSupTscDelta.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/testcase/tstSupVerify.cpp b/src/VBox/HostDrivers/Support/testcase/tstSupVerify.cpp
index 17cfcb8..1d6c97d 100644
--- a/src/VBox/HostDrivers/Support/testcase/tstSupVerify.cpp
+++ b/src/VBox/HostDrivers/Support/testcase/tstSupVerify.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -87,7 +87,7 @@ int main(int argc, char **argv)
                 return 1;
 
             case 'V':
-                RTPrintf("$Revision: 109250 $\n");
+                RTPrintf("$Revision: 118839 $\n");
                 return 0;
 
             default:
diff --git a/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp b/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
index 9b73b1a..12cf7d0 100644
--- a/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPDrvA-win.asm b/src/VBox/HostDrivers/Support/win/SUPDrvA-win.asm
index ed272d6..4db80f4 100644
--- a/src/VBox/HostDrivers/Support/win/SUPDrvA-win.asm
+++ b/src/VBox/HostDrivers/Support/win/SUPDrvA-win.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h b/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h
index db17ad0..08308b7 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerify-win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
index aa4f8f6..5094254 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
index dd8d3f2..b749a36 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1088,7 +1088,7 @@ DECLHIDDEN(int) supHardNtVpThread(HANDLE hProcess, HANDLE hThread, PRTERRINFO pE
         return supHardNtVpSetInfo1(pErrInfo, VERR_SUP_VP_THREAD_NOT_ALONE,
                                    "More than one thread in process");
 
-    /** @todo Would be nice to verify the relation ship between hProcess and hThread
+    /** @todo Would be nice to verify the relationship between hProcess and hThread
      *        as well... */
     return VINF_SUCCESS;
 }
diff --git a/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp b/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp
index 4889ba4..fe0fd58 100644
--- a/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPR0IdcClient-win.c b/src/VBox/HostDrivers/Support/win/SUPR0IdcClient-win.c
index 4dda79c..b08bbd7 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR0IdcClient-win.c
+++ b/src/VBox/HostDrivers/Support/win/SUPR0IdcClient-win.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
index 8e08a24..a3d82f1 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainA-win.asm b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainA-win.asm
index bb7dea4..a1c3ef3 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainA-win.asm
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainA-win.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2012-2016 Oracle Corporation
+; Copyright (C) 2012-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
index 93b02ea..650c1a4 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedNoCrt-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedNoCrt-win.cpp
index da0a0fc..11c8a45 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedNoCrt-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedNoCrt-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/SUPSvc-win.cpp b/src/VBox/HostDrivers/Support/win/SUPSvc-win.cpp
index 4ac2e75..11c5669 100644
--- a/src/VBox/HostDrivers/Support/win/SUPSvc-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPSvc-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/VBoxDrv.inf b/src/VBox/HostDrivers/Support/win/VBoxDrv.inf
index a279ca0..fbd6a03 100644
--- a/src/VBox/HostDrivers/Support/win/VBoxDrv.inf
+++ b/src/VBox/HostDrivers/Support/win/VBoxDrv.inf
@@ -1,70 +1,70 @@
-; $Id: VBoxDrv.inf $
-;; @file
-; VirtualBox Support Driver - Windows Driver INF file.
-;
-
-;
-; Copyright (C) 2006-2016 Oracle Corporation
-;
-; This file is part of VirtualBox Open Source Edition (OSE), as
-; available from http://www.virtualbox.org. This file is free software;
-; you can redistribute it and/or modify it under the terms of the GNU
-; General Public License (GPL) as published by the Free Software
-; Foundation, in version 2 as it comes in the "COPYING" file of the
-; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-;
-; The contents of this file may alternatively be used under the terms
-; of the Common Development and Distribution License Version 1.0
-; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-; VirtualBox OSE distribution, in which case the provisions of the
-; CDDL are applicable instead of those of the GPL.
-;
-; You may elect to license modified versions of this file under the
-; terms and conditions of either the GPL or the CDDL or both.
-;
-
-[Version]
-Signature="$Windows NT$"
-Class=System
-ClassGuid={ce4a90b5-1d8c-435d-b349-232ce55cb17f}
-Provider=%ORACLE%
-;edit-DriverVer=08/26/2008,2.00.0000
-DriverPackageType=KernelService
-;cat CatalogFile=VBoxDrv.cat
-
-[DestinationDirs]
-DefaultDestDir = 12
-
-[DefaultInstall]
-CopyFiles=VBoxDrv.CopyFiles
-
-[DefaultInstall.Services]
-AddService=VBoxDrv,0x00000002,VBoxDrv_Service
-
-[Manufacturer]
-;x86 %ORACLE%=ORACLE
-;amd64 %ORACLE%=ORACLE, NTamd64
-
-[SourceDisksFiles]
-VBoxDrv.sys=1
-
-[SourceDisksNames]
-1=%DISK_NAME%,
-
-[VBoxDrv.CopyFiles]
-VBoxDrv.sys
-
-[VBoxDrv_Service]
-DisplayName    = %VBoxDrv.SVCDESC%
-ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
-;StartType      = 3                  ; SERVICE_DEMAND_START
-StartType      = 1                  ; autostart to fix Vista problem
-ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
-ServiceBinary  = %12%\VBoxDrv.sys
-
-[Strings]
-ORACLE = "Oracle Corporation"
-VBoxDrv.SVCDESC = "VirtualBox Service"
-VBoxDrv.DRVDESC = "VirtualBox Driver"
-DISK_NAME = "VirtualBox Driver Installation Disk"
+; $Id: VBoxDrv.inf $
+;; @file
+; VirtualBox Support Driver - Windows Driver INF file.
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
+
+[Version]
+Signature="$Windows NT$"
+Class=System
+ClassGuid={ce4a90b5-1d8c-435d-b349-232ce55cb17f}
+Provider=%ORACLE%
+;edit-DriverVer=08/26/2008,2.00.0000
+DriverPackageType=KernelService
+;cat CatalogFile=VBoxDrv.cat
+
+[DestinationDirs]
+DefaultDestDir = 12
+
+[DefaultInstall]
+CopyFiles=VBoxDrv.CopyFiles
+
+[DefaultInstall.Services]
+AddService=VBoxDrv,0x00000002,VBoxDrv_Service
+
+[Manufacturer]
+;x86 %ORACLE%=ORACLE
+;amd64 %ORACLE%=ORACLE, NTamd64
+
+[SourceDisksFiles]
+VBoxDrv.sys=1
+
+[SourceDisksNames]
+1=%DISK_NAME%,
+
+[VBoxDrv.CopyFiles]
+VBoxDrv.sys
+
+[VBoxDrv_Service]
+DisplayName    = %VBoxDrv.SVCDESC%
+ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
+;StartType      = 3                  ; SERVICE_DEMAND_START
+StartType      = 1                  ; autostart to fix Vista problem
+ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
+ServiceBinary  = %12%\VBoxDrv.sys
+
+[Strings]
+ORACLE = "Oracle Corporation"
+VBoxDrv.SVCDESC = "VirtualBox Service"
+VBoxDrv.DRVDESC = "VirtualBox Driver"
+DISK_NAME = "VirtualBox Driver Installation Disk"
diff --git a/src/VBox/HostDrivers/Support/win/VBoxDrv.rc b/src/VBox/HostDrivers/Support/win/VBoxDrv.rc
index 9cb9f90..8dd9e7d 100644
--- a/src/VBox/HostDrivers/Support/win/VBoxDrv.rc
+++ b/src/VBox/HostDrivers/Support/win/VBoxDrv.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/VBoxSupLib-win.cpp b/src/VBox/HostDrivers/Support/win/VBoxSupLib-win.cpp
index a0527f8..e288d4f 100644
--- a/src/VBox/HostDrivers/Support/win/VBoxSupLib-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/VBoxSupLib-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/Support/win/VBoxSupLib.rc b/src/VBox/HostDrivers/Support/win/VBoxSupLib.rc
index e5b7aef..8d63b67 100644
--- a/src/VBox/HostDrivers/Support/win/VBoxSupLib.rc
+++ b/src/VBox/HostDrivers/Support/win/VBoxSupLib.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk b/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk
index 0436ccf..315d784 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxNetAdp/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c
index f2d7252..4753b3d 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c
+++ b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /** @page pg_netadp     VBoxNetAdp - Network Adapter
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h
index 547b32d..b501696 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h
+++ b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxNetAdpInternal_h___
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp b/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
index 33324f3..996ebfb 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/darwin/loadnetadp.sh b/src/VBox/HostDrivers/VBoxNetAdp/darwin/loadnetadp.sh
index 257795e..b3cda6f 100755
--- a/src/VBox/HostDrivers/VBoxNetAdp/darwin/loadnetadp.sh
+++ b/src/VBox/HostDrivers/VBoxNetAdp/darwin/loadnetadp.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SCRIPT_NAME="loadnetadp"
 XNU_VERSION=`LC_ALL=C uname -r | LC_ALL=C cut -d . -f 1`
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile
index 4a1cd69..f8d4652 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile
+++ b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile
@@ -4,8 +4,7 @@
 #
 
 #
-#
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 KMOD = vboxnetadp
 
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp
index 8e2b082..20a7219 100755
--- a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxnetadp $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile b/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile
index 694cb5c..d261fd5 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile
+++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile
@@ -3,7 +3,6 @@
 #
 
 #
-#
 # Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -14,6 +13,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 # Linux kbuild sets this to our source directory if we are called from there
 obj ?= $(CURDIR)
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c b/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c
index b36f8ba..30b2476 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c
+++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp b/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
index 44bf156..7491fc7 100755
--- a/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
@@ -1,11 +1,11 @@
 #!/bin/sh
-# $Revision: 117917 $
+# $Id: files_vboxnetadp $
 ## @files
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 VBOX_VBOXNETADP_SOURCES=" \
     ${PATH_ROOT}/include/iprt/alloc.h=>include/iprt/alloc.h \
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/solaris/VBoxNetAdp-solaris.c b/src/VBox/HostDrivers/VBoxNetAdp/solaris/VBoxNetAdp-solaris.c
index b3f3052..b919d7e 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/solaris/VBoxNetAdp-solaris.c
+++ b/src/VBox/HostDrivers/VBoxNetAdp/solaris/VBoxNetAdp-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf b/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf
index 433c2eb..ff84c3d 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf
+++ b/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf
@@ -1,7 +1,10 @@
-#
+# $Id: vboxnet.conf $
+## @file
 # Solaris Host VBoxNet Configuration
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+
+#
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +26,7 @@
 
 # This needs to go into /platform/i86pc/kernel/drv,
 # while the 64-bit driver object goes into the amd64
-# subdirectory (32-bit drivers goes into the same 
+# subdirectory (32-bit drivers goes into the same
 # directory).
 #
 name="vboxnet" parent="pseudo" instance=0;
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp
index 8f03aec..ebb40ec 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp
@@ -3,7 +3,7 @@
  * VBoxNetAdp-win.cpp - NDIS6 Host-only Networking Driver, Windows-specific code.
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #define LOG_GROUP LOG_GROUP_NET_ADP_DRV
@@ -147,7 +156,7 @@ typedef struct _VBOXNETADP_ADAPTER {
     /** Pointer to global data */
     PVBOXNETADPGLOBALS pGlobals;
     /** Adapter state in NDIS, used for assertions only */
-    VBOXNETADPWIN_ADAPTER_STATE volatile enmAdapterState; // @todo do we need it really?
+    VBOXNETADPWIN_ADAPTER_STATE volatile enmAdapterState; /// @todo do we need it really?
     /** The trunk state. */
     INTNETTRUNKIFSTATE volatile enmTrunkState;
     /** Number of pending operations, when it reaches zero we signal EventIdle. */
@@ -724,7 +733,7 @@ static DECLCALLBACK(void) vboxNetAdpWinPortNotifyMacAddress(PINTNETTRUNKIFPORT p
     AssertPtr(pThis);
     Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
 
-    // @todo Do we really need to handle this?
+    /// @todo Do we really need to handle this?
 }
 
 
@@ -852,16 +861,16 @@ static DECLCALLBACK(int) vboxNetAdpWinFactoryCreateAndConnect(PINTNETTRUNKFACTOR
         {
             pAdapter->pSwitchPort = pSwitchPort;
             *ppIfPort = &pAdapter->MyPort;
-            NdisReleaseSpinLock(&g_VBoxNetAdpGlobals.Lock); // @todo too early? adp should have been connected by the time we do this
+            NdisReleaseSpinLock(&g_VBoxNetAdpGlobals.Lock); /// @todo too early? adp should have been connected by the time we do this
             Log(("vboxNetAdpWinFactoryCreateAndConnect: found matching adapter, name=%s\n", pszName));
             vboxNetAdpWinReportCapabilities(pAdapter);
-            // @todo I guess there is no need in vboxNetAdpWinRegisterIpAddrNotifier(pThis);
+            /// @todo I guess there is no need in vboxNetAdpWinRegisterIpAddrNotifier(pThis);
             LogFlow(("<==vboxNetAdpWinFactoryCreateAndConnect: return VINF_SUCCESS\n"));
             return VINF_SUCCESS;
         }
     }
     NdisReleaseSpinLock(&pGlobals->Lock);
-    // @todo vboxNetAdpLogErrorEvent(IO_ERR_INTERNAL_ERROR, STATUS_SUCCESS, 6);
+    /// @todo vboxNetAdpLogErrorEvent(IO_ERR_INTERNAL_ERROR, STATUS_SUCCESS, 6);
     LogFlow(("<==vboxNetAdpWinFactoryCreateAndConnect: return VERR_INTNET_FLT_IF_NOT_FOUND\n"));
     return VERR_INTNET_FLT_IF_NOT_FOUND;
 }
@@ -1285,7 +1294,7 @@ DECLHIDDEN(NDIS_STATUS) vboxNetAdpWinPause(IN NDIS_HANDLE MiniportAdapterContext
     if (!NdisWaitEvent(&pThis->EventIdle, 1000 /* ms */))
     {
         LogError(("vboxNetAdpWinPause: timed out while pausing the adapter\n"));
-        // @todo implement NDIS_STATUS_PENDING case? probably not.
+        /// @todo implement NDIS_STATUS_PENDING case? probably not.
     }
     enmPrevState = vboxNetAdpWinSetState(pThis, kVBoxNetAdpWinState_Paused);
     Assert(enmPrevState == kVBoxNetAdpWinState_Pausing);
@@ -1302,7 +1311,7 @@ DECLHIDDEN(NDIS_STATUS) vboxNetAdpWinRestart(IN NDIS_HANDLE MiniportAdapterConte
     LogFlow(("==>vboxNetAdpWinRestart\n"));
     VBOXNETADPWIN_ADAPTER_STATE enmPrevState = vboxNetAdpWinSetState(pThis, kVBoxNetAdpWinState_Restarting);
     Assert(enmPrevState == kVBoxNetAdpWinState_Paused);
-    // @todo anything?
+    /// @todo anything?
     enmPrevState = vboxNetAdpWinSetState(pThis, kVBoxNetAdpWinState_Running);
     Assert(enmPrevState == kVBoxNetAdpWinState_Restarting);
     LogFlow(("<==vboxNetAdpWinRestart: status=0x%x\n", Status));
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.h b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.h
index 5787117..c061ffb 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.h
+++ b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.h
@@ -3,7 +3,7 @@
  * VBoxNetAdp-win.h - Host-only Miniport Driver, Windows-specific code.
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxNetAdp_win_h___
 #define ___VBoxNetAdp_win_h___
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.rc b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.rc
index f100bc4..86cac42 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.rc
+++ b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.rc
@@ -3,7 +3,7 @@
  * VBoxNetAdp6 - Resource file containing version info and icon.
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp6.inf b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp6.inf
index 2ca4ab0..1f49644 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp6.inf
+++ b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp6.inf
@@ -1,11 +1,12 @@
 ; $Id: VBoxNetAdp6.inf $
-; @file
+;; @file
 ; VBoxNetAdp6.inf - VirtualBox NDIS6 Miniport Driver inf file
 ;
 ; Note: We use the same component id as the old NetAdp implementation ?
 ;
+
 ;
-; Copyright (C) 2014-2016 Oracle Corporation
+; Copyright (C) 2014-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +16,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 Signature   = "$Windows NT$"
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk b/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
index 8833b43..92a2e63 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
index 06657b4..5999ed5 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /** @page pg_netflt     VBoxNetFlt - Network Interface Filter
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.rc b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.rc
index 2050135..7b70f39 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.rc
+++ b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.rc
@@ -3,7 +3,7 @@
  * VBoxNetFlt - Resource file containing version info and icon.
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
index dee782b..9b2c84b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxNetFltInternal_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp b/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp
index 64b13b9..cc66055 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/darwin/VBoxNetFlt-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/darwin/loadnetflt.sh b/src/VBox/HostDrivers/VBoxNetFlt/darwin/loadnetflt.sh
index 5782259..9592ab6 100755
--- a/src/VBox/HostDrivers/VBoxNetFlt/darwin/loadnetflt.sh
+++ b/src/VBox/HostDrivers/VBoxNetFlt/darwin/loadnetflt.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SCRIPT_NAME="loadnetflt"
 XNU_VERSION=`LC_ALL=C uname -r | LC_ALL=C cut -d . -f 1`
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile
index 4a4df72..9b1a4f4 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile
+++ b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile
@@ -4,8 +4,7 @@
 #
 
 #
-#
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 KMOD = vboxnetflt
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt
index d81cec6..0534e57 100755
--- a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt
+++ b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxnetflt $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile b/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile
index e262c61..aaa2e34 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile
@@ -3,7 +3,6 @@
 #
 
 #
-#
 # Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -14,6 +13,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 # Linux kbuild sets this to our source directory if we are called from
 # there
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
index 057b7c6..c910867 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
@@ -737,9 +746,6 @@ static struct sk_buff *vboxNetFltLinuxSkBufFromSG(PVBOXNETFLTINS pThis, PINTNETS
         case PDMNETWORKGSOTYPE_IPV4_TCP:
             fGsoType = SKB_GSO_TCPV4;
             break;
-        case PDMNETWORKGSOTYPE_IPV4_UDP:
-            fGsoType = SKB_GSO_UDP;
-            break;
         case PDMNETWORKGSOTYPE_IPV6_TCP:
             fGsoType = SKB_GSO_TCPV6;
             break;
@@ -860,7 +866,8 @@ static void vboxNetFltLinuxSkBufToSG(PVBOXNETFLTINS pThis, struct sk_buff *pBuf,
         struct vlan_ethhdr *pVHdr = (struct vlan_ethhdr *)pExtra;
         Assert(ETH_ALEN * 2 + VLAN_HLEN <= cbExtra);
         memmove(pVHdr, pMac, ETH_ALEN * 2);
-        cbConsumed += ETH_ALEN * 2;
+        /* Consume whole Ethernet header: 2 addresses + EtherType (see @bugref{8599}) */
+        cbConsumed += ETH_ALEN * 2 + sizeof(uint16_t);
         pVHdr->h_vlan_proto = RT_H2N_U16(ETH_P_8021Q);
         pVHdr->h_vlan_TCI   = RT_H2N_U16(vlan_tx_tag_get(pBuf));
         pVHdr->h_vlan_encapsulated_proto = *(uint16_t*)(pMac + ETH_ALEN * 2);
@@ -891,9 +898,9 @@ static void vboxNetFltLinuxSkBufToSG(PVBOXNETFLTINS pThis, struct sk_buff *pBuf,
 #endif /* VBOXNETFLT_SG_SUPPORT */
 
     if (!pGsoCtx)
-        IntNetSgInitTempSegs(pSG, pBuf->len, cSegs, 0 /*cSegsUsed*/);
+        IntNetSgInitTempSegs(pSG, pBuf->len + cbProduced - cbConsumed, cSegs, 0 /*cSegsUsed*/);
     else
-        IntNetSgInitTempSegsGso(pSG, pBuf->len, cSegs, 0 /*cSegsUsed*/, pGsoCtx);
+        IntNetSgInitTempSegsGso(pSG, pBuf->len + cbProduced - cbConsumed, cSegs, 0 /*cSegsUsed*/, pGsoCtx);
 
     int iSeg = 0;
 #ifdef VBOXNETFLT_SG_SUPPORT
@@ -950,6 +957,21 @@ static void vboxNetFltLinuxSkBufToSG(PVBOXNETFLTINS pThis, struct sk_buff *pBuf,
 
     pSG->cSegsUsed = iSeg;
 
+#if 0
+    if (cbProduced)
+    {
+        LogRel(("vboxNetFltLinuxSkBufToSG: original packet dump:\n%.*Rhxd\n", pBuf->len-pBuf->data_len, skb_mac_header(pBuf)));
+        LogRel(("vboxNetFltLinuxSkBufToSG: cbConsumed=%u cbProduced=%u cbExtra=%u\n", cbConsumed, cbProduced, cbExtra));
+        uint32_t offset = 0;
+        for (i = 0; i < pSG->cSegsUsed; ++i)
+        {
+            LogRel(("vboxNetFltLinuxSkBufToSG: seg#%d (%d bytes, starting at 0x%x):\n%.*Rhxd\n",
+                    i, pSG->aSegs[i].cb, offset, pSG->aSegs[i].cb, pSG->aSegs[i].pv));
+            offset += pSG->aSegs[i].cb;
+        }
+    }
+#endif
+
 #ifdef PADD_RUNT_FRAMES_FROM_HOST
     /*
      * Add a trailer if the frame is too small.
@@ -1273,7 +1295,7 @@ static bool vboxNetFltLinuxCanForwardAsGso(PVBOXNETFLTINS pThis, struct sk_buff
      * Check the GSO properties of the socket buffer and make sure it fits.
      */
     /** @todo Figure out how to handle SKB_GSO_TCP_ECN! */
-    if (RT_UNLIKELY( skb_shinfo(pSkb)->gso_type & ~(SKB_GSO_UDP | SKB_GSO_DODGY | SKB_GSO_TCPV6 | SKB_GSO_TCPV4) ))
+    if (RT_UNLIKELY( skb_shinfo(pSkb)->gso_type & ~(SKB_GSO_DODGY | SKB_GSO_TCPV6 | SKB_GSO_TCPV4) ))
     {
         Log5(("vboxNetFltLinuxCanForwardAsGso: gso_type=%#x\n", skb_shinfo(pSkb)->gso_type));
         return false;
@@ -1523,7 +1545,7 @@ static void vboxNetFltLinuxForwardToIntNetInner(PVBOXNETFLTINS pThis, struct sk_
         }
 #endif /* !VBOXNETFLT_SG_SUPPORT */
 # ifdef VBOXNETFLT_WITH_GSO_RECV
-        if (   (skb_shinfo(pBuf)->gso_type & (SKB_GSO_UDP | SKB_GSO_TCPV6 | SKB_GSO_TCPV4))
+        if (   (skb_shinfo(pBuf)->gso_type & (SKB_GSO_TCPV6 | SKB_GSO_TCPV4))
             && vboxNetFltLinuxCanForwardAsGso(pThis, pBuf, fSrc, &GsoCtx) )
             vboxNetFltLinuxForwardAsGso(pThis, pBuf, fSrc, &GsoCtx);
         else
@@ -1592,7 +1614,7 @@ static void vboxNetFltLinuxForwardToIntNetInner(PVBOXNETFLTINS pThis, struct sk_
 
 /**
  * Temporarily adjust pBuf->data so it always points to the Ethernet header,
- * then forward it to the internal network. 
+ * then forward it to the internal network.
  *
  * @param   pThis       The net filter instance.
  * @param   pBuf        The socket buffer.  This is consumed by this function.
@@ -1614,7 +1636,7 @@ static void vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff
     }
 
     vboxNetFltLinuxForwardToIntNetInner(pThis, pBuf, fSrc);
-    
+
     /*
      * Restore the original state of skb as there are other handlers this skb
      * will be provided to.
@@ -1699,17 +1721,9 @@ static void vboxNetFltLinuxReportNicGsoCapabilities(PVBOXNETFLTINS pThis)
                 fGsoCapabilites |= RT_BIT_32(PDMNETWORKGSOTYPE_IPV4_TCP);
             if (fFeatures & NETIF_F_TSO6)
                 fGsoCapabilites |= RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_TCP);
-# if 0 /** @todo GSO: Test UDP offloading (UFO) on linux. */
-            if (fFeatures & NETIF_F_UFO)
-                fGsoCapabilites |= RT_BIT_32(PDMNETWORKGSOTYPE_IPV4_UDP);
-            if (fFeatures & NETIF_F_UFO)
-                fGsoCapabilites |= RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_UDP);
-# endif
             Log3(("vboxNetFltLinuxReportNicGsoCapabilities: reporting wire %s%s%s%s\n",
                   (fGsoCapabilites & RT_BIT_32(PDMNETWORKGSOTYPE_IPV4_TCP)) ? "tso " : "",
-                  (fGsoCapabilites & RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_TCP)) ? "tso6 " : "",
-                  (fGsoCapabilites & RT_BIT_32(PDMNETWORKGSOTYPE_IPV4_UDP)) ? "ufo " : "",
-                  (fGsoCapabilites & RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_UDP)) ? "ufo6 " : ""));
+                  (fGsoCapabilites & RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_TCP)) ? "tso6 " : ""));
             pThis->pSwitchPort->pfnReportGsoCapabilities(pThis->pSwitchPort, fGsoCapabilites, INTNETTRUNKDIR_WIRE);
         }
 
@@ -2402,15 +2416,11 @@ int  vboxNetFltOsConnectIt(PVBOXNETFLTINS pThis)
      */
     /** @todo duplicate work here now? Attach */
 #if defined(VBOXNETFLT_WITH_GSO_XMIT_HOST)
-    Log3(("vboxNetFltOsConnectIt: reporting host tso tso6 ufo\n"));
+    Log3(("vboxNetFltOsConnectIt: reporting host tso tso6\n"));
     pThis->pSwitchPort->pfnReportGsoCapabilities(pThis->pSwitchPort,
                                                  0
                                                  | RT_BIT_32(PDMNETWORKGSOTYPE_IPV4_TCP)
                                                  | RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_TCP)
-                                                 | RT_BIT_32(PDMNETWORKGSOTYPE_IPV4_UDP)
-# if 0 /** @todo GSO: Test UDP offloading (UFO) on linux. */
-                                                 | RT_BIT_32(PDMNETWORKGSOTYPE_IPV6_UDP)
-# endif
                                                  , INTNETTRUNKDIR_HOST);
 
 #endif
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt b/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt
index 0c646da..2e3a5dc 100755
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxnetflt $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 VBOX_VBOXNETFLT_SOURCES=" \
     ${PATH_ROOT}/include/iprt/alloc.h=>include/iprt/alloc.h \
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
index 68d826b..0146928 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c
index 8dd89ea..a5282f0 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxbow.conf b/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxbow.conf
index 44c99db..cec410a 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxbow.conf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxbow.conf
@@ -1,7 +1,10 @@
-#
+# $Id: vboxbow.conf $
+## @file
 # Solaris Host VBoxBow (Crossbow) Configuration
 #
-# Copyright (C) 2008-2015 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +26,7 @@
 
 # This needs to go into /platform/i86pc/kernel/drv,
 # while the 64-bit driver object goes into the amd64
-# subdirectory (32-bit drivers goes into the same 
+# subdirectory (32-bit drivers goes into the same
 # directory).
 #
 name="vboxbow" parent="pseudo" instance=0;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf b/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf
index 91c28ab..625bcb7 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf
@@ -1,7 +1,10 @@
-#
+# $Id: vboxflt.conf $
+## @file
 # Solaris Host VBoxFlt Configuration
 #
-# Copyright (C) 2008-2015 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -23,7 +26,7 @@
 
 # This needs to go into /platform/i86pc/kernel/drv,
 # while the 64-bit driver object goes into the amd64
-# subdirectory (32-bit drivers goes into the same 
+# subdirectory (32-bit drivers goes into the same
 # directory).
 #
 name="vboxflt" parent="pseudo" instance=0;
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
index 1942ff8..fc32f1c 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
@@ -3,7 +3,7 @@
  * VBoxNetCfg.cpp - Network Configuration API.
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #include "VBox/VBoxNetCfg-win.h"
 #include "VBox/VBoxDrvCfg-win.h"
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetAdp.inf b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetAdp.inf
index 63e0cde..2dc7315 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetAdp.inf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetAdp.inf
@@ -1,9 +1,10 @@
 ; $Id: VBoxNetAdp.inf $
-; @file
+;; @file
 ; VBoxNetAdp.inf - VirtualBox Host-Only Driver inf file
 ;
+
 ;
-; Copyright (C) 2011-2016 Oracle Corporation
+; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 signature  = "$Windows NT$"
@@ -53,7 +63,7 @@ VBoxNetAdp.Files.Sys   = 12   ; %windir%\System32\drivers
 %VBoxNetAdp_Desc% = VBoxNetAdp.ndi, sun_VBoxNetAdp
 
 [VBoxNetAdp.ndi]
-Characteristics = 0x1 ; NCF_VIRTUAL 
+Characteristics = 0x1 ; NCF_VIRTUAL
 CopyFiles = VBoxNetAdp.Files.Sys
 AddReg = VBoxNetAdp.AddReg
 
@@ -84,5 +94,3 @@ Provider = "Oracle Corporation"
 VBoxNetAdp_Desc = "VirtualBox Host-Only Ethernet Adapter"
 DiskDescription = "VirtualBox Host-Only Ethernet Adapter"
 
-
-
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt-win.rc b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt-win.rc
index 571b6a8..700c15b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt-win.rc
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt-win.rc
@@ -3,7 +3,7 @@
  * VBoxNetFlt - Resource file containing version info and icon.
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt.inf b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt.inf
index f09d526..5d23ed7 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt.inf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFlt.inf
@@ -1,10 +1,10 @@
 ; $Id: VBoxNetFlt.inf $
-; @file
-; VBoxNetFlt.inf - VirtualBox Bridged Networking Driver inf file
-; Protocol edge
+;; @file
+; VBoxNetFlt.inf - VirtualBox Bridged Networking Driver inf file Protocol edge
 ;
+
 ;
-; Copyright (C) 2011-2016 Oracle Corporation
+; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 Signature  = "$Windows NT$"
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h
index 1bf3419..6617d87 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltCmn-win.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxNetFltCmn_win_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.cpp
index 471275b..46c91da 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.cpp
@@ -4,7 +4,7 @@
  * Miniport edge
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #include "VBoxNetFltCmn-win.h"
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.h b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.h
index fca1214..25dd9b3 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM-win.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxNetFltM_win_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM.inf b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM.inf
index 4f7f7d2..a550cbf 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM.inf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltM.inf
@@ -1,10 +1,10 @@
 ; $Id: VBoxNetFltM.inf $
-; @file
-; VBoxNetFltM.inf - VirtualBox Bridged Networking Driver inf file
-; Miniport edge
+;; @file
+; VBoxNetFltM.inf - VirtualBox Bridged Networking Driver inf file Miniport edge
 ;
+
 ;
-; Copyright (C) 2011-2016 Oracle Corporation
+; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 signature  = "$Windows NT$"
@@ -67,5 +76,3 @@ VBoxNetFltMP_Desc = "VirtualBox Bridged Networking Driver Miniport"
 
 [SourceDisksFiles]
 
-
-
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.cpp
index 9f993bc..fba816c 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.cpp
@@ -4,7 +4,7 @@
  * Protocol edge
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #include "VBoxNetFltCmn-win.h"
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.h b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.h
index 3ea3995..73e61f4 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltP-win.h
@@ -4,7 +4,7 @@
  * Protocol edge API
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxNetFltP_win_h___
 #define ___VBoxNetFltP_win_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp
index daed90a..9c213d0 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.h b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.h
index 639e470..3a4156b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.h
@@ -4,7 +4,7 @@
  * NetFlt Runtime API
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxNetFltRt_win_h___
 #define ___VBoxNetFltRt_win_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
index 65c7646..0c077a9 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
@@ -3,7 +3,7 @@
  * VBoxNetLwf-win.cpp - NDIS6 Bridged Networking Driver, Windows-specific code.
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #define LOG_GROUP LOG_GROUP_NET_FLT_DRV
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.h b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.h
index b442c0a..ab88c65 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.h
@@ -3,7 +3,7 @@
  * VBoxNetLwf-win.h - Bridged Networking Driver, Windows-specific code.
  */
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxNetLwf_win_h___
 #define ___VBoxNetLwf_win_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
index dc396ed..65b28b8 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
@@ -2,8 +2,9 @@
 ; @file
 ; VBoxNetLwf.inf - VirtualBox Bridged Networking Driver inf file
 ;
+
 ;
-; Copyright (C) 2014-2016 Oracle Corporation
+; Copyright (C) 2014-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 Signature   = "$Windows NT$"
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp
index b82f18a..4e7d2d0 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.cpp
@@ -4,7 +4,7 @@
  * Used to filter Bridged Networking Driver bindings
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #include "VBoxNetFltNobj.h"
 #include <iprt/win/ntddndis.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.def b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.def
index 5fbedbb..3c42753 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.def
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.def
@@ -3,8 +3,9 @@
 ; VBoxNetFltNobj.def - Notify Object for Bridged Networking Driver.
 ; Library def file
 ;
+
 ;
-; Copyright (C) 2011-2016 Oracle Corporation
+; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +15,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 LIBRARY VBoxNetFltNobj
 EXPORTS
     DllCanUnloadNow     PRIVATE
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.h b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.h
index 9867c97..2ffad8b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.h
@@ -4,7 +4,7 @@
  * Used to filter Bridged Networking Driver bindings
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxNetFltNobj_h___
 #define ___VBoxNetFltNobj_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.rc b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.rc
index a197017..dd165ef 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.rc
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobj.rc
@@ -3,7 +3,7 @@
  * VBoxNetFltNobj - Resource file containing version info and icon.
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjRc.h b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjRc.h
index 064fb29..22b0d10 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjRc.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjRc.h
@@ -4,7 +4,7 @@
  * Resource definitions
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxNetFltNobjRc_h___
 #define ___VBoxNetFltNobjRc_h___
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjT.idl b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjT.idl
index 8668a4e..cdc0ff1 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjT.idl
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/nobj/VBoxNetFltNobjT.idl
@@ -1,10 +1,12 @@
 /* $Id: VBoxNetFltNobjT.idl $ */
 /** @file
  * VBoxNetFltNobjT.idl - Notify Object for Bridged Networking Driver.
+
  * Type lib definition
  */
+
 /*
- * Copyright (C) 2011-2015 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,7 +15,17 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
+
 #include <netcfgn.idl>
 
 [
@@ -32,4 +44,4 @@ library VBoxNetFltNobjLib
        [restricted] interface INetCfgComponentControl;
        [restricted] interface INetCfgComponentNotifyBinding;
     };
-};
\ No newline at end of file
+};
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp
index bd0e56e..652f209 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpInstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <VBox/VBoxNetCfg-win.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp
index f0d9e96..598cf48 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetAdpUninstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <VBox/VBoxNetCfg-win.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltInstall.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltInstall.cpp
index 2dbe8b4..00d2172 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltInstall.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltInstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <VBox/VBoxNetCfg-win.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltUninstall.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltUninstall.cpp
index 8033a85..b5f87e2 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltUninstall.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetFltUninstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <VBox/VBoxNetCfg-win.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfInstall.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfInstall.cpp
index ddd66c9..c609b8a 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfInstall.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfInstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <VBox/VBoxNetCfg-win.h>
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfUninstall.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfUninstall.cpp
index 19ab688..487ae91 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfUninstall.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/tools/VBoxNetLwfUninstall.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <VBox/VBoxNetCfg-win.h>
diff --git a/src/VBox/HostDrivers/VBoxPci/Makefile.kmk b/src/VBox/HostDrivers/VBoxPci/Makefile.kmk
index b19923d..979e4d0 100644
--- a/src/VBox/HostDrivers/VBoxPci/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxPci/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxPci/VBoxPci.c b/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
index fc2d78e..b42de61 100644
--- a/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
+++ b/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /** @page pg_rawpci     VBoxPci - host PCI support
diff --git a/src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h b/src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h
index c1f8d46..5f1f85e 100644
--- a/src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h
+++ b/src/VBox/HostDrivers/VBoxPci/VBoxPciInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,9 +13,18 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
-#ifndef ___VBoPciInternal_h___
+#ifndef ___VBoxPciInternal_h___
 #define ___VBoxPciInternal_h___
 
 #include <VBox/sup.h>
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/Makefile b/src/VBox/HostDrivers/VBoxPci/linux/Makefile
index 6b3878a..345b608 100644
--- a/src/VBox/HostDrivers/VBoxPci/linux/Makefile
+++ b/src/VBox/HostDrivers/VBoxPci/linux/Makefile
@@ -3,7 +3,6 @@
 #
 
 #
-#
 # Copyright (C) 2011-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -14,6 +13,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 # Linux kbuild sets this to our source directory if we are called from there
 obj ?= $(CURDIR)
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
index 3a3f00a..61873f4 100644
--- a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
+++ b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
@@ -357,7 +366,11 @@ static int vboxPciFileWrite(struct file* file, unsigned long long offset, unsign
 
     fs_save = get_fs();
     set_fs(get_ds());
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
+    ret = kernel_write(file, data, size, &offset);
+#else
     ret = vfs_write(file, data, size, &offset);
+#endif
     set_fs(fs_save);
     if (ret < 0)
         printk(KERN_DEBUG "vboxPciFileWrite: error %d\n", ret);
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci b/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci
index 279f81d..9241b4c 100755
--- a/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci
+++ b/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci
@@ -1,11 +1,11 @@
 #!/bin/sh
 # $Id: files_vboxpci $
 ## @file
-# Shared file between Makefile.kmk and export_modules
+# Shared file between Makefile.kmk and export_modules.sh.
 #
 
 #
-# Copyright (C) 2011-2015 Oracle Corporation
+# Copyright (C) 2011-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 VBOX_VBOXPCI_SOURCES=" \
     ${PATH_ROOT}/include/iprt/alloc.h=>include/iprt/alloc.h \
diff --git a/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk
index cce7fdc..b53ac7c 100644
--- a/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxUSB/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxUSB/USBFilter.cpp b/src/VBox/HostDrivers/VBoxUSB/USBFilter.cpp
index 9614555..7635401 100644
--- a/src/VBox/HostDrivers/VBoxUSB/USBFilter.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/USBFilter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/USBLib.cpp b/src/VBox/HostDrivers/VBoxUSB/USBLib.cpp
index 30d3659..b4ce453 100644
--- a/src/VBox/HostDrivers/VBoxUSB/USBLib.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/USBLib.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp
index 8061367..6367714 100644
--- a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h
index ef0838c..3f2070d 100644
--- a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h
+++ b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxUSBFilterMgr_h
diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk
index 3279bf4..b77c631 100644
--- a/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxUSB/darwin/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/USBLib-darwin.cpp b/src/VBox/HostDrivers/VBoxUSB/darwin/USBLib-darwin.cpp
index 88f9c2a..7981c5b 100644
--- a/src/VBox/HostDrivers/VBoxUSB/darwin/USBLib-darwin.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/darwin/USBLib-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSB.cpp b/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSB.cpp
index e466d27..101bcf1 100644
--- a/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSB.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSB.cpp
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -17,6 +17,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSBInterface.h b/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSBInterface.h
index a7d38ac..9dad459 100644
--- a/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSBInterface.h
+++ b/src/VBox/HostDrivers/VBoxUSB/darwin/VBoxUSBInterface.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxUSBInterface_h
diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/loadusb.sh b/src/VBox/HostDrivers/VBoxUSB/darwin/loadusb.sh
index 556f188..033c536 100755
--- a/src/VBox/HostDrivers/VBoxUSB/darwin/loadusb.sh
+++ b/src/VBox/HostDrivers/VBoxUSB/darwin/loadusb.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SCRIPT_NAME="loadusb"
 XNU_VERSION=`LC_ALL=C uname -r | LC_ALL=C cut -d . -f 1`
diff --git a/src/VBox/HostDrivers/VBoxUSB/darwin/testcase/tstOpenUSBDev.cpp b/src/VBox/HostDrivers/VBoxUSB/darwin/testcase/tstOpenUSBDev.cpp
index 54f65b4..1fa8773 100644
--- a/src/VBox/HostDrivers/VBoxUSB/darwin/testcase/tstOpenUSBDev.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/darwin/testcase/tstOpenUSBDev.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
@@ -205,7 +214,7 @@ int main(int argc, char **argv)
             case 'h':
                 return tstSyntax(argv[0]);
             case 'V':
-                RTPrintf("$Revision: 110148 $\n");
+                RTPrintf("$Revision: 118839 $\n");
                 return 0;
 
             default:
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/solaris/Makefile.kmk
index b28d05a..270f4a5 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/USBLib-solaris.cpp b/src/VBox/HostDrivers/VBoxUSB/solaris/USBLib-solaris.cpp
index 72dbefb..b12e740 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/USBLib-solaris.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/USBLib-solaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
index 13b230d..17ff075 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c
index 217eba3..98d3c04 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusb.conf b/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusb.conf
index 4919b53..0fde022 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusb.conf
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusb.conf
@@ -3,7 +3,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf b/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf
index 2fa649c..ad5ae39 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf
@@ -3,7 +3,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostDrivers/VBoxUSB/testcase/tstUSBFilter.cpp b/src/VBox/HostDrivers/VBoxUSB/testcase/tstUSBFilter.cpp
index a180ec4..4db82bb 100644
--- a/src/VBox/HostDrivers/VBoxUSB/testcase/tstUSBFilter.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/testcase/tstUSBFilter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2007-2016 Oracle Corporation
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/Install/USBInstall.cpp b/src/VBox/HostDrivers/VBoxUSB/win/Install/USBInstall.cpp
index f28ceb2..ac040d4 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/Install/USBInstall.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/Install/USBInstall.cpp
@@ -1,10 +1,10 @@
+/* $Id: USBInstall.cpp $ */
 /** @file
- *
- * VBox host drivers - USB drivers - Filter & driver installation
- *
- * Installation code
- *
- * Copyright (C) 2006-2016 Oracle Corporation
+ * VBox host drivers - USB drivers - Filter & driver installation, Installation code.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/Install/USBUninstall.cpp b/src/VBox/HostDrivers/VBoxUSB/win/Install/USBUninstall.cpp
index 6c3c903..d9b5c90 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/Install/USBUninstall.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/Install/USBUninstall.cpp
@@ -1,10 +1,10 @@
+/* $Id: USBUninstall.cpp $ */
 /** @file
- *
- * VBox host drivers - USB drivers - Filter & driver uninstallation
- *
- * Installation code
- *
- * Copyright (C) 2006-2016 Oracle Corporation
+ * VBox host drivers - USB drivers - Filter & driver uninstallation.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk b/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk
index 8e6a869..93ef0dc 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk
+++ b/src/VBox/HostDrivers/VBoxUSB/win/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp
index 4564fa5..3eefc61 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include "VBoxDrvTool.h"
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.h b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.h
index e707f7d..c66abfc 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxDrvTool.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxDrvTool_win_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbIdc.h b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbIdc.h
index 05bb7c8..3a3ebc5 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbIdc.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbIdc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxUsbIdc_h___
 #define ___VBoxUsbIdc_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.cpp b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.cpp
index 28620b0..7dd006d 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #define INITGUID
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.h b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.h
index 9d21775..bb33e67 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/cmn/VBoxUsbTool.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxUsbTool_h___
 #define ___VBoxUsbTool_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUSB.inf b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUSB.inf
index 94bc3ff..686e876 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUSB.inf
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUSB.inf
@@ -1,7 +1,10 @@
-;
+; $Id: VBoxUSB.inf $
+;; @file
 ; VBox host drivers - USB drivers - Win32 USB device
 ;
-; Copyright (C) 2011-2016 Oracle Corporation
+
+;
+; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -11,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 Signature="$Windows NT$"
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbCmn.h b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbCmn.h
index 5fdee4c..8bc9d5f 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbCmn.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbCmn.h
@@ -3,7 +3,7 @@
  * VBoxUsmCmn.h - USB device. Common defs
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxUsbCmn_h___
 #define ___VBoxUsbCmn_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.cpp b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.cpp
index 0d92596..d9f3cdc 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h
index 1e2e24a..89427c5 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxUsbDev_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.rc b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.rc
index 97d4ab6..f756ac3 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.rc
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbDev.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp
index 0931ce5..824c4ff 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include "VBoxUsbCmn.h"
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.h b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.h
index 5816362..4ca8da8 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPnP.h
@@ -2,8 +2,9 @@
 /** @file
  * USB PnP Handling
  */
+
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,11 +13,21 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
+
 #ifndef ___VBoxUsbPnP_h___
 #define ___VBoxUsbPnP_h___
 #include "VBoxUsbCmn.h"
 
 DECLHIDDEN(NTSTATUS) vboxUsbDispatchPnP(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
 
-#endif /* #ifndef ___VBoxUsbPnP_h___ */
+#endif
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp
index a375e75..ce7ba88 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include "VBoxUsbCmn.h"
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.h b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.h
index 271dc26..2c1649a 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbPwr.h
@@ -3,7 +3,7 @@
  * USB Power state Handling
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxUsbPwr_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
index 5d0f6ee..de344f0 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h
index 5ee012d..d4e4815 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.h
@@ -3,7 +3,7 @@
  * VBox USB R0 runtime
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxUsbRt_h___
 #define ___VBoxUsbRt_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/lib/VBoxUsbLib-win.cpp b/src/VBox/HostDrivers/VBoxUSB/win/lib/VBoxUsbLib-win.cpp
index 2c5c01d..323b3e9 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/lib/VBoxUsbLib-win.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/lib/VBoxUsbLib-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUSBMon.inf b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUSBMon.inf
index 46cbcb0..61eefc4 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUSBMon.inf
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUSBMon.inf
@@ -1,9 +1,10 @@
+; $Id: VBoxUSBMon.inf $
+;; @file
+; VBox USB Monitor driver - Installation file
 ;
-; VBox USB Monitor driver
-;
-; Installation file
+
 ;
-; Copyright (C) 2011-2016 Oracle Corporation
+; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 [Version]
 Signature         = "$Windows NT$"
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp
index bd1eeaa..65e6a2c 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.cpp
@@ -3,7 +3,7 @@
  * VBox USB Monitor Device Filtering functionality
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.h b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.h
index 6077952..0fedfa3 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbFlt.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___win_mon_VBoxUsbFlt_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp
index 345c8db..56c498f 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h
index 5558a44..e3cebce 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbHook.h
@@ -3,7 +3,7 @@
  * Driver Dispatch Table Hooking API impl
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxUsbHook_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp
index dba6c1d..3efa54a 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h
index b218bde..668cfb1 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.h
@@ -3,7 +3,7 @@
  * VBox USB Monitor
  */
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +12,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 #ifndef ___VBoxUsbMon_h___
 #define ___VBoxUsbMon_h___
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.rc b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.rc
index 13bb166..41152a7 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.rc
+++ b/src/VBox/HostDrivers/VBoxUSB/win/mon/VBoxUsbMon.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #include <windows.h>
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/testcase/USBTest.cpp b/src/VBox/HostDrivers/VBoxUSB/win/testcase/USBTest.cpp
index 0d5b81d..f2844bf 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/testcase/USBTest.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/testcase/USBTest.cpp
@@ -1,10 +1,10 @@
+/* $Id: USBTest.cpp $ */
 /** @file
- *
  * VBox host drivers - USB drivers - Filter & driver installation
- *
- * Installation code
- *
- * Copyright (C) 2006-2016 Oracle Corporation
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/usbd/usbd.def b/src/VBox/HostDrivers/VBoxUSB/win/usbd/usbd.def
index 8771ea9..0ebf23b 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/usbd/usbd.def
+++ b/src/VBox/HostDrivers/VBoxUSB/win/usbd/usbd.def
@@ -1,7 +1,10 @@
-;
+; $Id: usbd.def $
+;; @file
 ; Export definitions
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
@@ -11,6 +14,15 @@
 ; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 ; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 ;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 LIBRARY USBD.SYS
 
diff --git a/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp b/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp
index 84003a0..7805295 100644
--- a/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp
+++ b/src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -677,6 +677,7 @@ int Adapter::doIOCtl(unsigned long iCmd, VBOXNETADPREQ *pReq)
     return rc;
 }
 
+
 /*********************************************************************************************************************************
 *   Main logic, argument parsing, etc.                                                                                           *
 *********************************************************************************************************************************/
diff --git a/src/VBox/HostDrivers/darwin/Makefile.kmk b/src/VBox/HostDrivers/darwin/Makefile.kmk
index e8e63c1..f885d39 100644
--- a/src/VBox/HostDrivers/darwin/Makefile.kmk
+++ b/src/VBox/HostDrivers/darwin/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/darwin/VBoxNetSend.h b/src/VBox/HostDrivers/darwin/VBoxNetSend.h
index fdbeb94..8b1dbcc 100644
--- a/src/VBox/HostDrivers/darwin/VBoxNetSend.h
+++ b/src/VBox/HostDrivers/darwin/VBoxNetSend.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 /** @todo move this to src/VBox/HostDrivers/darwin as a .cpp file. */
diff --git a/src/VBox/HostDrivers/darwin/loadall.sh b/src/VBox/HostDrivers/darwin/loadall.sh
index 74cc5c2..8e63e01 100755
--- a/src/VBox/HostDrivers/darwin/loadall.sh
+++ b/src/VBox/HostDrivers/darwin/loadall.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 MY_DIR=`dirname "$0"`
 MY_DIR=`cd "${MY_DIR}" && pwd`
diff --git a/src/VBox/HostDrivers/freebsd/Makefile b/src/VBox/HostDrivers/freebsd/Makefile
index f37ec7c..107ae56 100644
--- a/src/VBox/HostDrivers/freebsd/Makefile
+++ b/src/VBox/HostDrivers/freebsd/Makefile
@@ -3,8 +3,7 @@
 #
 
 #
-#
-# Copyright (C) 2008-2015 Oracle Corporation
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +13,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 KBUILD_VERBOSE =
 
diff --git a/src/VBox/HostDrivers/freebsd/Makefile.kmk b/src/VBox/HostDrivers/freebsd/Makefile.kmk
index 7b087ca..d1ec98a 100644
--- a/src/VBox/HostDrivers/freebsd/Makefile.kmk
+++ b/src/VBox/HostDrivers/freebsd/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/linux/Makefile b/src/VBox/HostDrivers/linux/Makefile
index 85466b1..b91520d 100644
--- a/src/VBox/HostDrivers/linux/Makefile
+++ b/src/VBox/HostDrivers/linux/Makefile
@@ -3,8 +3,7 @@
 #
 
 #
-#
-# Copyright (C) 2008-2015 Oracle Corporation
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +13,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 ifneq ($(KBUILD_EXTMOD),)
 
@@ -92,7 +100,7 @@ clean:
 	@if [ -d vboxpci ]; then \
 	    $(MAKE) -C vboxpci clean; \
 	fi
-	rm -f vboxdrv.ko vboxnetflt.ko vboxnetadp.ko vboxpci.ko 
+	rm -f vboxdrv.ko vboxnetflt.ko vboxnetadp.ko vboxpci.ko
 
 check:
 	@$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxdrv check
diff --git a/src/VBox/HostDrivers/linux/Makefile.kmk b/src/VBox/HostDrivers/linux/Makefile.kmk
index edea128..a757542 100644
--- a/src/VBox/HostDrivers/linux/Makefile.kmk
+++ b/src/VBox/HostDrivers/linux/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/linux/build_in_tmp b/src/VBox/HostDrivers/linux/build_in_tmp
index aa07878..0939773 100755
--- a/src/VBox/HostDrivers/linux/build_in_tmp
+++ b/src/VBox/HostDrivers/linux/build_in_tmp
@@ -1,10 +1,13 @@
 #!/bin/sh
-
+# $Id: build_in_tmp $
+## @file
+# Script to build a kernel module in /tmp.
+#
+# Useful if the module sources are installed in read-only directory.
 #
-# Script to build a kernel module in /tmp. Useful if the module sources
-# are installed in read-only directory.
+
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +17,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 # find a unique temp directory
 num=0
diff --git a/src/VBox/HostDrivers/linux/export_modules b/src/VBox/HostDrivers/linux/export_modules
deleted file mode 100755
index fa27d7d..0000000
--- a/src/VBox/HostDrivers/linux/export_modules
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/bin/sh
-
-#
-# Create a tar archive containing the sources of the vboxdrv kernel module
-#
-# Copyright (C) 2007-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;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-#
-
-# The below is GNU-specific.  See VBox.sh for the longer Solaris/OS X version.
-TARGET=`readlink -e -- "${0}"` || exit 1
-MY_DIR="${TARGET%/[!/]*}"
-
-if [ -z "$1" ]; then
-    echo "Usage: $0 <filename.tar.gz> [--without-hardening]"
-    echo "  Export VirtualBox kernel modules to <filename.tar.gz>"
-    exit 1
-fi
-
-VBOX_WITH_HARDENING=1
-if [ "$2" = "--without-hardening" ]; then
-    VBOX_WITH_HARDENING=
-fi
-
-PATH_TMP="`cd \`dirname $1\`; pwd`/.vbox_modules"
-PATH_OUT=$PATH_TMP
-FILE_OUT="`cd \`dirname $1\`; pwd`/`basename $1`"
-PATH_ROOT="`cd ${MY_DIR}/../../../..; pwd`"
-PATH_LINUX="$PATH_ROOT/src/VBox/HostDrivers/linux"
-PATH_VBOXDRV="$PATH_ROOT/src/VBox/HostDrivers/Support"
-PATH_VBOXNET="$PATH_ROOT/src/VBox/HostDrivers/VBoxNetFlt"
-PATH_VBOXADP="$PATH_ROOT/src/VBox/HostDrivers/VBoxNetAdp"
-PATH_VBOXPCI="$PATH_ROOT/src/VBox/HostDrivers/VBoxPci"
-
-VBOX_VERSION_MAJOR=`sed -e "s/^ *VBOX_VERSION_MAJOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Config.kmk`
-VBOX_VERSION_MINOR=`sed -e "s/^ *VBOX_VERSION_MINOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Config.kmk`
-VBOX_VERSION_BUILD=`sed -e "s/^ *VBOX_VERSION_BUILD *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Config.kmk`
-VBOX_VERSION_STRING=$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
-VBOX_SVN_REV=`sed -e 's/^ *VBOX_SVN_REV_FALLBACK *:= \+\$(patsubst *%:,, *\$Rev: *\([0-9]\+\) *\$ *) */\1/;t;d' $PATH_ROOT/Config.kmk`                                                                                                        VBOX_VENDOR=`sed -e 's/^ *VBOX_VENDOR *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`                                     VBOX_VENDOR_SHORT=`sed -e 's/^ *VBOX_VENDOR_SHORT *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`                         VBOX_PRODUCT=`se [...]
-
-. $PATH_VBOXDRV/linux/files_vboxdrv
-. $PATH_VBOXNET/linux/files_vboxnetflt
-. $PATH_VBOXADP/linux/files_vboxnetadp
-. $PATH_VBOXPCI/linux/files_vboxpci
-
-# Temporary path for creating the modules, will be removed later
-mkdir $PATH_TMP || exit 1
-
-# Create auto-generated version file, needed by all modules
-echo "#ifndef ___version_generated_h___" > $PATH_TMP/version-generated.h
-echo "#define ___version_generated_h___" >> $PATH_TMP/version-generated.h
-echo "" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_MAJOR $VBOX_VERSION_MAJOR" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_MINOR $VBOX_VERSION_MINOR" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_BUILD $VBOX_VERSION_BUILD" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_STRING_RAW \"$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD\"" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_VERSION_STRING \"$VBOX_VERSION_STRING\"" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_API_VERSION_STRING \"${VBOX_VERSION_MAJOR}_${VBOX_VERSION_MINOR}\"" >> $PATH_TMP/version-generated.h
-echo "#define VBOX_PRIVATE_BUILD_DESC \"Private build with export_modules\"" >> $PATH_TMP/version-generated.h
-echo "" >> $PATH_TMP/version-generated.h
-echo "#endif" >> $PATH_TMP/version-generated.h
-
-# Create auto-generated revision file, needed by all modules
-echo "#ifndef __revision_generated_h__" > $PATH_TMP/revision-generated.h
-echo "#define __revision_generated_h__" >> $PATH_TMP/revision-generated.h
-echo "" >> $PATH_TMP/revision-generated.h
-echo "#define VBOX_SVN_REV $VBOX_SVN_REV" >> $PATH_TMP/revision-generated.h
-echo "" >> $PATH_TMP/revision-generated.h
-echo "#endif" >> $PATH_TMP/revision-generated.h
-
-# Create auto-generated product file, needed by all modules
-echo "#ifndef ___product_generated_h___" > $PATH_TMP/product-generated.h
-echo "#define ___product_generated_h___" >> $PATH_TMP/product-generated.h
-echo "" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_VENDOR \"$VBOX_VENDOR\"" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_VENDOR_SHORT \"$VBOX_VENDOR_SHORT\"" >> $PATH_TMP/product-generated.h
-echo "" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_PRODUCT \"$VBOX_PRODUCT\"" >> $PATH_TMP/product-generated.h
-echo "#define VBOX_C_YEAR \"$VBOX_C_YEAR\"" >> $PATH_TMP/product-generated.h
-echo "" >> $PATH_TMP/product-generated.h
-echo "#endif" >> $PATH_TMP/product-generated.h
-
-# vboxdrv (VirtualBox host kernel module)
-mkdir $PATH_TMP/vboxdrv || exit 1
-for f in $FILES_VBOXDRV_NOBIN; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxdrv/`echo $f|cut -d'>' -f2`"
-done
-for f in $FILES_VBOXDRV_BIN; do
-    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxdrv/`echo $f|cut -d'>' -f2`"
-done
-if [ -n "$VBOX_WITH_HARDENING" ]; then
-    sed -e "s;-DVBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV;;g" \
-        -e "s;-DIPRT_WITH_EFLAGS_AC_PRESERVING;;g" \
-        < $PATH_VBOXDRV/linux/Makefile > $PATH_TMP/vboxdrv/Makefile
-else
-    sed -e "s;-DVBOX_WITH_HARDENING;;g" \
-        -e "s;-DVBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV;;g" \
-        -e "s;-DIPRT_WITH_EFLAGS_AC_PRESERVING;;g" \
-        < $PATH_VBOXDRV/linux/Makefile > $PATH_TMP/vboxdrv/Makefile
-fi
-
-# vboxnetflt (VirtualBox netfilter kernel module)
-mkdir $PATH_TMP/vboxnetflt || exit 1
-for f in $VBOX_VBOXNETFLT_SOURCES; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxnetflt/`echo $f|cut -d'>' -f2`"
-done
-if [ -n "$VBOX_WITH_HARDENING" ]; then
-    cat                                   $PATH_VBOXNET/linux/Makefile > $PATH_TMP/vboxnetflt/Makefile
-else
-    sed -e "s;-DVBOX_WITH_HARDENING;;g" < $PATH_VBOXNET/linux/Makefile > $PATH_TMP/vboxnetflt/Makefile
-fi
-
-# vboxnetadp (VirtualBox network adapter kernel module)
-mkdir $PATH_TMP/vboxnetadp || exit 1
-for f in $VBOX_VBOXNETADP_SOURCES; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxnetadp/`echo $f|cut -d'>' -f2`"
-done
-if [ -n "$VBOX_WITH_HARDENING" ]; then
-    cat                                   $PATH_VBOXADP/linux/Makefile > $PATH_TMP/vboxnetadp/Makefile
-else
-    sed -e "s;-DVBOX_WITH_HARDENING;;g" < $PATH_VBOXADP/linux/Makefile > $PATH_TMP/vboxnetadp/Makefile
-fi
-
-# vboxpci (VirtualBox host PCI access kernel module)
-mkdir $PATH_TMP/vboxpci || exit 1
-for f in $VBOX_VBOXPCI_SOURCES; do
-    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxpci/`echo $f|cut -d'>' -f2`"
-done
-if [ -n "$VBOX_WITH_HARDENING" ]; then
-    cat                                   $PATH_VBOXPCI/linux/Makefile > $PATH_TMP/vboxpci/Makefile
-else
-    sed -e "s;-DVBOX_WITH_HARDENING;;g" < $PATH_VBOXPCI/linux/Makefile > $PATH_TMP/vboxpci/Makefile
-fi
-
-install -D -m 0644 $PATH_LINUX/Makefile $PATH_TMP/Makefile
-install -D -m 0755 $PATH_LINUX/build_in_tmp $PATH_TMP/build_in_tmp
-
-# Only temporary, omit from archive
-rm $PATH_TMP/version-generated.h
-rm $PATH_TMP/revision-generated.h
-rm $PATH_TMP/product-generated.h
-
-# Create the archive
-tar -czf $FILE_OUT -C $PATH_TMP . || exit 1
-
-# Remove the temporary directory
-rm -r $PATH_TMP
diff --git a/src/VBox/HostDrivers/linux/export_modules.sh b/src/VBox/HostDrivers/linux/export_modules.sh
new file mode 100755
index 0000000..c24a00e
--- /dev/null
+++ b/src/VBox/HostDrivers/linux/export_modules.sh
@@ -0,0 +1,172 @@
+#!/bin/sh
+# $Id$
+## @file
+# Create a tar archive containing the sources of the vboxdrv kernel module.
+#
+
+#
+# Copyright (C) 2007-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+# The below is GNU-specific.  See VBox.sh for the longer Solaris/OS X version.
+TARGET=`readlink -e -- "${0}"` || exit 1
+MY_DIR="${TARGET%/[!/]*}"
+
+if [ -z "$1" ]; then
+    echo "Usage: $0 <filename.tar.gz> [--without-hardening]"
+    echo "  Export VirtualBox kernel modules to <filename.tar.gz>"
+    exit 1
+fi
+
+VBOX_WITH_HARDENING=1
+if [ "$2" = "--without-hardening" ]; then
+    VBOX_WITH_HARDENING=
+fi
+
+PATH_TMP="`cd \`dirname $1\`; pwd`/.vbox_modules"
+PATH_OUT=$PATH_TMP
+FILE_OUT="`cd \`dirname $1\`; pwd`/`basename $1`"
+PATH_ROOT="`cd ${MY_DIR}/../../../..; pwd`"
+PATH_LOG=/tmp/vbox-export-host.log
+PATH_LINUX="$PATH_ROOT/src/VBox/HostDrivers/linux"
+PATH_VBOXDRV="$PATH_ROOT/src/VBox/HostDrivers/Support"
+PATH_VBOXNET="$PATH_ROOT/src/VBox/HostDrivers/VBoxNetFlt"
+PATH_VBOXADP="$PATH_ROOT/src/VBox/HostDrivers/VBoxNetAdp"
+PATH_VBOXPCI="$PATH_ROOT/src/VBox/HostDrivers/VBoxPci"
+
+VBOX_VERSION_MAJOR=`sed -e "s/^ *VBOX_VERSION_MAJOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Version.kmk`
+VBOX_VERSION_MINOR=`sed -e "s/^ *VBOX_VERSION_MINOR *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Version.kmk`
+VBOX_VERSION_BUILD=`sed -e "s/^ *VBOX_VERSION_BUILD *= \+\([0-9]\+\)/\1/;t;d" $PATH_ROOT/Version.kmk`
+VBOX_VERSION_STRING=$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD
+VBOX_SVN_REV=`sed -e 's/^ *VBOX_SVN_REV_FALLBACK *:= \+\$(patsubst *%:,, *\$Rev: *\([0-9]\+\) *\$ *) */\1/;t;d' $PATH_ROOT/Config.kmk`                                                                                                        VBOX_VENDOR=`sed -e 's/^ *VBOX_VENDOR *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`                                     VBOX_VENDOR_SHORT=`sed -e 's/^ *VBOX_VENDOR_SHORT *= \+\(.\+\)/\1/;t;d' $PATH_ROOT/Config.kmk`                         VBOX_PRODUCT=`se [...]
+
+. $PATH_VBOXDRV/linux/files_vboxdrv
+. $PATH_VBOXNET/linux/files_vboxnetflt
+. $PATH_VBOXADP/linux/files_vboxnetadp
+. $PATH_VBOXPCI/linux/files_vboxpci
+
+# Temporary path for creating the modules, will be removed later
+mkdir $PATH_TMP || exit 1
+
+# Create auto-generated version file, needed by all modules
+echo "#ifndef ___version_generated_h___" > $PATH_TMP/version-generated.h
+echo "#define ___version_generated_h___" >> $PATH_TMP/version-generated.h
+echo "" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_MAJOR $VBOX_VERSION_MAJOR" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_MINOR $VBOX_VERSION_MINOR" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_BUILD $VBOX_VERSION_BUILD" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_STRING_RAW \"$VBOX_VERSION_MAJOR.$VBOX_VERSION_MINOR.$VBOX_VERSION_BUILD\"" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_VERSION_STRING \"$VBOX_VERSION_STRING\"" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_API_VERSION_STRING \"${VBOX_VERSION_MAJOR}_${VBOX_VERSION_MINOR}\"" >> $PATH_TMP/version-generated.h
+echo "#define VBOX_PRIVATE_BUILD_DESC \"Private build with export_modules\"" >> $PATH_TMP/version-generated.h
+echo "" >> $PATH_TMP/version-generated.h
+echo "#endif" >> $PATH_TMP/version-generated.h
+
+# Create auto-generated revision file, needed by all modules
+echo "#ifndef __revision_generated_h__" > $PATH_TMP/revision-generated.h
+echo "#define __revision_generated_h__" >> $PATH_TMP/revision-generated.h
+echo "" >> $PATH_TMP/revision-generated.h
+echo "#define VBOX_SVN_REV $VBOX_SVN_REV" >> $PATH_TMP/revision-generated.h
+echo "" >> $PATH_TMP/revision-generated.h
+echo "#endif" >> $PATH_TMP/revision-generated.h
+
+# Create auto-generated product file, needed by all modules
+echo "#ifndef ___product_generated_h___" > $PATH_TMP/product-generated.h
+echo "#define ___product_generated_h___" >> $PATH_TMP/product-generated.h
+echo "" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_VENDOR \"$VBOX_VENDOR\"" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_VENDOR_SHORT \"$VBOX_VENDOR_SHORT\"" >> $PATH_TMP/product-generated.h
+echo "" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_PRODUCT \"$VBOX_PRODUCT\"" >> $PATH_TMP/product-generated.h
+echo "#define VBOX_C_YEAR \"$VBOX_C_YEAR\"" >> $PATH_TMP/product-generated.h
+echo "" >> $PATH_TMP/product-generated.h
+echo "#endif" >> $PATH_TMP/product-generated.h
+
+# vboxdrv (VirtualBox host kernel module)
+mkdir $PATH_TMP/vboxdrv || exit 1
+for f in $FILES_VBOXDRV_NOBIN; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxdrv/`echo $f|cut -d'>' -f2`"
+done
+for f in $FILES_VBOXDRV_BIN; do
+    install -D -m 0755 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxdrv/`echo $f|cut -d'>' -f2`"
+done
+if [ -n "$VBOX_WITH_HARDENING" ]; then
+    sed -e "s;-DVBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV;;g" \
+        -e "s;-DIPRT_WITH_EFLAGS_AC_PRESERVING;;g" \
+        < $PATH_VBOXDRV/linux/Makefile > $PATH_TMP/vboxdrv/Makefile
+else
+    sed -e "s;-DVBOX_WITH_HARDENING;;g" \
+        -e "s;-DVBOX_WITH_EFLAGS_AC_SET_IN_VBOXDRV;;g" \
+        -e "s;-DIPRT_WITH_EFLAGS_AC_PRESERVING;;g" \
+        < $PATH_VBOXDRV/linux/Makefile > $PATH_TMP/vboxdrv/Makefile
+fi
+
+# vboxnetflt (VirtualBox netfilter kernel module)
+mkdir $PATH_TMP/vboxnetflt || exit 1
+for f in $VBOX_VBOXNETFLT_SOURCES; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxnetflt/`echo $f|cut -d'>' -f2`"
+done
+if [ -n "$VBOX_WITH_HARDENING" ]; then
+    cat                                   $PATH_VBOXNET/linux/Makefile > $PATH_TMP/vboxnetflt/Makefile
+else
+    sed -e "s;-DVBOX_WITH_HARDENING;;g" < $PATH_VBOXNET/linux/Makefile > $PATH_TMP/vboxnetflt/Makefile
+fi
+
+# vboxnetadp (VirtualBox network adapter kernel module)
+mkdir $PATH_TMP/vboxnetadp || exit 1
+for f in $VBOX_VBOXNETADP_SOURCES; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxnetadp/`echo $f|cut -d'>' -f2`"
+done
+if [ -n "$VBOX_WITH_HARDENING" ]; then
+    cat                                   $PATH_VBOXADP/linux/Makefile > $PATH_TMP/vboxnetadp/Makefile
+else
+    sed -e "s;-DVBOX_WITH_HARDENING;;g" < $PATH_VBOXADP/linux/Makefile > $PATH_TMP/vboxnetadp/Makefile
+fi
+
+# vboxpci (VirtualBox host PCI access kernel module)
+mkdir $PATH_TMP/vboxpci || exit 1
+for f in $VBOX_VBOXPCI_SOURCES; do
+    install -D -m 0644 `echo $f|cut -d'=' -f1` "$PATH_TMP/vboxpci/`echo $f|cut -d'>' -f2`"
+done
+if [ -n "$VBOX_WITH_HARDENING" ]; then
+    cat                                   $PATH_VBOXPCI/linux/Makefile > $PATH_TMP/vboxpci/Makefile
+else
+    sed -e "s;-DVBOX_WITH_HARDENING;;g" < $PATH_VBOXPCI/linux/Makefile > $PATH_TMP/vboxpci/Makefile
+fi
+
+install -D -m 0644 $PATH_LINUX/Makefile $PATH_TMP/Makefile
+install -D -m 0755 $PATH_LINUX/build_in_tmp $PATH_TMP/build_in_tmp
+
+# Only temporary, omit from archive
+rm $PATH_TMP/version-generated.h
+rm $PATH_TMP/revision-generated.h
+rm $PATH_TMP/product-generated.h
+
+# Do a test build
+echo Doing a test build, this may take a while.
+make -C $PATH_TMP > $PATH_LOG 2>&1 &&
+    make -C $PATH_TMP clean >> $PATH_LOG 2>&1 ||
+    echo "Warning: test build failed.  Please check $PATH_LOG"
+
+# Create the archive
+tar -czf $FILE_OUT -C $PATH_TMP . || exit 1
+
+# Remove the temporary directory
+rm -r $PATH_TMP
diff --git a/src/VBox/HostDrivers/linux/load.sh b/src/VBox/HostDrivers/linux/load.sh
index 3d37317..f51b4d6 100755
--- a/src/VBox/HostDrivers/linux/load.sh
+++ b/src/VBox/HostDrivers/linux/load.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 TARGET=`readlink -e -- "${0}"` || exit 1  # The GNU-specific way.
 MY_DIR="${TARGET%/[!/]*}"
diff --git a/src/VBox/HostDrivers/linux/loadall.sh b/src/VBox/HostDrivers/linux/loadall.sh
index 9a9c907..1e6a8aa 100755
--- a/src/VBox/HostDrivers/linux/loadall.sh
+++ b/src/VBox/HostDrivers/linux/loadall.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 TARGET=`readlink -e -- "${0}"` || exit 1 # The GNU-specific way.
 MY_DIR="${TARGET%/[!/]*}"
diff --git a/src/VBox/HostDrivers/win/Makefile.kmk b/src/VBox/HostDrivers/win/Makefile.kmk
index 9eb8cc0..8a104f2 100644
--- a/src/VBox/HostDrivers/win/Makefile.kmk
+++ b/src/VBox/HostDrivers/win/Makefile.kmk
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
diff --git a/src/VBox/HostDrivers/win/VBoxDbgLog.h b/src/VBox/HostDrivers/win/VBoxDbgLog.h
index f59d34a..4710478 100644
--- a/src/VBox/HostDrivers/win/VBoxDbgLog.h
+++ b/src/VBox/HostDrivers/win/VBoxDbgLog.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 #ifndef ___VBoxDbgLog_h___
diff --git a/src/VBox/HostDrivers/win/cfg/VBoxDrvCfg.cpp b/src/VBox/HostDrivers/win/cfg/VBoxDrvCfg.cpp
index 216b597..63e4575 100644
--- a/src/VBox/HostDrivers/win/cfg/VBoxDrvCfg.cpp
+++ b/src/VBox/HostDrivers/win/cfg/VBoxDrvCfg.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/HostDrivers/win/load.cmd b/src/VBox/HostDrivers/win/load.cmd
index fe412c8..0721481 100644
--- a/src/VBox/HostDrivers/win/load.cmd
+++ b/src/VBox/HostDrivers/win/load.cmd
@@ -5,7 +5,7 @@ rem Windows NT batch script for launching load.sh
 rem
 
 rem
-rem Copyright (C) 2009-2015 Oracle Corporation
+rem Copyright (C) 2009-2017 Oracle Corporation
 rem
 rem This file is part of VirtualBox Open Source Edition (OSE), as
 rem available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@ rem Foundation, in version 2 as it comes in the "COPYING" file of the
 rem VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 rem hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 rem
+rem The contents of this file may alternatively be used under the terms
+rem of the Common Development and Distribution License Version 1.0
+rem (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+rem VirtualBox OSE distribution, in which case the provisions of the
+rem CDDL are applicable instead of those of the GPL.
+rem
+rem You may elect to license modified versions of this file under the
+rem terms and conditions of either the GPL or the CDDL or both.
+rem
 
 
 setlocal ENABLEEXTENSIONS
diff --git a/src/VBox/HostDrivers/win/load.sh b/src/VBox/HostDrivers/win/load.sh
index f158a6b..51ce81b 100755
--- a/src/VBox/HostDrivers/win/load.sh
+++ b/src/VBox/HostDrivers/win/load.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 if test -n "$Path" -a -z "$PATH"; then
     export PATH="$Path"
diff --git a/src/VBox/HostDrivers/win/loadall.cmd b/src/VBox/HostDrivers/win/loadall.cmd
index abf8921..7d04237 100644
--- a/src/VBox/HostDrivers/win/loadall.cmd
+++ b/src/VBox/HostDrivers/win/loadall.cmd
@@ -5,7 +5,7 @@ rem Windows NT batch script for launching loadall.sh
 rem
 
 rem
-rem Copyright (C) 2009-2015 Oracle Corporation
+rem Copyright (C) 2009-2017 Oracle Corporation
 rem
 rem This file is part of VirtualBox Open Source Edition (OSE), as
 rem available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,15 @@ rem Foundation, in version 2 as it comes in the "COPYING" file of the
 rem VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 rem hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 rem
+rem The contents of this file may alternatively be used under the terms
+rem of the Common Development and Distribution License Version 1.0
+rem (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+rem VirtualBox OSE distribution, in which case the provisions of the
+rem CDDL are applicable instead of those of the GPL.
+rem
+rem You may elect to license modified versions of this file under the
+rem terms and conditions of either the GPL or the CDDL or both.
+rem
 
 
 setlocal ENABLEEXTENSIONS
diff --git a/src/VBox/HostDrivers/win/loadall.sh b/src/VBox/HostDrivers/win/loadall.sh
index 028a01f..95907e0 100755
--- a/src/VBox/HostDrivers/win/loadall.sh
+++ b/src/VBox/HostDrivers/win/loadall.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +14,15 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
 
 if test -n "$Path" -a -z "$PATH"; then
     export PATH="$Path"
diff --git a/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.rc b/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.rc
index 11a8a1f..c944a63 100644
--- a/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.rc
+++ b/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/DragAndDrop/dndmanager.cpp b/src/VBox/HostServices/DragAndDrop/dndmanager.cpp
index 4d16e84..45396c1 100644
--- a/src/VBox/HostServices/DragAndDrop/dndmanager.cpp
+++ b/src/VBox/HostServices/DragAndDrop/dndmanager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/DragAndDrop/dndmanager.h b/src/VBox/HostServices/DragAndDrop/dndmanager.h
index e5bd557..7d5c7be 100644
--- a/src/VBox/HostServices/DragAndDrop/dndmanager.h
+++ b/src/VBox/HostServices/DragAndDrop/dndmanager.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/DragAndDrop/service.cpp b/src/VBox/HostServices/DragAndDrop/service.cpp
index 01ba8fe..71ed78d 100644
--- a/src/VBox/HostServices/DragAndDrop/service.cpp
+++ b/src/VBox/HostServices/DragAndDrop/service.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/GuestControl/VBoxGuestControlSvc.rc b/src/VBox/HostServices/GuestControl/VBoxGuestControlSvc.rc
index 66bcef6..b54a128 100644
--- a/src/VBox/HostServices/GuestControl/VBoxGuestControlSvc.rc
+++ b/src/VBox/HostServices/GuestControl/VBoxGuestControlSvc.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/GuestControl/service.cpp b/src/VBox/HostServices/GuestControl/service.cpp
index 88b7a28..c13f545 100644
--- a/src/VBox/HostServices/GuestControl/service.cpp
+++ b/src/VBox/HostServices/GuestControl/service.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp b/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp
index 6035985..a21606e 100644
--- a/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp
+++ b/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/GuestProperties/VBoxGuestPropSvc.rc b/src/VBox/HostServices/GuestProperties/VBoxGuestPropSvc.rc
index 0f9c558..8b48d1f 100644
--- a/src/VBox/HostServices/GuestProperties/VBoxGuestPropSvc.rc
+++ b/src/VBox/HostServices/GuestProperties/VBoxGuestPropSvc.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/GuestProperties/service.cpp b/src/VBox/HostServices/GuestProperties/service.cpp
index c403626..70c5054 100644
--- a/src/VBox/HostServices/GuestProperties/service.cpp
+++ b/src/VBox/HostServices/GuestProperties/service.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/GuestProperties/testcase/tstGuestPropSvc.cpp b/src/VBox/HostServices/GuestProperties/testcase/tstGuestPropSvc.cpp
index 638374a..20b67d0 100644
--- a/src/VBox/HostServices/GuestProperties/testcase/tstGuestPropSvc.cpp
+++ b/src/VBox/HostServices/GuestProperties/testcase/tstGuestPropSvc.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/HostChannel/HostChannel.cpp b/src/VBox/HostServices/HostChannel/HostChannel.cpp
index b5fd759..0b44390 100644
--- a/src/VBox/HostServices/HostChannel/HostChannel.cpp
+++ b/src/VBox/HostServices/HostChannel/HostChannel.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/HostChannel/HostChannel.h b/src/VBox/HostServices/HostChannel/HostChannel.h
index 56858ee..8e99412 100644
--- a/src/VBox/HostServices/HostChannel/HostChannel.h
+++ b/src/VBox/HostServices/HostChannel/HostChannel.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/HostChannel/VBoxHostChannel.rc b/src/VBox/HostServices/HostChannel/VBoxHostChannel.rc
index 27665d1..adf43d2 100644
--- a/src/VBox/HostServices/HostChannel/VBoxHostChannel.rc
+++ b/src/VBox/HostServices/HostChannel/VBoxHostChannel.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/HostChannel/service.cpp b/src/VBox/HostServices/HostChannel/service.cpp
index d67c6c2..502f1b1 100644
--- a/src/VBox/HostServices/HostChannel/service.cpp
+++ b/src/VBox/HostServices/HostChannel/service.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/VBoxClipboard-win.cpp b/src/VBox/HostServices/SharedClipboard/VBoxClipboard-win.cpp
index 4e5664e..252d74d 100644
--- a/src/VBox/HostServices/SharedClipboard/VBoxClipboard-win.cpp
+++ b/src/VBox/HostServices/SharedClipboard/VBoxClipboard-win.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/VBoxClipboard.h b/src/VBox/HostServices/SharedClipboard/VBoxClipboard.h
index 8085d3d..e22de7b 100644
--- a/src/VBox/HostServices/SharedClipboard/VBoxClipboard.h
+++ b/src/VBox/HostServices/SharedClipboard/VBoxClipboard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboard.rc b/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboard.rc
index 9c29b8b..826f6b4 100644
--- a/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboard.rc
+++ b/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboard.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.cpp b/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.cpp
index 54f2d2b..3d7ca46 100644
--- a/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.cpp
+++ b/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.cpp
@@ -6,7 +6,7 @@
 /*
  * Includes contributions from Fran�ois Revol
  *
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.h b/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.h
index af93bbb..45a3a64 100644
--- a/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.h
+++ b/src/VBox/HostServices/SharedClipboard/darwin-pasteboard.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/darwin.cpp b/src/VBox/HostServices/SharedClipboard/darwin.cpp
index fc766ea..58fafae 100644
--- a/src/VBox/HostServices/SharedClipboard/darwin.cpp
+++ b/src/VBox/HostServices/SharedClipboard/darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedClipboard/service.cpp b/src/VBox/HostServices/SharedClipboard/service.cpp
index 8b8c3a9..47e0020 100644
--- a/src/VBox/HostServices/SharedClipboard/service.cpp
+++ b/src/VBox/HostServices/SharedClipboard/service.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -196,10 +196,22 @@ static bool vboxSvcClipboardReturnMsg (VBOXCLIPBOARDCLIENTDATA *pClient, VBOXHGC
     }
     else if (pClient->fMsgReadData)
     {
+        uint32_t fFormat = 0;
+
         LogRelFlow(("vboxSvcClipboardReturnMsg: ReadData %02X\n", pClient->u32RequestedFormat));
+        if (pClient->u32RequestedFormat & VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT)
+            fFormat = VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT;
+        else if (pClient->u32RequestedFormat & VBOX_SHARED_CLIPBOARD_FMT_BITMAP)
+            fFormat = VBOX_SHARED_CLIPBOARD_FMT_BITMAP;
+        else if (pClient->u32RequestedFormat & VBOX_SHARED_CLIPBOARD_FMT_HTML)
+            fFormat = VBOX_SHARED_CLIPBOARD_FMT_HTML;
+        else
+            AssertStmt(pClient->u32RequestedFormat == 0, pClient->u32RequestedFormat = 0);
+        pClient->u32RequestedFormat &= ~fFormat;
         VBoxHGCMParmUInt32Set (&paParms[0], VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
-        VBoxHGCMParmUInt32Set (&paParms[1], pClient->u32RequestedFormat);
-        pClient->fMsgReadData = false;
+        VBoxHGCMParmUInt32Set (&paParms[1], fFormat);
+        if (pClient->u32RequestedFormat == 0)
+            pClient->fMsgReadData = false;
     }
     else if (pClient->fMsgFormats)
     {
diff --git a/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp b/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp
index 8b79907..7779a09 100644
--- a/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp
+++ b/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -25,10 +25,28 @@
 
 extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *ptable);
 
+static VBOXCLIPBOARDCLIENTDATA g_Client;
+static VBOXHGCMSVCHELPERS g_Helpers = { NULL };
+
+/** Simple call handle structure for the guest call completion callback */
+struct VBOXHGCMCALLHANDLE_TYPEDEF
+{
+    /** Where to store the result code */
+    int32_t rc;
+};
+
+/** Call completion callback for guest calls. */
+static DECLCALLBACK(void) callComplete(VBOXHGCMCALLHANDLE callHandle, int32_t rc)
+{
+    callHandle->rc = rc;
+}
+
 static int setupTable(VBOXHGCMSVCFNTABLE *pTable)
 {
     pTable->cbSize = sizeof(*pTable);
     pTable->u32Version = VBOX_HGCM_SVC_VERSION;
+    g_Helpers.pfnCallComplete = callComplete;
+    pTable->pHelpers = &g_Helpers;
     return VBoxHGCMSvcLoad(pTable);
 }
 
@@ -74,6 +92,107 @@ static void testSetMode(void)
     u32Mode = TestClipSvcGetMode();
     RTTESTI_CHECK_MSG(u32Mode == VBOX_SHARED_CLIPBOARD_MODE_OFF,
                       ("u32Mode=%u\n", (unsigned) u32Mode));
+    table.pfnUnload(NULL);
+}
+
+static void testGetHostMsg(void)
+{
+    struct VBOXHGCMSVCPARM parms[2];
+    VBOXHGCMSVCFNTABLE table;
+    VBOXHGCMCALLHANDLE_TYPEDEF call;
+    int rc;
+
+    RTTestISub("Setting up VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG test");
+    rc = setupTable(&table);
+    RTTESTI_CHECK_MSG_RETV(RT_SUCCESS(rc), ("rc=%Rrc\n", rc));
+    /* Unless we are bidirectional the host message requests will be dropped. */
+    parms[0].setUInt32(VBOX_SHARED_CLIPBOARD_MODE_BIDIRECTIONAL);
+    rc = table.pfnHostCall(NULL, VBOX_SHARED_CLIPBOARD_HOST_FN_SET_MODE,
+                           1, parms);
+    RTTESTI_CHECK_RC_OK(rc);
+
+    RTTestISub("Testing FN_GET_HOST_MSG, one format, waiting guest call.");
+    RT_ZERO(g_Client);
+    parms[0].setUInt32(0);
+    parms[1].setUInt32(0);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN);  /* This should get updated only when the guest call completes. */
+    vboxSvcClipboardReportMsg (&g_Client, VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA,
+                               VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
+    RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
+    RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
+    RTTESTI_CHECK_RC_OK(call.rc);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN);  /* This call should not complete yet. */
+
+    RTTestISub("Testing FN_GET_HOST_MSG, one format, no waiting guest calls.");
+    RT_ZERO(g_Client);
+    vboxSvcClipboardReportMsg (&g_Client, VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA,
+                               VBOX_SHARED_CLIPBOARD_FMT_HTML);
+    parms[0].setUInt32(0);
+    parms[1].setUInt32(0);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
+    RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHARED_CLIPBOARD_FMT_HTML);
+    RTTESTI_CHECK_RC_OK(call.rc);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN);  /* This call should not complete yet. */
+
+    RTTestISub("Testing FN_GET_HOST_MSG, two formats, waiting guest call.");
+    RT_ZERO(g_Client);
+    parms[0].setUInt32(0);
+    parms[1].setUInt32(0);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN);  /* This should get updated only when the guest call completes. */
+    vboxSvcClipboardReportMsg (&g_Client, VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA,
+                               VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT | VBOX_SHARED_CLIPBOARD_FMT_HTML);
+    RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
+    RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
+    RTTESTI_CHECK_RC_OK(call.rc);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
+    RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHARED_CLIPBOARD_FMT_HTML);
+    RTTESTI_CHECK_RC_OK(call.rc);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN);  /* This call should not complete yet. */
+
+    RTTestISub("Testing FN_GET_HOST_MSG, two formats, no waiting guest calls.");
+    RT_ZERO(g_Client);
+    vboxSvcClipboardReportMsg (&g_Client, VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA,
+                               VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT | VBOX_SHARED_CLIPBOARD_FMT_HTML);
+    parms[0].setUInt32(0);
+    parms[1].setUInt32(0);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
+    RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT);
+    RTTESTI_CHECK_RC_OK(call.rc);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA);
+    RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHARED_CLIPBOARD_FMT_HTML);
+    RTTESTI_CHECK_RC_OK(call.rc);
+    call.rc = VERR_TRY_AGAIN;
+    table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG,
+                  2, parms);
+    RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN);  /* This call should not complete yet. */
+    table.pfnUnload(NULL);
 }
 
 static void testSetHeadless(void)
@@ -115,6 +234,7 @@ static void testSetHeadless(void)
     RTTESTI_CHECK_RC_OK(rc);
     fHeadless = vboxSvcClipboardGetHeadless();
     RTTESTI_CHECK_MSG(fHeadless == true, ("fHeadless=%RTbool\n", fHeadless));
+    table.pfnUnload(NULL);
 }
 
 static void testHostCall(void)
@@ -143,6 +263,7 @@ int main(int argc, char *argv[])
      * Run the tests.
      */
     testHostCall();
+    testGetHostMsg();
 
     /*
      * Summary
@@ -151,7 +272,7 @@ int main(int argc, char *argv[])
 }
 
 int vboxClipboardInit() { return VINF_SUCCESS; }
-void vboxClipboardDestroy() { AssertFailed(); }
+void vboxClipboardDestroy() {}
 void vboxClipboardDisconnect(_VBOXCLIPBOARDCLIENTDATA*) { AssertFailed(); }
 int vboxClipboardConnect(_VBOXCLIPBOARDCLIENTDATA*, bool)
 { AssertFailed(); return VERR_WRONG_ORDER; }
diff --git a/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp b/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp
index 9d1975a..68853a0 100644
--- a/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp
+++ b/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -259,7 +259,7 @@ int vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient,
 void ClipCompleteDataRequestFromX11(VBOXCLIPBOARDCONTEXT *pCtx, int rc,
                                     CLIPREADCBREQ *pReq, void *pv, uint32_t cb)
 {
-    if (cb <= pReq->cb)
+    if (cb <= pReq->cb && cb != 0)
         memcpy(pReq->pv, pv, cb);
     RTMemFree(pReq);
     vboxSvcClipboardCompleteReadData(pCtx->pClient, rc, cb);
diff --git a/src/VBox/HostServices/SharedClipboard/x11-stub.cpp b/src/VBox/HostServices/SharedClipboard/x11-stub.cpp
index 7a745d8..d890215 100644
--- a/src/VBox/HostServices/SharedClipboard/x11-stub.cpp
+++ b/src/VBox/HostServices/SharedClipboard/x11-stub.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -72,7 +72,7 @@ int vboxClipboardSync (VBOXCLIPBOARDCLIENTDATA * /* pClient */)
 
 /**
  * Shut down the shared clipboard subsystem and "disconnect" the guest.
- * 
+ *
  * @param   pClient    Structure containing context information about the guest system
  */
 void vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient)
diff --git a/src/VBox/HostServices/SharedFolders/VBoxSharedFolders.rc b/src/VBox/HostServices/SharedFolders/VBoxSharedFolders.rc
index 1072150..37fb626 100644
--- a/src/VBox/HostServices/SharedFolders/VBoxSharedFolders.rc
+++ b/src/VBox/HostServices/SharedFolders/VBoxSharedFolders.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/mappings.cpp b/src/VBox/HostServices/SharedFolders/mappings.cpp
index d40ecdb..ec378f8 100644
--- a/src/VBox/HostServices/SharedFolders/mappings.cpp
+++ b/src/VBox/HostServices/SharedFolders/mappings.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/mappings.h b/src/VBox/HostServices/SharedFolders/mappings.h
index f51724f..5315b19 100644
--- a/src/VBox/HostServices/SharedFolders/mappings.h
+++ b/src/VBox/HostServices/SharedFolders/mappings.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/service.cpp b/src/VBox/HostServices/SharedFolders/service.cpp
index 8fceacd..35b0b11 100644
--- a/src/VBox/HostServices/SharedFolders/service.cpp
+++ b/src/VBox/HostServices/SharedFolders/service.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/shfl.h b/src/VBox/HostServices/SharedFolders/shfl.h
index 15f64cc..0cd1799 100644
--- a/src/VBox/HostServices/SharedFolders/shfl.h
+++ b/src/VBox/HostServices/SharedFolders/shfl.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/shflhandle.cpp b/src/VBox/HostServices/SharedFolders/shflhandle.cpp
index e592bc8..abca7cf 100644
--- a/src/VBox/HostServices/SharedFolders/shflhandle.cpp
+++ b/src/VBox/HostServices/SharedFolders/shflhandle.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/shflhandle.h b/src/VBox/HostServices/SharedFolders/shflhandle.h
index ba25f9c..a01ee06 100644
--- a/src/VBox/HostServices/SharedFolders/shflhandle.h
+++ b/src/VBox/HostServices/SharedFolders/shflhandle.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -52,8 +52,8 @@ typedef struct _SHFLFILEHANDLE
         } file;
         struct
         {
-            PRTDIR        Handle;
-            PRTDIR        SearchHandle;
+            RTDIR         Handle;
+            RTDIR         SearchHandle;
             PRTDIRENTRYEX pLastValidEntry; /* last found file in a directory search */
         } dir;
     };
diff --git a/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.cpp b/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.cpp
index 65a7664..f2aeadc 100644
--- a/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.cpp
+++ b/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.cpp
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -119,12 +119,12 @@ static void bufferFromPath(void *pvDest, size_t cb, const char *pcszSrc)
 *********************************************************************************************************************************/
 static bool g_fFailIfNotLowercase = false;
 
-static PRTDIR g_testRTDirClosepDir;
+static RTDIR g_testRTDirClose_hDir = NIL_RTDIR;
 
-extern int testRTDirClose(PRTDIR pDir)
+extern int testRTDirClose(RTDIR hDir)
 {
- /* RTPrintf("%s: pDir=%p\n", __PRETTY_FUNCTION__, pDir); */
-    g_testRTDirClosepDir = pDir;
+ /* RTPrintf("%s: hDir=%p\n", __PRETTY_FUNCTION__, hDir); */
+    g_testRTDirClose_hDir = hDir;
     return VINF_SUCCESS;
 }
 
@@ -149,21 +149,21 @@ static struct TESTDIRHANDLE
     int iDir;
 } g_aTestDirHandles[4];
 static int g_iNextDirHandle = 0;
-static PRTDIR testRTDirOpenpDir;
+static RTDIR testRTDirOpen_hDir;
 
-extern int testRTDirOpen(PRTDIR *ppDir, const char *pszPath)
+extern int testRTDirOpen(RTDIR *phDir, const char *pszPath)
 {
  /* RTPrintf("%s: pszPath=%s\n", __PRETTY_FUNCTION__, pszPath); */
     if (g_fFailIfNotLowercase && !RTStrIsLowerCased(strpbrk(pszPath, "/\\")))
         return VERR_FILE_NOT_FOUND;
     ARRAY_FROM_PATH(testRTDirOpenName, pszPath);
-    *ppDir = testRTDirOpenpDir;
-    testRTDirOpenpDir = 0;
-    if (!*ppDir && g_fFailIfNotLowercase)
-        *ppDir = (PRTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
-    if (*ppDir)
+    *phDir = testRTDirOpen_hDir;
+    testRTDirOpen_hDir = NIL_RTDIR;
+    if (!*phDir && g_fFailIfNotLowercase)
+        *phDir = (RTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
+    if (*phDir)
     {
-        struct TESTDIRHANDLE *pRealDir = (struct TESTDIRHANDLE *)*ppDir;
+        struct TESTDIRHANDLE *pRealDir = (struct TESTDIRHANDLE *)*phDir;
         pRealDir->iEntry = 0;
         pRealDir->iDir   = 0;
         const char *pszSlash = pszPath - 1;
@@ -175,19 +175,19 @@ extern int testRTDirOpen(PRTDIR *ppDir, const char *pszPath)
 }
 
 /** @todo Do something useful with the last two arguments. */
-extern int testRTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER, uint32_t)
+extern int testRTDirOpenFiltered(RTDIR *phDir, const char *pszPath, RTDIRFILTER, uint32_t)
 {
  /* RTPrintf("%s: pszPath=%s\n", __PRETTY_FUNCTION__, pszPath); */
     if (g_fFailIfNotLowercase && !RTStrIsLowerCased(strpbrk(pszPath, "/\\")))
         return VERR_FILE_NOT_FOUND;
     ARRAY_FROM_PATH(testRTDirOpenName, pszPath);
-    *ppDir = testRTDirOpenpDir;
-    testRTDirOpenpDir = 0;
-    if (!*ppDir && g_fFailIfNotLowercase)
-        *ppDir = (PRTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
-    if (*ppDir)
+    *phDir = testRTDirOpen_hDir;
+    testRTDirOpen_hDir = NIL_RTDIR;
+    if (!*phDir && g_fFailIfNotLowercase)
+        *phDir = (RTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
+    if (*phDir)
     {
-        struct TESTDIRHANDLE *pRealDir = (struct TESTDIRHANDLE *)*ppDir;
+        struct TESTDIRHANDLE *pRealDir = (struct TESTDIRHANDLE *)*phDir;
         pRealDir->iEntry = 0;
         pRealDir->iDir   = 0;
         const char *pszSlash = pszPath - 1;
@@ -199,15 +199,15 @@ extern int testRTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER
     return VINF_SUCCESS;
 }
 
-static PRTDIR g_testRTDirQueryInfoDir;
+static RTDIR g_testRTDirQueryInfo_hDir;
 static RTTIMESPEC testRTDirQueryInfoATime;
 
-extern int testRTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
+extern int testRTDirQueryInfo(RTDIR hDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
 {
     RT_NOREF1(enmAdditionalAttribs);
- /* RTPrintf("%s: pDir=%p, enmAdditionalAttribs=0x%llx\n", __PRETTY_FUNCTION__,
-             pDir, LLUIFY(enmAdditionalAttribs)); */
-    g_testRTDirQueryInfoDir = pDir;
+ /* RTPrintf("%s: hDir=%p, enmAdditionalAttribs=0x%llx\n", __PRETTY_FUNCTION__,
+             hDir, LLUIFY(enmAdditionalAttribs)); */
+    g_testRTDirQueryInfo_hDir = hDir;
     RT_ZERO(*pObjInfo);
     pObjInfo->AccessTime = testRTDirQueryInfoATime;
     RT_ZERO(testRTDirQueryInfoATime);
@@ -222,19 +222,19 @@ extern int testRTDirRemove(const char *pszPath)
     return 0;
 }
 
-static PRTDIR g_testRTDirReadExDir;
+static RTDIR g_testRTDirReadEx_hDir;
 
-extern int testRTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
+extern int testRTDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
                            RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
 {
     RT_NOREF4(pDirEntry, pcbDirEntry, enmAdditionalAttribs, fFlags);
- /* RTPrintf("%s: pDir=%p, pcbDirEntry=%d, enmAdditionalAttribs=%llu, fFlags=0x%llx\n",
-             __PRETTY_FUNCTION__, pDir, pcbDirEntry ? (int) *pcbDirEntry : -1,
+ /* RTPrintf("%s: hDir=%p, pcbDirEntry=%d, enmAdditionalAttribs=%llu, fFlags=0x%llx\n",
+             __PRETTY_FUNCTION__, hDir, pcbDirEntry ? (int) *pcbDirEntry : -1,
              LLUIFY(enmAdditionalAttribs), LLUIFY(fFlags)); */
-    g_testRTDirReadExDir = pDir;
-    if (g_fFailIfNotLowercase && pDir)
+    g_testRTDirReadEx_hDir = hDir;
+    if (g_fFailIfNotLowercase && hDir != NIL_RTDIR)
     {
-        struct TESTDIRHANDLE *pRealDir = (struct TESTDIRHANDLE *)pDir;
+        struct TESTDIRHANDLE *pRealDir = (struct TESTDIRHANDLE *)hDir;
         if (pRealDir->iDir == 2) /* /test/mapping/ */
         {
             if (pRealDir->iEntry == 0)
@@ -272,12 +272,12 @@ extern int testRTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirE
 
 static RTTIMESPEC testRTDirSetTimesATime;
 
-extern int testRTDirSetTimes(PRTDIR pDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+extern int testRTDirSetTimes(RTDIR hDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
                              PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
 {
-    RT_NOREF4(pDir, pModificationTime, pChangeTime, pBirthTime);
- /* RTPrintf("%s: pDir=%p, *pAccessTime=%lli, *pModificationTime=%lli, *pChangeTime=%lli, *pBirthTime=%lli\n",
-             __PRETTY_FUNCTION__, pDir,
+    RT_NOREF4(hDir, pModificationTime, pChangeTime, pBirthTime);
+ /* RTPrintf("%s: hDir=%p, *pAccessTime=%lli, *pModificationTime=%lli, *pChangeTime=%lli, *pBirthTime=%lli\n",
+             __PRETTY_FUNCTION__, hDir,
              pAccessTime ? (long long)RTTimeSpecGetNano(pAccessTime) : -1,
                pModificationTime
              ? (long long)RTTimeSpecGetNano(pModificationTime) : -1,
@@ -895,14 +895,14 @@ void testCreateDirSimple(RTTEST hTest)
     VBOXHGCMSVCFNTABLE  svcTable;
     VBOXHGCMSVCHELPERS  svcHelpers;
     SHFLROOT Root;
-    PRTDIR pDir = (PRTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
+    RTDIR hDir = (RTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
     SHFLCREATERESULT Result;
     int rc;
 
     RTTestSub(hTest, "Create directory simple");
     Root = initWithWritableMapping(hTest, &svcTable, &svcHelpers,
                                    "/test/mapping", "testname");
-    testRTDirOpenpDir = pDir;
+    testRTDirOpen_hDir = hDir;
     rc = createFile(&svcTable, Root, "test/dir",
                     SHFL_CF_DIRECTORY | SHFL_CF_ACCESS_READ, NULL, &Result);
     RTTEST_CHECK_RC_OK(hTest, rc);
@@ -920,7 +920,7 @@ void testCreateDirSimple(RTTEST hTest)
     AssertReleaseRC(svcTable.pfnDisconnect(NULL, 0, svcTable.pvService));
     AssertReleaseRC(svcTable.pfnUnload(NULL));
     RTTestGuardedFree(hTest, svcTable.pvService);
-    RTTEST_CHECK_MSG(hTest, g_testRTDirClosepDir == pDir, (hTest, "pDir=%p\n", g_testRTDirClosepDir));
+    RTTEST_CHECK_MSG(hTest, g_testRTDirClose_hDir == hDir, (hTest, "hDir=%p\n", g_testRTDirClose_hDir));
 }
 
 void testReadFileSimple(RTTEST hTest)
@@ -1023,7 +1023,7 @@ void testDirListEmpty(RTTEST hTest)
     VBOXHGCMSVCFNTABLE  svcTable;
     VBOXHGCMSVCHELPERS  svcHelpers;
     SHFLROOT Root;
-    PRTDIR pDir = (PRTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
+    RTDIR hDir = (RTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
     SHFLHANDLE Handle;
     union
     {
@@ -1036,20 +1036,20 @@ void testDirListEmpty(RTTEST hTest)
     RTTestSub(hTest, "List empty directory");
     Root = initWithWritableMapping(hTest, &svcTable, &svcHelpers,
                                    "/test/mapping", "testname");
-    testRTDirOpenpDir = pDir;
+    testRTDirOpen_hDir = hDir;
     rc = createFile(&svcTable, Root, "test/dir",
                     SHFL_CF_DIRECTORY | SHFL_CF_ACCESS_READ, &Handle, NULL);
     RTTEST_CHECK_RC_OK(hTest, rc);
     rc = listDir(&svcTable, Root, Handle, 0, NULL, &Buf.DirInfo, sizeof(Buf), 0, &cFiles);
     RTTEST_CHECK_RC(hTest, rc, VERR_NO_MORE_FILES);
-    RTTEST_CHECK_MSG(hTest, g_testRTDirReadExDir == pDir, (hTest, "Dir=%p\n", g_testRTDirReadExDir));
+    RTTEST_CHECK_MSG(hTest, g_testRTDirReadEx_hDir == hDir, (hTest, "Dir=%p\n", g_testRTDirReadEx_hDir));
     RTTEST_CHECK_MSG(hTest, cFiles == 0,
                      (hTest, "cFiles=%llu\n", LLUIFY(cFiles)));
     unmapAndRemoveMapping(hTest, &svcTable, Root, "testname");
     AssertReleaseRC(svcTable.pfnDisconnect(NULL, 0, svcTable.pvService));
     AssertReleaseRC(svcTable.pfnUnload(NULL));
     RTTestGuardedFree(hTest, svcTable.pvService);
-    RTTEST_CHECK_MSG(hTest, g_testRTDirClosepDir == pDir, (hTest, "pDir=%p\n", g_testRTDirClosepDir));
+    RTTEST_CHECK_MSG(hTest, g_testRTDirClose_hDir == hDir, (hTest, "hDir=%p\n", g_testRTDirClose_hDir));
 }
 
 void testFSInfoQuerySetFMode(RTTEST hTest)
@@ -1098,7 +1098,7 @@ void testFSInfoQuerySetDirATime(RTTEST hTest)
     VBOXHGCMSVCFNTABLE  svcTable;
     VBOXHGCMSVCHELPERS  svcHelpers;
     SHFLROOT Root;
-    const PRTDIR pDir = (PRTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
+    const RTDIR hDir = (RTDIR)&g_aTestDirHandles[g_iNextDirHandle++ % RT_ELEMENTS(g_aTestDirHandles)];
     const int64_t ccAtimeNano = 100000;
     SHFLFSOBJINFO Info;
     SHFLHANDLE Handle;
@@ -1107,7 +1107,7 @@ void testFSInfoQuerySetDirATime(RTTEST hTest)
     RTTestSub(hTest, "Query and set directory atime");
     Root = initWithWritableMapping(hTest, &svcTable, &svcHelpers,
                                    "/test/mapping", "testname");
-    testRTDirOpenpDir = pDir;
+    testRTDirOpen_hDir = hDir;
     rc = createFile(&svcTable, Root, "test/dir",
                     SHFL_CF_DIRECTORY | SHFL_CF_ACCESS_READ, &Handle, NULL);
     RTTEST_CHECK_RC_OK(hTest, rc);
@@ -1116,7 +1116,7 @@ void testFSInfoQuerySetDirATime(RTTEST hTest)
     rc = sfInformation(&svcTable, Root, Handle, SHFL_INFO_FILE, sizeof(Info),
                        &Info);
     RTTEST_CHECK_RC_OK(hTest, rc);
-    RTTEST_CHECK_MSG(hTest, g_testRTDirQueryInfoDir == pDir, (hTest, "Dir=%p\n", g_testRTDirQueryInfoDir));
+    RTTEST_CHECK_MSG(hTest, g_testRTDirQueryInfo_hDir == hDir, (hTest, "Dir=%p\n", g_testRTDirQueryInfo_hDir));
     RTTEST_CHECK_MSG(hTest, RTTimeSpecGetNano(&Info.AccessTime) == ccAtimeNano,
                      (hTest, "ATime=%llu\n",
                       LLUIFY(RTTimeSpecGetNano(&Info.AccessTime))));
@@ -1133,7 +1133,7 @@ void testFSInfoQuerySetDirATime(RTTEST hTest)
     AssertReleaseRC(svcTable.pfnDisconnect(NULL, 0, svcTable.pvService));
     AssertReleaseRC(svcTable.pfnUnload(NULL));
     RTTestGuardedFree(hTest, svcTable.pvService);
-    RTTEST_CHECK_MSG(hTest, g_testRTDirClosepDir == pDir, (hTest, "pDir=%p\n", g_testRTDirClosepDir));
+    RTTEST_CHECK_MSG(hTest, g_testRTDirClose_hDir == hDir, (hTest, "hDir=%p\n", g_testRTDirClose_hDir));
 }
 
 void testFSInfoQuerySetFileATime(RTTEST hTest)
diff --git a/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.h b/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.h
index 5de63c4..09517aa 100644
--- a/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.h
+++ b/src/VBox/HostServices/SharedFolders/testcase/tstSharedFolderService.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/testcase/tstShflCase.cpp b/src/VBox/HostServices/SharedFolders/testcase/tstShflCase.cpp
index bc7e505..cb6187d 100644
--- a/src/VBox/HostServices/SharedFolders/testcase/tstShflCase.cpp
+++ b/src/VBox/HostServices/SharedFolders/testcase/tstShflCase.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -105,9 +105,9 @@ static const char *g_apszSUBDIREntries[] =
     "z.bat",
 };
 
-int rtDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER enmFilter)
+int rtDirOpenFiltered(RTDIR *phDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fFlags)
 {
-    RT_NOREF1(enmFilter);
+    RT_NOREF2(enmFilter, fFlags);
     if (!strcmp(pszPath, "c:\\*"))
         iDirList = 1;
     else if (!strcmp(pszPath, "c:\\test dir\\*"))
@@ -117,20 +117,20 @@ int rtDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER enmFilter)
     else
         AssertFailed();
 
-    *ppDir = (PRTDIR)1;
+    *phDir = (RTDIR)1;
     return VINF_SUCCESS;
 }
 
-int rtDirClose(PRTDIR pDir)
+int rtDirClose(RTDIR hDir)
 {
-    RT_NOREF1(pDir);
+    RT_NOREF1(hDir);
     iDirFile = 0;
     return VINF_SUCCESS;
 }
 
-int rtDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
+int rtDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
 {
-    RT_NOREF4(pDir, pcbDirEntry, enmAdditionalAttribs, fFlags);
+    RT_NOREF4(hDir, pcbDirEntry, enmAdditionalAttribs, fFlags);
     switch (iDirList)
     {
         case 1:
@@ -199,7 +199,7 @@ static int vbsfCorrectCasing(char *pszFullPath, char *pszStartComponent)
     uint32_t       cbDirEntry;
     size_t         cbComponent;
     int            rc = VERR_FILE_NOT_FOUND;
-    PRTDIR         hSearch = 0;
+    RTDIR          hSearch = NIL_RTDIR;
     char           szWildCard[4];
 
     Log2(("vbsfCorrectCasing: %s %s\n", pszFullPath, pszStartComponent));
@@ -224,7 +224,7 @@ static int vbsfCorrectCasing(char *pszFullPath, char *pszStartComponent)
     szWildCard[2] = 0;
     strcat(pDirEntry->szName, szWildCard);
 
-    rc = RTDirOpenFiltered (&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT);
+    rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     *(pszStartComponent-1) = RTPATH_DELIMITER;
     if (RT_FAILURE(rc))
         goto end;
diff --git a/src/VBox/HostServices/SharedFolders/testcase/tstShflSizes.cpp b/src/VBox/HostServices/SharedFolders/testcase/tstShflSizes.cpp
index c4caaaa..1685714 100644
--- a/src/VBox/HostServices/SharedFolders/testcase/tstShflSizes.cpp
+++ b/src/VBox/HostServices/SharedFolders/testcase/tstShflSizes.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/teststubs.h b/src/VBox/HostServices/SharedFolders/teststubs.h
index ca10162..1fe151e 100644
--- a/src/VBox/HostServices/SharedFolders/teststubs.h
+++ b/src/VBox/HostServices/SharedFolders/teststubs.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -27,21 +27,21 @@
 #include <iprt/time.h>
 
 #define RTDirClose           testRTDirClose
-extern int testRTDirClose(PRTDIR pDir);
+extern int testRTDirClose(RTDIR hDir);
 #define RTDirCreate          testRTDirCreate
 extern int testRTDirCreate(const char *pszPath, RTFMODE fMode, uint32_t fCreate);
 #define RTDirOpen            testRTDirOpen
-extern int testRTDirOpen(PRTDIR *ppDir, const char *pszPath);
+extern int testRTDirOpen(RTDIR *phDir, const char *pszPath);
 #define RTDirOpenFiltered    testRTDirOpenFiltered
-extern int testRTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fOpen);
+extern int testRTDirOpenFiltered(RTDIR *phDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fFlags);
 #define RTDirQueryInfo       testRTDirQueryInfo
-extern int testRTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs);
+extern int testRTDirQueryInfo(RTDIR hDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs);
 #define RTDirRemove          testRTDirRemove
 extern int testRTDirRemove(const char *pszPath);
 #define RTDirReadEx          testRTDirReadEx
-extern int testRTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags);
+extern int testRTDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags);
 #define RTDirSetTimes        testRTDirSetTimes
-extern int testRTDirSetTimes(PRTDIR pDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime);
+extern int testRTDirSetTimes(RTDIR hDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime);
 #define RTFileClose          testRTFileClose
 extern int testRTFileClose(RTFILE hFile);
 #define RTFileDelete         testRTFileDelete
diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp
index 001facd..32f509c 100644
--- a/src/VBox/HostServices/SharedFolders/vbsf.cpp
+++ b/src/VBox/HostServices/SharedFolders/vbsf.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -667,7 +667,7 @@ static int vbsfOpenDir(SHFLCLIENTDATA *pClient, SHFLROOT root, const char *pszPa
             || (SHFL_CF_ACT_OPEN_IF_EXISTS == BIT_FLAG(pParms->CreateFlags, SHFL_CF_ACT_MASK_IF_EXISTS)))
         {
             /* Open the directory now */
-            rc = RTDirOpenFiltered(&pHandle->dir.Handle, pszPath, RTDIRFILTER_NONE, 0);
+            rc = RTDirOpenFiltered(&pHandle->dir.Handle, pszPath, RTDIRFILTER_NONE, 0 /*fFlags*/);
             if (RT_SUCCESS(rc))
             {
                 RTFSOBJINFO info;
@@ -1093,7 +1093,7 @@ int vbsfWrite(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, uint64_
     }
     else
     {
-        /** @todo: What writing zero bytes should do? */
+        /** @todo What writing zero bytes should do? */
         rc = VINF_SUCCESS;
     }
 
@@ -1154,7 +1154,7 @@ int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLS
     uint32_t       cbDirEntry, cbBufferOrg;
     PSHFLDIRINFO   pSFDEntry;
     PRTUTF16       pwszString;
-    PRTDIR         DirHandle;
+    RTDIR          hDir;
     const bool     fUtf8 = BIT_FLAG(pClient->fu32Flags, SHFL_CF_UTF8) != 0;
 
     AssertPtrReturn(pClient, VERR_INVALID_PARAMETER);
@@ -1167,7 +1167,7 @@ int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLS
         return rc;
 
     Assert(*pIndex == 0);
-    DirHandle = pHandle->dir.Handle;
+    hDir = pHandle->dir.Handle;
 
     cbDirEntry = 4096;
     pDirEntryOrg = pDirEntry  = (PRTDIRENTRYEX)RTMemAlloc(cbDirEntry);
@@ -1199,7 +1199,7 @@ int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLS
 
             if (RT_SUCCESS(rc))
             {
-                rc = RTDirOpenFiltered(&pHandle->dir.SearchHandle, pszFullPath, RTDIRFILTER_WINNT, 0);
+                rc = RTDirOpenFiltered(&pHandle->dir.SearchHandle, pszFullPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
 
                 /* free the path string */
                 vbsfFreeFullPath(pszFullPath);
@@ -1211,7 +1211,7 @@ int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLS
                 goto end;
         }
         Assert(pHandle->dir.SearchHandle);
-        DirHandle = pHandle->dir.SearchHandle;
+        hDir = pHandle->dir.SearchHandle;
     }
 
     while (cbBufferOrg)
@@ -1228,7 +1228,7 @@ int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLS
         {
             pDirEntry = pDirEntryOrg;
 
-            rc = RTDirReadEx(DirHandle, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
+            rc = RTDirReadEx(hDir, pDirEntry, &cbDirEntrySize, RTFSOBJATTRADD_NOTHING, SHFL_RT_LINK(pClient));
             if (rc == VERR_NO_MORE_FILES)
             {
                 *pIndex = 0; /* listing completed */
diff --git a/src/VBox/HostServices/SharedFolders/vbsf.h b/src/VBox/HostServices/SharedFolders/vbsf.h
index 7ec8c9d..5975169 100644
--- a/src/VBox/HostServices/SharedFolders/vbsf.h
+++ b/src/VBox/HostServices/SharedFolders/vbsf.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedFolders/vbsfpath.cpp b/src/VBox/HostServices/SharedFolders/vbsfpath.cpp
index 5756f4a..34e31a7 100644
--- a/src/VBox/HostServices/SharedFolders/vbsfpath.cpp
+++ b/src/VBox/HostServices/SharedFolders/vbsfpath.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -96,8 +96,8 @@ static int vbsfCorrectCasing(SHFLCLIENTDATA *pClient, char *pszFullPath, char *p
     AssertRC(rc);
     if (RT_SUCCESS(rc))
     {
-        PRTDIR hSearch = NULL;
-        rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, 0);
+        RTDIR hSearch = NULL;
+        rc = RTDirOpenFiltered(&hSearch, pDirEntry->szName, RTDIRFILTER_WINNT, 0 /*fFlags*/);
         if (RT_SUCCESS(rc))
         {
             for (;;)
diff --git a/src/VBox/HostServices/SharedFolders/vbsfpath.h b/src/VBox/HostServices/SharedFolders/vbsfpath.h
index a0846d0..4b2b30e 100644
--- a/src/VBox/HostServices/SharedFolders/vbsfpath.h
+++ b/src/VBox/HostServices/SharedFolders/vbsfpath.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/.scm-settings b/src/VBox/HostServices/SharedOpenGL/.scm-settings
new file mode 100644
index 0000000..0da3b7c
--- /dev/null
+++ b/src/VBox/HostServices/SharedOpenGL/.scm-settings
@@ -0,0 +1,42 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the SharedOpenGL host service.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+# The basic config here is external copyright, however there are lots of exceptions
+/*.h:                                      --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/crserverlib/presenter/server_presenter.h: --no-external-copyright --convert-tabs --strip-trailing-blanks
+/render/renderspu_cocoa_helper.h:          --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+/*.c:                                      --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/crserverlib/server_framebuffer.c:         --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_getshaders.c:          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_glsl.c:                --no-external-copyright --convert-tabs --strip-trailing-blanks
+/crserverlib/server_texture.c:             --no-external-copyright --convert-tabs --strip-trailing-blanks
+/dlm/dlm_lists.c:                          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/dlm/dlm_state.c:                          --no-external-copyright --convert-tabs --strip-trailing-blanks
+/expando/expandospu.c:                     --no-external-copyright --convert-tabs --strip-trailing-blanks
+/render/renderspu_cocoa.c:                 --no-external-copyright --convert-tabs --strip-trailing-blanks
+/unpacker/unpack_framebuffer.c:            --no-external-copyright --convert-tabs --strip-trailing-blanks
+/unpacker/unpack_shaders.c:                --no-external-copyright --convert-tabs --strip-trailing-blanks
+/unpacker/unpack_visibleregion.c:          --no-external-copyright --convert-tabs --strip-trailing-blanks
+
+/*.def:                                    --external-copyright
+/*.py:                                     --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+
+--filter-out-files *_special
+--filter-out-files /LICENSE
+
diff --git a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp
index 0b1fde8..345e12e 100644
--- a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTest.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp
index 0ec8ca4..fd2e47e 100644
--- a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestApp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -114,7 +114,6 @@ static int vboxInitLogging(const char *pszFilename, bool bGenNameSuffix)
 #if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
     fFlags |= RTLOGFLAGS_USECRLF;
 #endif
-    char szError[RTPATH_MAX + 128] = "";
     const char * pszFilenameFmt;
     RTLOGDEST enmLogDest;
     if(pszFilename)
@@ -134,7 +133,7 @@ static int vboxInitLogging(const char *pszFilename, bool bGenNameSuffix)
     int vrc = RTLogCreateEx(&loggerRelease, fFlags, "all",
                             "VBOX_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, enmLogDest,
                             NULL /* pfnBeginEnd */, 0 /* cHistory */, 0 /* cbHistoryFileMax */, 0 /* uHistoryTimeMax */,
-                            szError, sizeof(szError), pszFilenameFmt, pszFilename, RTTimeMilliTS());
+                            NULL /* pErrInfo */, pszFilenameFmt, pszFilename, RTTimeMilliTS());
     if (RT_SUCCESS(vrc))
     {
         /* some introductory information */
@@ -303,7 +302,7 @@ int main(int argc, char **argv)
                     break;
 
                 case 'V':
-                    RTPrintf("$Revision: $\n");
+                    RTPrintf("$Revision: 119149 $\n");
                     return 0;
 
                 case VERR_GETOPT_UNKNOWN_OPTION:
diff --git a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp
index 1a9a122..bd35ea6 100644
--- a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/OpenGLTestDarwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -16,9 +16,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <VBox/VBoxOGL.h>
 
 #include <IOKit/IOKitLib.h>
diff --git a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc
index b691e91..c3ff090 100644
--- a/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc
+++ b/src/VBox/HostServices/SharedOpenGL/OpenGLTest/VBoxTestOGL.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserver/VBoxSharedCrOpenGL.rc b/src/VBox/HostServices/SharedOpenGL/crserver/VBoxSharedCrOpenGL.rc
index 7b4019c..1e60cd6 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserver/VBoxSharedCrOpenGL.rc
+++ b/src/VBox/HostServices/SharedOpenGL/crserver/VBoxSharedCrOpenGL.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp b/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
index 7ab9bc9..b6e0e58 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -228,7 +228,7 @@ static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClie
     {
         LogRel(("OpenGL: svcLoadState: Unsupported save state version %d\n", ui32));
 
-        /*@todo ugly hack, as we don't know size of stored opengl data try to read untill end of opengl data marker*/
+        /** @todo ugly hack, as we don't know size of stored opengl data try to read untill end of opengl data marker*/
         /*VBoxSharedCrOpenGL isn't last hgcm service now, so can't use SSMR3SkipToEndOfUnit*/
         {
             const char *pMatch = &gszVBoxOGLSSMMagic[0];
@@ -539,7 +539,7 @@ static DECLCALLBACK(void) svcCall (void *, VBOXHGCMCALLHANDLE callHandle, uint32
             if (RT_SUCCESS(rc))
             {
                 /* Update parameters.*/
-                paParms[0].u.pointer.size = cbBuffer; //@todo guest doesn't see this change somehow?
+                paParms[0].u.pointer.size = cbBuffer; /// @todo guest doesn't see this change somehow?
             } else if (VERR_NOT_SUPPORTED==rc)
             {
                 svcClientVersionUnsupported(0, 0);
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc b/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc
index 35e22e4..dd10638 100644
Binary files a/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc and b/src/VBox/HostServices/SharedOpenGL/crserverlib/get_sizes.pyc differ
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_base.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_base.cpp
index 73f12b5..d8b98e1 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_base.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_base.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_composite.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_composite.cpp
index 55aca45..3105d53 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_composite.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_composite.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_vrdp.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_vrdp.cpp
index f23fc02..00a2712 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_vrdp.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_vrdp.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -338,7 +338,7 @@ int CrFbDisplayVrdp::vrdpCreate(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntr
     }
 
     int rc = cr_server.outputRedirect.CRORContextProperty(cr_server.outputRedirect.pvContext,
-                                                          0 /* H3DOR_PROP_FORMATS */, // @todo from a header
+                                                          0 /* H3DOR_PROP_FORMATS */, /// @todo from a header
                                                           pachFormats, cbFormats, &cbFormats);
     if (RT_SUCCESS(rc))
     {
@@ -347,7 +347,7 @@ int CrFbDisplayVrdp::vrdpCreate(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntr
             cr_server.outputRedirect.CRORBegin(
                 cr_server.outputRedirect.pvContext,
                 &pVrdp,
-                "H3DOR_FMT_RGBA_TOPDOWN"); // @todo from a header
+                "H3DOR_FMT_RGBA_TOPDOWN"); /// @todo from a header
 
             if (pVrdp)
             {
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window.cpp
index 474e1fa..3304004 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window_rootvr.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window_rootvr.cpp
index 90cb448..b342083 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window_rootvr.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/display_window_rootvr.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.cpp
index 1ce4f4f..47b9b1a 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1241,7 +1241,7 @@ int CrFbEntryCreateForTexId(CR_FRAMEBUFFER *pFb, GLuint idTexture, uint32_t fFla
     int rc = CrFbEntryCreateForTexData(pFb, pTex, fFlags, phEntry);
     if (!RT_SUCCESS(rc))
     {
-    	WARN(("CrFbEntryCreateForTexData failed rc %d", rc));
+        WARN(("CrFbEntryCreateForTexData failed rc %d", rc));
     }
 
     /*always release the tex, the CrFbEntryCreateForTexData will do incref as necessary */
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.h b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.h
index 8a3d0e2..0516a34 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.h
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/server_presenter.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/window.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/window.cpp
index 8839477..3dc100b 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/window.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/presenter/window.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
index adca7b7..ce1546a 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
@@ -319,7 +319,7 @@ void crServerSetVBoxConfigurationHGCM()
     defaultMural = (CRMuralInfo *) crHashtableSearch(cr_server.muralTable, 0);
     CRASSERT(defaultMural);
 
-    //@todo should be moved to addclient so we have a chain for each client
+    /// @todo should be moved to addclient so we have a chain for each client
 
     setDefaults();
     
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_framebuffer.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_framebuffer.c
index 574b537..56c12e4 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_framebuffer.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_framebuffer.c
@@ -1,11 +1,10 @@
 /* $Id: server_framebuffer.c $ */
-
 /** @file
  * VBox OpenGL: EXT_framebuffer_object
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -70,7 +69,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchBindFramebufferEXT(GLenum target,
 #ifdef DEBUG_misha
     GLint rfb = 0, dfb = 0;
 #endif
-	crStateBindFramebufferEXT(target, framebuffer);
+        crStateBindFramebufferEXT(target, framebuffer);
 
     if (0==framebuffer)
     {
@@ -159,35 +158,35 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchBindFramebufferEXT(GLenum target,
 
 void SERVER_DISPATCH_APIENTRY crServerDispatchBindRenderbufferEXT(GLenum target, GLuint renderbuffer)
 {
-	crStateBindRenderbufferEXT(target, renderbuffer);
-	cr_server.head_spu->dispatch_table.BindRenderbufferEXT(target, crStateGetRenderbufferHWID(renderbuffer));
+        crStateBindRenderbufferEXT(target, renderbuffer);
+        cr_server.head_spu->dispatch_table.BindRenderbufferEXT(target, crStateGetRenderbufferHWID(renderbuffer));
 }
 
 void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers)
 {
-	crStateDeleteFramebuffersEXT(n, framebuffers);
+        crStateDeleteFramebuffersEXT(n, framebuffers);
 }
 
 void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers)
 {
-	crStateDeleteRenderbuffersEXT(n, renderbuffers);
+        crStateDeleteRenderbuffersEXT(n, renderbuffers);
 }
 
 void SERVER_DISPATCH_APIENTRY
 crServerDispatchFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
-	crStateFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
-	cr_server.head_spu->dispatch_table.FramebufferRenderbufferEXT(target, attachment, renderbuffertarget, crStateGetRenderbufferHWID(renderbuffer));
+        crStateFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
+        cr_server.head_spu->dispatch_table.FramebufferRenderbufferEXT(target, attachment, renderbuffertarget, crStateGetRenderbufferHWID(renderbuffer));
 }
 
 void SERVER_DISPATCH_APIENTRY
 crServerDispatchGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params)
 {
-	GLint local_params[1];
-	(void) params;
-	crStateGetFramebufferAttachmentParameterivEXT(target, attachment, pname, local_params);
+        GLint local_params[1];
+        (void) params;
+        crStateGetFramebufferAttachmentParameterivEXT(target, attachment, pname, local_params);
 
-	crServerReturnValue(&(local_params[0]), 1*sizeof(GLint));
+        crServerReturnValue(&(local_params[0]), 1*sizeof(GLint));
 }
 
 GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsFramebufferEXT( GLuint framebuffer )
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
index 731f642..2b84271 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c
@@ -1,11 +1,10 @@
 /* $Id: server_getshaders.c $ */
-
 /** @file
  * VBox OpenGL GLSL related get functions
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -143,7 +142,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(VBoxGLhandleARB obj,
     }
     /* initial (fallback )value */
     *pLocal = 0;
-    /*@todo: recheck*/
+    /** @todo recheck*/
     hwid = crStateGetProgramHWID(obj);
     if (!hwid) hwid = crStateGetShaderHWID(obj);
     cr_server.head_spu->dispatch_table.GetInfoLogARB(hwid, maxLength, pLocal, (char*)&pLocal[1]);
@@ -208,7 +207,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderSource(GLuint shader, GLs
     crFree(pLocal);
 }
 
-void SERVER_DISPATCH_APIENTRY 
+void SERVER_DISPATCH_APIENTRY
 crServerDispatchGetUniformsLocations(GLuint program, GLsizei maxcbData, GLsizei * cbData, GLvoid * pData)
 {
     GLsizei *pLocal;
@@ -223,7 +222,7 @@ crServerDispatchGetUniformsLocations(GLuint program, GLsizei maxcbData, GLsizei
         crServerReturnValue(&zero, sizeof(zero));
         return;
     }
-    
+
     /* initial (fallback )value */
     *pLocal = 0;
     crStateGLSLProgramCacheUniforms(program, maxcbData, pLocal, (char*)&pLocal[1]);
@@ -261,7 +260,7 @@ static GLint __GetUniformSize(GLuint program, GLint location)
     GLint  size = 0;
     GLenum type = 0;
 
-    /*@todo: check if index and location is the same*/
+    /** @todo check if index and location is the same*/
     cr_server.head_spu->dispatch_table.GetActiveUniform(crStateGetProgramHWID(program), location, 0, NULL, &size, &type, NULL);
 
     return crStateGetUniformSize(type);
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
index e9c77ec..de1277b 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c
@@ -1,11 +1,10 @@
 /* $Id: server_glsl.c $ */
-
 /** @file
- * VBox OpenGL: GLSL related functions
+ * VBox OpenGL - GLSL related functions
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -194,7 +193,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteProgramsARB(GLsizei n, const
 }
 
 
-/*@todo will fail for progs loaded from snapshot */
+/** @todo will fail for progs loaded from snapshot */
 GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsProgramARB( GLuint program )
 {
     GLboolean retval;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
index 6e660ac..c460902 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
@@ -944,7 +944,7 @@ static void crVBoxServerSaveMuralCB(unsigned long key, void *data1, void *data2)
     CRASSERT(rc == VINF_SUCCESS);
 }
 
-/* @todo add hashtable walker with result info and intermediate abort */
+/** @todo add hashtable walker with result info and intermediate abort */
 static void crVBoxServerSaveCreateInfoCB(unsigned long key, void *data1, void *data2)
 {
     CRCreateInfo_t *pCreateInfo = (CRCreateInfo_t *)data1;
@@ -1543,7 +1543,7 @@ static int32_t crVBoxServerSaveStatePerform(PSSMHANDLE pSSM)
     /* We shouldn't be called if there's no clients at all*/
     CRASSERT(cr_server.numClients > 0);
 
-    /* @todo it's hack atm */
+    /** @todo it's hack atm */
     /* We want to be called only once to save server state but atm we're being called from svcSaveState
      * for every connected client (e.g. guest opengl application)
      */
@@ -1619,7 +1619,7 @@ static int32_t crVBoxServerSaveStatePerform(PSSMHANDLE pSSM)
 
     Data.pSSM = pSSM;
     /* Save contexts state tracker data */
-    /* @todo For now just some blind data dumps,
+    /** @todo For now just some blind data dumps,
      * but I've a feeling those should be saved/restored in a very strict sequence to
      * allow diff_api to work correctly.
      * Should be tested more with multiply guest opengl apps working when saving VM snapshot.
@@ -2926,7 +2926,7 @@ static int32_t crVBoxServerCmdVbvaCrCmdProcess(const struct VBOXCMDVBVA_CRCMD_CM
         {
             Log(("svcCall: SHCRGL_GUEST_FN_WRITE\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 1)
             {
                 CRVBOXHGSMIWRITE* pFnCmd = (CRVBOXHGSMIWRITE*)pHdr;
@@ -2978,7 +2978,7 @@ static int32_t crVBoxServerCmdVbvaCrCmdProcess(const struct VBOXCMDVBVA_CRCMD_CM
         {
             WARN(("svcCall: SHCRGL_GUEST_FN_INJECT\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 1)
             {
                 CRVBOXHGSMIINJECT *pFnCmd = (CRVBOXHGSMIINJECT*)pHdr;
@@ -3031,7 +3031,7 @@ static int32_t crVBoxServerCmdVbvaCrCmdProcess(const struct VBOXCMDVBVA_CRCMD_CM
         {
             Log(("svcCall: SHCRGL_GUEST_FN_READ\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 1)
             {
                 CRVBOXHGSMIREAD *pFnCmd = (CRVBOXHGSMIREAD*)pHdr;
@@ -3089,7 +3089,7 @@ static int32_t crVBoxServerCmdVbvaCrCmdProcess(const struct VBOXCMDVBVA_CRCMD_CM
         {
             Log(("svcCall: SHCRGL_GUEST_FN_WRITE_READ\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 2)
             {
                 CRVBOXHGSMIWRITEREAD *pFnCmd = (CRVBOXHGSMIWRITEREAD*)pHdr;
@@ -3649,7 +3649,7 @@ int32_t crVBoxServerCrHgsmiCmd(struct VBOXVDMACMD_CHROMIUM_CMD *pCmd, uint32_t c
         {
             Log(("svcCall: SHCRGL_GUEST_FN_WRITE\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 1)
             {
                 CRVBOXHGSMIWRITE* pFnCmd = (CRVBOXHGSMIWRITE*)pHdr;
@@ -3703,7 +3703,7 @@ int32_t crVBoxServerCrHgsmiCmd(struct VBOXVDMACMD_CHROMIUM_CMD *pCmd, uint32_t c
         {
             Log(("svcCall: SHCRGL_GUEST_FN_INJECT\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 1)
             {
                 CRVBOXHGSMIINJECT *pFnCmd = (CRVBOXHGSMIINJECT*)pHdr;
@@ -3755,7 +3755,7 @@ int32_t crVBoxServerCrHgsmiCmd(struct VBOXVDMACMD_CHROMIUM_CMD *pCmd, uint32_t c
         {
             Log(("svcCall: SHCRGL_GUEST_FN_READ\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 1)
             {
                 CRVBOXHGSMIREAD *pFnCmd = (CRVBOXHGSMIREAD*)pHdr;
@@ -3810,7 +3810,7 @@ int32_t crVBoxServerCrHgsmiCmd(struct VBOXVDMACMD_CHROMIUM_CMD *pCmd, uint32_t c
         {
             Log(("svcCall: SHCRGL_GUEST_FN_WRITE_READ\n"));
 
-            /* @todo: Verify  */
+            /** @todo Verify  */
             if (cParams == 2)
             {
                 CRVBOXHGSMIWRITEREAD *pFnCmd = (CRVBOXHGSMIWRITEREAD*)pHdr;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c
index c90c4e8..2ea3a22 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c
@@ -289,7 +289,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchChromiumParametervCR(GLenum target
               crDebug("Frustum: left, right, bottom, top, near, far: %f, %f, %f, %f, %f, %f", left, right, bottom, top, znear, zfar);
             }
             else {
-                /* Todo: Add debug output for orthographic projection*/
+                /** @todo Add debug output for orthographic projection*/
             }
 
         }
@@ -399,7 +399,7 @@ static int copynum=0;
 void SERVER_DISPATCH_APIENTRY
 crServerDispatchCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
 {
-    /*@todo pbo/fbo disabled for now as it's slower, check on other gpus*/
+    /** @todo pbo/fbo disabled for now as it's slower, check on other gpus*/
     static int siHavePBO = 0;
     static int siHaveFBO = 0;
 
@@ -486,7 +486,7 @@ crServerDispatchCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLi
             }
 #endif
         }
-        else if (siHaveFBO==1) /*@todo more states to set and restore here*/
+        else if (siHaveFBO==1) /** @todo more states to set and restore here*/
         {
             GLuint tID, fboID;
             GLenum status;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp
index b4c56f5..8b3c556 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_rpw.cpp b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_rpw.cpp
index 25a93d7..97c1b95 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_rpw.cpp
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_rpw.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
index bbe9167..a941583 100644
--- a/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
+++ b/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c
@@ -1,11 +1,10 @@
 /* $Id: server_texture.c $ */
-
 /** @file
- * VBox crOpenGL: teximage functions.
+ * VBox crOpenGL - teximage functions.
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -17,7 +16,7 @@
  */
 
 #include "chromium.h"
-#include "cr_error.h" 
+#include "cr_error.h"
 #include "server_dispatch.h"
 #include "server.h"
 #include "cr_mem.h"
@@ -60,7 +59,7 @@
             crWarning("UnmapBufferARB failed");                                             \
         }                                                                                   \
     }
-#else 
+#else
 #define CR_FINISHBUFFER()
 #endif
 
@@ -249,7 +248,7 @@ void SERVER_DISPATCH_APIENTRY crServerDispatchPrioritizeTextures( GLsizei n, con
 }
 
 
-/*@todo will fail for textures loaded from snapshot */
+/** @todo will fail for textures loaded from snapshot */
 GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsTexture( GLuint texture )
 {
     GLboolean retval;
diff --git a/src/VBox/HostServices/SharedOpenGL/dlm/dlm_lists.c b/src/VBox/HostServices/SharedOpenGL/dlm/dlm_lists.c
index 8dac4fd..daac0f4 100644
--- a/src/VBox/HostServices/SharedOpenGL/dlm/dlm_lists.c
+++ b/src/VBox/HostServices/SharedOpenGL/dlm/dlm_lists.c
@@ -1,5 +1,4 @@
 /* $Id: dlm_lists.c $ */
-
 /** @file
  * Implementation of all the Display Lists related routines:
  *
@@ -10,7 +9,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -234,7 +233,7 @@ void DLM_APIENTRY crDLMEndList(SPUDispatchTable *dispatchTable)
         }
         else
             crDebug("DLM: glEndList() is assuming glNewList() was issued previously.");
-    } 
+    }
     else
         crDebug("DLM: EndList called with no current state.");
 }
@@ -396,7 +395,7 @@ void DLM_APIENTRY crDLMListBase(GLuint base, SPUDispatchTable *dispatchTable)
         pListState->listBase = base;
 
         /* Only add to cache if we are currently recording a list. */
-        /* TODO: Do we really need to chache it? */
+        /** @todo Do we really need to chache it? */
         if (pListState->currentListInfo)
             crDLMCompileListBase(base);
 
diff --git a/src/VBox/HostServices/SharedOpenGL/dlm/dlm_state.c b/src/VBox/HostServices/SharedOpenGL/dlm/dlm_state.c
index 7a6135c..b9ac1e0 100644
--- a/src/VBox/HostServices/SharedOpenGL/dlm/dlm_state.c
+++ b/src/VBox/HostServices/SharedOpenGL/dlm/dlm_state.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/expando/expandospu.c b/src/VBox/HostServices/SharedOpenGL/expando/expandospu.c
index 6025a80..ad1543b 100644
--- a/src/VBox/HostServices/SharedOpenGL/expando/expandospu.c
+++ b/src/VBox/HostServices/SharedOpenGL/expando/expandospu.c
@@ -11,7 +11,7 @@
 
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/render/VBoxOGLrenderspu.rc b/src/VBox/HostServices/SharedOpenGL/render/VBoxOGLrenderspu.rc
index 55dae86..3377aa9 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/VBoxOGLrenderspu.rc
+++ b/src/VBox/HostServices/SharedOpenGL/render/VBoxOGLrenderspu.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c
index a658715..f3e3a66 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c
+++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c
@@ -1,9 +1,10 @@
+/* $Id: renderspu_cocoa.c $ */
 /** @file
  * VirtualBox OpenGL Cocoa Window System implementation
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h
index 6636220..0ec0b35 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h
+++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m
index 12fa263..b3ebf7a 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m
+++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2009-2014 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -61,12 +61,13 @@
  *   other third party GUI), overwrite our NSOpenGLContext. So we always ask if
  *   this is our own one, before use. Really neat concept of Objective-C/Cocoa
  *   ;)
- * 
+ *
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #ifdef IN_VMSVGA3D
 # define LOG_GROUP LOG_GROUP_DEV_VMSVGA
 #endif
@@ -107,18 +108,18 @@
 
 
 
-/*******************************************************************************
-*   Defined Constants And Macros                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
 /* Debug macros */
-/** @def FBO 
+/** @def FBO
  * Disable this to see how the output is without the FBO in the middle of the processing chain. */
 #define FBO 1
 /** @def CR_RENDER_FORCE_PRESENT_MAIN_THREAD
- * Force present schedule to main thread. */ 
+ * Force present schedule to main thread. */
 /** @def SHOW_WINDOW_BACKGROUND
- * Define this to see the window background even if the window is clipped. */ 
-/** @def DEBUG_VERBOSE 
+ * Define this to see the window background even if the window is clipped. */
+/** @def DEBUG_VERBOSE
  * Define this to get some debug info about the messages flow. */
 #if 0 || defined(DOXYGEN_RUNNING)
 # define CR_RENDER_FORCE_PRESENT_MAIN_THREAD
@@ -203,7 +204,7 @@
         GLenum iGlCheckErr = glGetError(); \
         if (RT_UNLIKELY(iGlCheckErr != GL_NO_ERROR)) \
             AssertMsgFailed((a_szOp ": iGlCheckErr=%#x\n", iGlCheckErr)); \
-    } while (0) 
+    } while (0)
 #else
 # define DEBUG_CLEAR_GL_ERRORS()        do {} while (0)
 # define DEBUG_CHECK_GL_ERROR(a_szOp)   do {} while (0)
@@ -239,8 +240,8 @@ typedef struct WindowInfo WindowInfo;
 
 
 /**
- * Works functions that creates a NSOpenGLPixelFormat instance. 
- *  
+ * Works functions that creates a NSOpenGLPixelFormat instance.
+ *
  * @returns Instance.
  * @param   fVisParams          Context flags.
  */
@@ -366,15 +367,15 @@ static bool vboxCtxSyncCurrentInfo(void)
         [NSOpenGLContext clearCurrentContext];
         fAdjusted = true;
     }
-    
+
     return fAdjusted;
 #endif
 }
 
 
-/** 
- * State carrying structure for use with vboxCtxEnter and vboxCtxLeave 
- */ 
+/**
+ * State carrying structure for use with vboxCtxEnter and vboxCtxLeave
+ */
 typedef struct VBOX_CR_RENDER_CTX_INFO
 {
     bool                fIsValid;
@@ -386,41 +387,41 @@ typedef VBOX_CR_RENDER_CTX_INFO *PVBOX_CR_RENDER_CTX_INFO;
 
 static void vboxCtxEnter(NSOpenGLContext *pNewCtx, PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 {
-    NSOpenGLContext *pOldCtx  = vboxCtxGetCurrent(); 
+    NSOpenGLContext *pOldCtx  = vboxCtxGetCurrent();
     NSView          *pOldView = pOldCtx ? [pOldCtx view] : nil;
     NSView          *pNewView = [pNewCtx view];
 
     Assert(pNewCtx);
 
-    if (   pOldCtx  != pNewCtx 
+    if (   pOldCtx  != pNewCtx
         || pOldView != pNewView)
     {
         if (pOldCtx != nil)
             glFlush();
-        
+
         DEBUG_CLEAR_GL_ERRORS();
         [pNewCtx makeCurrentContext];
         DEBUG_CHECK_GL_ERROR("makeCurrentContext");
-        
+
         pCtxInfo->fIsValid = true;
         pCtxInfo->pCtx     = pOldCtx;
         /** @todo r=bird: Why do we save the NEW VIEW here? vboxCtxLeave calls it 'pOldView'. Bug? */
-        pCtxInfo->pView    = pNewView; 
+        pCtxInfo->pView    = pNewView;
     }
     else
     {
         /* No context switch necessary. */
         pCtxInfo->fIsValid = false;
     }
-}    
-    
+}
+
 static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 {
     if (pCtxInfo->fIsValid)
     {
         NSOpenGLContext *pOldCtx  = pCtxInfo->pCtx;
         NSView          *pOldView = pCtxInfo->pView;
-    
+
         glFlush();
         if (pOldCtx != nil)
         {
@@ -429,17 +430,17 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
                one (wrt vboxCtxEnter) before making it current. */
             /** @todo r=bird: Figure out what we really want to do here, and either rename
              *        pOldView or fix the code. */
-            if ([pOldCtx view] != pOldView) 
+            if ([pOldCtx view] != pOldView)
             {
                 DEBUG_CLEAR_GL_ERRORS();
                 [pOldCtx setView: pOldView];
                 DEBUG_CHECK_GL_ERROR("setView");
             }
-        
+
             DEBUG_CLEAR_GL_ERRORS();
             [pOldCtx makeCurrentContext];
             DEBUG_CHECK_GL_ERROR("makeCurrentContext");
-            
+
 #ifdef VBOX_STRICT
             {
                 NSOpenGLContext *pTstOldCtx  = [NSOpenGLContext currentContext];
@@ -457,13 +458,13 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 }
 
 
-/** 
+/**
  * Custom OpenGL context class.
  *
  * This implementation doesn't allow to set a view to the context, but save the
- * view for later use.  Also it saves a copy of the pixel format used to create 
- * that context for later use. 
- */ 
+ * view for later use.  Also it saves a copy of the pixel format used to create
+ * that context for later use.
+ */
 @interface OverlayOpenGLContext: NSOpenGLContext
 {
 @private
@@ -508,10 +509,10 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 @end
 
 @implementation VBoxTaskPerformSelector
-    
+
 /**
  * Initializes a VBoxTaskPerformSelector.
- *  
+ *
  * @param   aObject             The object (reference not consumed).
  * @param   aSelector           The method selector.
  * @param   aArg                The method argument (reference not consumed).
@@ -549,7 +550,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 
 
 /**
- * 
+ *
  */
 @interface VBoxTaskComposite : VBoxTask
 {
@@ -588,7 +589,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 
 /**
  * Adds a task to the composite task object.
- *  
+ *
  * @param   pTask               Task to add.  Reference is NOT consumed.
  */
 - (void)add:(VBoxTask *)pTask
@@ -620,7 +621,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
             DEBUG_WARN(("RTCritSectEnter failed %d\n", rc));
             break;
         }
-        
+
         NSUInteger count = [m_pArray count];
         Assert(m_CurIndex <= count);
         if (m_CurIndex == count)
@@ -633,9 +634,9 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 
         VBoxTask *pTask = (VBoxTask *)[m_pArray objectAtIndex:m_CurIndex];
         Assert(pTask != nil);
-        
+
         ++m_CurIndex;
-        
+
         /*
          * Remove the first 1025 empty entires.
          */
@@ -648,7 +649,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
             m_CurIndex = 0;
         }
         RTCritSectLeave(&m_Lock);
-        
+
         /*
          * Run the task and release it.
          */
@@ -666,7 +667,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
         DEBUG_WARN(("dealloc with non-empty tasks! %p\n", pTask));
         [pTask release];
     }
-    
+
     [m_pArray release];
     RTCritSectDelete(&m_Lock);
 
@@ -676,8 +677,8 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
 
 
 /**
- * 
- * 
+ *
+ *
  */
 @interface VBoxMainThreadTaskRunner : NSObject
 {
@@ -701,7 +702,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
     {
         m_pTasks = [[VBoxTaskComposite alloc] init];
     }
-    
+
     return self;
 }
 
@@ -727,13 +728,13 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
         DEBUG_MSG(("task will be processed async\n"));
         [self performSelectorOnMainThread:@selector(runTasks) withObject:nil waitUntilDone:NO];
     }
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
 /**
  * Adds a task calling an object method (selector).
- *  
+ *
  * @param   aObject             The object (reference not consumed)..
  * @param   aSelector           The method selector.
  * @param   aArg                The method argument (reference not consumed).
@@ -745,7 +746,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
     [pSelTask release];
 }
 
-    
+
 /**
  * Internal method for running the pending tasks.
  */
@@ -756,7 +757,7 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
         [m_pTasks run];
         /** @todo r=bird: This release and the retain in the add method aren't
          *        necessarily balanced if there are more than one call to add().
-         *  
+         *
          *  This could probably end up deleting the singleton prematurely and leave
          *  globalInstance() returning pointers to a stale object in freed memory,
          *  quite possibly causing crashes or/and heap corruption. */
@@ -772,10 +773,10 @@ static void vboxCtxLeave(PVBOX_CR_RENDER_CTX_INFO pCtxInfo)
     }
 }
 
-/** 
- * Callback for calling runTasks via renderspuCalloutClient. 
- * @param   pvUser      The VBoxMainThreadTaskRunner singleton. 
- */ 
+/**
+ * Callback for calling runTasks via renderspuCalloutClient.
+ * @param   pvUser      The VBoxMainThreadTaskRunner singleton.
+ */
 static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 {
     DEBUG_FUNC_ENTER();
@@ -785,15 +786,15 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     DEBUG_FUNC_LEAVE();
 }
 
-/** 
- * Runs pending tasks synchronously, if possible in the current context. 
- *  
+/**
+ * Runs pending tasks synchronously, if possible in the current context.
+ *
  * @returns true if executed tasks, false if not possible.
  */
 - (bool)runTasksSyncIfPossible
 {
 #ifndef IN_VMSVGA3D
-    /* 
+    /*
      * Call on main thread (?) via renderspuCalloutClient (whatever that is).
      */
     if (renderspuCalloutAvailable())
@@ -803,7 +804,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         return true;
     }
 #endif
-    
+
     /*
      * Run directly if on main thread.
      */
@@ -812,7 +813,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         [self runTasks];
         return true;
     }
-    
+
     /* Not possible. */
     return false;
 }
@@ -833,27 +834,27 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 @class DockOverlayView;
 #endif
 
-/** 
- * The custom view class. 
- *  
- * This is the main class of the cocoa OpenGL implementation.  It manages a 
- * frame buffer object for the rendering of the guest applications.  The guest 
+/**
+ * The custom view class.
+ *
+ * This is the main class of the cocoa OpenGL implementation.  It manages a
+ * frame buffer object for the rendering of the guest applications.  The guest
  * applications render in this frame buffer which is bound to an OpenGL texture.
- * To display the guest content, a secondary shared OpenGL context of the main 
+ * To display the guest content, a secondary shared OpenGL context of the main
  * OpenGL context is created.  The secondary context is marked as non-opaque and
- * the texture is displayed on an object which is composed out of the several 
- * visible region rectangles. 
- */ 
+ * the texture is displayed on an object which is composed out of the several
+ * visible region rectangles.
+ */
 @interface OverlayView : NSView
 {
 @private
     NSView             *m_pParentView;
     NSWindow           *m_pOverlayWin;
-                       
+
     NSOpenGLContext    *m_pGLCtx;
     NSOpenGLContext    *m_pSharedGLCtx;
     RTTHREAD            m_Thread;
-                       
+
     GLuint              m_FBOId;
 
 #ifndef IN_VMSVGA3D
@@ -874,7 +875,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     /** @} */
 
     /** @name Position/Size tracking
-     * @{ */ 
+     * @{ */
     NSPoint             m_Pos;
     NSSize              m_Size;
     /** @} */
@@ -882,7 +883,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     /** This is necessary for clipping on the root window */
     NSRect              m_RootRect;
     float               m_yInvRootOffset;
-    
+
 #ifndef IN_VMSVGA3D
     CR_BLITTER         *m_pBlitter;
     WindowInfo         *m_pWinInfo;
@@ -893,7 +894,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     bool                m_fCleanupNeeded;
     bool                m_fEverSized;
 }
-- (id)initWithFrame:(NSRect)frame thread:(RTTHREAD)aThread parentView:(NSView *)pParentView winInfo:(WindowInfo *)pWinInfo 
+- (id)initWithFrame:(NSRect)frame thread:(RTTHREAD)aThread parentView:(NSView *)pParentView winInfo:(WindowInfo *)pWinInfo
          fVisParams:(GLbitfield) fVisParams;
 - (void)setGLCtx:(NSOpenGLContext*)pCtx;
 - (NSOpenGLContext *)glCtx;
@@ -959,15 +960,15 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 - (void)cleanupData;
 @end
 
-/** 
+/**
  * Helper view.
  *
  * This view is added as a sub view of the parent view to track
  * main window changes. Whenever the main window is changed
  * (which happens on fullscreen/seamless entry/exit) the overlay
  * window is informed & can add them self as a child window
- * again. 
- */ 
+ * again.
+ */
 @class OverlayWindow;
 @interface OverlayHelperView: NSView
 {
@@ -977,14 +978,14 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 -(id)initWithOverlayWindow:(NSRect)frame overlayWindow:(OverlayWindow *)pOverlayWindow;
 @end
 
-/** 
+/**
  * Custom window class.
  *
  * This is the overlay window which contains our custom NSView.
  * Its a direct child of the Qt Main window. It marks its background
  * transparent & non opaque to make clipping possible. It also disable mouse
- * events and handle frame change events of the parent view. 
- */ 
+ * events and handle frame change events of the parent view.
+ */
 @interface OverlayWindow : NSWindow
 {
 @private
@@ -1026,35 +1027,35 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     self = [super init];
     if (self)
     {
-        /* 
+        /*
          * We need a lock cause the thumb image could be accessed from the main
          * thread when someone is calling display on the dock tile & from the
-         * OpenGL thread when the thumbnail is updated. 
-         */ 
+         * OpenGL thread when the thumbnail is updated.
+         */
         m_Lock = [[NSLock alloc] init];
     }
 
     DEBUG_FUNC_LEAVE();
-    
+
     return self;
 }
 
 - (void)dealloc
 {
     DEBUG_FUNC_ENTER();
-    
+
     [self cleanup];
     [m_Lock release];
 
     [super dealloc];
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
 - (void)cleanup
 {
     DEBUG_FUNC_ENTER();
-    
+
     if (m_ThumbImage != nil)
     {
         [m_ThumbImage release];
@@ -1066,7 +1067,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         [m_ThumbBitmap release];
         m_ThumbBitmap = nil;
     }
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1190,7 +1191,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     [m_pPixelFormat release];
 
     [super dealloc];
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1200,7 +1201,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
     GLint val;
     [m_pPixelFormat getValues:&val forAttribute:NSOpenGLPFADoubleBuffer forVirtualScreen:0];
-    
+
     DEBUG_FUNC_LEAVE();
     return val == GL_TRUE ? YES : NO;
 }
@@ -1237,7 +1238,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
     m_pView = NULL;;
     [super clearDrawable];
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1281,7 +1282,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     DEBUG_MSG(("OHVW(%p): viewDidMoveToWindow: new win: %p\n", (void *)self, (void *)[self window]));
 
     [m_pOverlayWindow parentWindowChanged:[self window]];
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1309,7 +1310,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
         [m_pOverlayView setOverlayWin: self];
 
-#ifdef IN_VMSVGA3D                                                                           
+#ifdef IN_VMSVGA3D
         NSRect frame = [pParentView frame];
         frame.origin.x = frame.origin.x = 0;
         m_pOverlayHelperView = [[OverlayHelperView alloc] initWithOverlayWindow:frame
@@ -1367,7 +1368,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     [m_pOverlayHelperView release];
 
     [super dealloc];
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1376,22 +1377,22 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     DEBUG_FUNC_ENTER();
     DEBUG_MSG(("OWIN(%p): parentWindowFrameChanged\n", (void *)self));
 
-    /* 
+    /*
      * Reposition this window with the help of the OverlayView. Perform the
-     * call in the OpenGL thread. 
-     */ 
+     * call in the OpenGL thread.
+     */
     /*
     [m_pOverlayView performSelector:@selector(vboxReshapePerform) onThread:m_Thread withObject:nil waitUntilDone:YES];
     */
 
     if ([m_pOverlayView isEverSized])
-    {    
+    {
         if ([NSThread isMainThread])
             [m_pOverlayView vboxReshapePerform];
         else
             [self performSelectorOnMainThread:@selector(vboxReshapePerform) withObject:nil waitUntilDone:NO];
     }
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1414,7 +1415,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         /* Add us self as child window */
         [pWindow addChildWindow:self ordered:NSWindowAbove];
 
-        /* 
+        /*
          * Reshape the overlay view after a short waiting time to let the main
          * window resize itself properly.
          */
@@ -1424,14 +1425,14 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         */
 
         if ([m_pOverlayView isEverSized])
-        {    
+        {
             if ([NSThread isMainThread])
                 [m_pOverlayView vboxReshapePerform];
             else
                 [self performSelectorOnMainThread:@selector(vboxReshapePerform) withObject:nil waitUntilDone:NO];
-        }        
+        }
     }
-    
+
     DEBUG_FUNC_LEAVE();
 }
 
@@ -1446,10 +1447,10 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 ********************************************************************************/
 @implementation OverlayView
 
-- (id)initWithFrame:(NSRect)frame thread:(RTTHREAD)aThread parentView:(NSView *)pParentView winInfo:(WindowInfo *)pWinInfo 
+- (id)initWithFrame:(NSRect)frame thread:(RTTHREAD)aThread parentView:(NSView *)pParentView winInfo:(WindowInfo *)pWinInfo
          fVisParams:(GLbitfield) fVisParams
 {
-    COCOA_LOG_FLOW(("%s: self=%p aThread=%p pParentView=%p pWinInfo=%p fVisParams=%#x\n", __PRETTY_FUNCTION__, (void *)self, 
+    COCOA_LOG_FLOW(("%s: self=%p aThread=%p pParentView=%p pWinInfo=%p fVisParams=%#x\n", __PRETTY_FUNCTION__, (void *)self,
                     (void *)aThread, (void *)pParentView, (void *)pWinInfo, fVisParams));
 
     m_pParentView             = pParentView;
@@ -1494,7 +1495,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 #endif
 
     [self setGLCtx:nil];
-    
+
     if (m_pSharedGLCtx)
     {
         if ([m_pSharedGLCtx view] == self)
@@ -1502,7 +1503,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
         [m_pSharedGLCtx release];
         m_pSharedGLCtx = nil;
-        
+
 
 #ifndef IN_VMSVGA3D
         CrBltTerm(m_pBlitter);
@@ -1512,7 +1513,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     }
 
     [self clearVisibleRegions];
-    
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
@@ -1528,7 +1529,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
 - (void)drawRect:(NSRect)aRect
 {
-    COCOA_LOG_FLOW(("%s: self=%p aRect=%d,%d %d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)aRect.origin.x, (int)aRect.origin.y, 
+    COCOA_LOG_FLOW(("%s: self=%p aRect=%d,%d %d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)aRect.origin.x, (int)aRect.origin.y,
                     (int)aRect.size.width, (int)aRect.size.height));
 
     [self vboxTryDrawUI];
@@ -1560,7 +1561,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         if (pCtx)
             [pCtx retain];
     }
-        
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
@@ -1581,7 +1582,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     COCOA_LOG_FLOW(("%s: self=%p pView=%p (old=%p)\n", __PRETTY_FUNCTION__, (void *)self, (void *)pView, m_pParentView));
 
     m_pParentView = pView;
-    
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
@@ -1590,7 +1591,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     COCOA_LOG_FLOW(("%s: self=%p pWin=%p (old=%p)\n", __PRETTY_FUNCTION__, (void *)self, (void *)pWin, m_pOverlayWin));
 
     m_pOverlayWin = pWin;
-    
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
@@ -1602,7 +1603,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
 - (void)vboxSetPosUI:(NSPoint)pos
 {
-    COCOA_LOG_FLOW(("%s: self=%p pos=%d,%d (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (int)pos.x, (int)pos.y, 
+    COCOA_LOG_FLOW(("%s: self=%p pos=%d,%d (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (int)pos.x, (int)pos.y,
                     (int)m_Pos.x, (int)m_Pos.y));
 
     DEBUG_MSG(("vboxSetPosUI: [%d, %d].\n", (int)pos.x, (int)pos.y));
@@ -1628,7 +1629,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
 - (void)vboxSetPos:(NSPoint)pos
 {
-    COCOA_LOG_FLOW(("%s: self=%p pos=%d,%d (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (int)pos.x, (int)pos.y, 
+    COCOA_LOG_FLOW(("%s: self=%p pos=%d,%d (old pos=%d,%d)\n", __PRETTY_FUNCTION__, (void *)self, (int)pos.x, (int)pos.y,
                     (int)m_Pos.x, (int)m_Pos.y));
 
     VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
@@ -1655,7 +1656,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
     BOOL        fIsMain = [NSThread isMainThread];
     NSWindow   *pWin    = nil;
-    
+
     Assert(fIsMain);
 
     /* Hide the view early. */
@@ -1665,15 +1666,15 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     [[NSNotificationCenter defaultCenter] removeObserver:pWin];
     [pWin setContentView: nil];
     [[pWin parentWindow] removeChildWindow: pWin];
-    
+
     if (fIsMain)
         [pWin release];
     else
     {
         /* We can NOT run synchronously with the main thread since this may lead to a deadlock,
            caused by main thread waiting xpcom thread, xpcom thread waiting to main hgcm thread,
-           and main hgcm thread waiting for us, this is why use waitUntilDone:NO, 
-           which should cause no harm. */ 
+           and main hgcm thread waiting for us, this is why use waitUntilDone:NO,
+           which should cause no harm. */
         [pWin performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
     }
 
@@ -1685,15 +1686,15 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     {
         /* We can NOT run synchronously with the main thread since this may lead to a deadlock,
            caused by main thread waiting xpcom thread, xpcom thread waiting to main hgcm thread,
-           and main hgcm thread waiting for us, this is why use waitUntilDone:NO. 
+           and main hgcm thread waiting for us, this is why use waitUntilDone:NO.
            We need to avoid concurrency though, so we cleanup some data right away via a cleanupData call. */
         [self performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
     }
-    
+
 #ifndef IN_VMSVGA3D
     renderspuWinRelease(m_pWinInfo);
 #endif
-    
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
@@ -1727,7 +1728,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 - (void)vboxSetSize:(NSSize)size
 {
     COCOA_LOG_FLOW(("%s: self=%p size=%d,%d\n", __PRETTY_FUNCTION__, (void *)self, (int)size.width, (int)size.height));
-    
+
     VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
     NSValue *pSize = [NSValue valueWithSize:size];
     [pRunner addObj:self selector:@selector(vboxSetSizeUIObj:) arg:pSize];
@@ -1751,7 +1752,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 #ifndef IN_VMSVGA3D
     [self vboxBlitterSyncWindow];
 #endif
-        
+
     /* Clear background to transparent. */
     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
 
@@ -1998,9 +1999,9 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
                (int)childFrameSCS .origin.x, (int)childFrameSCS .origin.y, (int)childFrameSCS .size.width, (int)childFrameSCS .size.width,
                (int)m_Pos.x, (int)m_Pos.y, (int)m_Size.width, (int)m_Size.height));
 
-    /* @todo galitsyn: drop this!
+    /** @todo galitsyn: drop this!
      * Later we have to correct the texture position in the case the window is
-     * out of the parents window frame. So save the shift values for later use. */ 
+     * out of the parents window frame. So save the shift values for later use. */
     m_RootRect.origin.x = windowFrameSCS.origin.x - childFrameSCS.origin.x;
     m_RootRect.origin.y =  childFrameSCS.size.height + childFrameSCS.origin.y - (windowFrameSCS.size.height + windowFrameSCS.origin.y);
     m_RootRect.size = windowFrameSCS.size;
@@ -2021,7 +2022,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     /* [self updateViewport]; */
     if (m_pSharedGLCtx)
     {
-        VBOX_CR_RENDER_CTX_INFO CtxInfo; 
+        VBOX_CR_RENDER_CTX_INFO CtxInfo;
         vboxCtxEnter(m_pSharedGLCtx, &CtxInfo);
 
         [self updateViewportCS];
@@ -2072,7 +2073,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
 - (void)makeCurrentFBO
 {
-    COCOA_LOG_FLOW(("%s: self=%p - m_pGLCtx=%p m_fNeedCtxUpdate=%d\n", __PRETTY_FUNCTION__, (void *)self, 
+    COCOA_LOG_FLOW(("%s: self=%p - m_pGLCtx=%p m_fNeedCtxUpdate=%d\n", __PRETTY_FUNCTION__, (void *)self,
                     (void *)m_pGLCtx, m_fNeedCtxUpdate));
 
     if (m_pGLCtx)
@@ -2118,7 +2119,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
             [m_pGLCtx update];
             m_fNeedCtxUpdate = false;
         }
-        
+
         if (!m_FBOId)
         {
             glGenFramebuffersEXT(1, &m_FBOId);
@@ -2138,8 +2139,8 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         COCOA_LOG_FLOW(("%s: returns true (m_pSharedGLCtx=%p)\n", __PRETTY_FUNCTION__, (void *)m_pSharedGLCtx));
         return true;
     }
-        
-#ifndef IN_VMSVGA3D            
+
+#ifndef IN_VMSVGA3D
     Assert(!m_pBlitter);
     m_pBlitter = RTMemAlloc(sizeof(*m_pBlitter));
     if (RT_UNLIKELY(!m_pBlitter))
@@ -2148,8 +2149,8 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         COCOA_LOG_FLOW(("%s: returns false - m_pBlitter allocation failed\n", __PRETTY_FUNCTION__));
         return false;
     }
-        
-    int rc = CrBltInit(m_pBlitter, NULL, false /*fCreateNewCtx*/, false /*fForceDrawBlt*/, 
+
+    int rc = CrBltInit(m_pBlitter, NULL, false /*fCreateNewCtx*/, false /*fForceDrawBlt*/,
                        &render_spu.GlobalShaders, &render_spu.blitterDispatch);
     if (RT_FAILURE(rc))
     {
@@ -2159,7 +2160,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
         COCOA_LOG_FLOW(("%s: returns false - CrBltInit failed with rc=%Rrc\n", __PRETTY_FUNCTION__, rc));
         return false;
-    }        
+    }
 
     COCOA_LOG_FLOW(("%s: blitter (%p) created successfully for view 0x%p\n", (void *)m_pBlitter, (void *)self));
 #endif /* !IN_VMSVGA3D */
@@ -2167,7 +2168,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     /* Create a shared context out of the main context. Use the same pixel format. */
     NSOpenGLPixelFormat *pPixelFormat = [(OverlayOpenGLContext *)m_pGLCtx openGLPixelFormat];
     NSOpenGLContext     *pSharedGLCtx = [[NSOpenGLContext alloc] initWithFormat:pPixelFormat shareContext:m_pGLCtx];
-        
+
     /* Set the new context as non opaque */
     GLint opaque = 0;
     [pSharedGLCtx setValues:&opaque forParameter:NSOpenGLCPSurfaceOpacity];
@@ -2177,7 +2178,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     m_fNeedViewportUpdate = true;
 
     m_pSharedGLCtx = pSharedGLCtx;
-    
+
     COCOA_LOG_FLOW(("%s: returns true - new m_pSharedGLCtx=%p\n", __PRETTY_FUNCTION__, (void *)m_pSharedGLCtx));
     return true;
 }
@@ -2187,7 +2188,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
 
     glFlush();
-                  
+
     /* Issue to the gui thread. */
     [self performSelectorOnMainThread:@selector(vboxTryDrawUI) withObject:nil waitUntilDone:NO];
 
@@ -2197,7 +2198,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 - (void)vboxSetVisible:(GLboolean)fVisible
 {
     COCOA_LOG_FLOW(("%s: self=%p fVisible=%d\n", __PRETTY_FUNCTION__, (void *)self, fVisible));
-    
+
     VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
     NSNumber *pVisObj = [NSNumber numberWithBool:fVisible];
     [pRunner addObj:self selector:@selector(vboxSetVisibleUIObj:) arg:pVisObj];
@@ -2216,7 +2217,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
 
 - (void)vboxSetVisibleUIObj:(NSNumber *)pVisibleObj
 {
-    COCOA_LOG_FLOW(("%s: self=%p pVisibleObj=%p(%d)\n", __PRETTY_FUNCTION__, 
+    COCOA_LOG_FLOW(("%s: self=%p pVisibleObj=%p(%d)\n", __PRETTY_FUNCTION__,
                     (void *)self, (void *)pVisibleObj, [pVisibleObj boolValue]));
 
     BOOL fVisible = [pVisibleObj boolValue];
@@ -2255,14 +2256,14 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         if ([self isEverSized])
             [self vboxReshapeOnReparentPerform];
     }
-    
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
 - (void)vboxTryDrawUI
 {
     COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
-    
+
     if ([self isHidden])
     {
         COCOA_LOG_FLOW(("%s: returns - request to draw on a hidden view\n", __PRETTY_FUNCTION__));
@@ -2288,7 +2289,7 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         Assert(m_pSharedGLCtx);
     }
 #endif
-    
+
     const VBOXVR_SCR_COMPOSITOR *pCompositor = NULL;
 #ifndef IN_VMSVGA3D
     int rc = renderspuVBoxCompositorLock(m_pWinInfo, &pCompositor);
@@ -2318,9 +2319,9 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
                 COCOA_LOG_FLOW(("%s: returns - vboxSharedCtxCreate failed\n", __PRETTY_FUNCTION__));
                 return;
             }
-            
+
             Assert(m_pSharedGLCtx);
-            
+
             pCompositor = renderspuVBoxCompositorAcquire(m_pWinInfo);
             Assert(!m_fDataVisible);
             Assert(!m_fCleanupNeeded);
@@ -2340,11 +2341,11 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     }
 #endif /* !IN_VMSVGA3D */
 
-    
+
     if ([self lockFocusIfCanDraw])
     {
         COCOA_LOG_FLOW(("%s: Calling vboxPresent\n", __PRETTY_FUNCTION__));
-        [self vboxPresent:pCompositor];            
+        [self vboxPresent:pCompositor];
         [self unlockFocus];
     }
 #ifndef IN_VMSVGA3D /** @todo VMSVGA3 */
@@ -2353,13 +2354,13 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
         COCOA_LOG_FLOW(("%s: NotVisible\n", __PRETTY_FUNCTION__));
         m_fCleanupNeeded = false;
     }
-#endif    
+#endif
     else
     {
         COCOA_LOG_FLOW(("%s: Reschedule\n", __PRETTY_FUNCTION__));
         [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(vboxTryDrawUI) userInfo:nil repeats:NO];
     }
-    
+
 #ifndef IN_VMSVGA3D
     renderspuVBoxCompositorUnlock(m_pWinInfo);
 #endif
@@ -2381,11 +2382,11 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     AssertPtr(pCompositor);
 #endif
 
-    VBOX_CR_RENDER_CTX_INFO CtxInfo;    
+    VBOX_CR_RENDER_CTX_INFO CtxInfo;
     vboxCtxEnter(m_pSharedGLCtx, &CtxInfo);
-    
+
     [self vboxPresentCS:pCompositor];
-    
+
     vboxCtxLeave(&CtxInfo);
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
@@ -2395,26 +2396,26 @@ static DECLCALLBACK(void) VBoxMainThreadTaskRunner_RcdRunCallback(void *pvUser)
     COCOA_LOG_FLOW(("%s: self=%p pCompositor=%p\n", __PRETTY_FUNCTION__, (void *)self, (void *)pCompositor));
     if ([m_pSharedGLCtx view] != self)
     {
-        COCOA_LOG_FLOW(("%s: Not current view of shared ctx! Switching... (self=%p, view=%p, m_pSharedGLCtx)\n", 
+        COCOA_LOG_FLOW(("%s: Not current view of shared ctx! Switching... (self=%p, view=%p, m_pSharedGLCtx)\n",
                         __PRETTY_FUNCTION__, (void *)self, (void *)[m_pSharedGLCtx view], (void *)m_pSharedGLCtx));
         [m_pSharedGLCtx setView: self];
         m_fNeedViewportUpdate = true;
     }
-    
+
     if (m_fNeedViewportUpdate)
     {
         [self updateViewportCS];
         m_fNeedViewportUpdate = false;
     }
-    
+
     m_fCleanupNeeded = false;
-    
+
 #ifndef IN_VMSVGA3D
     /* Render FBO content to the dock tile when necessary. */
     [self vboxPresentToDockTileCS:pCompositor];
 #endif
 
-    /* change to #if 0 to see thumbnail image */            
+    /* change to #if 0 to see thumbnail image */
 #if 1
     [self vboxPresentToViewCS:pCompositor];
 #else
@@ -2452,7 +2453,7 @@ DECLINLINE(void) vboxNSRectToRectStretched(const NSRect *pR, RTRECT *pRect, floa
 - (void)vboxPresentToViewCS:(PCVBOXVR_SCR_COMPOSITOR)pCompositor
 {
     NSRect r = [self frame];
-    COCOA_LOG_FLOW(("%s: self=%p - r={%d,%d %d,%d}\n", __PRETTY_FUNCTION__, (void *)self, 
+    COCOA_LOG_FLOW(("%s: self=%p - r={%d,%d %d,%d}\n", __PRETTY_FUNCTION__, (void *)self,
                     (int)r.origin.x, (int)r.origin.y, (int)r.size.width, (int)r.size.height));
 
 #if 1 /* Set to 0 to see the docktile instead of the real output */
@@ -2478,14 +2479,14 @@ DECLINLINE(void) vboxNSRectToRectStretched(const NSRect *pR, RTRECT *pRect, floa
 
     /* Clear background to transparent */
     glClear(GL_COLOR_BUFFER_BIT);
-    
+
     m_fDataVisible = false;
-    
+
 # ifndef IN_VMSVGA3D
     float xStretch;
     float yStretch;
     CrVrScrCompositorGetStretching(pCompositor, &xStretch, &yStretch);
-        
+
     VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR CIter;
     const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;
     CrVrScrCompositorConstIterInit(pCompositor, &CIter);
@@ -2500,7 +2501,7 @@ DECLINLINE(void) vboxNSRectToRectStretched(const NSRect *pR, RTRECT *pRect, floa
         {
             rc = CrBltEnter(m_pBlitter);
             if (RT_SUCCESS(rc))
-            {                   
+            {
                 uint32_t i;
                 for (i = 0; i < cRegions; ++i)
                 {
@@ -2512,28 +2513,28 @@ DECLINLINE(void) vboxNSRectToRectStretched(const NSRect *pR, RTRECT *pRect, floa
 
                     vboxNSRectToRect(&m_RootRect, &RestrictDstRect);
                     VBoxRectIntersected(&RestrictDstRect, pDstRect, &DstRect);
-                    
+
                     if (VBoxRectIsZero(&DstRect))
                         continue;
 
                     VBoxRectTranslate(&DstRect, -RestrictDstRect.xLeft, -RestrictDstRect.yTop);
 
                     vboxNSRectToRectUnstretched(&m_RootRect, &RestrictSrcRect, xStretch / backingStretchFactor, yStretch / backingStretchFactor);
-                    VBoxRectTranslate(&RestrictSrcRect, 
-                                      -CrVrScrCompositorEntryRectGet(pEntry)->xLeft, 
+                    VBoxRectTranslate(&RestrictSrcRect,
+                                      -CrVrScrCompositorEntryRectGet(pEntry)->xLeft,
                                       -CrVrScrCompositorEntryRectGet(pEntry)->yTop);
                     VBoxRectIntersected(&RestrictSrcRect, pSrcRect, &SrcRect);
-                    
+
                     if (VBoxRectIsZero(&SrcRect))
                         continue;
 
                     pSrcRect = &SrcRect;
                     pDstRect = &DstRect;
-                    
+
                     pTexData = CrVrScrCompositorEntryTexGet(pEntry);
-                    
+
                     CrBltBlitTexMural(m_pBlitter, true, CrTdTexGet(pTexData), pSrcRect, pDstRect, 1, fFlags | CRBLT_F_NOALPHA);
-                    
+
                     m_fDataVisible = true;
                 }
                 CrBltLeave(m_pBlitter);
@@ -2576,21 +2577,21 @@ DECLINLINE(void) vboxNSRectToRectStretched(const NSRect *pR, RTRECT *pRect, floa
     COCOA_LOG_FLOW(("%s: self=%p\n", __PRETTY_FUNCTION__, (void *)self));
     CR_BLITTER_WINDOW   WinInfo;
     NSRect              r;
-    
+
     if (!m_pBlitter)
         return;
-        
+
     RT_ZERO(WinInfo);
-    
+
     r = [self frame];
     WinInfo.width = r.size.width;
     WinInfo.height = r.size.height;
-    
+
     Assert(WinInfo.width == m_RootRect.size.width);
     Assert(WinInfo.height == m_RootRect.size.height);
 
     /*CrBltMuralSetCurrentInfo(m_pBlitter, NULL);*/
-    
+
     CrBltMuralSetCurrentInfo(m_pBlitter, &WinInfo);
     CrBltCheckUpdateViewport(m_pBlitter);
 }
@@ -2611,19 +2612,19 @@ static int g_cVBoxTgaCtr = 0;
 
     if ([m_DockTileView thumbBitmap] != nil)
     {
-        /* 
+        /*
          * Only update after at least 200 ms, cause glReadPixels is
-         * heavy performance wise. 
-         */ 
+         * heavy performance wise.
+         */
         uint64_t                                msTS = RTTimeSystemMilliTS();
         VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR    CIter;
         const VBOXVR_SCR_COMPOSITOR_ENTRY      *pEntry;
-        
+
         if (msTS - m_msDockUpdateTS > 200)
         {
             m_msDockUpdateTS = msTS;
 # if 0
-            /* todo: check this for optimization */
+            /** @todo check this for optimization */
             glBindTexture(GL_TEXTURE_RECTANGLE_ARB, myTextureName);
             glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_STORAGE_HINT_APPLE,
                             GL_STORAGE_SHARED_APPLE);
@@ -2645,9 +2646,9 @@ static int g_cVBoxTgaCtr = 0;
             glClear(GL_COLOR_BUFFER_BIT);
 
             rr = [m_DockTileView frame];
-            
+
             CrVrScrCompositorGetStretching(pCompositor, &xStretch, &yStretch);
-            
+
             CrVrScrCompositorConstIterInit(pCompositor, &CIter);
             while ((pEntry = CrVrScrCompositorConstIterNext(&CIter)) != NULL)
             {
@@ -2660,7 +2661,7 @@ static int g_cVBoxTgaCtr = 0;
                 {
                     rc = CrBltEnter(m_pBlitter);
                     if (RT_SUCCESS(rc))
-                    {                   
+                    {
                         uint32_t i;
                         for (i = 0; i < cRegions; ++i)
                         {
@@ -2669,31 +2670,31 @@ static int g_cVBoxTgaCtr = 0;
                             PCRTRECT pDstRect = &paDstRegions[i];
                             RTRECT   DstRect, RestrictDstRect;
                             RTRECT   SrcRect, RestrictSrcRect;
-                    
+
                             vboxNSRectToRect(&m_RootRect, &RestrictDstRect);
                             VBoxRectIntersected(&RestrictDstRect, pDstRect, &DstRect);
-                            
+
                             VBoxRectTranslate(&DstRect, -RestrictDstRect.xLeft, -RestrictDstRect.yTop);
-                            
+
                             VBoxRectScale(&DstRect, m_FBOThumbScaleX, m_FBOThumbScaleY);
-                    
+
                             if (VBoxRectIsZero(&DstRect))
                                 continue;
-                        
+
                             vboxNSRectToRectUnstretched(&m_RootRect, &RestrictSrcRect, xStretch, yStretch);
-                            VBoxRectTranslate(&RestrictSrcRect, 
-                                              -CrVrScrCompositorEntryRectGet(pEntry)->xLeft, 
+                            VBoxRectTranslate(&RestrictSrcRect,
+                                              -CrVrScrCompositorEntryRectGet(pEntry)->xLeft,
                                               -CrVrScrCompositorEntryRectGet(pEntry)->yTop);
                             VBoxRectIntersected(&RestrictSrcRect, pSrcRect, &SrcRect);
-                    
+
                             if (VBoxRectIsZero(&SrcRect))
                                 continue;
 
                             pSrcRect = &SrcRect;
                             pDstRect = &DstRect;
-                            
+
                             pTexData = CrVrScrCompositorEntryTexGet(pEntry);
-                            
+
                             CrBltBlitTexMural(m_pBlitter, true, CrTdTexGet(pTexData), pSrcRect, pDstRect, 1, fFlags);
                         }
                         CrBltLeave(m_pBlitter);
@@ -2712,7 +2713,7 @@ static int g_cVBoxTgaCtr = 0;
                     AssertMsgFailed(("BlitStretched: CrVrScrCompositorEntryRegionsGet failed rc %Rrc\n", rc));
                 }
             }
-            
+
             glFinish();
 
             glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
@@ -2727,17 +2728,17 @@ static int g_cVBoxTgaCtr = 0;
                          GL_UNSIGNED_INT_8_8_8_8,
                          [[m_DockTileView thumbBitmap] bitmapData]);
             [m_DockTileView unlock];
-            
+
 # ifdef VBOX_WITH_CRDUMPER_THUMBNAIL
             ++g_cVBoxTgaCtr;
-            crDumpNamedTGAF((GLint)rr.size.width, (GLint)rr.size.height, 
+            crDumpNamedTGAF((GLint)rr.size.width, (GLint)rr.size.height,
                 [[m_DockTileView thumbBitmap] bitmapData], "/Users/leo/vboxdumps/dump%d.tga", g_cVBoxTgaCtr);
-# endif                
+# endif
 
             pDT = [[NSApplication sharedApplication] dockTile];
 
             /* Send a display message to the dock tile in the main thread */
-            [[[NSApplication sharedApplication] dockTile] performSelectorOnMainThread:@selector(display) withObject:nil 
+            [[[NSApplication sharedApplication] dockTile] performSelectorOnMainThread:@selector(display) withObject:nil
                                                                         waitUntilDone:NO];
         }
     }
@@ -2761,7 +2762,7 @@ static int g_cVBoxTgaCtr = 0;
         m_fCleanupNeeded = true;
         return GL_TRUE;
     }
-    
+
     return GL_FALSE;
 }
 
@@ -2783,7 +2784,7 @@ static int g_cVBoxTgaCtr = 0;
         m_paClipRects = (GLint *)RTMemDup(paRects, sizeof(GLint) * 4 * cRects);
         m_cClipRects  = cRects;
     }
-    
+
     COCOA_LOG_FLOW(("%s: returns\n", __PRETTY_FUNCTION__));
 }
 
@@ -2795,18 +2796,18 @@ static int g_cVBoxTgaCtr = 0;
     NSView *pContentView = [[[NSApplication sharedApplication] dockTile] contentView];
     NSView *pScreenContent = nil;
 
-    /* 
+    /*
      * First try the new variant which checks if this window is within the
-     * screen which is previewed in the dock. 
-     */ 
+     * screen which is previewed in the dock.
+     */
     if ([pContentView respondsToSelector:@selector(screenContentWithParentView:)])
         pScreenContent = [pContentView performSelector:@selector(screenContentWithParentView:) withObject:(id)m_pParentView];
-    /* 
+    /*
      * If it fails, fall back to the old variant (VBox...).
      */
     else if ([pContentView respondsToSelector:@selector(screenContent)])
         pScreenContent = [pContentView performSelector:@selector(screenContent)];
-    
+
     COCOA_LOG_FLOW(("%s: returns %p (pContentView=%p)\n", __PRETTY_FUNCTION__, (void *)pScreenContent, (void *)pContentView));
     return pScreenContent;
 }
@@ -2825,9 +2826,9 @@ static int g_cVBoxTgaCtr = 0;
 
         m_FBOThumbScaleX = (float)dockFrame.size.width / parentFrame.size.width;
         m_FBOThumbScaleY = (float)dockFrame.size.height / parentFrame.size.height;
-        newFrame = NSMakeRect((int)(m_Pos.x * m_FBOThumbScaleX), 
-                              (int)(dockFrame.size.height - (m_Pos.y + m_Size.height - m_yInvRootOffset) * m_FBOThumbScaleY), 
-                              (int)(m_Size.width * m_FBOThumbScaleX), 
+        newFrame = NSMakeRect((int)(m_Pos.x * m_FBOThumbScaleX),
+                              (int)(dockFrame.size.height - (m_Pos.y + m_Size.height - m_yInvRootOffset) * m_FBOThumbScaleY),
+                              (int)(m_Size.width * m_FBOThumbScaleX),
                               (int)(m_Size.height * m_FBOThumbScaleY));
         /*
         NSRect newFrame = NSMakeRect ((int)roundf(m_Pos.x * m_FBOThumbScaleX), (int)roundf(dockFrame.size.height - (m_Pos.y + m_Size.height) * m_FBOThumbScaleY), (int)roundf(m_Size.width * m_FBOThumbScaleX), (int)roundf(m_Size.height * m_FBOThumbScaleY));
@@ -2836,7 +2837,7 @@ static int g_cVBoxTgaCtr = 0;
         */
         [m_DockTileView setFrame: newFrame];
     }
-    COCOA_LOG_FLOW(("%s: returns - newFrame={%d,%d %d,%d} pView=%d\n", __PRETTY_FUNCTION__,  (int)newFrame.origin.x, 
+    COCOA_LOG_FLOW(("%s: returns - newFrame={%d,%d %d,%d} pView=%d\n", __PRETTY_FUNCTION__,  (int)newFrame.origin.x,
                     (int)newFrame.origin.y, (int)newFrame.size.width, (int)newFrame.size.height, (void *)pView));
 }
 
@@ -2901,9 +2902,9 @@ static OverlayView *vboxViewCreate(WindowInfo *pWinInfo, NativeNSViewRef pParent
     COCOA_LOG_FLOW(("vboxViewCreate: pWinInfo=%p pParentView=%p fVisParams=%#x\n", pWinInfo, (void *)pParentView, fVisParams));
 
     /* Create our worker view. */
-    OverlayView *pView = [[OverlayView alloc] initWithFrame:NSZeroRect 
-                                                     thread:RTThreadSelf() 
-                                                 parentView:pParentView 
+    OverlayView *pView = [[OverlayView alloc] initWithFrame:NSZeroRect
+                                                     thread:RTThreadSelf()
+                                                 parentView:pParentView
                                                     winInfo:pWinInfo
                                                  fVisParams:fVisParams];
 
@@ -2915,7 +2916,7 @@ static OverlayView *vboxViewCreate(WindowInfo *pWinInfo, NativeNSViewRef pParent
         COCOA_LOG_FLOW(("vboxViewCreate: returns %p\n", (void *)pView));
         return pView;
     }
-    
+
     COCOA_LOG_FLOW(("vboxViewCreate: returns NULL\n"));
     return NULL;
 }
@@ -2942,14 +2943,14 @@ static DECLCALLBACK(void) vboxRcdCreateView(void *pvCb)
 
 void cocoaViewCreate(NativeNSViewRef *ppView, WindowInfo *pWinInfo, NativeNSViewRef pParentView, GLbitfield fVisParams)
 {
-    COCOA_LOG_FLOW(("cocoaViewCreate: ppView=%p pWinInfo=%p pParentView=%p fVisParams=%#x\n", 
+    COCOA_LOG_FLOW(("cocoaViewCreate: ppView=%p pWinInfo=%p pParentView=%p fVisParams=%#x\n",
                     (void *)ppView, (void *)pWinInfo, (void *)pParentView, fVisParams));
     NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
 
     /* make sure all tasks are run, to preserve the order */
     VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
     [pRunner runTasksSyncIfPossible];
-    
+
 #ifndef IN_VMSVGA3D
     renderspuWinRetain(pWinInfo);
 
@@ -2975,12 +2976,12 @@ void cocoaViewCreate(NativeNSViewRef *ppView, WindowInfo *pWinInfo, NativeNSView
         });
 #endif
     }
-    
+
 #ifndef IN_VMSVGA3D
     if (!*ppView)
         renderspuWinRelease(pWinInfo);
 #endif
-    
+
     [pPool release];
     COCOA_LOG_FLOW(("cocoaViewCreate: returns *ppView=%p\n", (void *)*ppView));
 }
@@ -3075,13 +3076,13 @@ static DECLCALLBACK(void) vboxRcdGetGeomerty(void *pvUser)
 {
     CR_RCD_GETGEOMETRY *pGetGeometry = (CR_RCD_GETGEOMETRY *)pvUser;
     pGetGeometry->rect = [[pGetGeometry->pView window] frame];
-    COCOA_LOG_FLOW(("vboxRcdGetGeomerty: (x,y)=(%d,%d) (cx,cy)=(%d,%d)\n", pGetGeometry->rect.origin.x, pGetGeometry->rect.origin.y, 
+    COCOA_LOG_FLOW(("vboxRcdGetGeomerty: (x,y)=(%d,%d) (cx,cy)=(%d,%d)\n", pGetGeometry->rect.origin.x, pGetGeometry->rect.origin.y,
                     pGetGeometry->rect.size.width, pGetGeometry->rect.size.height));
 }
 
 void cocoaViewGetGeometry(NativeNSViewRef pView, int *px, int *py, int *pcx, int *pcy)
 {
-    COCOA_LOG_FLOW(("cocoaViewGetGeometry: pView=%p px=%p py=%p pcx=%p pcy=%p\n", 
+    COCOA_LOG_FLOW(("cocoaViewGetGeometry: pView=%p px=%p py=%p pcx=%p pcy=%p\n",
                     (void *)pView, (void *)px, (void *)py, (void *)pcx, (void *)pcy));
     NSAutoreleasePool *pPool;
     pPool = [[NSAutoreleasePool alloc] init];
@@ -3089,7 +3090,7 @@ void cocoaViewGetGeometry(NativeNSViewRef pView, int *px, int *py, int *pcx, int
     /* make sure all tasks are run, to preserve the order */
     VBoxMainThreadTaskRunner *pRunner = [VBoxMainThreadTaskRunner globalInstance];
     [pRunner runTasksSyncIfPossible];
-    
+
     NSRect frame;
 #ifndef IN_VMSVGA3D
     if (renderspuCalloutAvailable())
@@ -3105,7 +3106,7 @@ void cocoaViewGetGeometry(NativeNSViewRef pView, int *px, int *py, int *pcx, int
         DEBUG_MSG_NOT_VMSVGA3D(("no callout available on getGeometry\n"));
         frame = [[pView window] frame];
     }
-    
+
     *px  = frame.origin.x;
     *py  = frame.origin.y;
     *pcx = frame.size.width;
@@ -3133,18 +3134,18 @@ void cocoaViewPresentComposition(NativeNSViewRef pView, PCVBOXVR_SCR_COMPOSITOR_
         if (!pCtxInfo)
         {
             DEBUG_WARN(("renderspuDefaultSharedContextAcquire returned NULL"));
-            
+
             [pPool release];
             DEBUG_FUNC_LEAVE();
             return;
         }
-        
+
         pCtx = pCtxInfo->context;
-        
+
         [(OverlayView *)pView setGLCtx:pCtx];
     }
 # endif
-    
+
     [(OverlayView *)pView presentComposition:pChangedEntry];
 
     [pPool release];
@@ -3175,7 +3176,7 @@ void cocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef
             DEBUG_CHECK_GL_ERROR("glFlush");
         }
 #endif
-    	[NSOpenGLContext clearCurrentContext];
+        [NSOpenGLContext clearCurrentContext];
     }
 
     [pPool release];
@@ -3271,7 +3272,7 @@ VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaSwapBuffers(NativeNSViewRef pView, NativeN
 # else
     DEBUG_FUNC_ENTER();
     NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
-    
+
     Assert([(OverlayView *)pView glCtx] == pCtx);
     Assert([pCtx view] == pView);
 
diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c
index 1dc924f..ec494a1 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c
+++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c
@@ -242,7 +242,7 @@ renderSPUInit( int id, SPU *child, SPU *self,
 
     if (pcpwSetting)
     {
-        /* TODO: need proper blitter synchronization, do not use so far!
+        /** @todo need proper blitter synchronization, do not use so far!
          * the problem is that rendering can be done in multiple thread: the main command (hgcm) thread and the redraw thread
          * we currently use per-window synchronization, while we'll need a per-blitter synchronization if one blitter is used for multiple windows
          * this is not done currently */
diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c
index 78e2492..9c87091 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c
+++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c
@@ -1390,7 +1390,7 @@ void renderspu_SystemMakeCurrent( WindowInfo *window, GLint nativeWindow, Contex
              * and re-create it with the context's visual abilities
              */
 
-            /*@todo Chromium has no correct code to remove window ids and associated info from 
+            /** @todo Chromium has no correct code to remove window ids and associated info from 
              * various tables. This is hack which just hides the root case.
              */
             crWarning("Recreating window in renderspu_SystemMakeCurrent\n");
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.def b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.def
index b085f40..01a07bf 100644
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.def
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.def
@@ -8,4 +8,4 @@ crUnpackPush
 crUnpackPop
 crUnpackSetReturnPointer
 crUnpackSetWritebackPointer
-cr_unpackData
\ No newline at end of file
+cr_unpackData
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_extend.py b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_extend.py
index 10e995a..d81ff90 100755
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_extend.py
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_extend.py
@@ -33,4 +33,3 @@ print("""
 #endif
 """)
 
-
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_framebuffer.c b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_framebuffer.c
index a6c4812..1577775 100644
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_framebuffer.c
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_framebuffer.c
@@ -1,11 +1,10 @@
 /* $Id: unpack_framebuffer.c $ */
-
 /** @file
  * VBox OpenGL: EXT_framebuffer_object
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c
index 035f096..3ef82bb 100644
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c
@@ -1,11 +1,10 @@
 /* $Id: unpack_shaders.c $ */
-
 /** @file
  * VBox OpenGL DRI driver functions
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -264,20 +263,20 @@ void crUnpackExtendGetAttachedShaders(void)
 
 void crUnpackExtendGetAttachedObjectsARB(void)
 {
-	VBoxGLhandleARB containerObj = READ_DATA(8, VBoxGLhandleARB);
-	GLsizei maxCount = READ_DATA(12, GLsizei);
-	SET_RETURN_PTR(16);
-	SET_WRITEBACK_PTR(24);
-	cr_unpackDispatch.GetAttachedObjectsARB(containerObj, maxCount, NULL, NULL);
+        VBoxGLhandleARB containerObj = READ_DATA(8, VBoxGLhandleARB);
+        GLsizei maxCount = READ_DATA(12, GLsizei);
+        SET_RETURN_PTR(16);
+        SET_WRITEBACK_PTR(24);
+        cr_unpackDispatch.GetAttachedObjectsARB(containerObj, maxCount, NULL, NULL);
 }
 
 void crUnpackExtendGetInfoLogARB(void)
 {
-	VBoxGLhandleARB obj = READ_DATA(8, VBoxGLhandleARB);
-	GLsizei maxLength = READ_DATA(12, GLsizei);
-	SET_RETURN_PTR(16);
-	SET_WRITEBACK_PTR(24);
-	cr_unpackDispatch.GetInfoLogARB(obj, maxLength, NULL, NULL);
+        VBoxGLhandleARB obj = READ_DATA(8, VBoxGLhandleARB);
+        GLsizei maxLength = READ_DATA(12, GLsizei);
+        SET_RETURN_PTR(16);
+        SET_WRITEBACK_PTR(24);
+        cr_unpackDispatch.GetInfoLogARB(obj, maxLength, NULL, NULL);
 }
 
 void crUnpackExtendGetProgramInfoLog(void)
@@ -329,11 +328,11 @@ void crUnpackExtendGetUniformLocation(void)
 
 void crUnpackExtendGetUniformsLocations(void)
 {
-	GLuint program = READ_DATA(8, GLuint);
-	GLsizei maxcbData = READ_DATA(12, GLsizei);
-	SET_RETURN_PTR(16);
-	SET_WRITEBACK_PTR(24);
-	cr_unpackDispatch.GetUniformsLocations(program, maxcbData, NULL, NULL);
+        GLuint program = READ_DATA(8, GLuint);
+        GLsizei maxcbData = READ_DATA(12, GLsizei);
+        SET_RETURN_PTR(16);
+        SET_WRITEBACK_PTR(24);
+        cr_unpackDispatch.GetUniformsLocations(program, maxcbData, NULL, NULL);
 }
 
 void crUnpackExtendGetAttribsLocations(void)
diff --git a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_visibleregion.c b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_visibleregion.c
index 570c5dd..27d297e 100644
--- a/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_visibleregion.c
+++ b/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_visibleregion.c
@@ -1,11 +1,10 @@
 /* $Id: unpack_visibleregion.c $ */
-
 /** @file
  * VBox Packing VisibleRegion information
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/auth/directoryservice/directoryservice.cpp b/src/VBox/HostServices/auth/directoryservice/directoryservice.cpp
index d50d0d4..b23d75b 100644
--- a/src/VBox/HostServices/auth/directoryservice/directoryservice.cpp
+++ b/src/VBox/HostServices/auth/directoryservice/directoryservice.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/auth/pam/VBoxAuthPAM.c b/src/VBox/HostServices/auth/pam/VBoxAuthPAM.c
index 4721945..e46eb59 100644
--- a/src/VBox/HostServices/auth/pam/VBoxAuthPAM.c
+++ b/src/VBox/HostServices/auth/pam/VBoxAuthPAM.c
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/auth/simple/VBoxAuthSimple.cpp b/src/VBox/HostServices/auth/simple/VBoxAuthSimple.cpp
index 106d23a..5e08759 100644
--- a/src/VBox/HostServices/auth/simple/VBoxAuthSimple.cpp
+++ b/src/VBox/HostServices/auth/simple/VBoxAuthSimple.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/auth/simple/VBoxAuthSimple.rc b/src/VBox/HostServices/auth/simple/VBoxAuthSimple.rc
index d30f4a7..9638b61 100644
--- a/src/VBox/HostServices/auth/simple/VBoxAuthSimple.rc
+++ b/src/VBox/HostServices/auth/simple/VBoxAuthSimple.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/auth/winlogon/VBoxAuth.rc b/src/VBox/HostServices/auth/winlogon/VBoxAuth.rc
index 1d3683c..163b528 100644
--- a/src/VBox/HostServices/auth/winlogon/VBoxAuth.rc
+++ b/src/VBox/HostServices/auth/winlogon/VBoxAuth.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/auth/winlogon/winlogon.cpp b/src/VBox/HostServices/auth/winlogon/winlogon.cpp
index 857b07d..1e5a664 100644
--- a/src/VBox/HostServices/auth/winlogon/winlogon.cpp
+++ b/src/VBox/HostServices/auth/winlogon/winlogon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/HostServices/testcase/tstHGCMSvc.cpp b/src/VBox/HostServices/testcase/tstHGCMSvc.cpp
index f8f4e02..f8755a0 100644
--- a/src/VBox/HostServices/testcase/tstHGCMSvc.cpp
+++ b/src/VBox/HostServices/testcase/tstHGCMSvc.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/ImageMounter/VBoxFUSE/VBoxFUSE.cpp b/src/VBox/ImageMounter/VBoxFUSE/VBoxFUSE.cpp
index beebeea..a552cf3 100644
--- a/src/VBox/ImageMounter/VBoxFUSE/VBoxFUSE.cpp
+++ b/src/VBox/ImageMounter/VBoxFUSE/VBoxFUSE.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/.scm-settings b/src/VBox/Installer/.scm-settings
new file mode 100644
index 0000000..e47dced
--- /dev/null
+++ b/src/VBox/Installer/.scm-settings
@@ -0,0 +1,92 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the host installers.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# External stuff.
+/linux/rpm-kmod-VBoxGuest/kmodtool-VBoxGuest-el6.sh: --external-copyright
+
+# Dual licensed code.
+/common/vboxapisetup.py: --license-ose-dual
+
+# ignore desktop files.
+--filter-out-files *.desktop.in|*.desktop
+
+# Darwin stuff.
+--filter-out-files */DS_Store
+--filter-out-files /darwin/*.rtf
+--filter-out-files /darwin/*.strings
+--filter-out-files /darwin/*.html
+/darwin/DiskImage/VirtualBox_Uninstall.tool:    --treat-as .sh
+/darwin/VBoxKEXTs/postflight:                   --treat-as .sh
+/darwin/VirtualBox/postflight:                  --treat-as .sh
+/darwin/VirtualBox/preflight:                   --treat-as .sh
+/darwin/*/distribution.dist:                    --treat-as .xml --no-convert-eol
+
+# FreeBSD stuff.
+--filter-out-files /freebsd/pkg-comment
+--filter-out-files /freebsd/pkg-descr
+--filter-out-files /freebsd/pkg_plist
+
+# Linux stuff.
+--filter-out-files /linux/debian/changelog.in
+--filter-out-files /linux/debian/compat
+--filter-out-files /linux/debian/control
+--filter-out-files /linux/debian/copyright
+--filter-out-files /linux/debian/dirs
+--filter-out-files /linux/debian/lintian-override.in
+/linux/debian/postinst:                         --treat-as .sh
+/linux/debian/postrm:                           --treat-as .sh
+/linux/debian/preinst:                          --treat-as .sh
+/linux/debian/prerm:                            --treat-as .sh
+/linux/debian/rules:                            --treat-as Makefile --no-convert-eol --dont-set-svn-executable
+--filter-out-files /linux/debian/templates
+/linux/deffiles:                                --treat-as .sh
+--filter-out-files /linux/distributions_deb
+--filter-out-files /linux/distributions_rpm
+/linux/Makefile.include.footer:                 --treat-as Makefile --no-convert-eol
+/linux/Makefile.include.header:                 --treat-as Makefile --no-convert-eol
+/linux/rpm/rules:                               --treat-as Makefile --no-convert-eol --dont-set-svn-executable
+/linux/rpm/VirtualBox.tmpl.spec:                --treat-as .sh
+/linux/rpm-kmod/build-kmod.in:                  --treat-as .sh
+/linux/rpm-kmod/kmodtool:                       --treat-as .sh --external-copyright --no-strip-trailing-blanks
+/linux/rpm-kmod/rules:                          --treat-as Makefile --no-convert-eol --dont-set-svn-executable
+--filter-out-files /linux/rpm-kmod/vboxdrv.spec.in
+--filter-out-files /linux/rpm-kmod/VirtualBox-kmod.spec.in
+--filter-out-files /linux/rpm-kmod-VBoxGuest/README
+--filter-out-files /linux/rpm-kmod-VBoxGuest/VBoxGuest-kmod.spec
+--filter-out-files /linux/README.testing
+
+# Caveat: If we export /linux/rpm-VBoxGuestAdditions/, the --no-update-license hack must go.
+/linux/rpm-VBoxGuestAdditions/rules:                        --no-update-license --treat-as Makefile --no-convert-eol --dont-set-svn-executable
+/linux/rpm-VBoxGuestAdditions/VBoxGuestAdditions.tmpl.spec: --no-update-license --treat-as .sh
+
+# Solaris stuff.
+/solaris/vboxconfig.sh:                         --no-convert-tabs
+/solaris/*.xml:                                 --no-convert-eol
+
+--filter-out-files /solaris/ips/vbox.mog
+--filter-out-files /solaris/vbox.pkginfo
+--filter-out-files /solaris/vbox.pkgresponse
+--filter-out-files /solaris/vbox.space
+--filter-out-files /solaris/virtualbox.applications.in
+--filter-out-files /solaris/virtualbox.keys
+--filter-out-files /solaris/virtualbox.mime
+
+# Windows
+/win/MsiHack/MsiHackExtension.cs:               --treat-as .c
+--filter-out-files /win/Stub/VBoxStub.manifest
+/win/NLS/*.wxl:                                 --no-convert-tabs
+
diff --git a/src/VBox/Installer/common/vboxapisetup.py b/src/VBox/Installer/common/vboxapisetup.py
index f095274..cdd5d83 100755
--- a/src/VBox/Installer/common/vboxapisetup.py
+++ b/src/VBox/Installer/common/vboxapisetup.py
@@ -1,5 +1,5 @@
 """
-Copyright (C) 2009-2016 Oracle Corporation
+Copyright (C) 2009-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/common/virtualbox.xml b/src/VBox/Installer/common/virtualbox.xml
index 3af24a3..caec916 100644
--- a/src/VBox/Installer/common/virtualbox.xml
+++ b/src/VBox/Installer/common/virtualbox.xml
@@ -5,28 +5,28 @@
       <comment xml:lang="en">VirtualBox Machine Definition</comment>
       <glob pattern="*.vbox"/>
       <icon name="virtualbox-vbox"/>
-   </mime-type> 
+   </mime-type>
 
    <mime-type type="application/x-virtualbox-vbox-extpack">
       <comment>VirtualBox Extension Pack</comment>
       <comment xml:lang="en">VirtualBox Extension Pack</comment>
       <glob pattern="*.vbox-extpack"/>
       <icon name="virtualbox-vbox-extpack"/>
-   </mime-type> 
+   </mime-type>
 
    <mime-type type="application/x-virtualbox-ovf">
       <comment>Open Virtualization Format</comment>
       <comment xml:lang="en">Open Virtualization Format</comment>
       <glob pattern="*.ovf"/>
       <icon name="virtualbox-ovf"/>
-   </mime-type> 
+   </mime-type>
 
    <mime-type type="application/x-virtualbox-ova">
       <comment>Open Virtualization Format Archive</comment>
       <comment xml:lang="en">Open Virtualization Format Archive</comment>
       <glob pattern="*.ova"/>
       <icon name="virtualbox-ova"/>
-   </mime-type> 
+   </mime-type>
 
    <mime-type type="application/x-virtualbox-vdi">
       <comment>Virtual Disk Image</comment>
diff --git a/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool b/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool
index b085c8d..a9e284e 100755
--- a/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool
+++ b/src/VBox/Installer/darwin/DiskImage/VirtualBox_Uninstall.tool
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/darwin/Makefile.kmk b/src/VBox/Installer/darwin/Makefile.kmk
index 3eaf4a9..16495c2 100644
--- a/src/VBox/Installer/darwin/Makefile.kmk
+++ b/src/VBox/Installer/darwin/Makefile.kmk
@@ -160,6 +160,12 @@ endif
 	@# Change (back) the owner so it can be deleted by the user.
 	sudo chown "$(shell whoami)" "$@"
 	sudo chown -R "$(shell whoami)" $(VBOX_PATH_PACK_TMP)/DiskImage
+ifdef VBOX_SIGNING_MODE
+ ifndef VBOX_WITHOUT_SIGNED_DMG
+	@# Sign the created dmg.
+	$(call VBOX_SIGN_FILE_FN,$@,org.virtualbox.dmg)
+ endif
+endif
 
 #
 # The meta-package.
diff --git a/src/VBox/Installer/darwin/VBoxKEXTs/VirtualBoxStartup.sh b/src/VBox/Installer/darwin/VBoxKEXTs/VirtualBoxStartup.sh
index ce174b1..ecbc5ad 100755
--- a/src/VBox/Installer/darwin/VBoxKEXTs/VirtualBoxStartup.sh
+++ b/src/VBox/Installer/darwin/VBoxKEXTs/VirtualBoxStartup.sh
@@ -6,7 +6,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/darwin/VBoxKEXTs/postflight b/src/VBox/Installer/darwin/VBoxKEXTs/postflight
index 39c8ba7..8746552 100755
--- a/src/VBox/Installer/darwin/VBoxKEXTs/postflight
+++ b/src/VBox/Installer/darwin/VBoxKEXTs/postflight
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -19,7 +19,7 @@
 #
 # Make sure the old startup items are gone.
 #
-if [ -d /Library/StartupItems/VirtualBox/ ]; then 
+if [ -d /Library/StartupItems/VirtualBox/ ]; then
     rm -vf  "/Library/StartupItems/VirtualBox/StartupParameters.plist"
     rm -vf  "/Library/StartupItems/VirtualBox/VirtualBox"
     rm -vf  "/Library/StartupItems/VirtualBox/Resources/English.lproj/Localizable.strings"
diff --git a/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh b/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh
index afceaec..1a51487 100755
--- a/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh
+++ b/src/VBox/Installer/darwin/VirtualBox/VBoxAutostartDarwin.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (C) 2012-2015 Oracle Corporation
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/darwin/VirtualBox/postflight b/src/VBox/Installer/darwin/VirtualBox/postflight
index 3139baf..8ace8a0 100755
--- a/src/VBox/Installer/darwin/VirtualBox/postflight
+++ b/src/VBox/Installer/darwin/VirtualBox/postflight
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -27,14 +27,14 @@ VBOX_INSTALL_PATH=/Applications/VirtualBox.app/Contents/MacOS
 PYTHON="python python2.3 python2.5 python2.6 python2.7"
 if [ -e "${VBOX_INSTALL_PATH}/sdk/installer/vboxapisetup.py" ]; then
     for p in $PYTHON; do
-    	# Install the python bindings if python is in the path
-    	if [ "`\${p} -c 'print "test"' 2> /dev/null`" = "test" ]; then
-    		echo  1>&2 "Python found: ${p}, installing bindings..."
-    		# Pass install path via environment
-    		export VBOX_INSTALL_PATH
-    		/bin/sh -c "cd $VBOX_INSTALL_PATH/sdk/installer && ${p} vboxapisetup.py install"
-    		/bin/sh -c "cd $VBOX_INSTALL_PATH/sdk/installer && ${p} vboxapisetup.py clean --all"
-    	fi
+        # Install the python bindings if python is in the path
+        if [ "`\${p} -c 'print "test"' 2> /dev/null`" = "test" ]; then
+                echo  1>&2 "Python found: ${p}, installing bindings..."
+                # Pass install path via environment
+                export VBOX_INSTALL_PATH
+                /bin/sh -c "cd $VBOX_INSTALL_PATH/sdk/installer && ${p} vboxapisetup.py install"
+                /bin/sh -c "cd $VBOX_INSTALL_PATH/sdk/installer && ${p} vboxapisetup.py clean --all"
+        fi
     done
 fi
 
diff --git a/src/VBox/Installer/darwin/VirtualBox/preflight b/src/VBox/Installer/darwin/VirtualBox/preflight
index 377d04a..fae6ae4 100755
--- a/src/VBox/Installer/darwin/VirtualBox/preflight
+++ b/src/VBox/Installer/darwin/VirtualBox/preflight
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/freebsd/Makefile.kmk b/src/VBox/Installer/freebsd/Makefile.kmk
index c52887a..ce9f42c 100644
--- a/src/VBox/Installer/freebsd/Makefile.kmk
+++ b/src/VBox/Installer/freebsd/Makefile.kmk
@@ -234,8 +234,8 @@ OTHER_CLEAN += $(addprefix $(VBOX_FBSD_INST_LIBVBOX_DIR)/,$(VBOX_FBSD_ARCH_FILES
 #
 $(PATH_STAGE_BIN)/vboxdrv.tar.gz: \
 		src
-	$(call MSG_TOOL, export_modules,,$@)
-	$(QUIET)$(PATH_STAGE_BIN)/export_modules $@
+	$(call MSG_TOOL, export_modules.sh,,$@)
+	$(QUIET)$(PATH_STAGE_BIN)/export_modules.sh $@
 
 #
 # The generic installer.
diff --git a/src/VBox/Installer/freebsd/postdeinstall.sh b/src/VBox/Installer/freebsd/postdeinstall.sh
index 94f351e..5322f97 100755
--- a/src/VBox/Installer/freebsd/postdeinstall.sh
+++ b/src/VBox/Installer/freebsd/postdeinstall.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/freebsd/postinstall.sh b/src/VBox/Installer/freebsd/postinstall.sh
index e5b5bb2..a21a1f0 100755
--- a/src/VBox/Installer/freebsd/postinstall.sh
+++ b/src/VBox/Installer/freebsd/postinstall.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/Makefile.include.footer b/src/VBox/Installer/linux/Makefile.include.footer
index f67c651..fb870c9 100644
--- a/src/VBox/Installer/linux/Makefile.include.footer
+++ b/src/VBox/Installer/linux/Makefile.include.footer
@@ -1,9 +1,12 @@
-#
+# $Id: Makefile.include.footer $
+## @file
 # VirtualBox Guest Additions kernel module Makefile, common parts.
 #
 # See Makefile.include.header for details of how to use this.
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -19,6 +22,7 @@ override MODULE = $(MOD_NAME)
 OBJS   = $(MOD_OBJS)
 
 KBUILD_VERBOSE ?= 1
+LINUX_VERBOSE = $(if $(KBUILD_VERBOSE),1,)
 
 #
 # Compiler options
@@ -94,15 +98,15 @@ endif
 
 # OL/UEK: disable module signing for external modules -- we don't have any private key
 $(MODULE):
-	$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) -j$(JOBS) modules
+	$(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) $(if $(JOBS),-j$(JOBS),) modules
 
 install: $(MODULE)
-	$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) modules_install
+	$(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) modules_install
 
 modules_install: install
 
 clean:
-	$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) clean
+	$(MAKE) V=$(LINUX_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) clean
 
 .PHONY: $(MODULE) install modules_install clean
 endif
diff --git a/src/VBox/Installer/linux/Makefile.include.header b/src/VBox/Installer/linux/Makefile.include.header
index 8df1eb4..2cb2cc7 100644
--- a/src/VBox/Installer/linux/Makefile.include.header
+++ b/src/VBox/Installer/linux/Makefile.include.header
@@ -1,9 +1,12 @@
-#
+# $Id: Makefile.include.header $
+## @file
 # VirtualBox Guest Additions kernel module Makefile, common parts.
 #
 # (For 2.6.x, the main file must be called 'Makefile'!)
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -90,7 +93,23 @@ ifeq ($(KERNELRELEASE),)
  #
 
  # kernel base directory
+ ifdef KERN_DIR
+  ifndef KERN_VER
+   ifeq ($(filter %/build,$(KERN_DIR)),)
+    $(error The variable KERN_DIR must be a kernel build folder and end with /build without a trailing slash, or KERN_VER must be set)
+   endif
+  endif
+ endif
+
+ ifndef KERN_VER
+  ifdef KERN_DIR
+   KERN_VER = $(notdir $(patsubst %/build,%,$(KERN_DIR)))
+   ifeq ($(shell expr $(KERN_VER) : '[0-9]*\.[0-9]*.[0-9]*'),0)
+    $(error The kernel build folder path must end in <version>/build, or the variable KERN_VER must be set)
+   endif
+  endif
  KERN_VER ?= $(shell uname -r)
+ endif
 
  # guess kernel major version (24 or later)
  ifeq ($(shell if grep '"2\.4\.' /lib/modules/$(KERN_VER)/build/include/linux/version.h > /dev/null 2>&1; then echo yes; fi),yes)
@@ -120,7 +139,7 @@ endif # neq($(KERNELRELEASE),)
 KERN_DIR := /lib/modules/$(KERN_VER)/build
 ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
  $(error Error: unable to find the headers of the Linux kernel to build against. \
-          Specify KERN_VER=<version> and run Make again)
+          Specify KERN_VER=<version> (currently $(KERN_VER)) and run Make again)
 endif
 # Kernel include folder
 KERN_INCL := $(KERN_DIR)/include
diff --git a/src/VBox/Installer/linux/VBox.sh b/src/VBox/Installer/linux/VBox.sh
index 1af7071..28622a9 100755
--- a/src/VBox/Installer/linux/VBox.sh
+++ b/src/VBox/Installer/linux/VBox.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/VBoxCreateUSBNode.sh b/src/VBox/Installer/linux/VBoxCreateUSBNode.sh
index b4bf6bb..6e1f71a 100755
--- a/src/VBox/Installer/linux/VBoxCreateUSBNode.sh
+++ b/src/VBox/Installer/linux/VBoxCreateUSBNode.sh
@@ -6,7 +6,7 @@
 #
 
 #
-# Copyright (C) 2010-2015 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/VBoxSysInfo.sh b/src/VBox/Installer/linux/VBoxSysInfo.sh
index 45c5b83..ada6259 100755
--- a/src/VBox/Installer/linux/VBoxSysInfo.sh
+++ b/src/VBox/Installer/linux/VBoxSysInfo.sh
@@ -5,7 +5,8 @@
 # Installer (Unix-like)
 # Information about the host system/Linux distribution
 
-# Copyright (C) 2006-2015 Oracle Corporation
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/check_module_dependencies.sh b/src/VBox/Installer/linux/check_module_dependencies.sh
index a0b728e..3e96d1f 100755
--- a/src/VBox/Installer/linux/check_module_dependencies.sh
+++ b/src/VBox/Installer/linux/check_module_dependencies.sh
@@ -4,7 +4,7 @@
 # VirtualBox linux installation script
 
 #
-# Copyright (C) 2007-2016 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/deffiles b/src/VBox/Installer/linux/deffiles
index c37dbb7..346101c 100755
--- a/src/VBox/Installer/linux/deffiles
+++ b/src/VBox/Installer/linux/deffiles
@@ -1,10 +1,11 @@
 #!/bin/sh
+# $Id$
+## @file
+# Oracle VM VirtualBox - linux default files list.
 #
-# Oracle VM VirtualBox
-# VirtualBox linux default files list
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/install.sh b/src/VBox/Installer/linux/install.sh
index 0dccd3e..1a45c97 100755
--- a/src/VBox/Installer/linux/install.sh
+++ b/src/VBox/Installer/linux/install.sh
@@ -4,7 +4,7 @@
 # VirtualBox linux installation script
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/postinst-common.sh b/src/VBox/Installer/linux/postinst-common.sh
index 3a69e89..69eb0fc 100755
--- a/src/VBox/Installer/linux/postinst-common.sh
+++ b/src/VBox/Installer/linux/postinst-common.sh
@@ -5,7 +5,8 @@
 # VirtualBox Linux post-installer common portions
 #
 
-# Copyright (C) 2015 Oracle Corporation
+#
+# Copyright (C) 2015-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/prerm-common.sh b/src/VBox/Installer/linux/prerm-common.sh
index d7f7eb3..ff8f621 100755
--- a/src/VBox/Installer/linux/prerm-common.sh
+++ b/src/VBox/Installer/linux/prerm-common.sh
@@ -5,7 +5,8 @@
 # VirtualBox Linux pre-uninstaller common portions
 #
 
-# Copyright (C) 2015 Oracle Corporation
+#
+# Copyright (C) 2015-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/routines.sh b/src/VBox/Installer/linux/routines.sh
index ee3543a..57027ca 100644
--- a/src/VBox/Installer/linux/routines.sh
+++ b/src/VBox/Installer/linux/routines.sh
@@ -2,7 +2,8 @@
 # VirtualBox installer shell routines
 #
 
-# Copyright (C) 2007-2015 Oracle Corporation
+#
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
index 81053e4..d61ee55 100644
--- a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
+++ b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
@@ -1,9 +1,10 @@
-#
+# $Id: VirtualBox.tmpl.spec $
+## @file
 # Spec file for creating VirtualBox rpm packages
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -277,7 +278,7 @@ fi
 
 %preun
 # Called before the package is removed, or during upgrade after (not before)
-# the new version's "post" scriptlet. 
+# the new version's "post" scriptlet.
 # $1==0: remove the last version of the package
 # $1>=1: upgrade
 if [ "$1" = 0 ]; then
diff --git a/src/VBox/Installer/linux/rpm/rules b/src/VBox/Installer/linux/rpm/rules
index 93dbb80..e429491 100755
--- a/src/VBox/Installer/linux/rpm/rules
+++ b/src/VBox/Installer/linux/rpm/rules
@@ -1,6 +1,11 @@
 #!/usr/bin/make -f
+# $Id: rules $
+## @file
+# VirtualBox rules.
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -128,7 +133,7 @@ archdir  := $(current)/rpm/VirtualBox-$(ver)
 rpmname  := $(verpkg)-$(rpmver)_$(rpmrel)
 
 # never ship any modules
-instmod  := 
+instmod  :=
 
 ifneq ($(STAGEDISO),)
  ifeq ($(wildcard $(STAGEDISO)/VBoxGuestAdditions.iso),)
diff --git a/src/VBox/Installer/linux/runasroot.sh b/src/VBox/Installer/linux/runasroot.sh
index 09d4127..16f1f8b 100755
--- a/src/VBox/Installer/linux/runasroot.sh
+++ b/src/VBox/Installer/linux/runasroot.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/scripts/VBoxHeadlessXOrg.sh b/src/VBox/Installer/linux/scripts/VBoxHeadlessXOrg.sh
index 1da54fc..8c371a8 100755
--- a/src/VBox/Installer/linux/scripts/VBoxHeadlessXOrg.sh
+++ b/src/VBox/Installer/linux/scripts/VBoxHeadlessXOrg.sh
@@ -1,9 +1,11 @@
 #!/bin/sh
 # $Id: VBoxHeadlessXOrg.sh $
-#
+## @file
 # VirtualBox X Server auto-start service.
 #
-# Copyright (C) 2012-2015 Oracle Corporation
+
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/testcase/tstHeadlessXOrg.sh b/src/VBox/Installer/linux/testcase/tstHeadlessXOrg.sh
index 3e865a0..23e16d6 100755
--- a/src/VBox/Installer/linux/testcase/tstHeadlessXOrg.sh
+++ b/src/VBox/Installer/linux/testcase/tstHeadlessXOrg.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2012-2015 Oracle Corporation
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/uninstall.sh b/src/VBox/Installer/linux/uninstall.sh
index 2d60322..f7e5640 100755
--- a/src/VBox/Installer/linux/uninstall.sh
+++ b/src/VBox/Installer/linux/uninstall.sh
@@ -4,7 +4,7 @@
 # VirtualBox linux uninstallation script
 
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/vboxautostart-service.sh b/src/VBox/Installer/linux/vboxautostart-service.sh
index 0948c6e..218af64 100755
--- a/src/VBox/Installer/linux/vboxautostart-service.sh
+++ b/src/VBox/Installer/linux/vboxautostart-service.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: vboxautostart-service.sh $
+## @file
 # VirtualBox autostart service init script.
 #
-# Copyright (C) 2012-2015 Oracle Corporation
+
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/vboxballoonctrl-service.sh b/src/VBox/Installer/linux/vboxballoonctrl-service.sh
index 626e3b7..9acc810 100755
--- a/src/VBox/Installer/linux/vboxballoonctrl-service.sh
+++ b/src/VBox/Installer/linux/vboxballoonctrl-service.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: vboxballoonctrl-service.sh $
+## @file
 # VirtualBox watchdog daemon init script.
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/linux/vboxdrv.sh b/src/VBox/Installer/linux/vboxdrv.sh
index 7966ffb..8ef118c 100755
--- a/src/VBox/Installer/linux/vboxdrv.sh
+++ b/src/VBox/Installer/linux/vboxdrv.sh
@@ -3,7 +3,7 @@
 # Linux kernel module init script
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -383,13 +383,13 @@ cleanup()
            || test -e "${i}/misc/vboxpci.ko"; then
             rm -f "${i}/misc/vboxdrv.ko" "${i}/misc/vboxnetadp.ko" \
                   "${i}/misc/vboxnetflt.ko" "${i}/misc/vboxpci.ko"
-            # Remove the kernel version folder if it was empty except for us.
-            test   "`echo ${i}/misc/* ${i}/misc/.?* ${i}/* ${i}/.?*`" \
-                 = "${i}/misc/* ${i}/misc/.. ${i}/misc ${i}/.." &&
-                rmdir "${i}/misc" "${i}"  # We used to leave empty folders.
             version=`expr "${i}" : "/lib/modules/\(.*\)"`
             depmod -a "${version}"
         fi
+        # Remove the kernel version folder if it was empty except for us.
+        test   "`echo ${i}/misc/* ${i}/misc/.?* ${i}/* ${i}/.?*`" \
+             = "${i}/misc/* ${i}/misc/.. ${i}/misc ${i}/.." &&
+            rmdir "${i}/misc" "${i}"  # We used to leave empty folders.
     done
 }
 
diff --git a/src/VBox/Installer/linux/vboxweb-service.sh b/src/VBox/Installer/linux/vboxweb-service.sh
index 092560a..01ba5e0 100755
--- a/src/VBox/Installer/linux/vboxweb-service.sh
+++ b/src/VBox/Installer/linux/vboxweb-service.sh
@@ -1,8 +1,11 @@
 #!/bin/sh
-#
+# $Id: vboxweb-service.sh $
+## @file
 # VirtualBox web service API daemon init script.
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/VBox.sh b/src/VBox/Installer/solaris/VBox.sh
index 3150e1d..e350100 100755
--- a/src/VBox/Installer/solaris/VBox.sh
+++ b/src/VBox/Installer/solaris/VBox.sh
@@ -4,7 +4,7 @@
 #
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/VBoxISAExec.c b/src/VBox/Installer/solaris/VBoxISAExec.c
index a2e260e..886bd8f 100644
--- a/src/VBox/Installer/solaris/VBoxISAExec.c
+++ b/src/VBox/Installer/solaris/VBoxISAExec.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/VBoxZoneAccess.c b/src/VBox/Installer/solaris/VBoxZoneAccess.c
index 82ca24d..f7f52de 100644
--- a/src/VBox/Installer/solaris/VBoxZoneAccess.c
+++ b/src/VBox/Installer/solaris/VBoxZoneAccess.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/checkinstall.sh b/src/VBox/Installer/solaris/checkinstall.sh
index 113d6ba..ad189eb 100755
--- a/src/VBox/Installer/solaris/checkinstall.sh
+++ b/src/VBox/Installer/solaris/checkinstall.sh
@@ -6,7 +6,7 @@
 #
 
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/makepackage.sh b/src/VBox/Installer/solaris/makepackage.sh
index dd87198..82e792a 100755
--- a/src/VBox/Installer/solaris/makepackage.sh
+++ b/src/VBox/Installer/solaris/makepackage.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/pkginstall.sh b/src/VBox/Installer/solaris/pkginstall.sh
index 6a84faa..b0f7ec0 100755
--- a/src/VBox/Installer/solaris/pkginstall.sh
+++ b/src/VBox/Installer/solaris/pkginstall.sh
@@ -9,7 +9,7 @@
 #
 
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/postinstall.sh b/src/VBox/Installer/solaris/postinstall.sh
index 74d7f7b..cad9c17 100755
--- a/src/VBox/Installer/solaris/postinstall.sh
+++ b/src/VBox/Installer/solaris/postinstall.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/preremove.sh b/src/VBox/Installer/solaris/preremove.sh
index 833554e..3709ca9 100755
--- a/src/VBox/Installer/solaris/preremove.sh
+++ b/src/VBox/Installer/solaris/preremove.sh
@@ -5,9 +5,7 @@
 #
 
 #
-# VirtualBox preremove script for Solaris.
-#
-# Copyright (C) 2007-2015 Oracle Corporation
+# Copyright (C) 2007-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/smf-vboxautostart.sh b/src/VBox/Installer/solaris/smf-vboxautostart.sh
index 757cdbd..fd2a729 100755
--- a/src/VBox/Installer/solaris/smf-vboxautostart.sh
+++ b/src/VBox/Installer/solaris/smf-vboxautostart.sh
@@ -1,7 +1,8 @@
 #!/sbin/sh
 # $Id: smf-vboxautostart.sh $
 
-# Copyright (C) 2012-2015 Oracle Corporation
+#
+# Copyright (C) 2012-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh b/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh
index 8605d5c..6c70255 100755
--- a/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh
+++ b/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh
@@ -1,7 +1,8 @@
 #!/sbin/sh
 # $Id: smf-vboxballoonctrl.sh $
 
-# Copyright (C) 2008-2015 Oracle Corporation
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/smf-vboxwebsrv.sh b/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
index e800eef..91e1610 100755
--- a/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
+++ b/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
@@ -1,7 +1,8 @@
 #!/sbin/sh
 # $Id: smf-vboxwebsrv.sh $
 
-# Copyright (C) 2008-2015 Oracle Corporation
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/vboxconfig.sh b/src/VBox/Installer/solaris/vboxconfig.sh
index e0df356..2c24367 100755
--- a/src/VBox/Installer/solaris/vboxconfig.sh
+++ b/src/VBox/Installer/solaris/vboxconfig.sh
@@ -5,7 +5,7 @@
 #
 
 #
-# Copyright (C) 2009-2015 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/solaris/virtualbox-autostart.xml b/src/VBox/Installer/solaris/virtualbox-autostart.xml
index f90502d..3805b09 100644
--- a/src/VBox/Installer/solaris/virtualbox-autostart.xml
+++ b/src/VBox/Installer/solaris/virtualbox-autostart.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
 <!--
 # Solaris SMF service manifest for VirtualBox autostart service.
-# $Id$
+# $Id: virtualbox-autostart.xml $
 
     Copyright (C) 2012-2015 Oracle Corporation
 
diff --git a/src/VBox/Installer/solaris/virtualbox-webservice.xml b/src/VBox/Installer/solaris/virtualbox-webservice.xml
index 1b88209..671a43c 100644
--- a/src/VBox/Installer/solaris/virtualbox-webservice.xml
+++ b/src/VBox/Installer/solaris/virtualbox-webservice.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
 <!--
 # Solaris SMF service manifest for VirtualBox webservice server.
-# $Id$
+# $Id: virtualbox-webservice.xml $
 
     Copyright (C) 2008-2015 Oracle Corporation
 
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp b/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp
index e45d0ce..c3cd596 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp
+++ b/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxCommon.h b/src/VBox/Installer/win/InstallHelper/VBoxCommon.h
index 3dad6c3..8938d25 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxCommon.h
+++ b/src/VBox/Installer/win/InstallHelper/VBoxCommon.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
index e7ee3e8..922c1e4 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
+++ b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2008-2016 Oracle Corporation
+; Copyright (C) 2008-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.rc b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.rc
index a374079..b42b5ab 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.rc
+++ b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Makefile.kmk b/src/VBox/Installer/win/Makefile.kmk
index c7ceda0..2823aed 100644
--- a/src/VBox/Installer/win/Makefile.kmk
+++ b/src/VBox/Installer/win/Makefile.kmk
@@ -28,18 +28,9 @@ endif
 #
 include $(PATH_SUB_CURRENT)/InstallHelper/Makefile.kmk
 
-ifdef VBOX_WITH_BUNDLED_INSTALLER
- ifeq ($(KBUILD_TARGET_ARCH),x86)
-  include $(PATH_SUB_CURRENT)/BundleMachine/Makefile.kmk
- endif
-endif
-
 ifeq ($(KBUILD_TARGET_ARCH),x86)
  include $(PATH_SUB_CURRENT)/Stub/Makefile.kmk
  include $(PATH_SUB_CURRENT)/StubBld/Makefile.kmk
- ifdef VBOX_BRAND_WIN_AS_MENU
-  include $(PATH_SUB_CURRENT)/AutoStartMenu/Makefile.kmk
- endif
 endif
 
 include $(PATH_SUB_CURRENT)/Resources/Makefile.kmk
@@ -207,28 +198,6 @@ ifdef VBOX_WITH_MSM_INSTALL
 		$(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).wixpdb))
 endif
 
-ifdef VBOX_WITH_BUNDLED_INSTALLER
- ifeq ($(KBUILD_TARGET),darwin)
-  VBOX_TMP_DIR ?= /VBox
-  ZIP = /usr/bin/zip
- else
-  VBOX_TMP_DIR ?= c:\Temp
-  ZIP = zip
- endif
-
- ifndef VBOX_PATH_PACK_TMP
-  VBOX_PATH_PACK_TMP := $(VBOX_WIN_INST_OUT_DIR)
- endif
-
- VBOX_PATH_PACK_BUNDLE_TMP = $(PATH_STAGE_BIN)/VBoxWinBundleInstaller
- VBOX_PATH_PACK_BUNDLE_ZIP = $(PATH_STAGE_BIN)/VBoxWinBundleInstaller-$(KBUILD_TARGET_ARCH).zip
-
- VBOX_BRAND_WIN_INST_NAME.x86   = $(PACKAGE_BASE)-Win_x86$(VBOX_BRAND_WIN_INST_EXT).msi
- VBOX_BRAND_WIN_INST_NAME.amd64 = $(PACKAGE_BASE)-Win_amd64$(VBOX_BRAND_WIN_INST_EXT).msi
-
- PACKING.win += $(VBOX_PATH_PACK_BUNDLE_ZIP)
-endif
-
 #
 # Suppress/skip the following ICE (Internal Consistency Evaluators):
 # - ICE64: Checks that new directories in the user profile are removed correctly in roaming scenarios.
@@ -858,54 +827,4 @@ $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL): \
 endif
 
 
-#
-# Make the bundle installer (for retail ISOs) (zip-file).
-#
-$(VBOX_PATH_PACK_BUNDLE_ZIP): \
-		$(PACKAGE_NAME_FINAL) \
-		$(if-expr "$(KBUILD_TARGET_ARCH)" == "x86", \
-			$(PATH_STAGE_BIN)/VBoxBundleMachine.exe \
-			$(if $(VBOX_BRAND_WIN_AS_MENU), $(PATH_STAGE_BIN)/AutoStartMenu.exe) \
-			$(if $(VBOX_WITH_COMBINED_PACKAGE), $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL)),)
-	$(RM) -Rf -- $(VBOX_PATH_PACK_BUNDLE_TMP)/
-	$(MKDIR) -p $(VBOX_PATH_PACK_BUNDLE_TMP)/
-ifndef VBOX_WITH_COMBINED_PACKAGE
-	$(CP) $(PACKAGE_NAME_FINAL)                 $(VBOX_PATH_PACK_BUNDLE_TMP)/$(VBOX_BRAND_WIN_INST_NAME.$(KBUILD_TARGET_ARCH))
-endif
-ifeq ($(KBUILD_TARGET_ARCH),x86)
- ifdef VBOX_WITH_COMBINED_PACKAGE
-	$(CP) $(PATH_STAGE_BIN)/$(PACKAGE_NAME_MULTIARCH_FINAL)       $(VBOX_PATH_PACK_BUNDLE_TMP)/$(PACKAGE_NAME_MULTIARCH_FINAL)
- endif
-	$(CP) $(PATH_STAGE_BIN)/VBoxBundleMachine.exe     $(VBOX_PATH_PACK_BUNDLE_TMP)/
-	$(CP) $(PATH_STAGE_BIN)/AutoStartMenu.exe         $(VBOX_PATH_PACK_BUNDLE_TMP)/
- ifdef VBOX_BRAND_WIN_AS_MENU
-	$(MKDIR) -p $(VBOX_PATH_PACK_BUNDLE_TMP)/Menu/Graphics/
-	$(CP) $(VBOX_BRAND_WIN_AS_CONTENT)          $(VBOX_PATH_PACK_BUNDLE_TMP)/
-	$(CP) $(VBOX_BRAND_WIN_AS_MENU_CONTENT)     $(VBOX_PATH_PACK_BUNDLE_TMP)/Menu/
-	$(CP) $(VBOX_BRAND_WIN_AS_MENU_CONTENT_GFX) $(VBOX_PATH_PACK_BUNDLE_TMP)/Menu/Graphics/
-  ifdef VBOX_WITH_COMBINED_PACKAGE
-	$(SED) -e 's/VBOXEXE/$(PACKAGE_NAME_MULTIARCH_FINAL)/g' \
-	       --output $(VBOX_PATH_PACK_BUNDLE_TMP)/Menu/index.html \
-	       $(VBOX_BRAND_WIN_AS_MENU)/index_combined.html
-  else
-	$(SED) -e 's/VBOX32EXE/$(VBOX_BRAND_WIN_INST_NAME.x86)/g' \
-	       -e 's/VBOX64EXE/$(VBOX_BRAND_WIN_INST_NAME.amd64)/g' \
-	       --output $(VBOX_PATH_PACK_BUNDLE_TMP)/Menu/index.html \
-	       $(VBOX_BRAND_WIN_AS_MENU)/index.html
-  endif
- endif
-endif
-ifeq ($(KBUILD_TARGET_ARCH),amd64)
- ifndef VBOX_WITH_COMBINED_PACKAGE
-	# Only needed if *not* combined package -- otherwise the 64-bit build
-	# has nothing to do here since the one and only amd64 .MSI file is already
-	# included in the x86 combined package.
-	$(REDIRECT) -C $(VBOX_PATH_PACK_BUNDLE_TMP) -- $(ZIP) -9r $@ .
- endif
-else
-	# Do a bundle .zip in every case on x86. On a combined package this also
-	# will include the amd64 installer we left out in the block above (see comment).
-	$(REDIRECT) -C $(VBOX_PATH_PACK_BUNDLE_TMP) -- $(ZIP) -9r $@ .
-endif
-
 include $(FILE_KBUILD_SUB_FOOTER)
diff --git a/src/VBox/Installer/win/MsiHack/MsiHack.cpp b/src/VBox/Installer/win/MsiHack/MsiHack.cpp
index b4a3c92..fa7f230 100644
--- a/src/VBox/Installer/win/MsiHack/MsiHack.cpp
+++ b/src/VBox/Installer/win/MsiHack/MsiHack.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/MsiHack/MsiHackExtension.cs b/src/VBox/Installer/win/MsiHack/MsiHackExtension.cs
index 1d44810..59cdbde 100644
--- a/src/VBox/Installer/win/MsiHack/MsiHackExtension.cs
+++ b/src/VBox/Installer/win/MsiHack/MsiHackExtension.cs
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/NLS/de_DE.wxl b/src/VBox/Installer/win/NLS/de_DE.wxl
index cbc52b2..06e2071 100644
--- a/src/VBox/Installer/win/NLS/de_DE.wxl
+++ b/src/VBox/Installer/win/NLS/de_DE.wxl
@@ -1,599 +1,599 @@
-<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="de_DE">
-
-    <!--
-            Language Definition Include for VirtualBox WiX script.
-
-            Copyright (C) 2011-2016 Oracle Corporation
-
-            This file is part of VirtualBox Open Source Edition (OSE), as
-            available from http://www.virtualbox.org. This file is free software;
-            you can redistribute it and/or modify it under the terms of the GNU
-            General Public License (GPL) as published by the Free Software
-            Foundation, in version 2 as it comes in the "COPYING" file of the
-            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-    -->
-
-    <String Id="LANG">1033</String>
-    <String Id="LangName">Deutsch</String>
-
-    <String Id="ButtonText_No">&Nein</String>
-    <String Id="ButtonText_Yes">&Ja</String>
-    <String Id="ButtonText_Cancel">A&bbrechen</String>
-    <String Id="ButtonText_Next">&Weiter></String>
-    <String Id="ButtonText_Back">< &Zurück</String>
-    <String Id="ButtonText_Browse">Durch&suchen</String>
-    <String Id="ButtonText_OK">O&K</String>
-    <String Id="ButtonText_Check">Ü&berprüfen</String>
-    <String Id="ButtonText_Install">&Installieren</String>
-    <String Id="ButtonText_Remove">&Entfernen</String>
-    <String Id="ButtonText_Finish">&Fertig stellen</String>
-    <String Id="ButtonText_Repair">&Reparieren</String>
-    <String Id="ButtonText_Return">&Zurück</String>
-    <String Id="ButtonText_Retry">&Wiederholen</String>
-    <String Id="ButtonText_Ignore">I&gnorieren</String>
-    <String Id="ButtonText_Exit">B&eenden</String>
-
-    <String Id="InstallModeCustom">Angepasst</String>
-    <String Id="Setup">Setup</String>
-
-    <!---->
-
-    <String Id="StartMenu_License">Lizenz</String>
-    <String Id="StartMenu_UserManual">Benutzerhandbuch</String>
-
-    <!---->
-
-    <String Id="VB_App">[ProductName] Hauptanwendung.</String>
-    <String Id="VB_USBDriver">[ProductName] Treiber für USB Geräte-Unterstützung.</String>
-    <String Id="VB_Network">[ProductName] Treiber für Netzwerk-Unterstützung.</String>
-    <String Id="VB_NetFltDriver">[ProductName] Treiber für Netzwerkbrücke.</String>
-    <String Id="VB_NetAdpDriver">[ProductName] Treiber für virtuellen Netzwerk-Adapter für Host-only Netzwerke.</String>
-    <String Id="VB_NetLwfDriver">[ProductName] Treiber für NDIS6-Netzwerkbrücke.</String>
-    <String Id="VB_NetAdp6Driver">[ProductName] Treiber für virtuellen Netzwerk-Adapter für NDIS6-Host-only-Netzwerke.</String>
-
-  <String Id="VB_Python">Python-Support für VirtualBox.</String>
-
-    <!---->
-
-    <String Id="NeedAdmin">Sie benötigen Administrations-Rechte zum (De-)Installieren von [ProductName]! Das Setup wird nun beendet.</String>
-    <String Id="WrongOS">[ProductName] läuft nur auf Windows XP oder höher!</String>
-    <String Id="Only32Bit">Diese Applikation läuft nur auf 32-bit Windows-Systemen. Bitte installieren Sie die 64-bit Version von [ProductName]!</String>
-    <String Id="Only64Bit">Diese Applikation läuft nur auf 64-bit Windows-Systemen. Bitte installieren Sie die 32-bit Version von [ProductName]!</String>
-    <String Id="SunFound">Eine alte Sun Version von VirtualBox wurde auf diesem Computer gefunden. Bitte deinstallieren Sie diese Version zuerst. Danach können Sie [ProductName] installieren!</String>
-    <String Id="InnotekFound">Eine alte innotek Version von VirtualBox wurde auf diesem Computer gefunden. Bitte deinstallieren Sie diese Version zuerst. Danach können Sie [ProductName] installieren!</String>
-
-    <!---->
-
-    <String Id="CancelDlg_Question">Sind Sie sicher, dass Sie die Installation von [ProductName] abbrechen möchten?</String>
-
-    <!---->
-
-    <String Id="WelcomeDlg_Header">Willkommen beim Setup-Assistenten von [ProductName]</String>
-    <String Id="WelcomeDlg_Body">Der Setup-Assistent installiert [ProductName] auf Ihrem Computer. Klicken Sie auf "Weiter", um den Vorgang fortzusetzen, oder klicken Sie auf "Abbrechen", um den Setup-Assistenten zu beenden.</String>
-
-    <!---->
-
-    <String Id="LicenseAgreementDlg_Header">Endbenutzer-Lizenzvertrag</String>
-    <String Id="LicenseAgreementDlg_Body">Bitte lesen Sie den folgenden Lizenzvertrag sorgfältig durch.</String>
-    <String Id="LicenseAgreementDlg_Accept">Ich &akzeptiere die Bedingungen des Lizenzvertrags.</String>
-    <String Id="LicenseAgreementDlg_Decline">Ich &akzeptiere die Bedingungen des Lizenzvertrags nicht.</String>
-
-    <!---->
-
-    <String Id="CheckSerialDlg_Header">Seriennummer</String>
-    <String Id="CheckSerialDlg_Body">Bitte geben Sie die Seriennummer in die unten stehenden Felder ein. Sie finden die Nummer auf dem Aufkleber in der VirtualBox CD-Hülle.</String>
-    <String Id="CheckSerialDlg_Footer">Wenn Sie fertig mit der Eingabe sind, drücken Sie bitte den "Überprüfen"-Knopf unten.</String>
-
-    <!---->
-
-    <String Id="WrongSerialDlg_Header">Eingegebene Seriennummer ist ungültig!</String>
-    <String Id="WrongSerialDlg_Desc1">Bitte geben Sie Ihre Seriennummer erneut auf der vorherigen Seite ein.</String>
-    <String Id="WrongSerialDlg_Desc2">Beachten Sie, dass die Seriennummer exakt so geschrieben sein muss wie sie auf dem Aufkleber erscheint.</String>
-
-    <!---->
-
-    <String Id="WarnSaveStatesDlg_Header">Warnung:</String>
-    <String Id="WarnSaveStatesDlg_Header2">Inkompatible Saved States!</String>
-    <String Id="WarnSaveStatesDlg_Desc">Wenn Sie jetzt [ProductName] updaten, werden alle gesicherten Zustände bereits existierender virtueller Maschinen nicht mehr funktionieren! Nach der Installation müssen Sie die gesicherten Zustände manuell verwerfen.</String>
-    <String Id="WarnSaveStatesDlg_Proceed">Jetzt mit der Installation weitermachen?</String>
-
-    <!---->
-
-    <String Id="WarnTAPDevicesDlg_Header">Hostinterfaces</String>
-    <String Id="WarnTAPDevicesDlg_Desc">Wenn Sie bei bereits existierenden virtuellen Maschinen sogenannte Hostinterfaces verwenden, müssen Sie diese nach der Installation noch einmal neu erstellen.</String>
-
-    <!---->
-
-    <String Id="CustomizeDlg_Location">Ort:</String>
-    <String Id="CustomizeDlg_DiskUsage">Speicherplatz</String>
-    <String Id="CustomizeDlg_SelFeatures">Wählen Sie die Installationsart der Features aus.</String>
-    <String Id="CustomizeDlg_IconTree">Klicken Sie in der unten angezeigten Struktur auf die Symbole, um die Installationsart der Features zu ändern.</String>
-    <String Id="CustomizeDlg_CustomSetup">Benutzerdefiniertes Setup</String>
-    <String Id="CustomizeDlg_SelItemDesc">CustomizeDlgItemDescription-CustomizeDlgItemDescription</String>
-    <String Id="CustomizeDlg_SelItemSize">CustomizeDlgItemSize-CustomizeDlgItemSize</String>
-    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
-
-    <!---->
-
-    <String Id="Customize2Dlg_Header">Anpassen</String>
-    <String Id="Customize2Dlg_Desc">Bitte unten die gewünschten Optionen auswählen:</String>
-    <String Id="Customize2Dlg_CreateStartMenuEntries">Startmenü-Einträge anlegen</String>
-    <String Id="Customize2Dlg_CreateDesktopShortcut">Verknüpfung auf dem Desktop anlegen</String>
-    <String Id="Customize2Dlg_CreateQuickLaunch">Verknüpfung in der Schnellstartleiste anlegen</String>
-    <String Id="Customize2Dlg_RegisterFileExtensions">Dateizuordnungen registrieren</String>
-
-    <!---->
-
-    <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
-This is default for older versions of Windows (pre-Vista).</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
-This is default for newer versions of Windows (Vista and newer).</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
-
-    <!---->
-
-    <String Id="WarnDisconNetIfacesDlg_Title">Warnung:</String>
-    <String Id="WarnDisconNetIfacesDlg_Title2">Netzwerkschnittstellen</String>
-    <String Id="WarnDisconNetIfacesDlg_Desc">Beim Installieren des [ProductName] Netzwerk-Features wird die Netzwerkverbindung unterbrochen und der Computer somit temporär vom Netzwerk getrennt.</String>
-    <String Id="WarnDisconNetIfacesDlg_Question">Jetzt mit der Installation fortfahren?</String>
-
-    <!---->
-
-    <String Id="DiskCostDlg_SpaceRequired">Der erforderliche Speicherplatz für die Installation der ausgewählten Features.</String>
-    <String Id="DiskCostDlg_NotEnoughSpace">Die markierten Datenträger verfügen nicht über genügend Speicherplatz für die ausgewählten Features. Sie können entweder einige Dateien von den markierten Datenträgern entfernen, weniger Features installieren oder einen anderen Zieldatenträger auswählen.</String>
-    <String Id="DiskCostDlg_SpaceRequirements">Erforderlicher Speicherplatz</String>
-    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
-
-    <!---->
-
-    <String Id="BrowseDlg_BrowseDestFolder">Zum Zielordner wechseln</String>
-    <String Id="BrowseDlg_ChangeCurFolder">Zielordner ändern</String>
-    <String Id="BrowseDlg_UpOneLevelTooltip">Eine Verzeichnisebene nach oben</String>
-    <String Id="BrowseDlg_CreateNewFolderTooltip">Einen neuen Ordner erstellen</String>
-    <String Id="BrowseDlg_LookIn">&Suchen in:</String>
-    <String Id="BrowseDlg_FolderName">&Ordnername:</String>
-
-    <!---->
-
-    <String Id="VerifyReadyDlg_ReadyToBegin">Der Assistent ist nun bereit die Installationsart "[InstallMode]" zu installieren.</String>
-    <String Id="VerifyReadyDlg_ClickInstall">Klicken Sie auf "Installieren", um mit der Installation zu beginnen. Klicken Sie auf "Zurück", um die Installationseinstellungen zu überprüfen oder zu ändern.</String>
-    <String Id="VerifyReadyDlg_ReadyToInstall">Bereit zum Installieren</String>
-
-    <!---->
-
-    <String Id="ExitDlg_ClickFinish">Klicken Sie auf die Schaltfläche "Fertig stellen", um den Setup-Assistenten fertig zu stellen.</String>
-    <String Id="ExitDlg_InstComplete">Der Setup-Assistent von [ProductName] wurde fertig gestellt.</String>
-    <String Id="ExitDlg_StartVBox">[ProductName] nach der Installation starten</String>
-
-    <!---->
-
-    <String Id="FatalErrorDlg_Header">Der Setup-Assistent von [ProductName] wurde vorzeitig abgebrochen</String>
-    <String Id="FatalErrorDlg_Desc">Der Setup-Assistent von [ProductName] wurde aufgrund eines Fehlers vorzeitig abgebrochen. Es wurden keine Änderungen an Ihrem System vorgenommen. Um dieses Programm zu einem späteren Zeitpunkt zu installieren, führen Sie den Setup-Assistenten erneut aus.</String>
-    <String Id="FatalErrorDlg_Footer">Klicken Sie auf die Schaltfläche "Fertig stellen", um den Setup-Assistenten fertig zu stellen.</String>
-
-    <!---->
-
-    <String Id="FilesInUse_Text">Die folgenden Anwendungen verwenden Dateien, die während des Setups aktualisiert werden müssen. Schließen Sie diese Anwendungen, und klicken Sie anschließend auf "Wiederholen", um die Installation fortzusetzen, oder auf "Beenden", um die Installation zu beenden.</String>
-    <String Id="FilesInUse_Description">Einige der zu aktualisierenden Dateien werden gerade verwendet.</String>
-    <String Id="FilesInUse_Title">Verwendete Dateien</String>
-
-    <!---->
-
-    <String Id="UserExitDlg_Header">Der Setup-Assistent von [ProductName] wurde unterbrochen</String>
-    <String Id="UserExitDlg_Desc">Das Setup von [ProductName] wurde unterbrochen. Es wurden keine Änderungen an Ihrem System vorgenommen. Um dieses Programm zu einem späteren Zeitpunkt zu installieren, führen Sie die Installation erneut aus.</String>
-    <String Id="UserExitDlg_Footer">Klicken Sie auf die Schaltfläche "Fertig stellen", um den Setup-Assistenten zu beenden.</String>
-
-    <!---->
-
-    <String Id="ProgressDlg_PleaseWait">Warten Sie, während [ProductName] durch den Setup-Assistenten installiert wird. Dies kann einige Zeit in Anspruch nehmen.</String>
-
-    <!---->
-
-    <String Id="ResumeDlg_Header">Der Setup-Assistent von [ProductName] wird fortgesetzt</String>
-    <String Id="ResumeDlg_Desc">Der Setup-Assistent schließt die Installation von [ProductName] auf Ihrem Computer ab. Klicken Sie auf "Installieren", um den Vorgang fortzusetzen, oder klicken Sie auf "Abbrechen", um den Setup-Assistenten zu beenden.</String>
-
-    <!---->
-
-    <String Id="MaintenanceTypeDlg_Header">Ändern, Reparieren oder Entfernen der Installation</String>
-    <String Id="MaintenanceTypeDlg_SelOption">Wählen Sie den durchzuführenden Vorgang.</String>
-    <String Id="MaintenanceTypeDlg_Repair">R&eparieren</String>
-    <String Id="MaintenanceTypeDlg_RepairText">Repariert Fehler in der aktuellen Installation durch Reparieren von fehlenden und beschädigten Dateien, Verknüpfungen und Registrierungseinträgen.</String>
-    <String Id="MaintenanceTypeDlg_RepairTooltip">Installation reparieren</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress1">Repariere</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress2">repariert</String>
-    <String Id="MaintenanceTypeDlg_Remove">En&tfernen</String>
-    <String Id="MaintenanceTypeDlg_RemoveText">Entfernt [ProductName] vom Computer.</String>
-    <String Id="MaintenanceTypeDlg_RemoveTooltip">Installation entfernen</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress1">Entferne</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress2">entfernt</String>
-
-    <!---->
-
-    <String Id="MaintenanceWelcomeDlg_Header">Willkommen beim Setup-Assistenten von [ProductName]</String>
-    <String Id="MaintenanceWelcomeDlg_Desc">Der Setup-Assistent ermöglicht Ihnen, die Installationsart der auf Ihrem Computer installierten Features von [ProductName] zu ändern oder diese von Ihrem Computer zu entfernen. Klicken Sie auf "Weiter", um den Vorgang fortzusetzen, oder klicken Sie auf "Abbrechen", um den Setup-Assistenten zu beenden.</String>
-
-    <!---->
-
-    <String Id="OutOfDiskDlg_InstallationExceeds">Für die Installation ist nicht genügend Speicherplatz verfügbar.</String>
-    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">Die markierten Datenträger verfügen nicht über genügend Speicherplatz für die ausgewählten Features. Sie können entweder einige Dateien von den markierten Datenträgern entfernen, weniger Features installieren oder einen anderen Zieldatenträger auswählen.</String>
-    <String Id="OutOfDiskDlg_OutOfDiskSpace">Nicht genügend freier Speicherplatz auf dem Datenträger</String>
-
-    <!---->
-
-    <String Id="OutOfRbDiskDlg_InstallationExceeds">Für die Installation ist nicht genügend Speicherplatz verfügbar.</String>
-    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">Die markierten Datenträger verfügen nicht über genügend Speicherplatz für die momentan ausgewählten Features.</String>
-    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">Nicht genügend freier Speicherplatz auf dem Datenträger</String>
-    <String Id="OutOfRbDiskDlg_Desc">Sie können entweder einige Dateien von den ausgewählten Volumes entfernen, weniger Features installieren oder einen anderen Zieldatenträger auswählen.</String>
-
-    <!---->
-
-    <String Id="VerifyRemoveDlg_Header">[ProductName] entfernen</String>
-    <String Id="VerifyRemoveDlg_Desc">Sie haben sich entschieden, [ProductName] von Ihrem Computer zu entfernen.</String>
-    <String Id="VerifyRemoveDlg_ClickRemove">Klicken Sie nun auf "Entfernen" um [ProductName] von Ihrem Computer zu entfernen. Wenn Sie die Installations-Einstellungen sehen oder verändern möchten, klicken Sie auf "Zurück". Klicken Sie auf "Beenden" um den Setup-Assistenten zu beenden.</String>
-
-    <!---->
-
-    <String Id="VerifyRepairDlg_Header">[ProductName] reparieren</String>
-    <String Id="VerifyRepairDlg_ReadyToBegin">Der Setup-Assistent ist nun bereit für die Reparatur von [ProductName].</String>
-    <String Id="VerifyRepairDlg_ClickRepair">Klicken Sie nun auf "Reparieren" um [ProductName] zu reparieren. Wenn Sie die Installations-Einstellungen sehen oder verändern möchten, klicken Sie auf "Zurück". Klicken Sie auf "Beenden" um den Setup-Assistenten zu beenden.</String>
-
-    <!---->
-
-    <String Id="WaitForCostingDlg_PleaseWait">Bitte warten Sie, während der Setup-Assistent die Speicherplatz-Anforderungen ermittelt.</String>
-
-    <!---->
-
-    <String Id="MsiRMFilesInUse_Text">Die folgenden Anwendungen verwenden Dateien, die aktualisiert werden müssen. Der Setup-Assistent kann diese Anwendungen schließen und erneut starten oder zu einem späteren Zeitpunkt einen Neustart des Computers durchführen.</String>
-    <String Id="MsiRMFilesInUse_Description">Einige der zu aktualisierenden Dateien werden gerade verwendet.</String>
-    <String Id="MsiRMFilesInUse_Title">Verwendete Dateien</String>
-    <String Id="MsiRMFilesInUse_UseRM">An&wendungen schließen und erneut starten</String>
-    <String Id="MsiRMFilesInUse_DontUseRM">Anwen&dungen nicht schließen; ein Neustart ist erforderlich</String>
-
-    <!-- The following strings are internally used by WiX and MSI -->
-    <String Id="Error0">{{Schwerwiegender Fehler: }}</String>
-    <String Id="Error1">{{Fehler [1]. }}</String>
-    <String Id="Error2">Warnung [1]. </String>
-    <String Id="Error4">Information [1]. </String>
-    <String Id="Error5">Bei der Installation dieses Pakets ist ein unerwarteter Fehler aufgetreten. Es liegt eventuell ein das Paket betreffendes Problem vor. Der Fehlercode ist [1]. {{Argumente: [2], [3], [4]}}</String>
-    <String Id="Error7">{{Datenträger voll: }}</String>
-    <String Id="Error8">Aktion [Time]: [1]. [2]</String>
-    <String Id="Error9">[ProductName]</String>
-    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
-    <String Id="Error11">Meldungstyp: [1], Argument: [2]</String>
-    <String Id="Error12">=== Protokollierung gestartet: [Date]  [Time] ===</String>
-    <String Id="Error13">=== Protokollierung beendet: [Date]  [Time] ===</String>
-    <String Id="Error14">Aktion gestartet um [Time]: [1].</String>
-    <String Id="Error15">Aktion beendet um [Time]: [1]. Rückgabewert [2].</String>
-    <String Id="Error16">Restdauer: {[1] Minute(n) }{[2] Sekunde(n)}</String>
-    <String Id="Error17">Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen, und wiederholen Sie den Vorgang.</String>
-    <String Id="Error18">Installer reagiert nicht.</String>
-    <String Id="Error19">Installer wurde vorzeitig abgebrochen.</String>
-    <String Id="Error20">Bitte warten Sie, während [ProductName] konfiguriert wird.</String>
-    <String Id="Error21">Erforderliche Daten werden ermittelt...</String>
-    <String Id="Error22">Ältere Versionen dieser Anwendung werden entfernt...</String>
-    <String Id="Error23">Das Entfernen älterer Versionen der Anwendung wird vorbereitet...</String>
-    <String Id="Error32">Das Setup für {[ProductName]} wurde erfolgreich abgeschlossen.</String>
-    <String Id="Error33">Das Setup für {[ProductName]} ist fehlgeschlagen.</String>
-    <String Id="Error1101">Fehler beim Lesen der Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass die Datei vorhanden ist, und Sie darauf zugreifen können.</String>
-    <String Id="Error1301">Datei "[2]" kann nicht erstellt werden. Ein Verzeichnis mit dem gleichen Namen ist bereits vorhanden. Brechen Sie die Installation ab, und wählen Sie einen anderen Speicherort für die Installation aus.</String>
-    <String Id="Error1302">Legen Sie den Datenträger ein: [2]</String>
-    <String Id="Error1303">Der Installer besitzt keine ausreichenden Rechte, um auf dieses Verzeichnis zuzugreifen: [2]. Die Installation kann nicht fortgesetzt werden. Melden Sie sich als Administrator an, oder wenden Sie sich an Ihren Systemadministrator.</String>
-    <String Id="Error1304">Fehler beim Schreiben in Datei: [2]. Überprüfen Sie, ob Sie Zugriff auf dieses Verzeichnis haben.</String>
-    <String Id="Error1305">Fehler beim Lesen der Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass die Datei vorhanden ist und Sie darauf zugreifen können.</String>
-    <String Id="Error1306">Eine andere Anwendung hat exklusiven Zugriff auf die Datei "[2]". Schließen Sie alle anderen Anwendungen, und klicken Sie auf "Wiederholen".</String>
-    <String Id="Error1307">Für die Installation dieser Datei ist nicht genügend Speicherplatz vorhanden: [2]. Geben Sie Speicherplatz frei, und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um den Vorgang zu beenden.</String>
-    <String Id="Error1308">Quelldatei nicht gefunden: [2]. Überprüfen Sie, ob die Datei vorhanden ist und Sie Zugriff darauf haben.</String>
-    <String Id="Error1309">Fehler beim Lesen der Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass die Datei vorhanden ist und Sie darauf zugreifen können.</String>
-    <String Id="Error1310">Fehler beim Schreiben in die Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass Sie auf das Verzeichnis zugreifen können.</String>
-    <String Id="Error1311">Quelldatei nicht gefunden{{(CAB-Datei)}}: [2]. Überprüfen Sie, ob die Datei vorhanden ist und Sie Zugriff darauf haben.</String>
-    <String Id="Error1312">Das Verzeichnis "[2]" kann nicht erstellt werden. Eine Datei mit diesem Namen ist bereits vorhanden. Benennen Sie die Datei um, oder löschen Sie diese. Klicken Sie anschließend auf "Wiederholen", oder klicken Sie auf "Abbrechen", um den Vorgang zu beenden.</String>
-    <String Id="Error1313">Das Volume [2] ist momentan nicht verfügbar. Wählen Sie ein anderes Volume aus.</String>
-    <String Id="Error1314">Der angegebene Pfad [2] ist nicht verfügbar.</String>
-    <String Id="Error1315">In den angegebenen Ordner konnte nicht geschrieben werden: [2].</String>
-    <String Id="Error1316">Beim Lesen der Datei [2] ist ein Netzwerkfehler aufgetreten</String>
-    <String Id="Error1317">Beim Erstellen des Verzeichnisses [2] ist ein Fehler aufgetreten</String>
-    <String Id="Error1318">Beim Erstellen des Verzeichnisses [2] ist ein Netzwerkfehler aufgetreten</String>
-    <String Id="Error1319">Beim Öffnen der CAB-Quelldatei [2] ist ein Fehler aufgetreten.</String>
-    <String Id="Error1320">Der angegebene Pfad ist zu lang: [2]</String>
-    <String Id="Error1321">Der Installer besitzt keine ausreichenden Berechtigungen, um diese Datei zu ändern: [2].</String>
-    <String Id="Error1322">Ein Teil des Ordnerpfads "[2]" ist ungültig. Der Name des Pfads ist entweder leer oder überschreitet die vom System zugelassene Länge.</String>
-    <String Id="Error1323">Der Pfad [2] enthält ungültige Zeichenfolgen.</String>
-    <String Id="Error1324">Der Pfad [2] enthält ein ungültiges Zeichen.</String>
-    <String Id="Error1325">[2] ist kein gültiger kurzer Dateiname.</String>
-    <String Id="Error1326">Fehler beim Ermitteln der Dateisicherheit: [3] GetLastError: [2]</String>
-    <String Id="Error1327">Ungültiges Laufwerk: [2]</String>
-    <String Id="Error1328">Fehler beim Anwenden eines Patches auf die Datei [2]. Die Datei wurde wahrscheinlich bereits anderweitig aktualisiert und kann durch diesen Patch nicht modifiziert werden. Wenden Sie sich an den Hersteller des Patches, um weitere Informationen zu erhalten. {{Systemfehler: [3]}}</String>
-    <String Id="Error1329">Eine erforderliche Datei kann nicht installiert werden, da die CAB-Datei [2] nicht digital signiert ist. Möglicherweise ist die CAB-Datei beschädigt.</String>
-    <String Id="Error1330">Eine erforderliche Datei kann nicht installiert werden, da die CAB-Datei [2] eine ungültige digitale Signatur besitzt. Möglicherweise ist die CAB-Datei beschädigt.{{  Fehler [3] wurde von WinVerifyTrust zurückgegeben.}}</String>
-    <String Id="Error1331">Die Datei [2] konnte nicht kopiert werden: CRC-Fehler.</String>
-    <String Id="Error1332">Die Datei [2] konnte nicht verschoben werden: CRC-Fehler.</String>
-    <String Id="Error1333">Die Datei [2] konnte nicht gepatcht werden: CRC-Fehler.</String>
-    <String Id="Error1334">Die Datei "[2]" kann nicht installiert werden, da die Datei in der CAB-Datei "[3]" nicht gefunden wurde. Dies deutet auf einen Netzwerkfehler, einen CD-ROM-Lesefehler oder auf ein das Paket betreffendes Problem hin.</String>
-    <String Id="Error1335">Die für die Installation erforderliche Datei "[2]" ist beschädigt und kann nicht verwendet werden. Dies deutet auf einen Netzwerkfehler, einen CD-ROM-Lesefehler oder auf ein das Paket betreffendes Problem hin.</String>
-    <String Id="Error1336">Beim Erstellen der für die Installation erforderlichen temporären Datei ist ein Fehler aufgetreten.{{  Ordner: [3]. Systemfehlercode: [2]}}</String>
-    <String Id="Error1401">Der Schlüssel [2] konnte nicht erstellt werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1402">Der Schlüssel [2] konnte nicht geöffnet werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1403">Der Wert [2] konnte nicht aus dem Schlüssel [3] gelöscht werden. {{ Systemfehler [4].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1404">Der Schlüssel konnte nicht gelöscht werden: [2]. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1405">Der Wert [2] konnte nicht aus dem Schlüssel [3] gelesen werden. {{ Systemfehler [4].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1406">Der Wert [2] konnte nicht unter den Schlüssel [3] geschrieben werden. {{ Systemfehler [4].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1407">Die Schlüsselnamen für den Schlüssel [2] konnten nicht gelesen werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1408">Die Namen der untergeordneten Schlüssel des Schlüssels [2] konnten nicht bestimmt werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1409">Die Sicherheitsinformationen für den Schlüssel [2] konnten nicht gelesen werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1410">Der verfügbare Registrierungsspeicher konnte nicht vergrößert werden. [2] KB freier Registrierungsspeicher sind zum Installieren dieser Anwendung erforderlich.</String>
-    <String Id="Error1500">Es wird bereits eine weitere Installation ausgeführt. Sie müssen diese Installation abschließen, bevor Sie den Vorgang fortsetzen können.</String>
-    <String Id="Error1501">Fehler beim Zugriff auf gesicherte Daten. Stellen Sie sicher, dass Windows Installer korrekt konfiguriert ist, und wiederholen Sie die Installation.</String>
-    <String Id="Error1502">Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initiiert. Dieser Benutzer muss die Installation erneut ausführen, bevor dieses Produkt verwendet werden kann.</String>
-    <String Id="Error1503">Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initiiert. Dieser Benutzer muss die Installation erneut ausführen, bevor dieses Produkt verwendet werden kann.</String>
-    <String Id="Error1601">Nicht genügend Speicherplatz -- Volume: "[2]"; benötigter Speicher: [3] KB; verfügbarer Speicher: [4] KB. Geben Sie Speicherplatz frei, und wiederholen Sie den Vorgang.</String>
-    <String Id="Error1602">Sind Sie sicher, dass Sie den Vorgang abbrechen möchten?</String>
-    <String Id="Error1603">Die Datei [2][3] wird im Augenblick von folgendem Prozess verwendet: Name: [4], ID: [5], Fenstertitel: "[6]"}. Schließen Sie diese Anwendung, und wiederholen Sie den Vorgang.</String>
-    <String Id="Error1604">Das Produkt "[2]" ist bereits installiert und verhindert die Installation dieses Produkts. Die beiden Produkte sind inkompatibel.</String>
-    <String Id="Error1605">Auf Volume "[2]" steht nicht genügend Speicherplatz für die Installation bei aktivierter Wiederherstellungsoption zur Verfügung. [3] KB sind erforderlich, aber nur [4] KB sind verfügbar. Klicken Sie auf "Ignorieren", um die Installation ohne Speicherung von Wiederherstellungsinformationen fortzusetzen, klicken Sie auf "Wiederholen", um den verfügbaren Speicher erneut zu überprüfen oder auf "Abbrechen", um die Installation abzubrechen.</String>
-    <String Id="Error1606">Auf den Netzwerkpfad [2] konnte nicht zugegriffen werden.</String>
-    <String Id="Error1607">Die folgenden Anwendungen sollten geschlossen werden, bevor Sie die Installation fortsetzen:</String>
-    <String Id="Error1608">Es konnte kein kompatibles Produkt auf dem Computer gefunden werden, das zur Installation dieses Produkts erforderlich ist.</String>
-    <String Id="Error1609">Beim Übernehmen der Sicherheitseinstellungen ist ein Fehler aufgetreten. [2] ist kein gültiger Benutzer bzw. keine gültige Gruppe. Dies kann ein das Paket betreffendes Problem oder ein bei Herstellung der Netzwerkverbindung mit dem Domänencontroller aufgetretenes Problem sein. Überprüfen Sie die Netzwerkverbindung und klicken Sie auf "Wiederholen" oder "Abbrechen", um die Installation abzubrechen. {{Die SID des Benutzers wurde nicht gefunden, Systemfehler [3]}} [...]
-    <String Id="Error1701">Der Schlüssel [2] ist ungültig. Überprüfen Sie, ob Sie den korrekten Schlüssel eingegeben haben.</String>
-    <String Id="Error1702">Der Installer muss Ihren Computer neu starten, bevor die Konfiguration von [2] fortgesetzt werden kann. Klicken Sie auf "Ja", um den Neustart jetzt durchzuführen, oder klicken Sie auf "Nein", um den Neustart zu einem späteren Zeitpunkt manuell durchzuführen.</String>
-    <String Id="Error1703">Sie müssen den Computer neu starten, damit die geänderte Konfiguration von [2] wirksam wird. Klicken Sie auf "Ja", um den Computer jetzt neu zu starten, oder auf "Nein", um den Computer später manuell neu zu starten.</String>
-    <String Id="Error1704">Eine Installation von [2] ist im Augenblick angehalten. Sie müssen die von dieser Installation vorgenommenen Änderungen rückgängig machen, bevor Sie fortfahren können. Möchten Sie diese Änderungen rückgängig machen?</String>
-    <String Id="Error1705">Im Augenblick wird eine weitere Installation dieses Produkts durchgeführt. Sie müssen die von dieser Installation vorgenommenen Änderungen rückgängig machen, bevor Sie fortfahren können. Möchten Sie diese Änderungen rückgängig machen?</String>
-    <String Id="Error1706">Ein Installationspaket des Produkts [2] konnte nicht gefunden werden. Wiederholen Sie die Installation unter Verwendung einer gültigen Kopie des Installationspakets "[3]".</String>
-    <String Id="Error1707">Die Installation wurde erfolgreich abgeschlossen.</String>
-    <String Id="Error1708">Die Installation ist fehlgeschlagen.</String>
-    <String Id="Error1709">Produkt: [2] -- [3]</String>
-    <String Id="Error1710">Sie können den ursprünglichen Zustand des Computers wiederherstellen oder die Installation später fortsetzen. Möchten Sie eine Wiederherstellung durchführen?</String>
-    <String Id="Error1711">Während des Schreibens der Installationsdaten auf den Datenträger ist ein Fehler aufgetreten. Überprüfen Sie, ob ausreichend Speicherplatz auf dem Datenträger vorhanden ist, und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um die Installation zu beenden.</String>
-    <String Id="Error1712">Eine oder mehrere Dateien, die zum Wiederherstellen des ursprünglichen Zustands Ihres Computers benötigt werden, konnten nicht gefunden werden. Wiederherstellen nicht möglich.</String>
-    <String Id="Error1713">[2] kann eines der erforderlichen Produkte nicht installieren. Wenden Sie sich an den technischen Support. {{Systemfehler [3].}}</String>
-    <String Id="Error1714">Die ältere Version von [2] kann nicht entfernt werden. Wenden Sie sich an den technischen Support. {{Systemfehler [3].}}</String>
-    <String Id="Error1715">[2] wird installiert</String>
-    <String Id="Error1716">[2] wird konfiguriert</String>
-    <String Id="Error1717">[2] wird entfernt</String>
-    <String Id="Error1718">Die Datei [2] wurde von der Richtlinie für die digitale Signatur zurückgewiesen.</String>
-    <String Id="Error1719">Auf den Windows Installer-Dienst konnte nicht zugegriffen werden. Dies kann auftreten, wenn Windows im abgesicherten Modus ausgeführt wird oder wenn der Windows Installer nicht korrekt installiert wurde. Setzen Sie sich mit dem Supportpersonal in Verbindung, um weitere Unterstützung zu erhalten.</String>
-    <String Id="Error1720">Es ist ein Problem mit dem Windows Installer-Paket aufgetreten. Ein für den Abschluss der Installation erforderliches Skript konnte nicht ausgeführt werden. Wenden Sie sich an den Support oder den Hersteller des Pakets. {{Skriptfehler [3], [4] bei benutzerdefinierter Aktion [2]: [5] Zeile [6], Spalte [7], [8]}}</String>
-    <String Id="Error1721">Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein für den Abschluss der Installation erforderliches Programm konnte nicht ausgeführt werden. Wenden Sie sich an das Supportpersonal oder den Hersteller des Pakets. {{Aktion: [2], Pfad: [3], Befehl: [4] }}</String>
-    <String Id="Error1722">Es ist ein Problem mit dem Windows Installer-Paket aufgetreten. Ein Programm, das als Teil des Setups ausgeführt wird, wurde nicht erwartungsgemäß abgeschlossen. Wenden Sie sich an den Support oder den Hersteller des Pakets. {{Aktion [2], Pfad: [3], Befehl: [4] }}</String>
-    <String Id="Error1723">Es ist ein Problem mit dem Windows Installer-Paket aufgetreten. Eine für den Abschluss dieser Installation erforderliche DLL-Datei konnte nicht ausgeführt werden. Wenden Sie sich an den Support oder den Hersteller des Pakets. {{Aktion [2], Eintrag: [3], Bibliothek: [4] }}</String>
-    <String Id="Error1724">Das Entfernen wurde erfolgreich abgeschlossen.</String>
-    <String Id="Error1725">Das Entfernen ist fehlgeschlagen.</String>
-    <String Id="Error1726">Die Ankündigung wurde erfolgreich abgeschlossen.</String>
-    <String Id="Error1727">Die Ankündigung ist fehlgeschlagen.</String>
-    <String Id="Error1728">Die Konfiguration wurde erfolgreich abgeschlossen.</String>
-    <String Id="Error1729">Die Konfiguration ist fehlgeschlagen.</String>
-    <String Id="Error1730">Sie müssen über Administratorrechte verfügen, um diese Anwendung entfernen zu können. Melden Sie sich als Administrator an, oder wenden Sie sich an den technischen Support, um Unterstützung zu erhalten.</String>
-    <String Id="Error1731">Das Quellinstallationspaket für das Produkt [2] stimmt nicht mehr mit dem Clientpaket überein. Wiederholen Sie die Installation mit einer gültigen Kopie des Installationspakets "[3]".</String>
-    <String Id="Error1732">Sie müssen den Computer neu starten, um die Installation von [2] abzuschließen. Andere Benutzer sind momentan an diesem Computer angemeldet, und ein Neustart könnte unter Umständen dazu führen, dass Änderungen nicht gespeichert werden. Möchten Sie den Computer jetzt neu starten?</String>
-    <String Id="Error1801">Der Pfad [2] ist ungültig. Geben Sie einen gültigen Pfad an.</String>
-    <String Id="Error1802">Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen, und wiederholen Sie den Vorgang.</String>
-    <String Id="Error1803">In Laufwerk [2] ist kein Datenträger eingelegt. Legen Sie einen Datenträger ein und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um zu dem zuvor ausgewählten Volume zurückzukehren.</String>
-    <String Id="Error1804">In Laufwerk [2] ist kein Datenträger eingelegt. Legen Sie einen Datenträger ein und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um zum Dialog "Durchsuchen" zurückzukehren und ein anderes Volume auszuwählen.</String>
-    <String Id="Error1805">Der Ordner [2] ist nicht vorhanden. Geben Sie einen Pfad zu einem vorhandenen Ordner ein.</String>
-    <String Id="Error1806">Ihre Zugriffsrechte reichen nicht aus, um diesen Ordner zu lesen.</String>
-    <String Id="Error1807">Es konnte kein gültiger Zielordner für die Installation bestimmt werden.</String>
-    <String Id="Error1901">Fehler beim Lesen der Quellinstallationsdatenbank: [2].</String>
-    <String Id="Error1902">Planung des Computerneustarts: Die Datei [2] wird in [3] umbenannt. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen.</String>
-    <String Id="Error1903">Planung des Computerneustarts: Die Datei [2] wird gelöscht. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen.</String>
-    <String Id="Error1904">Fehler beim Registrieren von Modul [2]. HRESULT [3]. Wenden Sie sich an den Support.</String>
-    <String Id="Error1905">Fehler beim Entfernen von Modul [2] aus der Registrierung. HRESULT [3]. Wenden Sie sich an den Support.</String>
-    <String Id="Error1906">Fehler beim Zwischenspeichern von Paket [2]. Fehler: [3]. Wenden Sie sich an den Support.</String>
-    <String Id="Error1907">Die Schriftart [2] konnte nicht registriert werden. Überprüfen Sie, ob Sie über ausreichende Berechtigungen zum Installieren von Schriftarten verfügen, und ob das System diese Schriftart unterstützt.</String>
-    <String Id="Error1908">Die Schriftart [2] konnte nicht aus der Registrierung entfernt werden. Stellen Sie sicher, dass Sie ausreichende Berechtigungen zum Entfernen von Schriftarten besitzen.</String>
-    <String Id="Error1909">Die Verknüpfung [2] konnte nicht erstellt werden. Stellen Sie sicher, dass der Zielordner vorhanden ist, und Sie darauf zugreifen können.</String>
-    <String Id="Error1910">Die Verknüpfung [2] konnte nicht entfernt werden. Stellen Sie sicher, dass die Verknüpfungsdatei vorhanden ist, und Sie darauf zugreifen können.</String>
-    <String Id="Error1911">Typbibliothek für Datei [2] konnte nicht registriert werden. Wenden Sie sich an den Support.</String>
-    <String Id="Error1912">Typbibliothek für Datei [2] konnte nicht aus der Registrierung entfernt werden. Wenden Sie sich an den Support.</String>
-    <String Id="Error1913">Die INI-Datei [2][3] konnte nicht aktualisiert werden. Überprüfen Sie, ob die Datei vorhanden ist und Sie Zugriff darauf haben.</String>
-    <String Id="Error1914">Es konnte nicht festgelegt werden, dass Datei [3] beim Neustart des Computers durch Datei [2] ersetzt wird. Überprüfen Sie, ob Sie Schreibzugriff auf Datei [3] haben.</String>
-    <String Id="Error1915">Fehler beim Entfernen des ODBC-Treiber-Managers, ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1916">Fehler beim Installieren des ODBC-Treiber-Managers. ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Support in Verbindung.</String>
-    <String Id="Error1917">Fehler beim Entfernen des ODBC-Treibers [4], ODBC-Fehler [2]: [3]. Stellen Sie sicher, dass Sie ausreichende Berechtigungen zum Entfernen von ODBC-Treibern besitzen.</String>
-    <String Id="Error1918">Fehler beim Installieren des ODBC-Treibers: [4]. ODBC-Fehler [2]: [3}. Stellen Sie sicher, dass die Datei [4] vorhanden ist und Sie darauf zugreifen können.</String>
-    <String Id="Error1919">Fehler beim Konfigurieren der ODBC-Datenquelle: [4]. ODBC-Fehler [2]: [3}. Stellen Sie sicher, dass die Datei [4] vorhanden ist und Sie darauf zugreifen können.</String>
-    <String Id="Error1920">Dienst "[2]" ([3]) konnte nicht gestartet werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Starten von Systemdiensten besitzen.</String>
-    <String Id="Error1921">Dienst "[2]" ([3]) konnte nicht angehalten werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Anhalten von Systemdiensten besitzen.</String>
-    <String Id="Error1922">Dienst "[2]" ([3]) konnte nicht entfernt werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von Systemdiensten besitzen.</String>
-    <String Id="Error1923">Dienst "[2]" ([3]) konnte nicht installiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Installieren von Systemdiensten besitzen.</String>
-    <String Id="Error1924">Umgebungsvariable "[2]" konnte nicht aktualisiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern von Umgebungsvariablen besitzen.</String>
-    <String Id="Error1925">Sie besitzen keine ausreichenden Berechtigungen, um diese Installation für alle Benutzer dieses Computers auszuführen. Melden Sie sich als Administrator an, und wiederholen Sie diese Installation.</String>
-    <String Id="Error1926">Dateisicherheit für Datei "[3]" konnte nicht festgelegt werden. Fehler: [2]. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern der Sicherheitsrechte für diese Datei besitzen.</String>
-    <String Id="Error1927">Die Komponentendienste (COM+ 1.0) sind nicht auf diesem Computer installiert. Diese Installation erfordert Komponentendienste, um ordnungsgemäß abgeschlossen werden zu können. Komponentendienste sind auf Windows 2000 verfügbar.</String>
-    <String Id="Error1928">Fehler beim Registrieren der COM+-Anwendung. Wenden Sie sich an den Support, um weitere Informationen zu erhalten.</String>
-    <String Id="Error1929">Fehler beim Entfernen der COM+-Anwendung aus der Registrierung. Wenden Sie sich an den Support, um weitere Informationen zu erhalten.</String>
-    <String Id="Error1930">Die Beschreibung für den Dienst "[2]" ([3]) konnte nicht geändert werden.</String>
-    <String Id="Error1931">Der Windows Installer-Dienst kann die geschützte Systemdatei "[2]" nicht aktualisieren. Sie müssen eventuell das Betriebssystem aktualisieren, damit dieses Programm richtig ausgeführt werden kann. {{Paketversion: [3], geschützte Betriebssystemversion: [4]}}</String>
-    <String Id="Error1932">Der Dienst "Windows Installer" kann die geschützte Windows-Datei [2] nicht aktualisieren. {{Paketversion: [3], geschützte Betriebssystemversion: [4], Systemdateischutzfehler: [5]}}</String>
-    <String Id="Error1933">Eine oder mehrere geschützte Windows-Dateien konnten nicht aktualisiert werden {{SFP-Fehler: [2]. Liste der geschützten Dateien:\r\n[3]}}</String>
-    <String Id="Error1934">Benutzerinstallationen sind über die Computerrichtlinie deaktiviert.</String>
-    <String Id="Error1935">Fehler während der Installation von Assembly "[6]". Rufen Sie die Hilfe auf, oder wenden Sie sich an den Support. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
-    <String Id="Error1936">Fehler während der Installation von Assembly "[6]". Die Assembly hat entweder keinen sicheren Namen, oder sie wurde nicht mit der Mindestschlüssellänge signiert. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
-    <String Id="Error1937">Fehler während der Installation von Assembly "[6]". Die Signatur oder der Katalog konnten nicht überprüft werden oder sind ungültig. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
-    <String Id="Error1938">Fehler während der Installation der Assembly "[6]". Ein oder mehrere Module der Assembly wurden nicht gefunden. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
-
-    <!-- Own / special errors -->
-    <String Id="Error25001">Die Applikation "[2]" muss geschlossen werden um die Installation fortsetzen zu können.</String>
-
-    <String Id="ProgressTextInstallValidate">Die Installation wird überprüft</String>
-    <String Id="ProgressTextInstallFiles">Neue Dateien werden kopiert</String>
-    <String Id="ProgressTextInstallFilesTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
-    <String Id="ProgressTextInstallAdminPackage">Netzwerkinstallationsdateien werden kopiert</String>
-    <String Id="ProgressTextInstallAdminPackageTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
-    <String Id="ProgressTextFileCost">Speicherplatzbedarf wird berechnet</String>
-    <String Id="ProgressTextCostInitialize">Speicherplatzbedarf wird berechnet</String>
-    <String Id="ProgressTextCostFinalize">Speicherplatzbedarf wird berechnet</String>
-    <String Id="ProgressTextCreateShortcuts">Verknüpfungen werden erstellt</String>
-    <String Id="ProgressTextCreateShortcutsTemplate">Verknüpfung: [1]</String>
-    <String Id="ProgressTextPublishComponents">Qualifizierte Komponenten werden veröffentlicht</String>
-    <String Id="ProgressTextPublishComponentsTemplate">Komponenten-ID: [1], Qualifizierer: [2]</String>
-    <String Id="ProgressTextPublishFeatures">Produktfeatures werden veröffentlicht</String>
-    <String Id="ProgressTextPublishFeaturesTemplate">Feature: [1]</String>
-    <String Id="ProgressTextPublishProduct">Produktinformationen werden veröffentlicht</String>
-    <String Id="ProgressTextRegisterClassInfo">Klassenserver werden registriert</String>
-    <String Id="ProgressTextRegisterClassInfoTemplate">Klassen-ID: [1]</String>
-    <String Id="ProgressTextRegisterExtensionInfo">Erweiterungsserver werden registriert</String>
-    <String Id="ProgressTextRegisterExtensionInfoTemplate">Erweiterung: [1]</String>
-    <String Id="ProgressTextRegisterMIMEInfo">MIME-Informationen werden registriert</String>
-    <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME-Inhaltstyp: [1], Erweiterung: [2]</String>
-    <String Id="ProgressTextRegisterProgIdInfo">Programm-IDs werden registriert</String>
-    <String Id="ProgressTextRegisterProgIdInfoTemplate">Programm-ID: [1]</String>
-    <String Id="ProgressTextAllocateRegistrySpace">Registrierungsspeicher wird zugeordnet</String>
-    <String Id="ProgressTextAllocateRegistrySpaceTemplate">Freier Speicherplatz: [1]</String>
-    <String Id="ProgressTextAppSearch">Installierte Anwendungen werden gesucht</String>
-    <String Id="ProgressTextAppSearchTemplate">Eigenschaft: [1], Signatur: [2]</String>
-    <String Id="ProgressTextBindImage">Ausführbare Dateien werden gebunden</String>
-    <String Id="ProgressTextBindImageTemplate">Datei: [1]</String>
-    <String Id="ProgressTextCCPSearch">Qualifizierte Produkte werden gesucht</String>
-    <String Id="ProgressTextCreateFolders">Ordner werden erstellt</String>
-    <String Id="ProgressTextCreateFoldersTemplate">Ordner: [1]</String>
-    <String Id="ProgressTextDeleteServices">Dienste werden gelöscht</String>
-    <String Id="ProgressTextDeleteServicesTemplate">Dienst: [1]</String>
-    <String Id="ProgressTextDuplicateFiles">Dateien werden dupliziert</String>
-    <String Id="ProgressTextDuplicateFilesTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
-    <String Id="ProgressTextFindRelatedProducts">Nach verwandten Anwendungen wird gesucht</String>
-    <String Id="ProgressTextFindRelatedProductsTemplate">Anwendung gefunden: [1]</String>
-    <String Id="ProgressTextInstallODBC">ODBC-Komponenten werden installiert</String>
-    <String Id="ProgressTextInstallServices">Neue Dienste werden installiert</String>
-    <String Id="ProgressTextInstallServicesTemplate">Dienst: [2]</String>
-    <String Id="ProgressTextLaunchConditions">Die Startbedingungen werden überprüft</String>
-    <String Id="ProgressTextMigrateFeatureStates">Featurestatus verwandter Anwendungen wird migriert</String>
-    <String Id="ProgressTextMigrateFeatureStatesTemplate">Anwendung: [1]</String>
-    <String Id="ProgressTextMoveFiles">Dateien werden verschoben</String>
-    <String Id="ProgressTextMoveFilesTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
-    <String Id="ProgressTextPatchFiles">Dateien werden gepatcht</String>
-    <String Id="ProgressTextPatchFilesTemplate">Datei: [1], Verzeichnis: [2], Größe: [3]</String>
-    <String Id="ProgressTextProcessComponents">Komponentenregistrierung wird aktualisiert</String>
-    <String Id="ProgressTextRegisterComPlus">COM+-Anwendungen und -Komponenten werden registriert</String>
-    <String Id="ProgressTextRegisterComPlusTemplate">Anwendungs-ID: [1]{{, Anwendungstyp: [2], Benutzer: [3], RSN: [4]}}</String>
-    <String Id="ProgressTextRegisterFonts">Schriftarten werden registriert</String>
-    <String Id="ProgressTextRegisterFontsTemplate">Schriftart: [1]</String>
-    <String Id="ProgressTextRegisterProduct">Produkt wird registriert</String>
-    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
-    <String Id="ProgressTextRegisterTypeLibraries">Typenbibliotheken werden registriert</String>
-    <String Id="ProgressTextRegisterTypeLibrariesTemplate">Bibliotheken-ID: [1]</String>
-    <String Id="ProgressTextRegisterUser">Benutzer wird registriert</String>
-    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
-    <String Id="ProgressTextRemoveDuplicateFiles">Duplizierte Dateien werden entfernt</String>
-    <String Id="ProgressTextRemoveDuplicateFilesTemplate">Datei: [1], Verzeichnis: [9]</String>
-    <String Id="ProgressTextRemoveEnvironmentStrings">Umgebungsvariablen werden aktualisiert</String>
-    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">Name: [1], Wert: [2], Aktion [3]</String>
-    <String Id="ProgressTextRemoveExistingProducts">Anwendungen werden entfernt</String>
-    <String Id="ProgressTextRemoveExistingProductsTemplate">Anwendung: [1], Befehlszeile: [2]</String>
-    <String Id="ProgressTextRemoveFiles">Dateien werden entfernt</String>
-    <String Id="ProgressTextRemoveFilesTemplate">Datei: [1], Verzeichnis: [9]</String>
-    <String Id="ProgressTextRemoveFolders">Ordner werden entfernt</String>
-    <String Id="ProgressTextRemoveFoldersTemplate">Ordner: [1]</String>
-    <String Id="ProgressTextRemoveIniValues">INI-Dateieinträge werden entfernt</String>
-    <String Id="ProgressTextRemoveIniValuesTemplate">Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]</String>
-    <String Id="ProgressTextRemoveODBC">ODBC-Komponenten werden entfernt</String>
-    <String Id="ProgressTextRemoveRegistryValues">Systemregistrierungswerte werden entfernt</String>
-    <String Id="ProgressTextRemoveRegistryValuesTemplate">Schlüssel: [1], Name: [2]</String>
-    <String Id="ProgressTextRemoveShortcuts">Verknüpfungen werden entfernt</String>
-    <String Id="ProgressTextRemoveShortcutsTemplate">Verknüpfung: [1]</String>
-    <String Id="ProgressTextRMCCPSearch">Qualifizierte Produkte werden gesucht</String>
-    <String Id="ProgressTextSelfRegModules">Modul wird aus der Registrierung entfernt</String>
-    <String Id="ProgressTextSelfRegModulesTemplate">Datei: [1], Ordner: [2]</String>
-    <String Id="ProgressTextSelfUnregModules">Modulregistrierung wird aufgehoben</String>
-    <String Id="ProgressTextSelfUnregModulesTemplate">Datei: [1], Ordner: [2]</String>
-    <String Id="ProgressTextSetODBCFolders">ODBC-Verzeichnisse werden initialisiert</String>
-    <String Id="ProgressTextStartServices">Dienste werden gestartet</String>
-    <String Id="ProgressTextStartServicesTemplate">Dienst: [1]</String>
-    <String Id="ProgressTextStopServices">Dienste werden beendet</String>
-    <String Id="ProgressTextStopServicesTemplate">Dienst: [1]</String>
-    <String Id="ProgressTextUnpublishComponents">Veröffentlichung qualifizierter Komponenten wird aufgehoben</String>
-    <String Id="ProgressTextUnpublishComponentsTemplate">Komponenten-ID: [1], Qualifizierer: [2]</String>
-    <String Id="ProgressTextUnpublishFeatures">Veröffentlichung der Produktfeatures wird aufgehoben</String>
-    <String Id="ProgressTextUnpublishFeaturesTemplate">Feature: [1]</String>
-    <String Id="ProgressTextUnregisterClassInfo">Registrierung der Klassenserver wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterClassInfoTemplate">Klassen-ID: [1]</String>
-    <String Id="ProgressTextUnregisterComPlus">Registrierung der COM+-Anwendungen und -Komponenten wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterComPlusTemplate">Anwendungs-ID: [1]{{, Anwendungstyp: [2]}}</String>
-    <String Id="ProgressTextUnregisterExtensionInfo">Registrierung der Erweiterungsserver wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterExtensionInfoTemplate">Erweiterung: [1]</String>
-    <String Id="ProgressTextUnregisterFonts">Registrierung der Schriftarten wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterFontsTemplate">Schriftart: [1]</String>
-    <String Id="ProgressTextUnregisterMIMEInfo">Registrierung der MIME-Informationen wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME-Inhaltstyp: [1], Erweiterung: [2]</String>
-    <String Id="ProgressTextUnregisterProgIdInfo">Registrierung der Programm-IDs wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterProgIdInfoTemplate">Programm-ID: [1]</String>
-    <String Id="ProgressTextUnregisterTypeLibraries">Registrierung der Typenbibliotheken wird aufgehoben</String>
-    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">Bibliotheken-ID: [1]</String>
-    <String Id="ProgressTextWriteEnvironmentStrings">Umgebungsvariablen werden aktualisiert</String>
-    <String Id="ProgressTextWriteEnvironmentStringsTemplate">Name: [1], Wert: [2], Aktion [3]</String>
-    <String Id="ProgressTextWriteIniValues">INI-Dateiwerte werden geschrieben</String>
-    <String Id="ProgressTextWriteIniValuesTemplate">Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]</String>
-    <String Id="ProgressTextWriteRegistryValues">Systemregistrierungswerte werden geschrieben</String>
-    <String Id="ProgressTextWriteRegistryValuesTemplate">Schlüssel: [1], Name: [2], Wert: [3]</String>
-    <String Id="ProgressTextAdvertise">Anwendung wird angekündigt</String>
-    <String Id="ProgressTextGenerateScript">Für folgende Aktion werden Skriptvorgänge erstellt:</String>
-    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
-    <String Id="ProgressTextInstallSFPCatalogFile">Systemkatalog wird installiert</String>
-    <String Id="ProgressTextInstallSFPCatalogFileTemplate">Datei: [1], Abhängigkeiten: [2]</String>
-    <String Id="ProgressTextMsiPublishAssemblies">Assemblyinformationen werden veröffentlicht</String>
-    <String Id="ProgressTextMsiPublishAssembliesTemplate">Anwendungskontext:[1], Assemblyname:[2]</String>
-    <String Id="ProgressTextMsiUnpublishAssemblies">Veröffentlichung der Assemblierungsinformationen wird aufgehoben</String>
-    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">Anwendungskontext:[1], Assemblyname:[2]</String>
-    <String Id="ProgressTextRollback">Aktion wird rückgängig gemacht:</String>
-    <String Id="ProgressTextRollbackTemplate">[1]</String>
-    <String Id="ProgressTextRollbackCleanup">Sicherungsdateien werden entfernt</String>
-    <String Id="ProgressTextRollbackCleanupTemplate">Datei: [1]</String>
-    <String Id="ProgressTextUnmoveFiles">Verschobene Dateien werden entfernt</String>
-    <String Id="ProgressTextUnmoveFilesTemplate">Datei: [1], Verzeichnis: [9]</String>
-    <String Id="ProgressTextUnpublishProduct">Veröffentlichung der Produktinformationen wird aufgehoben</String>
-
-    <String Id="UITextbytes">Bytes</String>
-    <String Id="UITextGB">GB</String>
-    <String Id="UITextKB">KB</String>
-    <String Id="UITextMB">MB</String>
-    <String Id="UITextMenuAbsent">Nicht verfügbar</String>
-    <String Id="UITextMenuAdvertise">Bei der ersten Verwendung installieren</String>
-    <String Id="UITextMenuAllCD">Alles von CD starten</String>
-    <String Id="UITextMenuAllLocal">Alles auf der lokalen Festplatte installieren</String>
-    <String Id="UITextMenuAllNetwork">Alles vom Netzwerk starten</String>
-    <String Id="UITextMenuCD">Von CD starten</String>
-    <String Id="UITextMenuLocal">Auf der lokalen Festplatte installieren</String>
-    <String Id="UITextMenuNetwork">Vom Netzwerk starten</String>
-    <String Id="UITextScriptInProgress">Erforderliche Daten werden ermittelt...</String>
-    <String Id="UITextSelAbsentAbsent">Dieses Feature wird nicht installiert.</String>
-    <String Id="UITextSelAbsentAdvertise">Dieses Feature wird bei der ersten Verwendung installiert.</String>
-    <String Id="UITextSelAbsentCD">Dieses Feature wird zum Starten von CD installiert.</String>
-    <String Id="UITextSelAbsentLocal">Dieses Feature wird auf der lokalen Festplatte installiert.</String>
-    <String Id="UITextSelAbsentNetwork">Dieses Feature wird zum Starten vom Netzwerk installiert.</String>
-    <String Id="UITextSelAdvertiseAbsent">Dieses Feature wird nicht verfügbar sein.</String>
-    <String Id="UITextSelAdvertiseAdvertise">Dieses Feature wird bei der ersten Verwendung installiert.</String>
-    <String Id="UITextSelAdvertiseCD">Dieses Feature wird von CD gestartet.</String>
-    <String Id="UITextSelAdvertiseLocal">Dieses Feature wird auf der lokalen Festplatte installiert.</String>
-    <String Id="UITextSelAdvertiseNetwork">Dieses Feature wird vom Netzwerk gestartet.</String>
-    <String Id="UITextSelCDAbsent">Dieses Feature wird vollständig deinstalliert und kann nicht von CD gestartet werden.</String>
-    <String Id="UITextSelCDAdvertise">Dieses Feature wird nicht mehr von CD gestartet, sondern bei der ersten Verwendung installiert.</String>
-    <String Id="UITextSelCDCD">Dieses Feature wird weiterhin von CD gestartet.</String>
-    <String Id="UITextSelCDLocal">Dieses Feature wird nicht mehr von CD gestartet, sondern auf der lokalen Festplatte installiert.</String>
-    <String Id="UITextSelChildCostNeg">Dieses Feature gibt [1] auf der Festplatte frei.</String>
-    <String Id="UITextSelChildCostPos">Diese Funktion erfordert [1] auf der Festplatte.</String>
-    <String Id="UITextSelCostPending">Kosten für dieses Feature werden berechnet...</String>
-    <String Id="UITextSelLocalAbsent">Dieses Feature wird vollständig entfernt.</String>
-    <String Id="UITextSelLocalAdvertise">Dieses Feature wird von der lokalen Festplatte entfernt und bei der ersten Verwendung installiert.</String>
-    <String Id="UITextSelLocalCD">Dieses Feature wird von der lokalen Festplatte entfernt, bleibt aber zum Starten von CD installiert.</String>
-    <String Id="UITextSelLocalLocal">Dieses Feature bleibt weiterhin auf der lokalen Festplatte installiert.</String>
-    <String Id="UITextSelLocalNetwork">Dieses Feature wird von der lokalen Festplatte entfernt, bleibt aber zum Starten vom Netzwerk installiert.</String>
-    <String Id="UITextSelNetworkAbsent">Dieses Feature wird vollständig deinstalliert und kann nicht vom Netzwerk gestartet werden.</String>
-    <String Id="UITextSelNetworkAdvertise">Dieses Feature wird nicht mehr vom Netzwerk gestartet, sondern bei der ersten Verwendung installiert.</String>
-    <String Id="UITextSelNetworkLocal">Dieses Feature wird nicht mehr vom Netzwerk gestartet, sondern auf der lokalen Festplatte installiert.</String>
-    <String Id="UITextSelNetworkNetwork">Dieses Feature wird weiterhin vom Netzwerk gestartet.</String>
-    <String Id="UITextSelParentCostNegNeg">Dieses Feature gibt [1] auf der Festplatte frei. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte freigeben.</String>
-    <String Id="UITextSelParentCostNegPos">Dieses Feature gibt [1] auf der Festplatte frei. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte erfordern.</String>
-    <String Id="UITextSelParentCostPosNeg">Dieses Feature erfordert [1] auf der Festplatte. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte freigeben.</String>
-    <String Id="UITextSelParentCostPosPos">Dieses Feature erfordert [1] auf der Festplatte. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte erfordern.</String>
-    <String Id="UITextTimeRemaining">Restdauer: {[1] Minute(n) }{[2] Sekunde(n)}</String>
-    <String Id="UITextVolumeCostAvailable">Verfügbar</String>
-    <String Id="UITextVolumeCostDifference">Differenz</String>
-    <String Id="UITextVolumeCostRequired">Erforderlich</String>
-    <String Id="UITextVolumeCostSize">Datenträgergröße</String>
-    <String Id="UITextVolumeCostVolume">Volume</String>
-
-</WixLocalization>
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="de_DE">
+
+    <!--
+            Language Definition Include for VirtualBox WiX script.
+
+            Copyright (C) 2011-2016 Oracle Corporation
+
+            This file is part of VirtualBox Open Source Edition (OSE), as
+            available from http://www.virtualbox.org. This file is free software;
+            you can redistribute it and/or modify it under the terms of the GNU
+            General Public License (GPL) as published by the Free Software
+            Foundation, in version 2 as it comes in the "COPYING" file of the
+            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+    -->
+
+    <String Id="LANG">1033</String>
+    <String Id="LangName">Deutsch</String>
+
+    <String Id="ButtonText_No">&Nein</String>
+    <String Id="ButtonText_Yes">&Ja</String>
+    <String Id="ButtonText_Cancel">A&bbrechen</String>
+    <String Id="ButtonText_Next">&Weiter></String>
+    <String Id="ButtonText_Back">< &Zurück</String>
+    <String Id="ButtonText_Browse">Durch&suchen</String>
+    <String Id="ButtonText_OK">O&K</String>
+    <String Id="ButtonText_Check">Ü&berprüfen</String>
+    <String Id="ButtonText_Install">&Installieren</String>
+    <String Id="ButtonText_Remove">&Entfernen</String>
+    <String Id="ButtonText_Finish">&Fertig stellen</String>
+    <String Id="ButtonText_Repair">&Reparieren</String>
+    <String Id="ButtonText_Return">&Zurück</String>
+    <String Id="ButtonText_Retry">&Wiederholen</String>
+    <String Id="ButtonText_Ignore">I&gnorieren</String>
+    <String Id="ButtonText_Exit">B&eenden</String>
+
+    <String Id="InstallModeCustom">Angepasst</String>
+    <String Id="Setup">Setup</String>
+
+    <!---->
+
+    <String Id="StartMenu_License">Lizenz</String>
+    <String Id="StartMenu_UserManual">Benutzerhandbuch</String>
+
+    <!---->
+
+    <String Id="VB_App">[ProductName] Hauptanwendung.</String>
+    <String Id="VB_USBDriver">[ProductName] Treiber für USB Geräte-Unterstützung.</String>
+    <String Id="VB_Network">[ProductName] Treiber für Netzwerk-Unterstützung.</String>
+    <String Id="VB_NetFltDriver">[ProductName] Treiber für Netzwerkbrücke.</String>
+    <String Id="VB_NetAdpDriver">[ProductName] Treiber für virtuellen Netzwerk-Adapter für Host-only Netzwerke.</String>
+    <String Id="VB_NetLwfDriver">[ProductName] Treiber für NDIS6-Netzwerkbrücke.</String>
+    <String Id="VB_NetAdp6Driver">[ProductName] Treiber für virtuellen Netzwerk-Adapter für NDIS6-Host-only-Netzwerke.</String>
+
+  <String Id="VB_Python">Python-Support für VirtualBox.</String>
+
+    <!---->
+
+    <String Id="NeedAdmin">Sie benötigen Administrations-Rechte zum (De-)Installieren von [ProductName]! Das Setup wird nun beendet.</String>
+    <String Id="WrongOS">[ProductName] läuft nur auf Windows XP oder höher!</String>
+    <String Id="Only32Bit">Diese Applikation läuft nur auf 32-bit Windows-Systemen. Bitte installieren Sie die 64-bit Version von [ProductName]!</String>
+    <String Id="Only64Bit">Diese Applikation läuft nur auf 64-bit Windows-Systemen. Bitte installieren Sie die 32-bit Version von [ProductName]!</String>
+    <String Id="SunFound">Eine alte Sun Version von VirtualBox wurde auf diesem Computer gefunden. Bitte deinstallieren Sie diese Version zuerst. Danach können Sie [ProductName] installieren!</String>
+    <String Id="InnotekFound">Eine alte innotek Version von VirtualBox wurde auf diesem Computer gefunden. Bitte deinstallieren Sie diese Version zuerst. Danach können Sie [ProductName] installieren!</String>
+
+    <!---->
+
+    <String Id="CancelDlg_Question">Sind Sie sicher, dass Sie die Installation von [ProductName] abbrechen möchten?</String>
+
+    <!---->
+
+    <String Id="WelcomeDlg_Header">Willkommen beim Setup-Assistenten von [ProductName]</String>
+    <String Id="WelcomeDlg_Body">Der Setup-Assistent installiert [ProductName] auf Ihrem Computer. Klicken Sie auf "Weiter", um den Vorgang fortzusetzen, oder klicken Sie auf "Abbrechen", um den Setup-Assistenten zu beenden.</String>
+
+    <!---->
+
+    <String Id="LicenseAgreementDlg_Header">Endbenutzer-Lizenzvertrag</String>
+    <String Id="LicenseAgreementDlg_Body">Bitte lesen Sie den folgenden Lizenzvertrag sorgfältig durch.</String>
+    <String Id="LicenseAgreementDlg_Accept">Ich &akzeptiere die Bedingungen des Lizenzvertrags.</String>
+    <String Id="LicenseAgreementDlg_Decline">Ich &akzeptiere die Bedingungen des Lizenzvertrags nicht.</String>
+
+    <!---->
+
+    <String Id="CheckSerialDlg_Header">Seriennummer</String>
+    <String Id="CheckSerialDlg_Body">Bitte geben Sie die Seriennummer in die unten stehenden Felder ein. Sie finden die Nummer auf dem Aufkleber in der VirtualBox CD-Hülle.</String>
+    <String Id="CheckSerialDlg_Footer">Wenn Sie fertig mit der Eingabe sind, drücken Sie bitte den "Überprüfen"-Knopf unten.</String>
+
+    <!---->
+
+    <String Id="WrongSerialDlg_Header">Eingegebene Seriennummer ist ungültig!</String>
+    <String Id="WrongSerialDlg_Desc1">Bitte geben Sie Ihre Seriennummer erneut auf der vorherigen Seite ein.</String>
+    <String Id="WrongSerialDlg_Desc2">Beachten Sie, dass die Seriennummer exakt so geschrieben sein muss wie sie auf dem Aufkleber erscheint.</String>
+
+    <!---->
+
+    <String Id="WarnSaveStatesDlg_Header">Warnung:</String>
+    <String Id="WarnSaveStatesDlg_Header2">Inkompatible Saved States!</String>
+    <String Id="WarnSaveStatesDlg_Desc">Wenn Sie jetzt [ProductName] updaten, werden alle gesicherten Zustände bereits existierender virtueller Maschinen nicht mehr funktionieren! Nach der Installation müssen Sie die gesicherten Zustände manuell verwerfen.</String>
+    <String Id="WarnSaveStatesDlg_Proceed">Jetzt mit der Installation weitermachen?</String>
+
+    <!---->
+
+    <String Id="WarnTAPDevicesDlg_Header">Hostinterfaces</String>
+    <String Id="WarnTAPDevicesDlg_Desc">Wenn Sie bei bereits existierenden virtuellen Maschinen sogenannte Hostinterfaces verwenden, müssen Sie diese nach der Installation noch einmal neu erstellen.</String>
+
+    <!---->
+
+    <String Id="CustomizeDlg_Location">Ort:</String>
+    <String Id="CustomizeDlg_DiskUsage">Speicherplatz</String>
+    <String Id="CustomizeDlg_SelFeatures">Wählen Sie die Installationsart der Features aus.</String>
+    <String Id="CustomizeDlg_IconTree">Klicken Sie in der unten angezeigten Struktur auf die Symbole, um die Installationsart der Features zu ändern.</String>
+    <String Id="CustomizeDlg_CustomSetup">Benutzerdefiniertes Setup</String>
+    <String Id="CustomizeDlg_SelItemDesc">CustomizeDlgItemDescription-CustomizeDlgItemDescription</String>
+    <String Id="CustomizeDlg_SelItemSize">CustomizeDlgItemSize-CustomizeDlgItemSize</String>
+    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
+
+    <!---->
+
+    <String Id="Customize2Dlg_Header">Anpassen</String>
+    <String Id="Customize2Dlg_Desc">Bitte unten die gewünschten Optionen auswählen:</String>
+    <String Id="Customize2Dlg_CreateStartMenuEntries">Startmenü-Einträge anlegen</String>
+    <String Id="Customize2Dlg_CreateDesktopShortcut">Verknüpfung auf dem Desktop anlegen</String>
+    <String Id="Customize2Dlg_CreateQuickLaunch">Verknüpfung in der Schnellstartleiste anlegen</String>
+    <String Id="Customize2Dlg_RegisterFileExtensions">Dateizuordnungen registrieren</String>
+
+    <!---->
+
+    <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
+This is default for older versions of Windows (pre-Vista).</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
+This is default for newer versions of Windows (Vista and newer).</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
+
+    <!---->
+
+    <String Id="WarnDisconNetIfacesDlg_Title">Warnung:</String>
+    <String Id="WarnDisconNetIfacesDlg_Title2">Netzwerkschnittstellen</String>
+    <String Id="WarnDisconNetIfacesDlg_Desc">Beim Installieren des [ProductName] Netzwerk-Features wird die Netzwerkverbindung unterbrochen und der Computer somit temporär vom Netzwerk getrennt.</String>
+    <String Id="WarnDisconNetIfacesDlg_Question">Jetzt mit der Installation fortfahren?</String>
+
+    <!---->
+
+    <String Id="DiskCostDlg_SpaceRequired">Der erforderliche Speicherplatz für die Installation der ausgewählten Features.</String>
+    <String Id="DiskCostDlg_NotEnoughSpace">Die markierten Datenträger verfügen nicht über genügend Speicherplatz für die ausgewählten Features. Sie können entweder einige Dateien von den markierten Datenträgern entfernen, weniger Features installieren oder einen anderen Zieldatenträger auswählen.</String>
+    <String Id="DiskCostDlg_SpaceRequirements">Erforderlicher Speicherplatz</String>
+    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
+
+    <!---->
+
+    <String Id="BrowseDlg_BrowseDestFolder">Zum Zielordner wechseln</String>
+    <String Id="BrowseDlg_ChangeCurFolder">Zielordner ändern</String>
+    <String Id="BrowseDlg_UpOneLevelTooltip">Eine Verzeichnisebene nach oben</String>
+    <String Id="BrowseDlg_CreateNewFolderTooltip">Einen neuen Ordner erstellen</String>
+    <String Id="BrowseDlg_LookIn">&Suchen in:</String>
+    <String Id="BrowseDlg_FolderName">&Ordnername:</String>
+
+    <!---->
+
+    <String Id="VerifyReadyDlg_ReadyToBegin">Der Assistent ist nun bereit die Installationsart "[InstallMode]" zu installieren.</String>
+    <String Id="VerifyReadyDlg_ClickInstall">Klicken Sie auf "Installieren", um mit der Installation zu beginnen. Klicken Sie auf "Zurück", um die Installationseinstellungen zu überprüfen oder zu ändern.</String>
+    <String Id="VerifyReadyDlg_ReadyToInstall">Bereit zum Installieren</String>
+
+    <!---->
+
+    <String Id="ExitDlg_ClickFinish">Klicken Sie auf die Schaltfläche "Fertig stellen", um den Setup-Assistenten fertig zu stellen.</String>
+    <String Id="ExitDlg_InstComplete">Der Setup-Assistent von [ProductName] wurde fertig gestellt.</String>
+    <String Id="ExitDlg_StartVBox">[ProductName] nach der Installation starten</String>
+
+    <!---->
+
+    <String Id="FatalErrorDlg_Header">Der Setup-Assistent von [ProductName] wurde vorzeitig abgebrochen</String>
+    <String Id="FatalErrorDlg_Desc">Der Setup-Assistent von [ProductName] wurde aufgrund eines Fehlers vorzeitig abgebrochen. Es wurden keine Änderungen an Ihrem System vorgenommen. Um dieses Programm zu einem späteren Zeitpunkt zu installieren, führen Sie den Setup-Assistenten erneut aus.</String>
+    <String Id="FatalErrorDlg_Footer">Klicken Sie auf die Schaltfläche "Fertig stellen", um den Setup-Assistenten fertig zu stellen.</String>
+
+    <!---->
+
+    <String Id="FilesInUse_Text">Die folgenden Anwendungen verwenden Dateien, die während des Setups aktualisiert werden müssen. Schließen Sie diese Anwendungen, und klicken Sie anschließend auf "Wiederholen", um die Installation fortzusetzen, oder auf "Beenden", um die Installation zu beenden.</String>
+    <String Id="FilesInUse_Description">Einige der zu aktualisierenden Dateien werden gerade verwendet.</String>
+    <String Id="FilesInUse_Title">Verwendete Dateien</String>
+
+    <!---->
+
+    <String Id="UserExitDlg_Header">Der Setup-Assistent von [ProductName] wurde unterbrochen</String>
+    <String Id="UserExitDlg_Desc">Das Setup von [ProductName] wurde unterbrochen. Es wurden keine Änderungen an Ihrem System vorgenommen. Um dieses Programm zu einem späteren Zeitpunkt zu installieren, führen Sie die Installation erneut aus.</String>
+    <String Id="UserExitDlg_Footer">Klicken Sie auf die Schaltfläche "Fertig stellen", um den Setup-Assistenten zu beenden.</String>
+
+    <!---->
+
+    <String Id="ProgressDlg_PleaseWait">Warten Sie, während [ProductName] durch den Setup-Assistenten installiert wird. Dies kann einige Zeit in Anspruch nehmen.</String>
+
+    <!---->
+
+    <String Id="ResumeDlg_Header">Der Setup-Assistent von [ProductName] wird fortgesetzt</String>
+    <String Id="ResumeDlg_Desc">Der Setup-Assistent schließt die Installation von [ProductName] auf Ihrem Computer ab. Klicken Sie auf "Installieren", um den Vorgang fortzusetzen, oder klicken Sie auf "Abbrechen", um den Setup-Assistenten zu beenden.</String>
+
+    <!---->
+
+    <String Id="MaintenanceTypeDlg_Header">Ändern, Reparieren oder Entfernen der Installation</String>
+    <String Id="MaintenanceTypeDlg_SelOption">Wählen Sie den durchzuführenden Vorgang.</String>
+    <String Id="MaintenanceTypeDlg_Repair">R&eparieren</String>
+    <String Id="MaintenanceTypeDlg_RepairText">Repariert Fehler in der aktuellen Installation durch Reparieren von fehlenden und beschädigten Dateien, Verknüpfungen und Registrierungseinträgen.</String>
+    <String Id="MaintenanceTypeDlg_RepairTooltip">Installation reparieren</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress1">Repariere</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress2">repariert</String>
+    <String Id="MaintenanceTypeDlg_Remove">En&tfernen</String>
+    <String Id="MaintenanceTypeDlg_RemoveText">Entfernt [ProductName] vom Computer.</String>
+    <String Id="MaintenanceTypeDlg_RemoveTooltip">Installation entfernen</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress1">Entferne</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress2">entfernt</String>
+
+    <!---->
+
+    <String Id="MaintenanceWelcomeDlg_Header">Willkommen beim Setup-Assistenten von [ProductName]</String>
+    <String Id="MaintenanceWelcomeDlg_Desc">Der Setup-Assistent ermöglicht Ihnen, die Installationsart der auf Ihrem Computer installierten Features von [ProductName] zu ändern oder diese von Ihrem Computer zu entfernen. Klicken Sie auf "Weiter", um den Vorgang fortzusetzen, oder klicken Sie auf "Abbrechen", um den Setup-Assistenten zu beenden.</String>
+
+    <!---->
+
+    <String Id="OutOfDiskDlg_InstallationExceeds">Für die Installation ist nicht genügend Speicherplatz verfügbar.</String>
+    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">Die markierten Datenträger verfügen nicht über genügend Speicherplatz für die ausgewählten Features. Sie können entweder einige Dateien von den markierten Datenträgern entfernen, weniger Features installieren oder einen anderen Zieldatenträger auswählen.</String>
+    <String Id="OutOfDiskDlg_OutOfDiskSpace">Nicht genügend freier Speicherplatz auf dem Datenträger</String>
+
+    <!---->
+
+    <String Id="OutOfRbDiskDlg_InstallationExceeds">Für die Installation ist nicht genügend Speicherplatz verfügbar.</String>
+    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">Die markierten Datenträger verfügen nicht über genügend Speicherplatz für die momentan ausgewählten Features.</String>
+    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">Nicht genügend freier Speicherplatz auf dem Datenträger</String>
+    <String Id="OutOfRbDiskDlg_Desc">Sie können entweder einige Dateien von den ausgewählten Volumes entfernen, weniger Features installieren oder einen anderen Zieldatenträger auswählen.</String>
+
+    <!---->
+
+    <String Id="VerifyRemoveDlg_Header">[ProductName] entfernen</String>
+    <String Id="VerifyRemoveDlg_Desc">Sie haben sich entschieden, [ProductName] von Ihrem Computer zu entfernen.</String>
+    <String Id="VerifyRemoveDlg_ClickRemove">Klicken Sie nun auf "Entfernen" um [ProductName] von Ihrem Computer zu entfernen. Wenn Sie die Installations-Einstellungen sehen oder verändern möchten, klicken Sie auf "Zurück". Klicken Sie auf "Beenden" um den Setup-Assistenten zu beenden.</String>
+
+    <!---->
+
+    <String Id="VerifyRepairDlg_Header">[ProductName] reparieren</String>
+    <String Id="VerifyRepairDlg_ReadyToBegin">Der Setup-Assistent ist nun bereit für die Reparatur von [ProductName].</String>
+    <String Id="VerifyRepairDlg_ClickRepair">Klicken Sie nun auf "Reparieren" um [ProductName] zu reparieren. Wenn Sie die Installations-Einstellungen sehen oder verändern möchten, klicken Sie auf "Zurück". Klicken Sie auf "Beenden" um den Setup-Assistenten zu beenden.</String>
+
+    <!---->
+
+    <String Id="WaitForCostingDlg_PleaseWait">Bitte warten Sie, während der Setup-Assistent die Speicherplatz-Anforderungen ermittelt.</String>
+
+    <!---->
+
+    <String Id="MsiRMFilesInUse_Text">Die folgenden Anwendungen verwenden Dateien, die aktualisiert werden müssen. Der Setup-Assistent kann diese Anwendungen schließen und erneut starten oder zu einem späteren Zeitpunkt einen Neustart des Computers durchführen.</String>
+    <String Id="MsiRMFilesInUse_Description">Einige der zu aktualisierenden Dateien werden gerade verwendet.</String>
+    <String Id="MsiRMFilesInUse_Title">Verwendete Dateien</String>
+    <String Id="MsiRMFilesInUse_UseRM">An&wendungen schließen und erneut starten</String>
+    <String Id="MsiRMFilesInUse_DontUseRM">Anwen&dungen nicht schließen; ein Neustart ist erforderlich</String>
+
+    <!-- The following strings are internally used by WiX and MSI -->
+    <String Id="Error0">{{Schwerwiegender Fehler: }}</String>
+    <String Id="Error1">{{Fehler [1]. }}</String>
+    <String Id="Error2">Warnung [1]. </String>
+    <String Id="Error4">Information [1]. </String>
+    <String Id="Error5">Bei der Installation dieses Pakets ist ein unerwarteter Fehler aufgetreten. Es liegt eventuell ein das Paket betreffendes Problem vor. Der Fehlercode ist [1]. {{Argumente: [2], [3], [4]}}</String>
+    <String Id="Error7">{{Datenträger voll: }}</String>
+    <String Id="Error8">Aktion [Time]: [1]. [2]</String>
+    <String Id="Error9">[ProductName]</String>
+    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
+    <String Id="Error11">Meldungstyp: [1], Argument: [2]</String>
+    <String Id="Error12">=== Protokollierung gestartet: [Date]  [Time] ===</String>
+    <String Id="Error13">=== Protokollierung beendet: [Date]  [Time] ===</String>
+    <String Id="Error14">Aktion gestartet um [Time]: [1].</String>
+    <String Id="Error15">Aktion beendet um [Time]: [1]. Rückgabewert [2].</String>
+    <String Id="Error16">Restdauer: {[1] Minute(n) }{[2] Sekunde(n)}</String>
+    <String Id="Error17">Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen, und wiederholen Sie den Vorgang.</String>
+    <String Id="Error18">Installer reagiert nicht.</String>
+    <String Id="Error19">Installer wurde vorzeitig abgebrochen.</String>
+    <String Id="Error20">Bitte warten Sie, während [ProductName] konfiguriert wird.</String>
+    <String Id="Error21">Erforderliche Daten werden ermittelt...</String>
+    <String Id="Error22">Ältere Versionen dieser Anwendung werden entfernt...</String>
+    <String Id="Error23">Das Entfernen älterer Versionen der Anwendung wird vorbereitet...</String>
+    <String Id="Error32">Das Setup für {[ProductName]} wurde erfolgreich abgeschlossen.</String>
+    <String Id="Error33">Das Setup für {[ProductName]} ist fehlgeschlagen.</String>
+    <String Id="Error1101">Fehler beim Lesen der Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass die Datei vorhanden ist, und Sie darauf zugreifen können.</String>
+    <String Id="Error1301">Datei "[2]" kann nicht erstellt werden. Ein Verzeichnis mit dem gleichen Namen ist bereits vorhanden. Brechen Sie die Installation ab, und wählen Sie einen anderen Speicherort für die Installation aus.</String>
+    <String Id="Error1302">Legen Sie den Datenträger ein: [2]</String>
+    <String Id="Error1303">Der Installer besitzt keine ausreichenden Rechte, um auf dieses Verzeichnis zuzugreifen: [2]. Die Installation kann nicht fortgesetzt werden. Melden Sie sich als Administrator an, oder wenden Sie sich an Ihren Systemadministrator.</String>
+    <String Id="Error1304">Fehler beim Schreiben in Datei: [2]. Überprüfen Sie, ob Sie Zugriff auf dieses Verzeichnis haben.</String>
+    <String Id="Error1305">Fehler beim Lesen der Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass die Datei vorhanden ist und Sie darauf zugreifen können.</String>
+    <String Id="Error1306">Eine andere Anwendung hat exklusiven Zugriff auf die Datei "[2]". Schließen Sie alle anderen Anwendungen, und klicken Sie auf "Wiederholen".</String>
+    <String Id="Error1307">Für die Installation dieser Datei ist nicht genügend Speicherplatz vorhanden: [2]. Geben Sie Speicherplatz frei, und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um den Vorgang zu beenden.</String>
+    <String Id="Error1308">Quelldatei nicht gefunden: [2]. Überprüfen Sie, ob die Datei vorhanden ist und Sie Zugriff darauf haben.</String>
+    <String Id="Error1309">Fehler beim Lesen der Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass die Datei vorhanden ist und Sie darauf zugreifen können.</String>
+    <String Id="Error1310">Fehler beim Schreiben in die Datei: [3]. {{ Systemfehler [2].}} Stellen Sie sicher, dass Sie auf das Verzeichnis zugreifen können.</String>
+    <String Id="Error1311">Quelldatei nicht gefunden{{(CAB-Datei)}}: [2]. Überprüfen Sie, ob die Datei vorhanden ist und Sie Zugriff darauf haben.</String>
+    <String Id="Error1312">Das Verzeichnis "[2]" kann nicht erstellt werden. Eine Datei mit diesem Namen ist bereits vorhanden. Benennen Sie die Datei um, oder löschen Sie diese. Klicken Sie anschließend auf "Wiederholen", oder klicken Sie auf "Abbrechen", um den Vorgang zu beenden.</String>
+    <String Id="Error1313">Das Volume [2] ist momentan nicht verfügbar. Wählen Sie ein anderes Volume aus.</String>
+    <String Id="Error1314">Der angegebene Pfad [2] ist nicht verfügbar.</String>
+    <String Id="Error1315">In den angegebenen Ordner konnte nicht geschrieben werden: [2].</String>
+    <String Id="Error1316">Beim Lesen der Datei [2] ist ein Netzwerkfehler aufgetreten</String>
+    <String Id="Error1317">Beim Erstellen des Verzeichnisses [2] ist ein Fehler aufgetreten</String>
+    <String Id="Error1318">Beim Erstellen des Verzeichnisses [2] ist ein Netzwerkfehler aufgetreten</String>
+    <String Id="Error1319">Beim Öffnen der CAB-Quelldatei [2] ist ein Fehler aufgetreten.</String>
+    <String Id="Error1320">Der angegebene Pfad ist zu lang: [2]</String>
+    <String Id="Error1321">Der Installer besitzt keine ausreichenden Berechtigungen, um diese Datei zu ändern: [2].</String>
+    <String Id="Error1322">Ein Teil des Ordnerpfads "[2]" ist ungültig. Der Name des Pfads ist entweder leer oder überschreitet die vom System zugelassene Länge.</String>
+    <String Id="Error1323">Der Pfad [2] enthält ungültige Zeichenfolgen.</String>
+    <String Id="Error1324">Der Pfad [2] enthält ein ungültiges Zeichen.</String>
+    <String Id="Error1325">[2] ist kein gültiger kurzer Dateiname.</String>
+    <String Id="Error1326">Fehler beim Ermitteln der Dateisicherheit: [3] GetLastError: [2]</String>
+    <String Id="Error1327">Ungültiges Laufwerk: [2]</String>
+    <String Id="Error1328">Fehler beim Anwenden eines Patches auf die Datei [2]. Die Datei wurde wahrscheinlich bereits anderweitig aktualisiert und kann durch diesen Patch nicht modifiziert werden. Wenden Sie sich an den Hersteller des Patches, um weitere Informationen zu erhalten. {{Systemfehler: [3]}}</String>
+    <String Id="Error1329">Eine erforderliche Datei kann nicht installiert werden, da die CAB-Datei [2] nicht digital signiert ist. Möglicherweise ist die CAB-Datei beschädigt.</String>
+    <String Id="Error1330">Eine erforderliche Datei kann nicht installiert werden, da die CAB-Datei [2] eine ungültige digitale Signatur besitzt. Möglicherweise ist die CAB-Datei beschädigt.{{  Fehler [3] wurde von WinVerifyTrust zurückgegeben.}}</String>
+    <String Id="Error1331">Die Datei [2] konnte nicht kopiert werden: CRC-Fehler.</String>
+    <String Id="Error1332">Die Datei [2] konnte nicht verschoben werden: CRC-Fehler.</String>
+    <String Id="Error1333">Die Datei [2] konnte nicht gepatcht werden: CRC-Fehler.</String>
+    <String Id="Error1334">Die Datei "[2]" kann nicht installiert werden, da die Datei in der CAB-Datei "[3]" nicht gefunden wurde. Dies deutet auf einen Netzwerkfehler, einen CD-ROM-Lesefehler oder auf ein das Paket betreffendes Problem hin.</String>
+    <String Id="Error1335">Die für die Installation erforderliche Datei "[2]" ist beschädigt und kann nicht verwendet werden. Dies deutet auf einen Netzwerkfehler, einen CD-ROM-Lesefehler oder auf ein das Paket betreffendes Problem hin.</String>
+    <String Id="Error1336">Beim Erstellen der für die Installation erforderlichen temporären Datei ist ein Fehler aufgetreten.{{  Ordner: [3]. Systemfehlercode: [2]}}</String>
+    <String Id="Error1401">Der Schlüssel [2] konnte nicht erstellt werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1402">Der Schlüssel [2] konnte nicht geöffnet werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1403">Der Wert [2] konnte nicht aus dem Schlüssel [3] gelöscht werden. {{ Systemfehler [4].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1404">Der Schlüssel konnte nicht gelöscht werden: [2]. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1405">Der Wert [2] konnte nicht aus dem Schlüssel [3] gelesen werden. {{ Systemfehler [4].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1406">Der Wert [2] konnte nicht unter den Schlüssel [3] geschrieben werden. {{ Systemfehler [4].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1407">Die Schlüsselnamen für den Schlüssel [2] konnten nicht gelesen werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1408">Die Namen der untergeordneten Schlüssel des Schlüssels [2] konnten nicht bestimmt werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1409">Die Sicherheitsinformationen für den Schlüssel [2] konnten nicht gelesen werden. {{ Systemfehler [3].}} Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte für diesen Schlüssel besitzen, oder setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1410">Der verfügbare Registrierungsspeicher konnte nicht vergrößert werden. [2] KB freier Registrierungsspeicher sind zum Installieren dieser Anwendung erforderlich.</String>
+    <String Id="Error1500">Es wird bereits eine weitere Installation ausgeführt. Sie müssen diese Installation abschließen, bevor Sie den Vorgang fortsetzen können.</String>
+    <String Id="Error1501">Fehler beim Zugriff auf gesicherte Daten. Stellen Sie sicher, dass Windows Installer korrekt konfiguriert ist, und wiederholen Sie die Installation.</String>
+    <String Id="Error1502">Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initiiert. Dieser Benutzer muss die Installation erneut ausführen, bevor dieses Produkt verwendet werden kann.</String>
+    <String Id="Error1503">Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initiiert. Dieser Benutzer muss die Installation erneut ausführen, bevor dieses Produkt verwendet werden kann.</String>
+    <String Id="Error1601">Nicht genügend Speicherplatz -- Volume: "[2]"; benötigter Speicher: [3] KB; verfügbarer Speicher: [4] KB. Geben Sie Speicherplatz frei, und wiederholen Sie den Vorgang.</String>
+    <String Id="Error1602">Sind Sie sicher, dass Sie den Vorgang abbrechen möchten?</String>
+    <String Id="Error1603">Die Datei [2][3] wird im Augenblick von folgendem Prozess verwendet: Name: [4], ID: [5], Fenstertitel: "[6]"}. Schließen Sie diese Anwendung, und wiederholen Sie den Vorgang.</String>
+    <String Id="Error1604">Das Produkt "[2]" ist bereits installiert und verhindert die Installation dieses Produkts. Die beiden Produkte sind inkompatibel.</String>
+    <String Id="Error1605">Auf Volume "[2]" steht nicht genügend Speicherplatz für die Installation bei aktivierter Wiederherstellungsoption zur Verfügung. [3] KB sind erforderlich, aber nur [4] KB sind verfügbar. Klicken Sie auf "Ignorieren", um die Installation ohne Speicherung von Wiederherstellungsinformationen fortzusetzen, klicken Sie auf "Wiederholen", um den verfügbaren Speicher erneut zu überprüfen oder auf "Abbrechen", um die Installation abzubrechen.</String>
+    <String Id="Error1606">Auf den Netzwerkpfad [2] konnte nicht zugegriffen werden.</String>
+    <String Id="Error1607">Die folgenden Anwendungen sollten geschlossen werden, bevor Sie die Installation fortsetzen:</String>
+    <String Id="Error1608">Es konnte kein kompatibles Produkt auf dem Computer gefunden werden, das zur Installation dieses Produkts erforderlich ist.</String>
+    <String Id="Error1609">Beim Übernehmen der Sicherheitseinstellungen ist ein Fehler aufgetreten. [2] ist kein gültiger Benutzer bzw. keine gültige Gruppe. Dies kann ein das Paket betreffendes Problem oder ein bei Herstellung der Netzwerkverbindung mit dem Domänencontroller aufgetretenes Problem sein. Überprüfen Sie die Netzwerkverbindung und klicken Sie auf "Wiederholen" oder "Abbrechen", um die Installation abzubrechen. {{Die SID des Benutzers wurde nicht gefunden, Systemfehler [3]}} [...]
+    <String Id="Error1701">Der Schlüssel [2] ist ungültig. Überprüfen Sie, ob Sie den korrekten Schlüssel eingegeben haben.</String>
+    <String Id="Error1702">Der Installer muss Ihren Computer neu starten, bevor die Konfiguration von [2] fortgesetzt werden kann. Klicken Sie auf "Ja", um den Neustart jetzt durchzuführen, oder klicken Sie auf "Nein", um den Neustart zu einem späteren Zeitpunkt manuell durchzuführen.</String>
+    <String Id="Error1703">Sie müssen den Computer neu starten, damit die geänderte Konfiguration von [2] wirksam wird. Klicken Sie auf "Ja", um den Computer jetzt neu zu starten, oder auf "Nein", um den Computer später manuell neu zu starten.</String>
+    <String Id="Error1704">Eine Installation von [2] ist im Augenblick angehalten. Sie müssen die von dieser Installation vorgenommenen Änderungen rückgängig machen, bevor Sie fortfahren können. Möchten Sie diese Änderungen rückgängig machen?</String>
+    <String Id="Error1705">Im Augenblick wird eine weitere Installation dieses Produkts durchgeführt. Sie müssen die von dieser Installation vorgenommenen Änderungen rückgängig machen, bevor Sie fortfahren können. Möchten Sie diese Änderungen rückgängig machen?</String>
+    <String Id="Error1706">Ein Installationspaket des Produkts [2] konnte nicht gefunden werden. Wiederholen Sie die Installation unter Verwendung einer gültigen Kopie des Installationspakets "[3]".</String>
+    <String Id="Error1707">Die Installation wurde erfolgreich abgeschlossen.</String>
+    <String Id="Error1708">Die Installation ist fehlgeschlagen.</String>
+    <String Id="Error1709">Produkt: [2] -- [3]</String>
+    <String Id="Error1710">Sie können den ursprünglichen Zustand des Computers wiederherstellen oder die Installation später fortsetzen. Möchten Sie eine Wiederherstellung durchführen?</String>
+    <String Id="Error1711">Während des Schreibens der Installationsdaten auf den Datenträger ist ein Fehler aufgetreten. Überprüfen Sie, ob ausreichend Speicherplatz auf dem Datenträger vorhanden ist, und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um die Installation zu beenden.</String>
+    <String Id="Error1712">Eine oder mehrere Dateien, die zum Wiederherstellen des ursprünglichen Zustands Ihres Computers benötigt werden, konnten nicht gefunden werden. Wiederherstellen nicht möglich.</String>
+    <String Id="Error1713">[2] kann eines der erforderlichen Produkte nicht installieren. Wenden Sie sich an den technischen Support. {{Systemfehler [3].}}</String>
+    <String Id="Error1714">Die ältere Version von [2] kann nicht entfernt werden. Wenden Sie sich an den technischen Support. {{Systemfehler [3].}}</String>
+    <String Id="Error1715">[2] wird installiert</String>
+    <String Id="Error1716">[2] wird konfiguriert</String>
+    <String Id="Error1717">[2] wird entfernt</String>
+    <String Id="Error1718">Die Datei [2] wurde von der Richtlinie für die digitale Signatur zurückgewiesen.</String>
+    <String Id="Error1719">Auf den Windows Installer-Dienst konnte nicht zugegriffen werden. Dies kann auftreten, wenn Windows im abgesicherten Modus ausgeführt wird oder wenn der Windows Installer nicht korrekt installiert wurde. Setzen Sie sich mit dem Supportpersonal in Verbindung, um weitere Unterstützung zu erhalten.</String>
+    <String Id="Error1720">Es ist ein Problem mit dem Windows Installer-Paket aufgetreten. Ein für den Abschluss der Installation erforderliches Skript konnte nicht ausgeführt werden. Wenden Sie sich an den Support oder den Hersteller des Pakets. {{Skriptfehler [3], [4] bei benutzerdefinierter Aktion [2]: [5] Zeile [6], Spalte [7], [8]}}</String>
+    <String Id="Error1721">Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein für den Abschluss der Installation erforderliches Programm konnte nicht ausgeführt werden. Wenden Sie sich an das Supportpersonal oder den Hersteller des Pakets. {{Aktion: [2], Pfad: [3], Befehl: [4] }}</String>
+    <String Id="Error1722">Es ist ein Problem mit dem Windows Installer-Paket aufgetreten. Ein Programm, das als Teil des Setups ausgeführt wird, wurde nicht erwartungsgemäß abgeschlossen. Wenden Sie sich an den Support oder den Hersteller des Pakets. {{Aktion [2], Pfad: [3], Befehl: [4] }}</String>
+    <String Id="Error1723">Es ist ein Problem mit dem Windows Installer-Paket aufgetreten. Eine für den Abschluss dieser Installation erforderliche DLL-Datei konnte nicht ausgeführt werden. Wenden Sie sich an den Support oder den Hersteller des Pakets. {{Aktion [2], Eintrag: [3], Bibliothek: [4] }}</String>
+    <String Id="Error1724">Das Entfernen wurde erfolgreich abgeschlossen.</String>
+    <String Id="Error1725">Das Entfernen ist fehlgeschlagen.</String>
+    <String Id="Error1726">Die Ankündigung wurde erfolgreich abgeschlossen.</String>
+    <String Id="Error1727">Die Ankündigung ist fehlgeschlagen.</String>
+    <String Id="Error1728">Die Konfiguration wurde erfolgreich abgeschlossen.</String>
+    <String Id="Error1729">Die Konfiguration ist fehlgeschlagen.</String>
+    <String Id="Error1730">Sie müssen über Administratorrechte verfügen, um diese Anwendung entfernen zu können. Melden Sie sich als Administrator an, oder wenden Sie sich an den technischen Support, um Unterstützung zu erhalten.</String>
+    <String Id="Error1731">Das Quellinstallationspaket für das Produkt [2] stimmt nicht mehr mit dem Clientpaket überein. Wiederholen Sie die Installation mit einer gültigen Kopie des Installationspakets "[3]".</String>
+    <String Id="Error1732">Sie müssen den Computer neu starten, um die Installation von [2] abzuschließen. Andere Benutzer sind momentan an diesem Computer angemeldet, und ein Neustart könnte unter Umständen dazu führen, dass Änderungen nicht gespeichert werden. Möchten Sie den Computer jetzt neu starten?</String>
+    <String Id="Error1801">Der Pfad [2] ist ungültig. Geben Sie einen gültigen Pfad an.</String>
+    <String Id="Error1802">Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen, und wiederholen Sie den Vorgang.</String>
+    <String Id="Error1803">In Laufwerk [2] ist kein Datenträger eingelegt. Legen Sie einen Datenträger ein und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um zu dem zuvor ausgewählten Volume zurückzukehren.</String>
+    <String Id="Error1804">In Laufwerk [2] ist kein Datenträger eingelegt. Legen Sie einen Datenträger ein und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um zum Dialog "Durchsuchen" zurückzukehren und ein anderes Volume auszuwählen.</String>
+    <String Id="Error1805">Der Ordner [2] ist nicht vorhanden. Geben Sie einen Pfad zu einem vorhandenen Ordner ein.</String>
+    <String Id="Error1806">Ihre Zugriffsrechte reichen nicht aus, um diesen Ordner zu lesen.</String>
+    <String Id="Error1807">Es konnte kein gültiger Zielordner für die Installation bestimmt werden.</String>
+    <String Id="Error1901">Fehler beim Lesen der Quellinstallationsdatenbank: [2].</String>
+    <String Id="Error1902">Planung des Computerneustarts: Die Datei [2] wird in [3] umbenannt. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen.</String>
+    <String Id="Error1903">Planung des Computerneustarts: Die Datei [2] wird gelöscht. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen.</String>
+    <String Id="Error1904">Fehler beim Registrieren von Modul [2]. HRESULT [3]. Wenden Sie sich an den Support.</String>
+    <String Id="Error1905">Fehler beim Entfernen von Modul [2] aus der Registrierung. HRESULT [3]. Wenden Sie sich an den Support.</String>
+    <String Id="Error1906">Fehler beim Zwischenspeichern von Paket [2]. Fehler: [3]. Wenden Sie sich an den Support.</String>
+    <String Id="Error1907">Die Schriftart [2] konnte nicht registriert werden. Überprüfen Sie, ob Sie über ausreichende Berechtigungen zum Installieren von Schriftarten verfügen, und ob das System diese Schriftart unterstützt.</String>
+    <String Id="Error1908">Die Schriftart [2] konnte nicht aus der Registrierung entfernt werden. Stellen Sie sicher, dass Sie ausreichende Berechtigungen zum Entfernen von Schriftarten besitzen.</String>
+    <String Id="Error1909">Die Verknüpfung [2] konnte nicht erstellt werden. Stellen Sie sicher, dass der Zielordner vorhanden ist, und Sie darauf zugreifen können.</String>
+    <String Id="Error1910">Die Verknüpfung [2] konnte nicht entfernt werden. Stellen Sie sicher, dass die Verknüpfungsdatei vorhanden ist, und Sie darauf zugreifen können.</String>
+    <String Id="Error1911">Typbibliothek für Datei [2] konnte nicht registriert werden. Wenden Sie sich an den Support.</String>
+    <String Id="Error1912">Typbibliothek für Datei [2] konnte nicht aus der Registrierung entfernt werden. Wenden Sie sich an den Support.</String>
+    <String Id="Error1913">Die INI-Datei [2][3] konnte nicht aktualisiert werden. Überprüfen Sie, ob die Datei vorhanden ist und Sie Zugriff darauf haben.</String>
+    <String Id="Error1914">Es konnte nicht festgelegt werden, dass Datei [3] beim Neustart des Computers durch Datei [2] ersetzt wird. Überprüfen Sie, ob Sie Schreibzugriff auf Datei [3] haben.</String>
+    <String Id="Error1915">Fehler beim Entfernen des ODBC-Treiber-Managers, ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1916">Fehler beim Installieren des ODBC-Treiber-Managers. ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Support in Verbindung.</String>
+    <String Id="Error1917">Fehler beim Entfernen des ODBC-Treibers [4], ODBC-Fehler [2]: [3]. Stellen Sie sicher, dass Sie ausreichende Berechtigungen zum Entfernen von ODBC-Treibern besitzen.</String>
+    <String Id="Error1918">Fehler beim Installieren des ODBC-Treibers: [4]. ODBC-Fehler [2]: [3}. Stellen Sie sicher, dass die Datei [4] vorhanden ist und Sie darauf zugreifen können.</String>
+    <String Id="Error1919">Fehler beim Konfigurieren der ODBC-Datenquelle: [4]. ODBC-Fehler [2]: [3}. Stellen Sie sicher, dass die Datei [4] vorhanden ist und Sie darauf zugreifen können.</String>
+    <String Id="Error1920">Dienst "[2]" ([3]) konnte nicht gestartet werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Starten von Systemdiensten besitzen.</String>
+    <String Id="Error1921">Dienst "[2]" ([3]) konnte nicht angehalten werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Anhalten von Systemdiensten besitzen.</String>
+    <String Id="Error1922">Dienst "[2]" ([3]) konnte nicht entfernt werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von Systemdiensten besitzen.</String>
+    <String Id="Error1923">Dienst "[2]" ([3]) konnte nicht installiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Installieren von Systemdiensten besitzen.</String>
+    <String Id="Error1924">Umgebungsvariable "[2]" konnte nicht aktualisiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern von Umgebungsvariablen besitzen.</String>
+    <String Id="Error1925">Sie besitzen keine ausreichenden Berechtigungen, um diese Installation für alle Benutzer dieses Computers auszuführen. Melden Sie sich als Administrator an, und wiederholen Sie diese Installation.</String>
+    <String Id="Error1926">Dateisicherheit für Datei "[3]" konnte nicht festgelegt werden. Fehler: [2]. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern der Sicherheitsrechte für diese Datei besitzen.</String>
+    <String Id="Error1927">Die Komponentendienste (COM+ 1.0) sind nicht auf diesem Computer installiert. Diese Installation erfordert Komponentendienste, um ordnungsgemäß abgeschlossen werden zu können. Komponentendienste sind auf Windows 2000 verfügbar.</String>
+    <String Id="Error1928">Fehler beim Registrieren der COM+-Anwendung. Wenden Sie sich an den Support, um weitere Informationen zu erhalten.</String>
+    <String Id="Error1929">Fehler beim Entfernen der COM+-Anwendung aus der Registrierung. Wenden Sie sich an den Support, um weitere Informationen zu erhalten.</String>
+    <String Id="Error1930">Die Beschreibung für den Dienst "[2]" ([3]) konnte nicht geändert werden.</String>
+    <String Id="Error1931">Der Windows Installer-Dienst kann die geschützte Systemdatei "[2]" nicht aktualisieren. Sie müssen eventuell das Betriebssystem aktualisieren, damit dieses Programm richtig ausgeführt werden kann. {{Paketversion: [3], geschützte Betriebssystemversion: [4]}}</String>
+    <String Id="Error1932">Der Dienst "Windows Installer" kann die geschützte Windows-Datei [2] nicht aktualisieren. {{Paketversion: [3], geschützte Betriebssystemversion: [4], Systemdateischutzfehler: [5]}}</String>
+    <String Id="Error1933">Eine oder mehrere geschützte Windows-Dateien konnten nicht aktualisiert werden {{SFP-Fehler: [2]. Liste der geschützten Dateien:\r\n[3]}}</String>
+    <String Id="Error1934">Benutzerinstallationen sind über die Computerrichtlinie deaktiviert.</String>
+    <String Id="Error1935">Fehler während der Installation von Assembly "[6]". Rufen Sie die Hilfe auf, oder wenden Sie sich an den Support. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
+    <String Id="Error1936">Fehler während der Installation von Assembly "[6]". Die Assembly hat entweder keinen sicheren Namen, oder sie wurde nicht mit der Mindestschlüssellänge signiert. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
+    <String Id="Error1937">Fehler während der Installation von Assembly "[6]". Die Signatur oder der Katalog konnten nicht überprüft werden oder sind ungültig. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
+    <String Id="Error1938">Fehler während der Installation der Assembly "[6]". Ein oder mehrere Module der Assembly wurden nicht gefunden. HRESULT: [3]. {{Assemblyschnittstelle: [4], Funktion: [5], Komponente: [2]}}</String>
+
+    <!-- Own / special errors -->
+    <String Id="Error25001">Die Applikation "[2]" muss geschlossen werden um die Installation fortsetzen zu können.</String>
+
+    <String Id="ProgressTextInstallValidate">Die Installation wird überprüft</String>
+    <String Id="ProgressTextInstallFiles">Neue Dateien werden kopiert</String>
+    <String Id="ProgressTextInstallFilesTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
+    <String Id="ProgressTextInstallAdminPackage">Netzwerkinstallationsdateien werden kopiert</String>
+    <String Id="ProgressTextInstallAdminPackageTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
+    <String Id="ProgressTextFileCost">Speicherplatzbedarf wird berechnet</String>
+    <String Id="ProgressTextCostInitialize">Speicherplatzbedarf wird berechnet</String>
+    <String Id="ProgressTextCostFinalize">Speicherplatzbedarf wird berechnet</String>
+    <String Id="ProgressTextCreateShortcuts">Verknüpfungen werden erstellt</String>
+    <String Id="ProgressTextCreateShortcutsTemplate">Verknüpfung: [1]</String>
+    <String Id="ProgressTextPublishComponents">Qualifizierte Komponenten werden veröffentlicht</String>
+    <String Id="ProgressTextPublishComponentsTemplate">Komponenten-ID: [1], Qualifizierer: [2]</String>
+    <String Id="ProgressTextPublishFeatures">Produktfeatures werden veröffentlicht</String>
+    <String Id="ProgressTextPublishFeaturesTemplate">Feature: [1]</String>
+    <String Id="ProgressTextPublishProduct">Produktinformationen werden veröffentlicht</String>
+    <String Id="ProgressTextRegisterClassInfo">Klassenserver werden registriert</String>
+    <String Id="ProgressTextRegisterClassInfoTemplate">Klassen-ID: [1]</String>
+    <String Id="ProgressTextRegisterExtensionInfo">Erweiterungsserver werden registriert</String>
+    <String Id="ProgressTextRegisterExtensionInfoTemplate">Erweiterung: [1]</String>
+    <String Id="ProgressTextRegisterMIMEInfo">MIME-Informationen werden registriert</String>
+    <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME-Inhaltstyp: [1], Erweiterung: [2]</String>
+    <String Id="ProgressTextRegisterProgIdInfo">Programm-IDs werden registriert</String>
+    <String Id="ProgressTextRegisterProgIdInfoTemplate">Programm-ID: [1]</String>
+    <String Id="ProgressTextAllocateRegistrySpace">Registrierungsspeicher wird zugeordnet</String>
+    <String Id="ProgressTextAllocateRegistrySpaceTemplate">Freier Speicherplatz: [1]</String>
+    <String Id="ProgressTextAppSearch">Installierte Anwendungen werden gesucht</String>
+    <String Id="ProgressTextAppSearchTemplate">Eigenschaft: [1], Signatur: [2]</String>
+    <String Id="ProgressTextBindImage">Ausführbare Dateien werden gebunden</String>
+    <String Id="ProgressTextBindImageTemplate">Datei: [1]</String>
+    <String Id="ProgressTextCCPSearch">Qualifizierte Produkte werden gesucht</String>
+    <String Id="ProgressTextCreateFolders">Ordner werden erstellt</String>
+    <String Id="ProgressTextCreateFoldersTemplate">Ordner: [1]</String>
+    <String Id="ProgressTextDeleteServices">Dienste werden gelöscht</String>
+    <String Id="ProgressTextDeleteServicesTemplate">Dienst: [1]</String>
+    <String Id="ProgressTextDuplicateFiles">Dateien werden dupliziert</String>
+    <String Id="ProgressTextDuplicateFilesTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
+    <String Id="ProgressTextFindRelatedProducts">Nach verwandten Anwendungen wird gesucht</String>
+    <String Id="ProgressTextFindRelatedProductsTemplate">Anwendung gefunden: [1]</String>
+    <String Id="ProgressTextInstallODBC">ODBC-Komponenten werden installiert</String>
+    <String Id="ProgressTextInstallServices">Neue Dienste werden installiert</String>
+    <String Id="ProgressTextInstallServicesTemplate">Dienst: [2]</String>
+    <String Id="ProgressTextLaunchConditions">Die Startbedingungen werden überprüft</String>
+    <String Id="ProgressTextMigrateFeatureStates">Featurestatus verwandter Anwendungen wird migriert</String>
+    <String Id="ProgressTextMigrateFeatureStatesTemplate">Anwendung: [1]</String>
+    <String Id="ProgressTextMoveFiles">Dateien werden verschoben</String>
+    <String Id="ProgressTextMoveFilesTemplate">Datei: [1], Verzeichnis: [9], Größe: [6]</String>
+    <String Id="ProgressTextPatchFiles">Dateien werden gepatcht</String>
+    <String Id="ProgressTextPatchFilesTemplate">Datei: [1], Verzeichnis: [2], Größe: [3]</String>
+    <String Id="ProgressTextProcessComponents">Komponentenregistrierung wird aktualisiert</String>
+    <String Id="ProgressTextRegisterComPlus">COM+-Anwendungen und -Komponenten werden registriert</String>
+    <String Id="ProgressTextRegisterComPlusTemplate">Anwendungs-ID: [1]{{, Anwendungstyp: [2], Benutzer: [3], RSN: [4]}}</String>
+    <String Id="ProgressTextRegisterFonts">Schriftarten werden registriert</String>
+    <String Id="ProgressTextRegisterFontsTemplate">Schriftart: [1]</String>
+    <String Id="ProgressTextRegisterProduct">Produkt wird registriert</String>
+    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
+    <String Id="ProgressTextRegisterTypeLibraries">Typenbibliotheken werden registriert</String>
+    <String Id="ProgressTextRegisterTypeLibrariesTemplate">Bibliotheken-ID: [1]</String>
+    <String Id="ProgressTextRegisterUser">Benutzer wird registriert</String>
+    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
+    <String Id="ProgressTextRemoveDuplicateFiles">Duplizierte Dateien werden entfernt</String>
+    <String Id="ProgressTextRemoveDuplicateFilesTemplate">Datei: [1], Verzeichnis: [9]</String>
+    <String Id="ProgressTextRemoveEnvironmentStrings">Umgebungsvariablen werden aktualisiert</String>
+    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">Name: [1], Wert: [2], Aktion [3]</String>
+    <String Id="ProgressTextRemoveExistingProducts">Anwendungen werden entfernt</String>
+    <String Id="ProgressTextRemoveExistingProductsTemplate">Anwendung: [1], Befehlszeile: [2]</String>
+    <String Id="ProgressTextRemoveFiles">Dateien werden entfernt</String>
+    <String Id="ProgressTextRemoveFilesTemplate">Datei: [1], Verzeichnis: [9]</String>
+    <String Id="ProgressTextRemoveFolders">Ordner werden entfernt</String>
+    <String Id="ProgressTextRemoveFoldersTemplate">Ordner: [1]</String>
+    <String Id="ProgressTextRemoveIniValues">INI-Dateieinträge werden entfernt</String>
+    <String Id="ProgressTextRemoveIniValuesTemplate">Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]</String>
+    <String Id="ProgressTextRemoveODBC">ODBC-Komponenten werden entfernt</String>
+    <String Id="ProgressTextRemoveRegistryValues">Systemregistrierungswerte werden entfernt</String>
+    <String Id="ProgressTextRemoveRegistryValuesTemplate">Schlüssel: [1], Name: [2]</String>
+    <String Id="ProgressTextRemoveShortcuts">Verknüpfungen werden entfernt</String>
+    <String Id="ProgressTextRemoveShortcutsTemplate">Verknüpfung: [1]</String>
+    <String Id="ProgressTextRMCCPSearch">Qualifizierte Produkte werden gesucht</String>
+    <String Id="ProgressTextSelfRegModules">Modul wird aus der Registrierung entfernt</String>
+    <String Id="ProgressTextSelfRegModulesTemplate">Datei: [1], Ordner: [2]</String>
+    <String Id="ProgressTextSelfUnregModules">Modulregistrierung wird aufgehoben</String>
+    <String Id="ProgressTextSelfUnregModulesTemplate">Datei: [1], Ordner: [2]</String>
+    <String Id="ProgressTextSetODBCFolders">ODBC-Verzeichnisse werden initialisiert</String>
+    <String Id="ProgressTextStartServices">Dienste werden gestartet</String>
+    <String Id="ProgressTextStartServicesTemplate">Dienst: [1]</String>
+    <String Id="ProgressTextStopServices">Dienste werden beendet</String>
+    <String Id="ProgressTextStopServicesTemplate">Dienst: [1]</String>
+    <String Id="ProgressTextUnpublishComponents">Veröffentlichung qualifizierter Komponenten wird aufgehoben</String>
+    <String Id="ProgressTextUnpublishComponentsTemplate">Komponenten-ID: [1], Qualifizierer: [2]</String>
+    <String Id="ProgressTextUnpublishFeatures">Veröffentlichung der Produktfeatures wird aufgehoben</String>
+    <String Id="ProgressTextUnpublishFeaturesTemplate">Feature: [1]</String>
+    <String Id="ProgressTextUnregisterClassInfo">Registrierung der Klassenserver wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterClassInfoTemplate">Klassen-ID: [1]</String>
+    <String Id="ProgressTextUnregisterComPlus">Registrierung der COM+-Anwendungen und -Komponenten wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterComPlusTemplate">Anwendungs-ID: [1]{{, Anwendungstyp: [2]}}</String>
+    <String Id="ProgressTextUnregisterExtensionInfo">Registrierung der Erweiterungsserver wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterExtensionInfoTemplate">Erweiterung: [1]</String>
+    <String Id="ProgressTextUnregisterFonts">Registrierung der Schriftarten wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterFontsTemplate">Schriftart: [1]</String>
+    <String Id="ProgressTextUnregisterMIMEInfo">Registrierung der MIME-Informationen wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME-Inhaltstyp: [1], Erweiterung: [2]</String>
+    <String Id="ProgressTextUnregisterProgIdInfo">Registrierung der Programm-IDs wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterProgIdInfoTemplate">Programm-ID: [1]</String>
+    <String Id="ProgressTextUnregisterTypeLibraries">Registrierung der Typenbibliotheken wird aufgehoben</String>
+    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">Bibliotheken-ID: [1]</String>
+    <String Id="ProgressTextWriteEnvironmentStrings">Umgebungsvariablen werden aktualisiert</String>
+    <String Id="ProgressTextWriteEnvironmentStringsTemplate">Name: [1], Wert: [2], Aktion [3]</String>
+    <String Id="ProgressTextWriteIniValues">INI-Dateiwerte werden geschrieben</String>
+    <String Id="ProgressTextWriteIniValuesTemplate">Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]</String>
+    <String Id="ProgressTextWriteRegistryValues">Systemregistrierungswerte werden geschrieben</String>
+    <String Id="ProgressTextWriteRegistryValuesTemplate">Schlüssel: [1], Name: [2], Wert: [3]</String>
+    <String Id="ProgressTextAdvertise">Anwendung wird angekündigt</String>
+    <String Id="ProgressTextGenerateScript">Für folgende Aktion werden Skriptvorgänge erstellt:</String>
+    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
+    <String Id="ProgressTextInstallSFPCatalogFile">Systemkatalog wird installiert</String>
+    <String Id="ProgressTextInstallSFPCatalogFileTemplate">Datei: [1], Abhängigkeiten: [2]</String>
+    <String Id="ProgressTextMsiPublishAssemblies">Assemblyinformationen werden veröffentlicht</String>
+    <String Id="ProgressTextMsiPublishAssembliesTemplate">Anwendungskontext:[1], Assemblyname:[2]</String>
+    <String Id="ProgressTextMsiUnpublishAssemblies">Veröffentlichung der Assemblierungsinformationen wird aufgehoben</String>
+    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">Anwendungskontext:[1], Assemblyname:[2]</String>
+    <String Id="ProgressTextRollback">Aktion wird rückgängig gemacht:</String>
+    <String Id="ProgressTextRollbackTemplate">[1]</String>
+    <String Id="ProgressTextRollbackCleanup">Sicherungsdateien werden entfernt</String>
+    <String Id="ProgressTextRollbackCleanupTemplate">Datei: [1]</String>
+    <String Id="ProgressTextUnmoveFiles">Verschobene Dateien werden entfernt</String>
+    <String Id="ProgressTextUnmoveFilesTemplate">Datei: [1], Verzeichnis: [9]</String>
+    <String Id="ProgressTextUnpublishProduct">Veröffentlichung der Produktinformationen wird aufgehoben</String>
+
+    <String Id="UITextbytes">Bytes</String>
+    <String Id="UITextGB">GB</String>
+    <String Id="UITextKB">KB</String>
+    <String Id="UITextMB">MB</String>
+    <String Id="UITextMenuAbsent">Nicht verfügbar</String>
+    <String Id="UITextMenuAdvertise">Bei der ersten Verwendung installieren</String>
+    <String Id="UITextMenuAllCD">Alles von CD starten</String>
+    <String Id="UITextMenuAllLocal">Alles auf der lokalen Festplatte installieren</String>
+    <String Id="UITextMenuAllNetwork">Alles vom Netzwerk starten</String>
+    <String Id="UITextMenuCD">Von CD starten</String>
+    <String Id="UITextMenuLocal">Auf der lokalen Festplatte installieren</String>
+    <String Id="UITextMenuNetwork">Vom Netzwerk starten</String>
+    <String Id="UITextScriptInProgress">Erforderliche Daten werden ermittelt...</String>
+    <String Id="UITextSelAbsentAbsent">Dieses Feature wird nicht installiert.</String>
+    <String Id="UITextSelAbsentAdvertise">Dieses Feature wird bei der ersten Verwendung installiert.</String>
+    <String Id="UITextSelAbsentCD">Dieses Feature wird zum Starten von CD installiert.</String>
+    <String Id="UITextSelAbsentLocal">Dieses Feature wird auf der lokalen Festplatte installiert.</String>
+    <String Id="UITextSelAbsentNetwork">Dieses Feature wird zum Starten vom Netzwerk installiert.</String>
+    <String Id="UITextSelAdvertiseAbsent">Dieses Feature wird nicht verfügbar sein.</String>
+    <String Id="UITextSelAdvertiseAdvertise">Dieses Feature wird bei der ersten Verwendung installiert.</String>
+    <String Id="UITextSelAdvertiseCD">Dieses Feature wird von CD gestartet.</String>
+    <String Id="UITextSelAdvertiseLocal">Dieses Feature wird auf der lokalen Festplatte installiert.</String>
+    <String Id="UITextSelAdvertiseNetwork">Dieses Feature wird vom Netzwerk gestartet.</String>
+    <String Id="UITextSelCDAbsent">Dieses Feature wird vollständig deinstalliert und kann nicht von CD gestartet werden.</String>
+    <String Id="UITextSelCDAdvertise">Dieses Feature wird nicht mehr von CD gestartet, sondern bei der ersten Verwendung installiert.</String>
+    <String Id="UITextSelCDCD">Dieses Feature wird weiterhin von CD gestartet.</String>
+    <String Id="UITextSelCDLocal">Dieses Feature wird nicht mehr von CD gestartet, sondern auf der lokalen Festplatte installiert.</String>
+    <String Id="UITextSelChildCostNeg">Dieses Feature gibt [1] auf der Festplatte frei.</String>
+    <String Id="UITextSelChildCostPos">Diese Funktion erfordert [1] auf der Festplatte.</String>
+    <String Id="UITextSelCostPending">Kosten für dieses Feature werden berechnet...</String>
+    <String Id="UITextSelLocalAbsent">Dieses Feature wird vollständig entfernt.</String>
+    <String Id="UITextSelLocalAdvertise">Dieses Feature wird von der lokalen Festplatte entfernt und bei der ersten Verwendung installiert.</String>
+    <String Id="UITextSelLocalCD">Dieses Feature wird von der lokalen Festplatte entfernt, bleibt aber zum Starten von CD installiert.</String>
+    <String Id="UITextSelLocalLocal">Dieses Feature bleibt weiterhin auf der lokalen Festplatte installiert.</String>
+    <String Id="UITextSelLocalNetwork">Dieses Feature wird von der lokalen Festplatte entfernt, bleibt aber zum Starten vom Netzwerk installiert.</String>
+    <String Id="UITextSelNetworkAbsent">Dieses Feature wird vollständig deinstalliert und kann nicht vom Netzwerk gestartet werden.</String>
+    <String Id="UITextSelNetworkAdvertise">Dieses Feature wird nicht mehr vom Netzwerk gestartet, sondern bei der ersten Verwendung installiert.</String>
+    <String Id="UITextSelNetworkLocal">Dieses Feature wird nicht mehr vom Netzwerk gestartet, sondern auf der lokalen Festplatte installiert.</String>
+    <String Id="UITextSelNetworkNetwork">Dieses Feature wird weiterhin vom Netzwerk gestartet.</String>
+    <String Id="UITextSelParentCostNegNeg">Dieses Feature gibt [1] auf der Festplatte frei. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte freigeben.</String>
+    <String Id="UITextSelParentCostNegPos">Dieses Feature gibt [1] auf der Festplatte frei. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte erfordern.</String>
+    <String Id="UITextSelParentCostPosNeg">Dieses Feature erfordert [1] auf der Festplatte. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte freigeben.</String>
+    <String Id="UITextSelParentCostPosPos">Dieses Feature erfordert [1] auf der Festplatte. Es sind [2] von [3] untergeordneten Features ausgewählt, die [4] auf der Festplatte erfordern.</String>
+    <String Id="UITextTimeRemaining">Restdauer: {[1] Minute(n) }{[2] Sekunde(n)}</String>
+    <String Id="UITextVolumeCostAvailable">Verfügbar</String>
+    <String Id="UITextVolumeCostDifference">Differenz</String>
+    <String Id="UITextVolumeCostRequired">Erforderlich</String>
+    <String Id="UITextVolumeCostSize">Datenträgergröße</String>
+    <String Id="UITextVolumeCostVolume">Volume</String>
+
+</WixLocalization>
diff --git a/src/VBox/Installer/win/NLS/en_US.wxl b/src/VBox/Installer/win/NLS/en_US.wxl
index df2f23f..96ad15c 100644
--- a/src/VBox/Installer/win/NLS/en_US.wxl
+++ b/src/VBox/Installer/win/NLS/en_US.wxl
@@ -1,600 +1,600 @@
-<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="en_US">
-
-    <!--
-            Language Definition Include for VirtualBox WiX script.
-
-            Copyright (C) 2011-2016 Oracle Corporation
-
-            This file is part of VirtualBox Open Source Edition (OSE), as
-            available from http://www.virtualbox.org. This file is free software;
-            you can redistribute it and/or modify it under the terms of the GNU
-            General Public License (GPL) as published by the Free Software
-            Foundation, in version 2 as it comes in the "COPYING" file of the
-            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-    -->
-
-    <String Id="LANG">1033</String>
-    <String Id="LangName">English</String>
-
-    <String Id="ButtonText_No">&No</String>
-    <String Id="ButtonText_Yes">&Yes</String>
-    <String Id="ButtonText_Cancel">&Cancel</String>
-    <String Id="ButtonText_Next">&Next ></String>
-    <String Id="ButtonText_Back">< &Back</String>
-    <String Id="ButtonText_Browse">Br&owse</String>
-    <String Id="ButtonText_OK">O&K</String>
-    <String Id="ButtonText_Check">&Check</String>
-    <String Id="ButtonText_Install">&Install</String>
-    <String Id="ButtonText_Remove">&Remove</String>
-    <String Id="ButtonText_Finish">&Finish</String>
-    <String Id="ButtonText_Repair">&Repair</String>
-    <String Id="ButtonText_Return">&Return</String>
-    <String Id="ButtonText_Retry">Re&try</String>
-    <String Id="ButtonText_Ignore">I&gnore</String>
-    <String Id="ButtonText_Exit">E&xit</String>
-
-    <String Id="InstallModeCustom">Custom</String>
-    <String Id="Setup">Setup</String>
-
-    <!---->
-
-    <String Id="StartMenu_License">License</String>
-    <String Id="StartMenu_UserManual">User manual</String>
-
-    <!---->
-
-    <String Id="VB_App">[ProductName] application.</String>
-    <String Id="VB_USBDriver">[ProductName] USB device drivers for USB device support.</String>
-    <String Id="VB_Network">[ProductName] network device drivers for networking support.</String>
-    <String Id="VB_NetFltDriver">[ProductName] driver for Bridged Networking.</String>
-    <String Id="VB_NetAdpDriver">[ProductName] virtual network adapter driver for Host-Only Networking.</String>
-    <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
-    <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
-
-    <String Id="VB_Python">Python support for VirtualBox.</String>
-
-    <!---->
-
-    <String Id="NeedAdmin">You need to have administrator rights to (un)install [ProductName]! This setup will abort now.</String>
-    <String Id="WrongOS">This application only runs on Windows XP or above.</String>
-    <String Id="Only32Bit">This application only runs on 32-bit Windows systems. Please install the 64-bit version of [ProductName]!</String>
-    <String Id="Only64Bit">This application only runs on 64-bit Windows systems. Please install the 32-bit version of [ProductName]!</String>
-    <String Id="SunFound">An old Sun VirtualBox installation has been found on this machine. Please uninstall this package first and then install [ProductName]!</String>
-    <String Id="InnotekFound">An old innotek VirtualBox installation has been found on this machine. Please uninstall this package first and then install [ProductName]!</String>
-
-    <!---->
-
-    <String Id="CancelDlg_Question">Are you sure you want to cancel [ProductName] installation?</String>
-
-    <!---->
-
-    <String Id="WelcomeDlg_Header">Welcome to the [ProductName] Setup Wizard</String>
-    <String Id="WelcomeDlg_Body">The Setup Wizard will install [ProductName] on your computer. Click Next to continue or Cancel to exit the Setup Wizard.</String>
-
-    <!---->
-
-    <String Id="LicenseAgreementDlg_Header">End-User License Agreement</String>
-    <String Id="LicenseAgreementDlg_Body">Please read the following license agreement carefully.</String>
-    <String Id="LicenseAgreementDlg_Accept">I &accept the terms in the License Agreement</String>
-    <String Id="LicenseAgreementDlg_Decline">I &do not accept the terms in the License Agreement</String>
-
-    <!---->
-
-    <String Id="CheckSerialDlg_Header">Serial Number</String>
-    <String Id="CheckSerialDlg_Body">Please enter your serial number in the fields below. You'll find it on the sticker inside the VirtualBox CD case.</String>
-    <String Id="CheckSerialDlg_Footer">When done entering the serial number, press the "Check" button below.</String>
-
-    <!---->
-
-    <String Id="WrongSerialDlg_Header">Entered serial number was invalid!</String>
-    <String Id="WrongSerialDlg_Desc1">Please go back to enter your serial number again.</String>
-    <String Id="WrongSerialDlg_Desc2">Keep in mind that the serial number must be spelled exactly like printed on the sticker.</String>
-
-    <!---->
-
-    <String Id="WarnSaveStatesDlg_Header">Warning:</String>
-    <String Id="WarnSaveStatesDlg_Header2">Incompatible Saved States!</String>
-    <String Id="WarnSaveStatesDlg_Desc">When upgrading [ProductName], all saved states from your already existing machines won't work anymore! After the installation, you have to discard them manually.</String>
-    <String Id="WarnSaveStatesDlg_Proceed">Proceed with installation now?</String>
-
-    <!---->
-
-    <String Id="WarnTAPDevicesDlg_Header">Host Interfaces</String>
-    <String Id="WarnTAPDevicesDlg_Desc">If you used some host interfaces for your machines in the previous version, you have to recreate them manually after this installation.</String>
-
-    <!---->
-
-    <String Id="NetCfgLocked">The following application should be closed before continuing the install: "[2]"</String>
-
-    <!---->
-
-    <String Id="CustomizeDlg_Location">Location:</String>
-    <String Id="CustomizeDlg_DiskUsage">Disk &Usage</String>
-    <String Id="CustomizeDlg_SelFeatures">Select the way you want features to be installed.</String>
-    <String Id="CustomizeDlg_IconTree">Click on the icons in the tree below to change the way features will be installed.</String>
-    <String Id="CustomizeDlg_CustomSetup">Custom Setup</String>
-    <String Id="CustomizeDlg_SelItemDesc">CustomizeDlgItemDescription-CustomizeDlgItemDescription</String>
-    <String Id="CustomizeDlg_SelItemSize">CustomizeDlgItemSize-CustomizeDlgItemSize</String>
-    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
-
-    <!---->
-
-    <String Id="Customize2Dlg_Header">Customize</String>
-    <String Id="Customize2Dlg_Desc">Please choose from the options below:</String>
-    <String Id="Customize2Dlg_CreateStartMenuEntries">Create start menu entries</String>
-    <String Id="Customize2Dlg_CreateDesktopShortcut">Create a shortcut on the desktop</String>
-    <String Id="Customize2Dlg_CreateQuickLaunch">Create a shortcut in the Quick Launch Bar</String>
-    <String Id="Customize2Dlg_RegisterFileExtensions">Register file associations</String>
-
-    <!---->
-
-    <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
-This is default for older versions of Windows (pre-Vista).</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
-This is default for newer versions of Windows (Vista and newer).</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
-
-    <!---->
-
-    <String Id="WarnDisconNetIfacesDlg_Title">Warning:</String>
-    <String Id="WarnDisconNetIfacesDlg_Title2">Network Interfaces</String>
-    <String Id="WarnDisconNetIfacesDlg_Desc">Installing the [ProductName] Networking feature will reset your network connection and temporarily disconnect you from the network.</String>
-    <String Id="WarnDisconNetIfacesDlg_Question">Proceed with installation now?</String>
-
-    <!---->
-
-    <String Id="DiskCostDlg_SpaceRequired">The disk space required for the installation of the selected features.</String>
-    <String Id="DiskCostDlg_NotEnoughSpace">The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</String>
-    <String Id="DiskCostDlg_SpaceRequirements">Disk Space Requirements</String>
-    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
-
-    <!---->
-
-    <String Id="BrowseDlg_BrowseDestFolder">Browse to the destination folder</String>
-    <String Id="BrowseDlg_ChangeCurFolder">Change current destination folder</String>
-    <String Id="BrowseDlg_UpOneLevelTooltip">Up one level</String>
-    <String Id="BrowseDlg_CreateNewFolderTooltip">Create a new folder</String>
-    <String Id="BrowseDlg_LookIn">&Look in:</String>
-    <String Id="BrowseDlg_FolderName">&Folder name:</String>
-
-    <!---->
-
-    <String Id="VerifyReadyDlg_ReadyToBegin">The Setup Wizard is ready to begin the [InstallMode] installation.</String>
-    <String Id="VerifyReadyDlg_ClickInstall">Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</String>
-    <String Id="VerifyReadyDlg_ReadyToInstall">Ready to Install</String>
-
-    <!---->
-
-    <String Id="ExitDlg_ClickFinish">Click the Finish button to exit the Setup Wizard.</String>
-    <String Id="ExitDlg_InstComplete">[ProductName] installation is complete.</String>
-    <String Id="ExitDlg_StartVBox">Start [ProductName] after installation</String>
-
-    <!---->
-
-    <String Id="FatalErrorDlg_Header">[ProductName] Setup Wizard ended prematurely</String>
-    <String Id="FatalErrorDlg_Desc">[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.</String>
-    <String Id="FatalErrorDlg_Footer">Click the Finish button to exit the Setup Wizard.</String>
-
-    <!---->
-
-    <String Id="FilesInUse_Text">The following applications are using files that need to be updated by this setup. Close these applications and then click &Retry to continue the installation or Exit to exit it.</String>
-    <String Id="FilesInUse_Description">Some files that need to be updated are currently in use.</String>
-    <String Id="FilesInUse_Title">Files in Use</String>
-
-    <!---->
-
-    <String Id="UserExitDlg_Header">[ProductName] Setup Wizard was interrupted</String>
-    <String Id="UserExitDlg_Desc">[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.</String>
-    <String Id="UserExitDlg_Footer">Click the Finish button to exit the Setup Wizard.</String>
-
-    <!---->
-
-    <String Id="ProgressDlg_PleaseWait">Please wait while the Setup Wizard installs [ProductName]. This may take several minutes.</String>
-
-    <!---->
-
-    <String Id="ResumeDlg_Header">Resuming the [ProductName] Setup Wizard</String>
-    <String Id="ResumeDlg_Desc">The Setup Wizard will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the Setup Wizard.</String>
-
-    <!---->
-
-    <String Id="MaintenanceTypeDlg_Header">Modify, Repair or Remove installation</String>
-    <String Id="MaintenanceTypeDlg_SelOption">Select the operation you wish to perform.</String>
-    <String Id="MaintenanceTypeDlg_Repair">Re&pair</String>
-    <String Id="MaintenanceTypeDlg_RepairText">Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.</String>
-    <String Id="MaintenanceTypeDlg_RepairTooltip">Repair installation</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress1">Repairing</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress2">repairs</String>
-    <String Id="MaintenanceTypeDlg_Remove">&Remove</String>
-    <String Id="MaintenanceTypeDlg_RemoveText">Removes [ProductName] from your computer.</String>
-    <String Id="MaintenanceTypeDlg_RemoveTooltip">Remove installation</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress1">Removing</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress2">removes</String>
-
-    <!---->
-
-    <String Id="MaintenanceWelcomeDlg_Header">Welcome to the [ProductName] Setup Wizard</String>
-    <String Id="MaintenanceWelcomeDlg_Desc">The Setup Wizard will allow you to repair your current installation or remove [ProductName] from your computer. Click Next to continue or Cancel to exit the Setup Wizard.</String>
-
-    <!---->
-
-    <String Id="OutOfDiskDlg_InstallationExceeds">Disk space required for the installation exceeds available disk space.</String>
-    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</String>
-    <String Id="OutOfDiskDlg_OutOfDiskSpace">Out of Disk Space</String>
-
-    <!---->
-
-    <String Id="OutOfRbDiskDlg_InstallationExceeds">Disk space required for the installation exceeds available disk space.</String>
-    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</String>
-    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">Out of Disk Space</String>
-    <String Id="OutOfRbDiskDlg_Desc">Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click Yes if you wish to take the risk to disable rollback.</String>
-
-    <!---->
-
-    <String Id="VerifyRemoveDlg_Header">Remove [ProductName]</String>
-    <String Id="VerifyRemoveDlg_Desc">You have chosen to remove the program from your computer.</String>
-    <String Id="VerifyRemoveDlg_ClickRemove">Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</String>
-
-    <!---->
-
-    <String Id="VerifyRepairDlg_Header">Repair [ProductName]</String>
-    <String Id="VerifyRepairDlg_ReadyToBegin">The Setup Wizard is ready to begin the repair of [ProductName].</String>
-    <String Id="VerifyRepairDlg_ClickRepair">Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</String>
-
-    <!---->
-
-    <String Id="WaitForCostingDlg_PleaseWait">Please wait while the installer finishes determining your disk space requirements.</String>
-
-    <!---->
-
-    <String Id="MsiRMFilesInUse_Text">The following applications are using files that need to be updated by this setup. You can let Setup Wizard close them and attempt to restart them or reboot the machine later.</String>
-    <String Id="MsiRMFilesInUse_Description">Some files that need to be updated are currently in use.</String>
-    <String Id="MsiRMFilesInUse_Title">Files in Use</String>
-    <String Id="MsiRMFilesInUse_UseRM">&Close the applications and attempt to restart them.</String>
-    <String Id="MsiRMFilesInUse_DontUseRM">&Do not close applications. A reboot will be required.</String>
-
-    <!-- The following strings are internally used by WiX and MSI -->
-    <String Id="Error0">{{Fatal error: }}</String>
-    <String Id="Error1">{{Error [1]. }}</String>
-    <String Id="Error2">Warning [1]. </String>
-    <String Id="Error3" />
-    <String Id="Error4">Info [1]. </String>
-    <String Id="Error5">The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}</String>
-    <String Id="Error6" />
-    <String Id="Error7">{{Disk full: }}</String>
-    <String Id="Error8">Action [Time]: [1]. [2]</String>
-    <String Id="Error9">[ProductName]</String>
-    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
-    <String Id="Error11">Message type: [1], Argument: [2]</String>
-    <String Id="Error12">=== Logging started: [Date]  [Time] ===</String>
-    <String Id="Error13">=== Logging stopped: [Date]  [Time] ===</String>
-    <String Id="Error14">Action start [Time]: [1].</String>
-    <String Id="Error15">Action ended [Time]: [1]. Return value [2].</String>
-    <String Id="Error16">Time remaining: {[1] minutes }{[2] seconds}</String>
-    <String Id="Error17">Out of memory. Shut down other applications before retrying.</String>
-    <String Id="Error18">Installer is no longer responding.</String>
-    <String Id="Error19">Installer stopped prematurely.</String>
-    <String Id="Error20">Please wait while Windows configures [ProductName]</String>
-    <String Id="Error21">Gathering required information...</String>
-    <String Id="Error22">Removing older versions of this application...</String>
-    <String Id="Error23">Preparing to remove older versions of this application...</String>
-    <String Id="Error32">{[ProductName] }Setup completed successfully.</String>
-    <String Id="Error33">{[ProductName] }Setup failed.</String>
-    <String Id="Error1101">Error reading from file: [2]. {{ System error [3].}}  Verify that the file exists and that you can access it.</String>
-    <String Id="Error1301">Cannot create the file '[2]'. A directory with this name already exists. Cancel the install and try installing to a different location.</String>
-    <String Id="Error1302">Please insert the disk: [2]</String>
-    <String Id="Error1303">The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.</String>
-    <String Id="Error1304">Error writing to file: [2]. Verify that you have access to that directory.</String>
-    <String Id="Error1305">Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.</String>
-    <String Id="Error1306">Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry.</String>
-    <String Id="Error1307">There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.</String>
-    <String Id="Error1308">Source file not found: [2]. Verify that the file exists and that you can access it.</String>
-    <String Id="Error1309">Error reading from file: [3]. {{ System error [2].}}  Verify that the file exists and that you can access it.</String>
-    <String Id="Error1310">Error writing to file: [3]. {{ System error [2].}}  Verify that you have access to that directory.</String>
-    <String Id="Error1311">Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.</String>
-    <String Id="Error1312">Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit.</String>
-    <String Id="Error1313">The volume [2] is currently unavailable. Please select another.</String>
-    <String Id="Error1314">The specified path '[2]' is unavailable.</String>
-    <String Id="Error1315">Unable to write to the specified folder: [2].</String>
-    <String Id="Error1316">A network error occurred while attempting to read from the file: [2]</String>
-    <String Id="Error1317">An error occurred while attempting to create the directory: [2]</String>
-    <String Id="Error1318">A network error occurred while attempting to create the directory: [2]</String>
-    <String Id="Error1319">A network error occurred while attempting to open the source file cabinet: [2]</String>
-    <String Id="Error1320">The specified path is too long: [2]</String>
-    <String Id="Error1321">The Installer has insufficient privileges to modify this file: [2].</String>
-    <String Id="Error1322">A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system.</String>
-    <String Id="Error1323">The folder path '[2]' contains words that are not valid in folder paths.</String>
-    <String Id="Error1324">The folder path '[2]' contains an invalid character.</String>
-    <String Id="Error1325">'[2]' is not a valid short file name.</String>
-    <String Id="Error1326">Error getting file security: [3] GetLastString: [2]</String>
-    <String Id="Error1327">Invalid Drive: [2]</String>
-    <String Id="Error1328">Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}}</String>
-    <String Id="Error1329">A file that is required cannot be installed because the cabinet file [2] is not digitally signed. This may indicate that the cabinet file is corrupt.</String>
-    <String Id="Error1330">A file that is required cannot be installed because the cabinet file [2] has an invalid digital signature. This may indicate that the cabinet file is corrupt.{{  Error [3] was returned by WinVerifyTrust.}}</String>
-    <String Id="Error1331">Failed to correctly copy [2] file: CRC error.</String>
-    <String Id="Error1332">Failed to correctly move [2] file: CRC error.</String>
-    <String Id="Error1333">Failed to correctly patch [2] file: CRC error.</String>
-    <String Id="Error1334">The file '[2]' cannot be installed because the file cannot be found in cabinet file '[3]'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</String>
-    <String Id="Error1335">The cabinet file '[2]' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</String>
-    <String Id="Error1336">There was an error creating a temporary file that is needed to complete this installation.{{  Folder: [3]. System error code: [2]}}</String>
-    <String Id="Error1401">Could not create key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
-    <String Id="Error1402">Could not open key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
-    <String Id="Error1403">Could not delete value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
-    <String Id="Error1404">Could not delete key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
-    <String Id="Error1405">Could not read value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
-    <String Id="Error1406">Could not write value [2] to key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
-    <String Id="Error1407">Could not get value names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
-    <String Id="Error1408">Could not get sub key names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
-    <String Id="Error1409">Could not read security information for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
-    <String Id="Error1410">Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.</String>
-    <String Id="Error1500">Another installation is in progress. You must complete that installation before continuing this one.</String>
-    <String Id="Error1501">Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.</String>
-    <String Id="Error1502">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue.</String>
-    <String Id="Error1503">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product.</String>
-    <String Id="Error1601">Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry.</String>
-    <String Id="Error1602">Are you sure you want to cancel?</String>
-    <String Id="Error1603">The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry.</String>
-    <String Id="Error1604">The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible.</String>
-    <String Id="Error1605">There is not enough disk space on the volume '[2]' to continue the install with recovery enabled. [3] KB are required, but only [4] KB are available. Click Ignore to continue the install without saving recovery information, click Retry to check for available space again, or click Cancel to quit the installation.</String>
-    <String Id="Error1606">Could not access network location [2].</String>
-    <String Id="Error1607">The following applications should be closed before continuing the install:</String>
-    <String Id="Error1608">Could not find any previously installed compliant products on the machine for installing this product.</String>
-    <String Id="Error1609">An error occurred while applying security settings. [2] is not a valid user or group. This could be a problem with the package, or a problem connecting to a domain controller on the network. Check your network connection and click Retry, or Cancel to end the install. {{Unable to locate the user's SID, system error [3]}}</String>
-    <String Id="Error1701">The key [2] is not valid. Verify that you entered the correct key.</String>
-    <String Id="Error1702">The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later.</String>
-    <String Id="Error1703">You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later.</String>
-    <String Id="Error1704">An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes?</String>
-    <String Id="Error1705">A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes?</String>
-    <String Id="Error1706">An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'.</String>
-    <String Id="Error1707">Installation completed successfully.</String>
-    <String Id="Error1708">Installation failed.</String>
-    <String Id="Error1709">Product: [2] -- [3]</String>
-    <String Id="Error1710">You may either restore your computer to its previous state or continue the install later. Would you like to restore?</String>
-    <String Id="Error1711">An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install.</String>
-    <String Id="Error1712">One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.</String>
-    <String Id="Error1713">[2] cannot install one of its required products. Contact your technical support group. {{System String: [3].}}</String>
-    <String Id="Error1714">The older version of [2] cannot be removed. Contact your technical support group. {{System String [3].}}</String>
-    <String Id="Error1715">Installed [2]</String>
-    <String Id="Error1716">Configured [2]</String>
-    <String Id="Error1717">Removed [2]</String>
-    <String Id="Error1718">File [2] was rejected by digital signature policy.</String>
-    <String Id="Error1719">The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.</String>
-    <String Id="Error1720">There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. {{Custom action [2] script error [3], [4]: [5] Line [6], Column [7], [8] }}</String>
-    <String Id="Error1721">There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action: [2], location: [3], command: [4] }}</String>
-    <String Id="Error1722">There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. {{Action [2], location: [3], command: [4] }}</String>
-    <String Id="Error1723">There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action [2], entry: [3], library: [4] }}</String>
-    <String Id="Error1724">Removal completed successfully.</String>
-    <String Id="Error1725">Removal failed.</String>
-    <String Id="Error1726">Advertisement completed successfully.</String>
-    <String Id="Error1727">Advertisement failed.</String>
-    <String Id="Error1728">Configuration completed successfully.</String>
-    <String Id="Error1729">Configuration failed.</String>
-    <String Id="Error1730">You must be an Administrator to remove this application. To remove this application, you can log on as an Administrator, or contact your technical support group for assistance.</String>
-    <String Id="Error1801">The path [2] is not valid. Please specify a valid path.</String>
-    <String Id="Error1802">Out of memory. Shut down other applications before retrying.</String>
-    <String Id="Error1803">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.</String>
-    <String Id="Error1804">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume.</String>
-    <String Id="Error1805">The folder [2] does not exist. Please enter a path to an existing folder.</String>
-    <String Id="Error1806">You have insufficient privileges to read this folder.</String>
-    <String Id="Error1807">A valid destination folder for the install could not be determined.</String>
-    <String Id="Error1901">Error attempting to read from the source install database: [2].</String>
-    <String Id="Error1902">Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.</String>
-    <String Id="Error1903">Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.</String>
-    <String Id="Error1904">Module [2] failed to register. HRESULT [3]. Contact your support personnel.</String>
-    <String Id="Error1905">Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.</String>
-    <String Id="Error1906">Failed to cache package [2]. Error: [3]. Contact your support personnel.</String>
-    <String Id="Error1907">Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.</String>
-    <String Id="Error1908">Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.</String>
-    <String Id="Error1909">Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.</String>
-    <String Id="Error1910">Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.</String>
-    <String Id="Error1911">Could not register type library for file [2]. Contact your support personnel.</String>
-    <String Id="Error1912">Could not unregister type library for file [2]. Contact your support personnel.</String>
-    <String Id="Error1913">Could not update the ini file [2][3]. Verify that the file exists and that you can access it.</String>
-    <String Id="Error1914">Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].</String>
-    <String Id="Error1915">Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</String>
-    <String Id="Error1916">Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</String>
-    <String Id="Error1917">Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.</String>
-    <String Id="Error1918">Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</String>
-    <String Id="Error1919">Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</String>
-    <String Id="Error1920">Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services.</String>
-    <String Id="Error1921">Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services.</String>
-    <String Id="Error1922">Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services.</String>
-    <String Id="Error1923">Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services.</String>
-    <String Id="Error1924">Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables.</String>
-    <String Id="Error1925">You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.</String>
-    <String Id="Error1926">Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file.</String>
-    <String Id="Error1927">Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000.</String>
-    <String Id="Error1928">Error registering COM+ Application. Contact your support personnel for more information.</String>
-    <String Id="Error1929">Error unregistering COM+ Application. Contact your support personnel for more information.</String>
-    <String Id="Error1930">The description for service '[2]' ([3]) could not be changed.</String>
-    <String Id="Error1931">The Windows Installer service cannot update the system file [2] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [3], OS Protected version: [4]}}</String>
-    <String Id="Error1932">The Windows Installer service cannot update the protected Windows file [2]. {{Package version: [3], OS Protected version: [4], SFP Error: [5]}}</String>
-    <String Id="Error1933">The Windows Installer service cannot update one or more protected Windows files. {{SFP String: [2]. List of protected files:\r\n[3]}}</String>
-    <String Id="Error1934">User installations are disabled via policy on the machine.</String>
-    <String Id="Error1935">An error occured during the installation of assembly component [2]. HRESULT: [3]. {{assembly interface: [4], function: [5], assembly name: [6]}}</String>
-
-    <!-- Own / special errors -->
-    <String Id="Error25001">The application "[2]" needs to be closed for the installation to continue.</String>
-
-    <String Id="ProgressTextInstallValidate">Validating install</String>
-    <String Id="ProgressTextInstallFiles">Copying new files</String>
-    <String Id="ProgressTextInstallFilesTemplate">File: [1],  Directory: [9],  Size: [6]</String>
-    <String Id="ProgressTextInstallAdminPackage">Copying network install files</String>
-    <String Id="ProgressTextInstallAdminPackageTemplate">File: [1], Directory: [9], Size: [6]</String>
-    <String Id="ProgressTextFileCost">Computing space requirements</String>
-    <String Id="ProgressTextCostInitialize">Computing space requirements</String>
-    <String Id="ProgressTextCostFinalize">Computing space requirements</String>
-    <String Id="ProgressTextCreateShortcuts">Creating shortcuts</String>
-    <String Id="ProgressTextCreateShortcutsTemplate">Shortcut: [1]</String>
-    <String Id="ProgressTextPublishComponents">Publishing Qualified Components</String>
-    <String Id="ProgressTextPublishComponentsTemplate">Component ID: [1], Qualifier: [2]</String>
-    <String Id="ProgressTextPublishFeatures">Publishing Product Features</String>
-    <String Id="ProgressTextPublishFeaturesTemplate">Feature: [1]</String>
-    <String Id="ProgressTextPublishProduct">Publishing product information</String>
-    <String Id="ProgressTextRegisterClassInfo">Registering Class servers</String>
-    <String Id="ProgressTextRegisterClassInfoTemplate">Class Id: [1]</String>
-    <String Id="ProgressTextRegisterExtensionInfo">Registering extension servers</String>
-    <String Id="ProgressTextRegisterExtensionInfoTemplate">Extension: [1]</String>
-    <String Id="ProgressTextRegisterMIMEInfo">Registering MIME info</String>
-    <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME Content Type: [1], Extension: [2]</String>
-    <String Id="ProgressTextRegisterProgIdInfo">Registering program identifiers</String>
-    <String Id="ProgressTextRegisterProgIdInfoTemplate">ProgId: [1]</String>
-    <String Id="ProgressTextAllocateRegistrySpace">Allocating registry space</String>
-    <String Id="ProgressTextAllocateRegistrySpaceTemplate">Free space: [1]</String>
-    <String Id="ProgressTextAppSearch">Searching for installed applications</String>
-    <String Id="ProgressTextAppSearchTemplate">Property: [1], Signature: [2]</String>
-    <String Id="ProgressTextBindImage">Binding executables</String>
-    <String Id="ProgressTextBindImageTemplate">File: [1]</String>
-    <String Id="ProgressTextCCPSearch">Searching for qualifying products</String>
-    <String Id="ProgressTextCreateFolders">Creating folders</String>
-    <String Id="ProgressTextCreateFoldersTemplate">Folder: [1]</String>
-    <String Id="ProgressTextDeleteServices">Deleting services</String>
-    <String Id="ProgressTextDeleteServicesTemplate">Service: [1]</String>
-    <String Id="ProgressTextDuplicateFiles">Creating duplicate files</String>
-    <String Id="ProgressTextDuplicateFilesTemplate">File: [1],  Directory: [9],  Size: [6]</String>
-    <String Id="ProgressTextFindRelatedProducts">Searching for related applications</String>
-    <String Id="ProgressTextFindRelatedProductsTemplate">Found application: [1]</String>
-    <String Id="ProgressTextInstallODBC">Installing ODBC components</String>
-    <String Id="ProgressTextInstallServices">Installing new services</String>
-    <String Id="ProgressTextInstallServicesTemplate">Service: [2]</String>
-    <String Id="ProgressTextLaunchConditions">Evaluating launch conditions</String>
-    <String Id="ProgressTextMigrateFeatureStates">Migrating feature states from related applications</String>
-    <String Id="ProgressTextMigrateFeatureStatesTemplate">Application: [1]</String>
-    <String Id="ProgressTextMoveFiles">Moving files</String>
-    <String Id="ProgressTextMoveFilesTemplate">File: [1],  Directory: [9],  Size: [6]</String>
-    <String Id="ProgressTextPatchFiles">Patching files</String>
-    <String Id="ProgressTextPatchFilesTemplate">File: [1],  Directory: [2],  Size: [3]</String>
-    <String Id="ProgressTextProcessComponents">Updating component registration</String>
-    <String Id="ProgressTextRegisterComPlus">Registering COM+ Applications and Components</String>
-    <String Id="ProgressTextRegisterComPlusTemplate">AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}</String>
-    <String Id="ProgressTextRegisterFonts">Registering fonts</String>
-    <String Id="ProgressTextRegisterFontsTemplate">Font: [1]</String>
-    <String Id="ProgressTextRegisterProduct">Registering product</String>
-    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
-    <String Id="ProgressTextRegisterTypeLibraries">Registering type libraries</String>
-    <String Id="ProgressTextRegisterTypeLibrariesTemplate">LibID: [1]</String>
-    <String Id="ProgressTextRegisterUser">Registering user</String>
-    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
-    <String Id="ProgressTextRemoveDuplicateFiles">Removing duplicated files</String>
-    <String Id="ProgressTextRemoveDuplicateFilesTemplate">File: [1], Directory: [9]</String>
-    <String Id="ProgressTextRemoveEnvironmentStrings">Updating environment strings</String>
-    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">Name: [1], Value: [2], Action [3]</String>
-    <String Id="ProgressTextRemoveExistingProducts">Removing applications</String>
-    <String Id="ProgressTextRemoveExistingProductsTemplate">Application: [1], Command line: [2]</String>
-    <String Id="ProgressTextRemoveFiles">Removing files</String>
-    <String Id="ProgressTextRemoveFilesTemplate">File: [1], Directory: [9]</String>
-    <String Id="ProgressTextRemoveFolders">Removing folders</String>
-    <String Id="ProgressTextRemoveFoldersTemplate">Folder: [1]</String>
-    <String Id="ProgressTextRemoveIniValues">Removing INI files entries</String>
-    <String Id="ProgressTextRemoveIniValuesTemplate">File: [1],  Section: [2],  Key: [3], Value: [4]</String>
-    <String Id="ProgressTextRemoveODBC">Removing ODBC components</String>
-    <String Id="ProgressTextRemoveRegistryValues">Removing system registry values</String>
-    <String Id="ProgressTextRemoveRegistryValuesTemplate">Key: [1], Name: [2]</String>
-    <String Id="ProgressTextRemoveShortcuts">Removing shortcuts</String>
-    <String Id="ProgressTextRemoveShortcutsTemplate">Shortcut: [1]</String>
-    <String Id="ProgressTextRMCCPSearch">Searching for qualifying products</String>
-    <String Id="ProgressTextSelfRegModules">Registering modules</String>
-    <String Id="ProgressTextSelfRegModulesTemplate">File: [1], Folder: [2]</String>
-    <String Id="ProgressTextSelfUnregModules">Unregistering modules</String>
-    <String Id="ProgressTextSelfUnregModulesTemplate">File: [1], Folder: [2]</String>
-    <String Id="ProgressTextSetODBCFolders">Initializing ODBC directories</String>
-    <String Id="ProgressTextStartServices">Starting services</String>
-    <String Id="ProgressTextStartServicesTemplate">Service: [1]</String>
-    <String Id="ProgressTextStopServices">Stopping services</String>
-    <String Id="ProgressTextStopServicesTemplate">Service: [1]</String>
-    <String Id="ProgressTextUnpublishComponents">Unpublishing Qualified Components</String>
-    <String Id="ProgressTextUnpublishComponentsTemplate">Component ID: [1], Qualifier: [2]</String>
-    <String Id="ProgressTextUnpublishFeatures">Unpublishing Product Features</String>
-    <String Id="ProgressTextUnpublishFeaturesTemplate">Feature: [1]</String>
-    <String Id="ProgressTextUnregisterClassInfo">Unregister Class servers</String>
-    <String Id="ProgressTextUnregisterClassInfoTemplate">Class Id: [1]</String>
-    <String Id="ProgressTextUnregisterComPlus">Unregistering COM+ Applications and Components</String>
-    <String Id="ProgressTextUnregisterComPlusTemplate">AppId: [1]{{, AppType: [2]}}</String>
-    <String Id="ProgressTextUnregisterExtensionInfo">Unregistering extension servers</String>
-    <String Id="ProgressTextUnregisterExtensionInfoTemplate">Extension: [1]</String>
-    <String Id="ProgressTextUnregisterFonts">Unregistering fonts</String>
-    <String Id="ProgressTextUnregisterFontsTemplate">Font: [1]</String>
-    <String Id="ProgressTextUnregisterMIMEInfo">Unregistering MIME info</String>
-    <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME Content Type: [1], Extension: [2]</String>
-    <String Id="ProgressTextUnregisterProgIdInfo">Unregistering program identifiers</String>
-    <String Id="ProgressTextUnregisterProgIdInfoTemplate">ProgId: [1]</String>
-    <String Id="ProgressTextUnregisterTypeLibraries">Unregistering type libraries</String>
-    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">LibID: [1]</String>
-    <String Id="ProgressTextWriteEnvironmentStrings">Updating environment strings</String>
-    <String Id="ProgressTextWriteEnvironmentStringsTemplate">Name: [1], Value: [2], Action [3]</String>
-    <String Id="ProgressTextWriteIniValues">Writing INI files values</String>
-    <String Id="ProgressTextWriteIniValuesTemplate">File: [1],  Section: [2],  Key: [3], Value: [4]</String>
-    <String Id="ProgressTextWriteRegistryValues">Writing system registry values</String>
-    <String Id="ProgressTextWriteRegistryValuesTemplate">Key: [1], Name: [2], Value: [3]</String>
-    <String Id="ProgressTextAdvertise">Advertising application</String>
-    <String Id="ProgressTextGenerateScript">Generating script operations for action:</String>
-    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
-    <String Id="ProgressTextInstallSFPCatalogFile">Installing system catalog</String>
-    <String Id="ProgressTextInstallSFPCatalogFileTemplate">File: [1],  Dependencies: [2]</String>
-    <String Id="ProgressTextMsiPublishAssemblies">Publishing assembly information</String>
-    <String Id="ProgressTextMsiPublishAssembliesTemplate">Application Context:[1], Assembly Name:[2]</String>
-    <String Id="ProgressTextMsiUnpublishAssemblies">Unpublishing assembly information</String>
-    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">Application Context:[1], Assembly Name:[2]</String>
-    <String Id="ProgressTextRollback">Rolling back action:</String>
-    <String Id="ProgressTextRollbackTemplate">[1]</String>
-    <String Id="ProgressTextRollbackCleanup">Removing backup files</String>
-    <String Id="ProgressTextRollbackCleanupTemplate">File: [1]</String>
-    <String Id="ProgressTextUnmoveFiles">Removing moved files</String>
-    <String Id="ProgressTextUnmoveFilesTemplate">File: [1], Directory: [9]</String>
-    <String Id="ProgressTextUnpublishProduct">Unpublishing product information</String>
-
-    <String Id="UITextbytes">bytes</String>
-    <String Id="UITextGB">GB</String>
-    <String Id="UITextKB">KB</String>
-    <String Id="UITextMB">MB</String>
-    <String Id="UITextMenuAbsent">Entire feature will be unavailable</String>
-    <String Id="UITextMenuAdvertise">Feature will be installed when required</String>
-    <String Id="UITextMenuAllCD">Entire feature will be installed to run from CD</String>
-    <String Id="UITextMenuAllLocal">Entire feature will be installed on local hard drive</String>
-    <String Id="UITextMenuAllNetwork">Entire feature will be installed to run from network</String>
-    <String Id="UITextMenuCD">Will be installed to run from CD</String>
-    <String Id="UITextMenuLocal">Will be installed on local hard drive</String>
-    <String Id="UITextMenuNetwork">Will be installed to run from network</String>
-    <String Id="UITextScriptInProgress">Gathering required information...</String>
-    <String Id="UITextSelAbsentAbsent">This feature will remain uninstalled</String>
-    <String Id="UITextSelAbsentAdvertise">This feature will be set to be installed when required</String>
-    <String Id="UITextSelAbsentCD">This feature will be installed to run from CD</String>
-    <String Id="UITextSelAbsentLocal">This feature will be installed on the local hard drive</String>
-    <String Id="UITextSelAbsentNetwork">This feature will be installed to run from the network</String>
-    <String Id="UITextSelAdvertiseAbsent">This feature will become unavailable</String>
-    <String Id="UITextSelAdvertiseAdvertise">Will be installed when required</String>
-    <String Id="UITextSelAdvertiseCD">This feature will be available to run from CD</String>
-    <String Id="UITextSelAdvertiseLocal">This feature will be installed on your local hard drive</String>
-    <String Id="UITextSelAdvertiseNetwork">This feature will be available to run from the network</String>
-    <String Id="UITextSelCDAbsent">This feature will be uninstalled completely, you won't be able to run it from CD</String>
-    <String Id="UITextSelCDAdvertise">This feature will change from run from CD state to set to be installed when required</String>
-    <String Id="UITextSelCDCD">This feature will remain to be run from CD</String>
-    <String Id="UITextSelCDLocal">This feature will change from run from CD state to be installed on the local hard drive</String>
-    <String Id="UITextSelChildCostNeg">This feature frees up [1] on your hard drive.</String>
-    <String Id="UITextSelChildCostPos">This feature requires [1] on your hard drive.</String>
-    <String Id="UITextSelCostPending">Compiling cost for this feature...</String>
-    <String Id="UITextSelLocalAbsent">This feature will be completely removed</String>
-    <String Id="UITextSelLocalAdvertise">This feature will be removed from your local hard drive, but will be set to be installed when required</String>
-    <String Id="UITextSelLocalCD">This feature will be removed from your local hard drive, but will be still available to run from CD</String>
-    <String Id="UITextSelLocalLocal">This feature will remain on you local hard drive</String>
-    <String Id="UITextSelLocalNetwork">This feature will be removed from your local hard drive, but will be still available to run from the network</String>
-    <String Id="UITextSelNetworkAbsent">This feature will be uninstalled completely, you won't be able to run it from the network</String>
-    <String Id="UITextSelNetworkAdvertise">This feature will change from run from network state to set to be installed when required</String>
-    <String Id="UITextSelNetworkLocal">This feature will change from run from network state to be installed on the local hard drive</String>
-    <String Id="UITextSelNetworkNetwork">This feature will remain to be run from the network</String>
-    <String Id="UITextSelParentCostNegNeg">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</String>
-    <String Id="UITextSelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</String>
-    <String Id="UITextSelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</String>
-    <String Id="UITextSelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</String>
-    <String Id="UITextTimeRemaining">Time remaining: {[1] minutes }{[2] seconds}</String>
-    <String Id="UITextVolumeCostAvailable">Available</String>
-    <String Id="UITextVolumeCostDifference">Difference</String>
-    <String Id="UITextVolumeCostRequired">Required</String>
-    <String Id="UITextVolumeCostSize">Disk Size</String>
-    <String Id="UITextVolumeCostVolume">Volume</String>
-
-</WixLocalization>
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="en_US">
+
+    <!--
+            Language Definition Include for VirtualBox WiX script.
+
+            Copyright (C) 2011-2016 Oracle Corporation
+
+            This file is part of VirtualBox Open Source Edition (OSE), as
+            available from http://www.virtualbox.org. This file is free software;
+            you can redistribute it and/or modify it under the terms of the GNU
+            General Public License (GPL) as published by the Free Software
+            Foundation, in version 2 as it comes in the "COPYING" file of the
+            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+    -->
+
+    <String Id="LANG">1033</String>
+    <String Id="LangName">English</String>
+
+    <String Id="ButtonText_No">&No</String>
+    <String Id="ButtonText_Yes">&Yes</String>
+    <String Id="ButtonText_Cancel">&Cancel</String>
+    <String Id="ButtonText_Next">&Next ></String>
+    <String Id="ButtonText_Back">< &Back</String>
+    <String Id="ButtonText_Browse">Br&owse</String>
+    <String Id="ButtonText_OK">O&K</String>
+    <String Id="ButtonText_Check">&Check</String>
+    <String Id="ButtonText_Install">&Install</String>
+    <String Id="ButtonText_Remove">&Remove</String>
+    <String Id="ButtonText_Finish">&Finish</String>
+    <String Id="ButtonText_Repair">&Repair</String>
+    <String Id="ButtonText_Return">&Return</String>
+    <String Id="ButtonText_Retry">Re&try</String>
+    <String Id="ButtonText_Ignore">I&gnore</String>
+    <String Id="ButtonText_Exit">E&xit</String>
+
+    <String Id="InstallModeCustom">Custom</String>
+    <String Id="Setup">Setup</String>
+
+    <!---->
+
+    <String Id="StartMenu_License">License</String>
+    <String Id="StartMenu_UserManual">User manual</String>
+
+    <!---->
+
+    <String Id="VB_App">[ProductName] application.</String>
+    <String Id="VB_USBDriver">[ProductName] USB device drivers for USB device support.</String>
+    <String Id="VB_Network">[ProductName] network device drivers for networking support.</String>
+    <String Id="VB_NetFltDriver">[ProductName] driver for Bridged Networking.</String>
+    <String Id="VB_NetAdpDriver">[ProductName] virtual network adapter driver for Host-Only Networking.</String>
+    <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
+    <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
+
+    <String Id="VB_Python">Python support for VirtualBox.</String>
+
+    <!---->
+
+    <String Id="NeedAdmin">You need to have administrator rights to (un)install [ProductName]! This setup will abort now.</String>
+    <String Id="WrongOS">This application only runs on Windows XP or above.</String>
+    <String Id="Only32Bit">This application only runs on 32-bit Windows systems. Please install the 64-bit version of [ProductName]!</String>
+    <String Id="Only64Bit">This application only runs on 64-bit Windows systems. Please install the 32-bit version of [ProductName]!</String>
+    <String Id="SunFound">An old Sun VirtualBox installation has been found on this machine. Please uninstall this package first and then install [ProductName]!</String>
+    <String Id="InnotekFound">An old innotek VirtualBox installation has been found on this machine. Please uninstall this package first and then install [ProductName]!</String>
+
+    <!---->
+
+    <String Id="CancelDlg_Question">Are you sure you want to cancel [ProductName] installation?</String>
+
+    <!---->
+
+    <String Id="WelcomeDlg_Header">Welcome to the [ProductName] Setup Wizard</String>
+    <String Id="WelcomeDlg_Body">The Setup Wizard will install [ProductName] on your computer. Click Next to continue or Cancel to exit the Setup Wizard.</String>
+
+    <!---->
+
+    <String Id="LicenseAgreementDlg_Header">End-User License Agreement</String>
+    <String Id="LicenseAgreementDlg_Body">Please read the following license agreement carefully.</String>
+    <String Id="LicenseAgreementDlg_Accept">I &accept the terms in the License Agreement</String>
+    <String Id="LicenseAgreementDlg_Decline">I &do not accept the terms in the License Agreement</String>
+
+    <!---->
+
+    <String Id="CheckSerialDlg_Header">Serial Number</String>
+    <String Id="CheckSerialDlg_Body">Please enter your serial number in the fields below. You'll find it on the sticker inside the VirtualBox CD case.</String>
+    <String Id="CheckSerialDlg_Footer">When done entering the serial number, press the "Check" button below.</String>
+
+    <!---->
+
+    <String Id="WrongSerialDlg_Header">Entered serial number was invalid!</String>
+    <String Id="WrongSerialDlg_Desc1">Please go back to enter your serial number again.</String>
+    <String Id="WrongSerialDlg_Desc2">Keep in mind that the serial number must be spelled exactly like printed on the sticker.</String>
+
+    <!---->
+
+    <String Id="WarnSaveStatesDlg_Header">Warning:</String>
+    <String Id="WarnSaveStatesDlg_Header2">Incompatible Saved States!</String>
+    <String Id="WarnSaveStatesDlg_Desc">When upgrading [ProductName], all saved states from your already existing machines won't work anymore! After the installation, you have to discard them manually.</String>
+    <String Id="WarnSaveStatesDlg_Proceed">Proceed with installation now?</String>
+
+    <!---->
+
+    <String Id="WarnTAPDevicesDlg_Header">Host Interfaces</String>
+    <String Id="WarnTAPDevicesDlg_Desc">If you used some host interfaces for your machines in the previous version, you have to recreate them manually after this installation.</String>
+
+    <!---->
+
+    <String Id="NetCfgLocked">The following application should be closed before continuing the install: "[2]"</String>
+
+    <!---->
+
+    <String Id="CustomizeDlg_Location">Location:</String>
+    <String Id="CustomizeDlg_DiskUsage">Disk &Usage</String>
+    <String Id="CustomizeDlg_SelFeatures">Select the way you want features to be installed.</String>
+    <String Id="CustomizeDlg_IconTree">Click on the icons in the tree below to change the way features will be installed.</String>
+    <String Id="CustomizeDlg_CustomSetup">Custom Setup</String>
+    <String Id="CustomizeDlg_SelItemDesc">CustomizeDlgItemDescription-CustomizeDlgItemDescription</String>
+    <String Id="CustomizeDlg_SelItemSize">CustomizeDlgItemSize-CustomizeDlgItemSize</String>
+    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
+
+    <!---->
+
+    <String Id="Customize2Dlg_Header">Customize</String>
+    <String Id="Customize2Dlg_Desc">Please choose from the options below:</String>
+    <String Id="Customize2Dlg_CreateStartMenuEntries">Create start menu entries</String>
+    <String Id="Customize2Dlg_CreateDesktopShortcut">Create a shortcut on the desktop</String>
+    <String Id="Customize2Dlg_CreateQuickLaunch">Create a shortcut in the Quick Launch Bar</String>
+    <String Id="Customize2Dlg_RegisterFileExtensions">Register file associations</String>
+
+    <!---->
+
+    <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
+This is default for older versions of Windows (pre-Vista).</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
+This is default for newer versions of Windows (Vista and newer).</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
+
+    <!---->
+
+    <String Id="WarnDisconNetIfacesDlg_Title">Warning:</String>
+    <String Id="WarnDisconNetIfacesDlg_Title2">Network Interfaces</String>
+    <String Id="WarnDisconNetIfacesDlg_Desc">Installing the [ProductName] Networking feature will reset your network connection and temporarily disconnect you from the network.</String>
+    <String Id="WarnDisconNetIfacesDlg_Question">Proceed with installation now?</String>
+
+    <!---->
+
+    <String Id="DiskCostDlg_SpaceRequired">The disk space required for the installation of the selected features.</String>
+    <String Id="DiskCostDlg_NotEnoughSpace">The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</String>
+    <String Id="DiskCostDlg_SpaceRequirements">Disk Space Requirements</String>
+    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
+
+    <!---->
+
+    <String Id="BrowseDlg_BrowseDestFolder">Browse to the destination folder</String>
+    <String Id="BrowseDlg_ChangeCurFolder">Change current destination folder</String>
+    <String Id="BrowseDlg_UpOneLevelTooltip">Up one level</String>
+    <String Id="BrowseDlg_CreateNewFolderTooltip">Create a new folder</String>
+    <String Id="BrowseDlg_LookIn">&Look in:</String>
+    <String Id="BrowseDlg_FolderName">&Folder name:</String>
+
+    <!---->
+
+    <String Id="VerifyReadyDlg_ReadyToBegin">The Setup Wizard is ready to begin the [InstallMode] installation.</String>
+    <String Id="VerifyReadyDlg_ClickInstall">Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</String>
+    <String Id="VerifyReadyDlg_ReadyToInstall">Ready to Install</String>
+
+    <!---->
+
+    <String Id="ExitDlg_ClickFinish">Click the Finish button to exit the Setup Wizard.</String>
+    <String Id="ExitDlg_InstComplete">[ProductName] installation is complete.</String>
+    <String Id="ExitDlg_StartVBox">Start [ProductName] after installation</String>
+
+    <!---->
+
+    <String Id="FatalErrorDlg_Header">[ProductName] Setup Wizard ended prematurely</String>
+    <String Id="FatalErrorDlg_Desc">[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.</String>
+    <String Id="FatalErrorDlg_Footer">Click the Finish button to exit the Setup Wizard.</String>
+
+    <!---->
+
+    <String Id="FilesInUse_Text">The following applications are using files that need to be updated by this setup. Close these applications and then click &Retry to continue the installation or Exit to exit it.</String>
+    <String Id="FilesInUse_Description">Some files that need to be updated are currently in use.</String>
+    <String Id="FilesInUse_Title">Files in Use</String>
+
+    <!---->
+
+    <String Id="UserExitDlg_Header">[ProductName] Setup Wizard was interrupted</String>
+    <String Id="UserExitDlg_Desc">[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.</String>
+    <String Id="UserExitDlg_Footer">Click the Finish button to exit the Setup Wizard.</String>
+
+    <!---->
+
+    <String Id="ProgressDlg_PleaseWait">Please wait while the Setup Wizard installs [ProductName]. This may take several minutes.</String>
+
+    <!---->
+
+    <String Id="ResumeDlg_Header">Resuming the [ProductName] Setup Wizard</String>
+    <String Id="ResumeDlg_Desc">The Setup Wizard will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the Setup Wizard.</String>
+
+    <!---->
+
+    <String Id="MaintenanceTypeDlg_Header">Modify, Repair or Remove installation</String>
+    <String Id="MaintenanceTypeDlg_SelOption">Select the operation you wish to perform.</String>
+    <String Id="MaintenanceTypeDlg_Repair">Re&pair</String>
+    <String Id="MaintenanceTypeDlg_RepairText">Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.</String>
+    <String Id="MaintenanceTypeDlg_RepairTooltip">Repair installation</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress1">Repairing</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress2">repairs</String>
+    <String Id="MaintenanceTypeDlg_Remove">&Remove</String>
+    <String Id="MaintenanceTypeDlg_RemoveText">Removes [ProductName] from your computer.</String>
+    <String Id="MaintenanceTypeDlg_RemoveTooltip">Remove installation</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress1">Removing</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress2">removes</String>
+
+    <!---->
+
+    <String Id="MaintenanceWelcomeDlg_Header">Welcome to the [ProductName] Setup Wizard</String>
+    <String Id="MaintenanceWelcomeDlg_Desc">The Setup Wizard will allow you to repair your current installation or remove [ProductName] from your computer. Click Next to continue or Cancel to exit the Setup Wizard.</String>
+
+    <!---->
+
+    <String Id="OutOfDiskDlg_InstallationExceeds">Disk space required for the installation exceeds available disk space.</String>
+    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</String>
+    <String Id="OutOfDiskDlg_OutOfDiskSpace">Out of Disk Space</String>
+
+    <!---->
+
+    <String Id="OutOfRbDiskDlg_InstallationExceeds">Disk space required for the installation exceeds available disk space.</String>
+    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).</String>
+    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">Out of Disk Space</String>
+    <String Id="OutOfRbDiskDlg_Desc">Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click Yes if you wish to take the risk to disable rollback.</String>
+
+    <!---->
+
+    <String Id="VerifyRemoveDlg_Header">Remove [ProductName]</String>
+    <String Id="VerifyRemoveDlg_Desc">You have chosen to remove the program from your computer.</String>
+    <String Id="VerifyRemoveDlg_ClickRemove">Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</String>
+
+    <!---->
+
+    <String Id="VerifyRepairDlg_Header">Repair [ProductName]</String>
+    <String Id="VerifyRepairDlg_ReadyToBegin">The Setup Wizard is ready to begin the repair of [ProductName].</String>
+    <String Id="VerifyRepairDlg_ClickRepair">Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.</String>
+
+    <!---->
+
+    <String Id="WaitForCostingDlg_PleaseWait">Please wait while the installer finishes determining your disk space requirements.</String>
+
+    <!---->
+
+    <String Id="MsiRMFilesInUse_Text">The following applications are using files that need to be updated by this setup. You can let Setup Wizard close them and attempt to restart them or reboot the machine later.</String>
+    <String Id="MsiRMFilesInUse_Description">Some files that need to be updated are currently in use.</String>
+    <String Id="MsiRMFilesInUse_Title">Files in Use</String>
+    <String Id="MsiRMFilesInUse_UseRM">&Close the applications and attempt to restart them.</String>
+    <String Id="MsiRMFilesInUse_DontUseRM">&Do not close applications. A reboot will be required.</String>
+
+    <!-- The following strings are internally used by WiX and MSI -->
+    <String Id="Error0">{{Fatal error: }}</String>
+    <String Id="Error1">{{Error [1]. }}</String>
+    <String Id="Error2">Warning [1]. </String>
+    <String Id="Error3" />
+    <String Id="Error4">Info [1]. </String>
+    <String Id="Error5">The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}</String>
+    <String Id="Error6" />
+    <String Id="Error7">{{Disk full: }}</String>
+    <String Id="Error8">Action [Time]: [1]. [2]</String>
+    <String Id="Error9">[ProductName]</String>
+    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
+    <String Id="Error11">Message type: [1], Argument: [2]</String>
+    <String Id="Error12">=== Logging started: [Date]  [Time] ===</String>
+    <String Id="Error13">=== Logging stopped: [Date]  [Time] ===</String>
+    <String Id="Error14">Action start [Time]: [1].</String>
+    <String Id="Error15">Action ended [Time]: [1]. Return value [2].</String>
+    <String Id="Error16">Time remaining: {[1] minutes }{[2] seconds}</String>
+    <String Id="Error17">Out of memory. Shut down other applications before retrying.</String>
+    <String Id="Error18">Installer is no longer responding.</String>
+    <String Id="Error19">Installer stopped prematurely.</String>
+    <String Id="Error20">Please wait while Windows configures [ProductName]</String>
+    <String Id="Error21">Gathering required information...</String>
+    <String Id="Error22">Removing older versions of this application...</String>
+    <String Id="Error23">Preparing to remove older versions of this application...</String>
+    <String Id="Error32">{[ProductName] }Setup completed successfully.</String>
+    <String Id="Error33">{[ProductName] }Setup failed.</String>
+    <String Id="Error1101">Error reading from file: [2]. {{ System error [3].}}  Verify that the file exists and that you can access it.</String>
+    <String Id="Error1301">Cannot create the file '[2]'. A directory with this name already exists. Cancel the install and try installing to a different location.</String>
+    <String Id="Error1302">Please insert the disk: [2]</String>
+    <String Id="Error1303">The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.</String>
+    <String Id="Error1304">Error writing to file: [2]. Verify that you have access to that directory.</String>
+    <String Id="Error1305">Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.</String>
+    <String Id="Error1306">Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry.</String>
+    <String Id="Error1307">There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.</String>
+    <String Id="Error1308">Source file not found: [2]. Verify that the file exists and that you can access it.</String>
+    <String Id="Error1309">Error reading from file: [3]. {{ System error [2].}}  Verify that the file exists and that you can access it.</String>
+    <String Id="Error1310">Error writing to file: [3]. {{ System error [2].}}  Verify that you have access to that directory.</String>
+    <String Id="Error1311">Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.</String>
+    <String Id="Error1312">Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit.</String>
+    <String Id="Error1313">The volume [2] is currently unavailable. Please select another.</String>
+    <String Id="Error1314">The specified path '[2]' is unavailable.</String>
+    <String Id="Error1315">Unable to write to the specified folder: [2].</String>
+    <String Id="Error1316">A network error occurred while attempting to read from the file: [2]</String>
+    <String Id="Error1317">An error occurred while attempting to create the directory: [2]</String>
+    <String Id="Error1318">A network error occurred while attempting to create the directory: [2]</String>
+    <String Id="Error1319">A network error occurred while attempting to open the source file cabinet: [2]</String>
+    <String Id="Error1320">The specified path is too long: [2]</String>
+    <String Id="Error1321">The Installer has insufficient privileges to modify this file: [2].</String>
+    <String Id="Error1322">A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system.</String>
+    <String Id="Error1323">The folder path '[2]' contains words that are not valid in folder paths.</String>
+    <String Id="Error1324">The folder path '[2]' contains an invalid character.</String>
+    <String Id="Error1325">'[2]' is not a valid short file name.</String>
+    <String Id="Error1326">Error getting file security: [3] GetLastString: [2]</String>
+    <String Id="Error1327">Invalid Drive: [2]</String>
+    <String Id="Error1328">Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}}</String>
+    <String Id="Error1329">A file that is required cannot be installed because the cabinet file [2] is not digitally signed. This may indicate that the cabinet file is corrupt.</String>
+    <String Id="Error1330">A file that is required cannot be installed because the cabinet file [2] has an invalid digital signature. This may indicate that the cabinet file is corrupt.{{  Error [3] was returned by WinVerifyTrust.}}</String>
+    <String Id="Error1331">Failed to correctly copy [2] file: CRC error.</String>
+    <String Id="Error1332">Failed to correctly move [2] file: CRC error.</String>
+    <String Id="Error1333">Failed to correctly patch [2] file: CRC error.</String>
+    <String Id="Error1334">The file '[2]' cannot be installed because the file cannot be found in cabinet file '[3]'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</String>
+    <String Id="Error1335">The cabinet file '[2]' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package.</String>
+    <String Id="Error1336">There was an error creating a temporary file that is needed to complete this installation.{{  Folder: [3]. System error code: [2]}}</String>
+    <String Id="Error1401">Could not create key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
+    <String Id="Error1402">Could not open key: [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
+    <String Id="Error1403">Could not delete value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
+    <String Id="Error1404">Could not delete key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
+    <String Id="Error1405">Could not read value [2] from key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel. </String>
+    <String Id="Error1406">Could not write value [2] to key [3]. {{ System error [4].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
+    <String Id="Error1407">Could not get value names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
+    <String Id="Error1408">Could not get sub key names for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
+    <String Id="Error1409">Could not read security information for key [2]. {{ System error [3].}}  Verify that you have sufficient access to that key, or contact your support personnel.</String>
+    <String Id="Error1410">Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.</String>
+    <String Id="Error1500">Another installation is in progress. You must complete that installation before continuing this one.</String>
+    <String Id="Error1501">Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.</String>
+    <String Id="Error1502">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue.</String>
+    <String Id="Error1503">User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product.</String>
+    <String Id="Error1601">Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry.</String>
+    <String Id="Error1602">Are you sure you want to cancel?</String>
+    <String Id="Error1603">The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry.</String>
+    <String Id="Error1604">The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible.</String>
+    <String Id="Error1605">There is not enough disk space on the volume '[2]' to continue the install with recovery enabled. [3] KB are required, but only [4] KB are available. Click Ignore to continue the install without saving recovery information, click Retry to check for available space again, or click Cancel to quit the installation.</String>
+    <String Id="Error1606">Could not access network location [2].</String>
+    <String Id="Error1607">The following applications should be closed before continuing the install:</String>
+    <String Id="Error1608">Could not find any previously installed compliant products on the machine for installing this product.</String>
+    <String Id="Error1609">An error occurred while applying security settings. [2] is not a valid user or group. This could be a problem with the package, or a problem connecting to a domain controller on the network. Check your network connection and click Retry, or Cancel to end the install. {{Unable to locate the user's SID, system error [3]}}</String>
+    <String Id="Error1701">The key [2] is not valid. Verify that you entered the correct key.</String>
+    <String Id="Error1702">The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later.</String>
+    <String Id="Error1703">You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later.</String>
+    <String Id="Error1704">An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes?</String>
+    <String Id="Error1705">A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes?</String>
+    <String Id="Error1706">An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'.</String>
+    <String Id="Error1707">Installation completed successfully.</String>
+    <String Id="Error1708">Installation failed.</String>
+    <String Id="Error1709">Product: [2] -- [3]</String>
+    <String Id="Error1710">You may either restore your computer to its previous state or continue the install later. Would you like to restore?</String>
+    <String Id="Error1711">An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install.</String>
+    <String Id="Error1712">One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.</String>
+    <String Id="Error1713">[2] cannot install one of its required products. Contact your technical support group. {{System String: [3].}}</String>
+    <String Id="Error1714">The older version of [2] cannot be removed. Contact your technical support group. {{System String [3].}}</String>
+    <String Id="Error1715">Installed [2]</String>
+    <String Id="Error1716">Configured [2]</String>
+    <String Id="Error1717">Removed [2]</String>
+    <String Id="Error1718">File [2] was rejected by digital signature policy.</String>
+    <String Id="Error1719">The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.</String>
+    <String Id="Error1720">There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. {{Custom action [2] script error [3], [4]: [5] Line [6], Column [7], [8] }}</String>
+    <String Id="Error1721">There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action: [2], location: [3], command: [4] }}</String>
+    <String Id="Error1722">There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. {{Action [2], location: [3], command: [4] }}</String>
+    <String Id="Error1723">There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action [2], entry: [3], library: [4] }}</String>
+    <String Id="Error1724">Removal completed successfully.</String>
+    <String Id="Error1725">Removal failed.</String>
+    <String Id="Error1726">Advertisement completed successfully.</String>
+    <String Id="Error1727">Advertisement failed.</String>
+    <String Id="Error1728">Configuration completed successfully.</String>
+    <String Id="Error1729">Configuration failed.</String>
+    <String Id="Error1730">You must be an Administrator to remove this application. To remove this application, you can log on as an Administrator, or contact your technical support group for assistance.</String>
+    <String Id="Error1801">The path [2] is not valid. Please specify a valid path.</String>
+    <String Id="Error1802">Out of memory. Shut down other applications before retrying.</String>
+    <String Id="Error1803">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.</String>
+    <String Id="Error1804">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume.</String>
+    <String Id="Error1805">The folder [2] does not exist. Please enter a path to an existing folder.</String>
+    <String Id="Error1806">You have insufficient privileges to read this folder.</String>
+    <String Id="Error1807">A valid destination folder for the install could not be determined.</String>
+    <String Id="Error1901">Error attempting to read from the source install database: [2].</String>
+    <String Id="Error1902">Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.</String>
+    <String Id="Error1903">Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.</String>
+    <String Id="Error1904">Module [2] failed to register. HRESULT [3]. Contact your support personnel.</String>
+    <String Id="Error1905">Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.</String>
+    <String Id="Error1906">Failed to cache package [2]. Error: [3]. Contact your support personnel.</String>
+    <String Id="Error1907">Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.</String>
+    <String Id="Error1908">Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.</String>
+    <String Id="Error1909">Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.</String>
+    <String Id="Error1910">Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.</String>
+    <String Id="Error1911">Could not register type library for file [2]. Contact your support personnel.</String>
+    <String Id="Error1912">Could not unregister type library for file [2]. Contact your support personnel.</String>
+    <String Id="Error1913">Could not update the ini file [2][3]. Verify that the file exists and that you can access it.</String>
+    <String Id="Error1914">Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].</String>
+    <String Id="Error1915">Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</String>
+    <String Id="Error1916">Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</String>
+    <String Id="Error1917">Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.</String>
+    <String Id="Error1918">Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</String>
+    <String Id="Error1919">Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</String>
+    <String Id="Error1920">Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services.</String>
+    <String Id="Error1921">Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services.</String>
+    <String Id="Error1922">Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services.</String>
+    <String Id="Error1923">Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services.</String>
+    <String Id="Error1924">Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables.</String>
+    <String Id="Error1925">You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.</String>
+    <String Id="Error1926">Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file.</String>
+    <String Id="Error1927">Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000.</String>
+    <String Id="Error1928">Error registering COM+ Application. Contact your support personnel for more information.</String>
+    <String Id="Error1929">Error unregistering COM+ Application. Contact your support personnel for more information.</String>
+    <String Id="Error1930">The description for service '[2]' ([3]) could not be changed.</String>
+    <String Id="Error1931">The Windows Installer service cannot update the system file [2] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [3], OS Protected version: [4]}}</String>
+    <String Id="Error1932">The Windows Installer service cannot update the protected Windows file [2]. {{Package version: [3], OS Protected version: [4], SFP Error: [5]}}</String>
+    <String Id="Error1933">The Windows Installer service cannot update one or more protected Windows files. {{SFP String: [2]. List of protected files:\r\n[3]}}</String>
+    <String Id="Error1934">User installations are disabled via policy on the machine.</String>
+    <String Id="Error1935">An error occured during the installation of assembly component [2]. HRESULT: [3]. {{assembly interface: [4], function: [5], assembly name: [6]}}</String>
+
+    <!-- Own / special errors -->
+    <String Id="Error25001">The application "[2]" needs to be closed for the installation to continue.</String>
+
+    <String Id="ProgressTextInstallValidate">Validating install</String>
+    <String Id="ProgressTextInstallFiles">Copying new files</String>
+    <String Id="ProgressTextInstallFilesTemplate">File: [1],  Directory: [9],  Size: [6]</String>
+    <String Id="ProgressTextInstallAdminPackage">Copying network install files</String>
+    <String Id="ProgressTextInstallAdminPackageTemplate">File: [1], Directory: [9], Size: [6]</String>
+    <String Id="ProgressTextFileCost">Computing space requirements</String>
+    <String Id="ProgressTextCostInitialize">Computing space requirements</String>
+    <String Id="ProgressTextCostFinalize">Computing space requirements</String>
+    <String Id="ProgressTextCreateShortcuts">Creating shortcuts</String>
+    <String Id="ProgressTextCreateShortcutsTemplate">Shortcut: [1]</String>
+    <String Id="ProgressTextPublishComponents">Publishing Qualified Components</String>
+    <String Id="ProgressTextPublishComponentsTemplate">Component ID: [1], Qualifier: [2]</String>
+    <String Id="ProgressTextPublishFeatures">Publishing Product Features</String>
+    <String Id="ProgressTextPublishFeaturesTemplate">Feature: [1]</String>
+    <String Id="ProgressTextPublishProduct">Publishing product information</String>
+    <String Id="ProgressTextRegisterClassInfo">Registering Class servers</String>
+    <String Id="ProgressTextRegisterClassInfoTemplate">Class Id: [1]</String>
+    <String Id="ProgressTextRegisterExtensionInfo">Registering extension servers</String>
+    <String Id="ProgressTextRegisterExtensionInfoTemplate">Extension: [1]</String>
+    <String Id="ProgressTextRegisterMIMEInfo">Registering MIME info</String>
+    <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME Content Type: [1], Extension: [2]</String>
+    <String Id="ProgressTextRegisterProgIdInfo">Registering program identifiers</String>
+    <String Id="ProgressTextRegisterProgIdInfoTemplate">ProgId: [1]</String>
+    <String Id="ProgressTextAllocateRegistrySpace">Allocating registry space</String>
+    <String Id="ProgressTextAllocateRegistrySpaceTemplate">Free space: [1]</String>
+    <String Id="ProgressTextAppSearch">Searching for installed applications</String>
+    <String Id="ProgressTextAppSearchTemplate">Property: [1], Signature: [2]</String>
+    <String Id="ProgressTextBindImage">Binding executables</String>
+    <String Id="ProgressTextBindImageTemplate">File: [1]</String>
+    <String Id="ProgressTextCCPSearch">Searching for qualifying products</String>
+    <String Id="ProgressTextCreateFolders">Creating folders</String>
+    <String Id="ProgressTextCreateFoldersTemplate">Folder: [1]</String>
+    <String Id="ProgressTextDeleteServices">Deleting services</String>
+    <String Id="ProgressTextDeleteServicesTemplate">Service: [1]</String>
+    <String Id="ProgressTextDuplicateFiles">Creating duplicate files</String>
+    <String Id="ProgressTextDuplicateFilesTemplate">File: [1],  Directory: [9],  Size: [6]</String>
+    <String Id="ProgressTextFindRelatedProducts">Searching for related applications</String>
+    <String Id="ProgressTextFindRelatedProductsTemplate">Found application: [1]</String>
+    <String Id="ProgressTextInstallODBC">Installing ODBC components</String>
+    <String Id="ProgressTextInstallServices">Installing new services</String>
+    <String Id="ProgressTextInstallServicesTemplate">Service: [2]</String>
+    <String Id="ProgressTextLaunchConditions">Evaluating launch conditions</String>
+    <String Id="ProgressTextMigrateFeatureStates">Migrating feature states from related applications</String>
+    <String Id="ProgressTextMigrateFeatureStatesTemplate">Application: [1]</String>
+    <String Id="ProgressTextMoveFiles">Moving files</String>
+    <String Id="ProgressTextMoveFilesTemplate">File: [1],  Directory: [9],  Size: [6]</String>
+    <String Id="ProgressTextPatchFiles">Patching files</String>
+    <String Id="ProgressTextPatchFilesTemplate">File: [1],  Directory: [2],  Size: [3]</String>
+    <String Id="ProgressTextProcessComponents">Updating component registration</String>
+    <String Id="ProgressTextRegisterComPlus">Registering COM+ Applications and Components</String>
+    <String Id="ProgressTextRegisterComPlusTemplate">AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}</String>
+    <String Id="ProgressTextRegisterFonts">Registering fonts</String>
+    <String Id="ProgressTextRegisterFontsTemplate">Font: [1]</String>
+    <String Id="ProgressTextRegisterProduct">Registering product</String>
+    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
+    <String Id="ProgressTextRegisterTypeLibraries">Registering type libraries</String>
+    <String Id="ProgressTextRegisterTypeLibrariesTemplate">LibID: [1]</String>
+    <String Id="ProgressTextRegisterUser">Registering user</String>
+    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
+    <String Id="ProgressTextRemoveDuplicateFiles">Removing duplicated files</String>
+    <String Id="ProgressTextRemoveDuplicateFilesTemplate">File: [1], Directory: [9]</String>
+    <String Id="ProgressTextRemoveEnvironmentStrings">Updating environment strings</String>
+    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">Name: [1], Value: [2], Action [3]</String>
+    <String Id="ProgressTextRemoveExistingProducts">Removing applications</String>
+    <String Id="ProgressTextRemoveExistingProductsTemplate">Application: [1], Command line: [2]</String>
+    <String Id="ProgressTextRemoveFiles">Removing files</String>
+    <String Id="ProgressTextRemoveFilesTemplate">File: [1], Directory: [9]</String>
+    <String Id="ProgressTextRemoveFolders">Removing folders</String>
+    <String Id="ProgressTextRemoveFoldersTemplate">Folder: [1]</String>
+    <String Id="ProgressTextRemoveIniValues">Removing INI files entries</String>
+    <String Id="ProgressTextRemoveIniValuesTemplate">File: [1],  Section: [2],  Key: [3], Value: [4]</String>
+    <String Id="ProgressTextRemoveODBC">Removing ODBC components</String>
+    <String Id="ProgressTextRemoveRegistryValues">Removing system registry values</String>
+    <String Id="ProgressTextRemoveRegistryValuesTemplate">Key: [1], Name: [2]</String>
+    <String Id="ProgressTextRemoveShortcuts">Removing shortcuts</String>
+    <String Id="ProgressTextRemoveShortcutsTemplate">Shortcut: [1]</String>
+    <String Id="ProgressTextRMCCPSearch">Searching for qualifying products</String>
+    <String Id="ProgressTextSelfRegModules">Registering modules</String>
+    <String Id="ProgressTextSelfRegModulesTemplate">File: [1], Folder: [2]</String>
+    <String Id="ProgressTextSelfUnregModules">Unregistering modules</String>
+    <String Id="ProgressTextSelfUnregModulesTemplate">File: [1], Folder: [2]</String>
+    <String Id="ProgressTextSetODBCFolders">Initializing ODBC directories</String>
+    <String Id="ProgressTextStartServices">Starting services</String>
+    <String Id="ProgressTextStartServicesTemplate">Service: [1]</String>
+    <String Id="ProgressTextStopServices">Stopping services</String>
+    <String Id="ProgressTextStopServicesTemplate">Service: [1]</String>
+    <String Id="ProgressTextUnpublishComponents">Unpublishing Qualified Components</String>
+    <String Id="ProgressTextUnpublishComponentsTemplate">Component ID: [1], Qualifier: [2]</String>
+    <String Id="ProgressTextUnpublishFeatures">Unpublishing Product Features</String>
+    <String Id="ProgressTextUnpublishFeaturesTemplate">Feature: [1]</String>
+    <String Id="ProgressTextUnregisterClassInfo">Unregister Class servers</String>
+    <String Id="ProgressTextUnregisterClassInfoTemplate">Class Id: [1]</String>
+    <String Id="ProgressTextUnregisterComPlus">Unregistering COM+ Applications and Components</String>
+    <String Id="ProgressTextUnregisterComPlusTemplate">AppId: [1]{{, AppType: [2]}}</String>
+    <String Id="ProgressTextUnregisterExtensionInfo">Unregistering extension servers</String>
+    <String Id="ProgressTextUnregisterExtensionInfoTemplate">Extension: [1]</String>
+    <String Id="ProgressTextUnregisterFonts">Unregistering fonts</String>
+    <String Id="ProgressTextUnregisterFontsTemplate">Font: [1]</String>
+    <String Id="ProgressTextUnregisterMIMEInfo">Unregistering MIME info</String>
+    <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME Content Type: [1], Extension: [2]</String>
+    <String Id="ProgressTextUnregisterProgIdInfo">Unregistering program identifiers</String>
+    <String Id="ProgressTextUnregisterProgIdInfoTemplate">ProgId: [1]</String>
+    <String Id="ProgressTextUnregisterTypeLibraries">Unregistering type libraries</String>
+    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">LibID: [1]</String>
+    <String Id="ProgressTextWriteEnvironmentStrings">Updating environment strings</String>
+    <String Id="ProgressTextWriteEnvironmentStringsTemplate">Name: [1], Value: [2], Action [3]</String>
+    <String Id="ProgressTextWriteIniValues">Writing INI files values</String>
+    <String Id="ProgressTextWriteIniValuesTemplate">File: [1],  Section: [2],  Key: [3], Value: [4]</String>
+    <String Id="ProgressTextWriteRegistryValues">Writing system registry values</String>
+    <String Id="ProgressTextWriteRegistryValuesTemplate">Key: [1], Name: [2], Value: [3]</String>
+    <String Id="ProgressTextAdvertise">Advertising application</String>
+    <String Id="ProgressTextGenerateScript">Generating script operations for action:</String>
+    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
+    <String Id="ProgressTextInstallSFPCatalogFile">Installing system catalog</String>
+    <String Id="ProgressTextInstallSFPCatalogFileTemplate">File: [1],  Dependencies: [2]</String>
+    <String Id="ProgressTextMsiPublishAssemblies">Publishing assembly information</String>
+    <String Id="ProgressTextMsiPublishAssembliesTemplate">Application Context:[1], Assembly Name:[2]</String>
+    <String Id="ProgressTextMsiUnpublishAssemblies">Unpublishing assembly information</String>
+    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">Application Context:[1], Assembly Name:[2]</String>
+    <String Id="ProgressTextRollback">Rolling back action:</String>
+    <String Id="ProgressTextRollbackTemplate">[1]</String>
+    <String Id="ProgressTextRollbackCleanup">Removing backup files</String>
+    <String Id="ProgressTextRollbackCleanupTemplate">File: [1]</String>
+    <String Id="ProgressTextUnmoveFiles">Removing moved files</String>
+    <String Id="ProgressTextUnmoveFilesTemplate">File: [1], Directory: [9]</String>
+    <String Id="ProgressTextUnpublishProduct">Unpublishing product information</String>
+
+    <String Id="UITextbytes">bytes</String>
+    <String Id="UITextGB">GB</String>
+    <String Id="UITextKB">KB</String>
+    <String Id="UITextMB">MB</String>
+    <String Id="UITextMenuAbsent">Entire feature will be unavailable</String>
+    <String Id="UITextMenuAdvertise">Feature will be installed when required</String>
+    <String Id="UITextMenuAllCD">Entire feature will be installed to run from CD</String>
+    <String Id="UITextMenuAllLocal">Entire feature will be installed on local hard drive</String>
+    <String Id="UITextMenuAllNetwork">Entire feature will be installed to run from network</String>
+    <String Id="UITextMenuCD">Will be installed to run from CD</String>
+    <String Id="UITextMenuLocal">Will be installed on local hard drive</String>
+    <String Id="UITextMenuNetwork">Will be installed to run from network</String>
+    <String Id="UITextScriptInProgress">Gathering required information...</String>
+    <String Id="UITextSelAbsentAbsent">This feature will remain uninstalled</String>
+    <String Id="UITextSelAbsentAdvertise">This feature will be set to be installed when required</String>
+    <String Id="UITextSelAbsentCD">This feature will be installed to run from CD</String>
+    <String Id="UITextSelAbsentLocal">This feature will be installed on the local hard drive</String>
+    <String Id="UITextSelAbsentNetwork">This feature will be installed to run from the network</String>
+    <String Id="UITextSelAdvertiseAbsent">This feature will become unavailable</String>
+    <String Id="UITextSelAdvertiseAdvertise">Will be installed when required</String>
+    <String Id="UITextSelAdvertiseCD">This feature will be available to run from CD</String>
+    <String Id="UITextSelAdvertiseLocal">This feature will be installed on your local hard drive</String>
+    <String Id="UITextSelAdvertiseNetwork">This feature will be available to run from the network</String>
+    <String Id="UITextSelCDAbsent">This feature will be uninstalled completely, you won't be able to run it from CD</String>
+    <String Id="UITextSelCDAdvertise">This feature will change from run from CD state to set to be installed when required</String>
+    <String Id="UITextSelCDCD">This feature will remain to be run from CD</String>
+    <String Id="UITextSelCDLocal">This feature will change from run from CD state to be installed on the local hard drive</String>
+    <String Id="UITextSelChildCostNeg">This feature frees up [1] on your hard drive.</String>
+    <String Id="UITextSelChildCostPos">This feature requires [1] on your hard drive.</String>
+    <String Id="UITextSelCostPending">Compiling cost for this feature...</String>
+    <String Id="UITextSelLocalAbsent">This feature will be completely removed</String>
+    <String Id="UITextSelLocalAdvertise">This feature will be removed from your local hard drive, but will be set to be installed when required</String>
+    <String Id="UITextSelLocalCD">This feature will be removed from your local hard drive, but will be still available to run from CD</String>
+    <String Id="UITextSelLocalLocal">This feature will remain on you local hard drive</String>
+    <String Id="UITextSelLocalNetwork">This feature will be removed from your local hard drive, but will be still available to run from the network</String>
+    <String Id="UITextSelNetworkAbsent">This feature will be uninstalled completely, you won't be able to run it from the network</String>
+    <String Id="UITextSelNetworkAdvertise">This feature will change from run from network state to set to be installed when required</String>
+    <String Id="UITextSelNetworkLocal">This feature will change from run from network state to be installed on the local hard drive</String>
+    <String Id="UITextSelNetworkNetwork">This feature will remain to be run from the network</String>
+    <String Id="UITextSelParentCostNegNeg">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</String>
+    <String Id="UITextSelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</String>
+    <String Id="UITextSelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</String>
+    <String Id="UITextSelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</String>
+    <String Id="UITextTimeRemaining">Time remaining: {[1] minutes }{[2] seconds}</String>
+    <String Id="UITextVolumeCostAvailable">Available</String>
+    <String Id="UITextVolumeCostDifference">Difference</String>
+    <String Id="UITextVolumeCostRequired">Required</String>
+    <String Id="UITextVolumeCostSize">Disk Size</String>
+    <String Id="UITextVolumeCostVolume">Volume</String>
+
+</WixLocalization>
diff --git a/src/VBox/Installer/win/NLS/fr_FR.wxl b/src/VBox/Installer/win/NLS/fr_FR.wxl
index bbdd78f..a4ed56b 100644
--- a/src/VBox/Installer/win/NLS/fr_FR.wxl
+++ b/src/VBox/Installer/win/NLS/fr_FR.wxl
@@ -1,598 +1,598 @@
-<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="fr_FR">
-
-    <!--
-            Language Definition Include for VirtualBox WiX script.
-
-            Copyright (C) 2011-2016 Oracle Corporation
-
-            This file is part of VirtualBox Open Source Edition (OSE), as
-            available from http://www.virtualbox.org. This file is free software;
-            you can redistribute it and/or modify it under the terms of the GNU
-            General Public License (GPL) as published by the Free Software
-            Foundation, in version 2 as it comes in the "COPYING" file of the
-            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-    -->
-
-    <String Id="LANG">1036</String>
-    <String Id="LangName">Francais</String>
-
-    <String Id="ButtonText_No">&Non</String>
-    <String Id="ButtonText_Yes">&Oui</String>
-    <String Id="ButtonText_Cancel">&Annuler</String>
-    <String Id="ButtonText_Next">&Suivant ></String>
-    <String Id="ButtonText_Back">< &Précédent</String>
-    <String Id="ButtonText_Browse">Parco&urir</String>
-    <String Id="ButtonText_OK">O&K</String>
-    <String Id="ButtonText_Check">&Vérifier</String>
-    <String Id="ButtonText_Install">&Installer</String>
-    <String Id="ButtonText_Remove">&Enlever</String>
-    <String Id="ButtonText_Finish">&Terminer</String>
-    <String Id="ButtonText_Repair">&Réparer</String>
-    <String Id="ButtonText_Return">&Précédent</String>
-    <String Id="ButtonText_Retry">&Réessayer</String>
-    <String Id="ButtonText_Ignore">&Ignorer</String>
-    <String Id="ButtonText_Exit">Q&uitter</String>
-
-    <String Id="InstallModeCustom">Personalisé</String>
-    <String Id="Setup">Installation</String>
-
-    <!---->
-
-    <String Id="StartMenu_License">Licence</String>
-    <String Id="StartMenu_UserManual">Manuel d'utilisation</String>
-
-    <!---->
-
-    <String Id="VB_App">Application [ProductName].</String>
-    <String Id="VB_USBDriver">Pilotes USB [ProductName] pour le support de périphériques USB.</String>
-    <String Id="VB_Network">Pilotes [ProductName] pour le support réseau.</String>
-    <String Id="VB_NetFltDriver">Pilote [ProductName] pour l'accès réseau par pont.</String>
-    <String Id="VB_NetAdpDriver">Pilote de carte réseau virtuelle [ProductName] pour l'accès réseau privé hôte.</String>
-    <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
-    <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
-
-  <String Id="VB_Python">Python support for VirtualBox.</String>
-
-    <!---->
-
-    <String Id="NeedAdmin">Vous ne pouvez pas (dés)installer [ProductName] sans droits d'administrateur! Ce programme d'installation terminera maintenant.</String>
-    <String Id="WrongOS">Cette application nécéssite Windows XP ou plus récent.</String>
-    <String Id="Only32Bit">Cette application ne marche que sur des systèmes Windows 32-bit. Veuillez installer la version 64-bit de [ProductName]!</String>
-    <String Id="Only64Bit">Cette application ne marche que sur des systèmes Windows 64-bit. Veuillez installer la version 32-bit de [ProductName]!</String>
-    <String Id="InnotekFound">Vous avez une ancienne installation de innotek VirtualBox sur cette machine. Il vous faudra la désinstaller avant de pouvoir installer [ProductName].</String>
-
-    <!---->
-
-    <String Id="CancelDlg_Question">Voulez vous vraiment abondonner l'installation de [ProductName]?</String>
-
-    <!---->
-
-    <String Id="WelcomeDlg_Header">Bienvenue dans l'assistent d'installation de [ProductName]</String>
-    <String Id="WelcomeDlg_Body">Cet assistent installera [ProductName] sur votre ordinateur. Appuyez sur Suivant pour continuer ou sur Annuler pour abondonner l'installation.</String>
-
-    <!---->
-
-    <String Id="LicenseAgreementDlg_Header">Contrat de licence de logiciel</String>
-    <String Id="LicenseAgreementDlg_Body">Veuillez lire attentivement le Contrat de licence suivant.</String>
-    <String Id="LicenseAgreementDlg_Accept">J'&accepte les termes du Contrat de licence</String>
-    <String Id="LicenseAgreementDlg_Decline">Je &n'accepte pas les termes du Contrat de licence</String>
-
-    <!---->
-
-    <String Id="CheckSerialDlg_Header">Numéro de série</String>
-    <String Id="CheckSerialDlg_Body">Veulliez entrer votre numéro de série dans les champs ci-dessous. Vous le trouverez sur l'autocollant à l'intérieur du boîtier du CD de VirtualBox.</String>
-    <String Id="CheckSerialDlg_Footer">Quand vous avez fini d'entrer le numéro de série, appuyez sur le bouton Vérifier ci-dessous.</String>
-
-    <!---->
-
-    <String Id="WrongSerialDlg_Header">Le numéro de série que vous avez entré n'est pas valide!</String>
-    <String Id="WrongSerialDlg_Desc1">Veulliez retourner pour réentrer votre numéro de série.</String>
-    <String Id="WrongSerialDlg_Desc2">N'oubliez pas que le numéro de série doit être entré exactement comme il est imprimé sur l'autocollant.</String>
-
-    <!---->
-
-    <String Id="WarnSaveStatesDlg_Header">Avertissement:</String>
-    <String Id="WarnSaveStatesDlg_Header2">Etat sauvegardé incompatible!</String>
-    <String Id="WarnSaveStatesDlg_Desc">Quand vous mettez à jour [ProductName], les états sauvegardés de vos machines existants ne fonctionneront plus! Après l'installation, il vous faudra les rejeter manuellement.</String>
-    <String Id="WarnSaveStatesDlg_Proceed">Poursuivre avec l'installation?</String>
-
-    <!---->
-
-    <String Id="WarnTAPDevicesDlg_Header">Interfaces réseau hôte</String>
-    <String Id="WarnTAPDevicesDlg_Desc">Si vous avez utilisé des interfaces réseau hôte sur votre système avec la version précédente, il vous faudra les recréer manuellement après cette installation.</String>
-
-    <!---->
-
-    <String Id="CustomizeDlg_Location">Location:</String>
-    <String Id="CustomizeDlg_DiskUsage">&Espace disque</String>
-    <String Id="CustomizeDlg_SelFeatures">Choisissez les fonctionnalités que vous souhaiter installer.</String>
-    <String Id="CustomizeDlg_IconTree">Cliquez sur les icônes dans l'arborescence ci-dessous pour choisir les fonctionnalités qui seront installés.</String>
-    <String Id="CustomizeDlg_CustomSetup">Installation personalisée</String>
-    <String Id="CustomizeDlg_SelItemDesc">Description de l'entrée sélectionnée en plusieurs lignes.</String>
-    <String Id="CustomizeDlg_SelItemSize">La taille de l'entrée sélectionnée.</String>
-    <String Id="CustomizeDlg_SelItemPath"><Chemin de l'entrée sélectionnée></String>
-
-    <!---->
-
-    <String Id="Customize2Dlg_Header">Personaliser</String>
-    <String Id="Customize2Dlg_Desc">Veuillez choisir une des options suivantes:</String>
-    <String Id="Customize2Dlg_CreateStartMenuEntries">Créer des éléments dans le menu démarrer</String>
-    <String Id="Customize2Dlg_CreateDesktopShortcut">Créer un raccourci sur le bureau</String>
-    <String Id="Customize2Dlg_CreateQuickLaunch">Créer un raccourci dans la barre de lancement rapide</String>
-    <String Id="Customize2Dlg_RegisterFileExtensions">Inscription des associations de fichiers</String>
-
-    <!---->
-
-    <String Id="SelectionNetworkTypeDlg_CommonDescription">Veuillez choisir le type de pilotes réseau à utiliser :</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
-This is default for older versions of Windows (pre-Vista).</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
-This is default for newer versions of Windows (Vista and newer).</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Utiliser pilotes réseau NDIS5.</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Utiliser pilotes réseau NDIS6.</String>
-
-    <!---->
-
-    <String Id="WarnDisconNetIfacesDlg_Title">Avertissement</String>
-    <String Id="WarnDisconNetIfacesDlg_Title2">Interfaces réseau</String>
-    <String Id="WarnDisconNetIfacesDlg_Desc">L'installation de la fonctionnalité réseau de [ProductName] réinitialisera votre connection réseau et vous déconnectera temporairement du réseau.</String>
-    <String Id="WarnDisconNetIfacesDlg_Question">Désirez-vous poursuivre l'installation maintenant?</String>
-
-    <!---->
-
-    <String Id="DiskCostDlg_SpaceRequired">L'espace disque requise pour l'installation des fonctionnalités sélectionnées.</String>
-    <String Id="DiskCostDlg_NotEnoughSpace">Les supports mises en relief n'ont pas assez d'espace disque disponible pour les fonctionnalités sélectionnées. Vous pouvez soit supprimer des fichiers sur les supports, soit choisir d'installer moins de fonctionnalités sur les supports locals, soit choisir des supports differents pour l'installation.</String>
-    <String Id="DiskCostDlg_SpaceRequirements">Espace disque requise</String>
-    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
-
-    <!---->
-
-    <String Id="BrowseDlg_BrowseDestFolder">Choisissez un dossier pour l'installation</String>
-    <String Id="BrowseDlg_ChangeCurFolder">Changer le dossier d'installation</String>
-    <String Id="BrowseDlg_UpOneLevelTooltip">Dossier parent</String>
-    <String Id="BrowseDlg_CreateNewFolderTooltip">Créer un nouveau dossier</String>
-    <String Id="BrowseDlg_LookIn">&Chercher dans:</String>
-    <String Id="BrowseDlg_FolderName">&Nom du dossier:</String>
-
-    <!---->
-
-    <String Id="VerifyReadyDlg_ReadyToBegin">L'assistent est prêt à commencer l'installation [InstallMode].</String>
-    <String Id="VerifyReadyDlg_ClickInstall">Appuyez sur Installer pour commencer l'installation. Si vous désirez revoir ou modifier vos paramètres d'installation, appuyez sur Précédent. Appuyez sur Annuler pour abondoner l'installation.</String>
-    <String Id="VerifyReadyDlg_ReadyToInstall">Prêt à installer</String>
-
-    <!---->
-
-    <String Id="ExitDlg_ClickFinish">Veuillez appuyez sur Terminer pour quitter l'assistent d'installation.</String>
-    <String Id="ExitDlg_InstComplete">L'installation de [ProductName] est terminé.</String>
-    <String Id="ExitDlg_StartVBox">Démarrer [ProductName] après l'installation</String>
-
-    <!---->
-
-    <String Id="FatalErrorDlg_Header">L'assistent d'installation [ProductName] a terminé anormalement</String>
-    <String Id="FatalErrorDlg_Desc">L'installation de [ProductName] a été terminé en raison d'une erreur. Votre système n'a pas été modifié. Pour installer ce programme plus tard, veuillez relancer l'assistent.</String>
-    <String Id="FatalErrorDlg_Footer">Appuyez sur Terminer pour quitter l'assistent d'installation.</String>
-
-    <!---->
-
-    <String Id="FilesInUse_Text">Les applications suivantes utilisent des fichiers qui doivent être mis à jour dans le cadre de cette installation. Fermez ces applications puis cliquez sur Réessayer pour poursuivre l'installation ou sur Quitter pour quitter l'installation.</String>
-    <String Id="FilesInUse_Description">Certains fichiers devant être mis à jour sont en cours d'utilisation.</String>
-    <String Id="FilesInUse_Title">Fichiers en cours d'utilisation</String>
-
-    <!---->
-
-    <String Id="UserExitDlg_Header">L'assistent d'installation [ProductName] a été interrompu</String>
-    <String Id="UserExitDlg_Desc">L'installation de [ProductName] a été interrompu. Votre système n'a pas été modifié. Pour installer ce programme ultérieurement, veuillez relancer l'assistant.</String>
-    <String Id="UserExitDlg_Footer">Appuyez sur Terminer pour quitter l'assistent d'installation.</String>
-
-    <!---->
-
-    <String Id="ProgressDlg_PleaseWait">Veuillez patienter pendant que l'assistent installe [ProductName]. Ceci peut durer plusieurs minutes.</String>
-
-    <!---->
-
-    <String Id="ResumeDlg_Header">Continuant l'assistent d'installation [ProductName]</String>
-    <String Id="ResumeDlg_Desc">L'assistent d'installation completera l'installation de [ProductName] sur votre ordinateur. Appuyez sur Installer pour continuer ou sur Annuler pour abondonner l'assistent.</String>
-
-    <!---->
-
-    <String Id="MaintenanceTypeDlg_Header">Modifier, réparer ou supprimer une installation</String>
-    <String Id="MaintenanceTypeDlg_SelOption">Choisissez l'opération que vous désirer effectuer.</String>
-    <String Id="MaintenanceTypeDlg_Repair">Ré&parer</String>
-    <String Id="MaintenanceTypeDlg_RepairText">Répare des erreurs dans l'état de l'installation la plus récente - répare des fichiers, racourcis et entrées dans la base de registre manquants ou corrompus.</String>
-    <String Id="MaintenanceTypeDlg_RepairTooltip">Reparer installation</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress1">Repare</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress2">repare</String>
-    <String Id="MaintenanceTypeDlg_Remove">&Désinstaller</String>
-    <String Id="MaintenanceTypeDlg_RemoveText">Supprime [ProductName] de votre ordinateur.</String>
-    <String Id="MaintenanceTypeDlg_RemoveTooltip">Suprimer installation</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress1">Suprime</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress2">suprime</String>
-
-    <!---->
-
-    <String Id="MaintenanceWelcomeDlg_Header">Bienvenue dans l'assistent d'installation [ProductName]</String>
-    <String Id="MaintenanceWelcomeDlg_Desc">L'assistent d'installation vous permettra de réparer ou de supprimer de votre ordinateur l'installation actuelle de [ProductName]. Appuyez sur Suivant pour continuer ou sur Annuler pour abondonner l'assistant.</String>
-
-    <!---->
-
-    <String Id="OutOfDiskDlg_InstallationExceeds">L'espace disque disponible est insuffisant pour l'installation.</String>
-    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">Les supports mises en relief n'ont pas assez d'espace disque disponible pour les fonctionnalités sélectionnées. Vous pouvez soit supprimer des fichiers sur les supports, soit choisir d'installer moins de fonctionnalités sur les supports locals, soit choisir des supports différents pour l'installation.</String>
-    <String Id="OutOfDiskDlg_OutOfDiskSpace">Espace disque insuffisant</String>
-
-    <!---->
-
-    <String Id="OutOfRbDiskDlg_InstallationExceeds">L'espace disque disponible est insuffisant pour l'installation.</String>
-    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">Les supports mises en relief n'ont pas assez d'espace disque disponible pour les fonctionnalités sélectionnées. Vous pouvez soit supprimer des fichiers sur les supports, soit choisir d'installer moins de fonctionnalités sur les supports locals, soit choisir des supports différents pour l'installation.</String>
-    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">Espace disque épuisé</String>
-    <String Id="OutOfRbDiskDlg_Desc">En alternative, vous pouvez choisir de désactiver la fonctionnalité «rollback», qui permet de réstaurer l'état d'origine de votre ordinateur en cas d'interruption de l'installation. Appuyez sur Oui si vous désirer courir le risque de désactiver le rollback.</String>
-
-    <!---->
-
-    <String Id="VerifyRemoveDlg_Header">Supprimer [ProductName]</String>
-    <String Id="VerifyRemoveDlg_Desc">Vous avez choisi de supprimer l'application de votre ordinateur.</String>
-    <String Id="VerifyRemoveDlg_ClickRemove">Appuyez sur Désinstaller pour supprimer [ProductName] de votre ordinateur. Si vous désirez revoir ou modifier vos paramètres d'installation, appuyez sur Précédent. Appuyez sur Annuler pour quitter l'assistent.</String>
-
-    <!---->
-
-    <String Id="VerifyRepairDlg_Header">Réparer [ProductName]</String>
-    <String Id="VerifyRepairDlg_ReadyToBegin">L'assistent d'installation est prêt à commencer la réparation de [ProductName].</String>
-    <String Id="VerifyRepairDlg_ClickRepair">Appuyez sur Réparer pour réparer l'installation de [ProductName]. Si vous désirez revoir ou modifier vos paramètres d'installation, appuyez sur Précédent. Appuyez sur Annuler pour quitter l'assistent.</String>
-
-    <!---->
-
-    <String Id="WaitForCostingDlg_PleaseWait">Veuillez patienter pendant que le programme d'installation découvre l'espace disque requis.</String>
-
-    <!---->
-
-    <String Id="MsiRMFilesInUse_Text">Les applications suivantes utilisent des fichiers qui doivent être mis à jour dans le cadre de cette installation. Vous pouvez laisser l'assistant d'installation les fermer puis essayer de les redémarrer ou redémarrer l'ordinateur ultérieurement.</String>
-    <String Id="MsiRMFilesInUse_Description">Certains fichiers devant être mis à jour sont en cours d'utilisation.</String>
-    <String Id="MsiRMFilesInUse_Title">Fichiers en cours d'utilisation</String>
-    <String Id="MsiRMFilesInUse_UseRM">&Fermer les applications et essayer de les redémarrer.</String>
-    <String Id="MsiRMFilesInUse_DontUseRM">&Ne pas fermer les applications. Un redémarrage sera nécessaire.</String>
-
-    <!-- The following strings are internally used by WiX and MSI -->
-    <String Id="Error0">{{Erreur irrécupérable : }}</String>
-    <String Id="Error1">{{Erreur [1]. }}</String>
-    <String Id="Error2">Avertissement [1]. </String>
-    <String Id="Error4">Informations [1]. </String>
-    <String Id="Error5">Le programme d'installation a rencontré une erreur inattendue lors de l'installation de ce package. Il s'agit peut-être d'un problème lié au package. Le code d'erreur est [1]. {{Les arguments sont : [2], [3], [4]}}</String>
-    <String Id="Error7">{{Disque plein : }}</String>
-    <String Id="Error8">Action [Time] : [1]. [2]</String>
-    <String Id="Error9">[ProductName]</String>
-    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
-    <String Id="Error11">Type de message : [1], Argument : [2]</String>
-    <String Id="Error12">=== Début de l'écriture dans le journal : [Date]  [Time] ===</String>
-    <String Id="Error13">=== Fin de l'écriture dans le journal : [Date]  [Time] ===</String>
-    <String Id="Error14">Début de l'action [Time] : [1].</String>
-    <String Id="Error15">Fin de l'action [Time] : [1]. Valeur renvoyée : [2].</String>
-    <String Id="Error16">Durée restante : {[1] minute(s) }{[2] secondes}</String>
-    <String Id="Error17">Mémoire insuffisante. Fermez les autres applications avant de recommencer.</String>
-    <String Id="Error18">Le programme d'installation ne répond plus.</String>
-    <String Id="Error19">L'exécution du programme d'installation a pris fin prématurément.</String>
-    <String Id="Error20">Veuillez patienter pendant que Windows configure le logiciel "[ProductName]"</String>
-    <String Id="Error21">Collecte des informations nécessaires en cours...</String>
-    <String Id="Error22">Suppression des versions précédentes de cette application...</String>
-    <String Id="Error23">Préparation de la suppression des versions précédentes de cette application...</String>
-    <String Id="Error32">L'installation du logiciel "[ProductName]" s'est terminée correctement.</String>
-    <String Id="Error33">Échec de l'installation du logiciel "[ProductName]".</String>
-    <String Id="Error1101">Erreur lors de la lecture du fichier [2]. {{ Erreur système [3].}} Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1301">Impossible de créer le fichier '[2]'. Un répertoire portant ce nom existe déjà. Annulez l'installation et essayez de l'effectuer à un autre emplacement.</String>
-    <String Id="Error1302">Insérez le disque : [2]</String>
-    <String Id="Error1303">Le programme d'installation ne dispose pas des privilèges suffisants pour accéder à ce répertoire : [2]. Impossible de poursuivre l'installation. Ouvrez une session en tant qu'administrateur ou contactez votre administrateur système.</String>
-    <String Id="Error1304">Erreur lors de l'écriture dans le fichier : [2]. Vérifiez que vous êtes autorisé à accéder à ce répertoire.</String>
-    <String Id="Error1305">Erreur lors de la lecture du fichier [2]. {{ Erreur système [3].}} Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1306">Une autre application dispose d'un droit d'accès exclusif au fichier '[2]'. Fermez toutes les autres applications, puis cliquez sur Réessayer.</String>
-    <String Id="Error1307">L'espace disque est insuffisant pour installer ce fichier : [2]. Libérez de l'espace disque et cliquez sur Réessayer ou cliquez sur Annuler pour quitter.</String>
-    <String Id="Error1308">Fichier source introuvable : [2]. Vérifiez que le fichier existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1309">Erreur lors de la lecture du fichier [3].{{ Erreur système [2].}} Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1310">Erreur lors de l'écriture dans le fichier : [3]. {{ Erreur système [2].}} Vérifiez que vous êtes autorisé à accéder à ce répertoire.</String>
-    <String Id="Error1311">Fichier source introuvable {{(cabinet)}} : [2]. Vérifiez que le fichier existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1312">Impossible de créer le répertoire '[2]'. Un fichier portant ce nom existe déjà. Renommez le fichier et cliquez sur Réessayer ou cliquez sur Annuler pour quitter.</String>
-    <String Id="Error1313">Le volume [2] est actuellement indisponible. Veuillez en sélectionner un autre.</String>
-    <String Id="Error1314">Le chemin d'accès spécifié '[2]' n'est pas disponible.</String>
-    <String Id="Error1315">Impossible d'écrire dans le dossier spécifié : [2].</String>
-    <String Id="Error1316">Une erreur réseau s'est produite lors de la tentative de lecture à partir du fichier : [2]</String>
-    <String Id="Error1317">Erreur lors de la tentative de création du répertoire : [2]</String>
-    <String Id="Error1318">Une erreur réseau s'est produite lors de la tentative de création du répertoire : [2]</String>
-    <String Id="Error1319">Une erreur réseau s'est produite lors de la tentative d'ouverture du fichier CAB du fichier source : [2].</String>
-    <String Id="Error1320">Le chemin d'accès spécifié est trop long : [2]</String>
-    <String Id="Error1321">Le programme d'installation ne dispose pas des privilèges nécessaires pour modifier ce fichier : [2].</String>
-    <String Id="Error1322">Une partie du chemin d'accès au dossier '[2]' n'est pas valide. Il est peut-être vide ou dépasse la longueur autorisée par le système.</String>
-    <String Id="Error1323">Le chemin d'accès au dossier '[2]' contient des mots non valides.</String>
-    <String Id="Error1324">Le chemin d'accès au dossier '[2]' contient un caractère non valide.</String>
-    <String Id="Error1325">Le nom de fichier court '[2]' n'est pas valide.</String>
-    <String Id="Error1326">Erreur lors de l'obtention des informations sur la sécurité du fichier [3] GetLastError : [2]</String>
-    <String Id="Error1327">Lecteur non valide : [2]</String>
-    <String Id="Error1328">Erreur lors de l'application du correctif au fichier [2]. Celui-ci a probablement été mis à jour par d'autres moyens et ne peut plus être modifié par ce correctif. Pour plus d'informations, consultez le fournisseur de votre correctif. {{Erreur système : [3]}}</String>
-    <String Id="Error1329">Un fichier requis ne peut pas être installé, car le fichier CAB [2] n'est pas signé numériquement. Cela indique peut-être que le fichier CAB est endommagé.</String>
-    <String Id="Error1330">Un fichier requis ne peut pas être installé, car le fichier CAB [2] contient une signature numérique non valide. Cela indique peut-être que le fichier est endommagé.{{  L'erreur [3] a été renvoyée par WinVerifyTrust.}}</String>
-    <String Id="Error1331">Échec de la copie du fichier [2] : erreur CRC.</String>
-    <String Id="Error1332">Échec du déplacement du fichier [2] : erreur CRC.</String>
-    <String Id="Error1333">Échec de la modification du fichier [2] : erreur CRC.</String>
-    <String Id="Error1334">Impossible d'installer le fichier '[2]', car il est introuvable dans le fichier CAB '[3]'. Cela indique peut-être une erreur au niveau du réseau, une erreur de lecture à partir du CD-ROM ou un problème inhérent au package.</String>
-    <String Id="Error1335">Le fichier CAB '[2]' requis pour l'installation est endommagé et ne peut pas être utilisé. Cela indique peut-être une erreur au niveau du réseau, une erreur de lecture à partir du CD-ROM ou un problème inhérent au package.</String>
-    <String Id="Error1336">Une erreur s'est produite lors de la création d'un fichier temporaire nécessaire à l'installation.{{  Dossier : [3]. Code d'erreur système : [2]}}</String>
-    <String Id="Error1401">Impossible de créer la clé : [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique. </String>
-    <String Id="Error1402">Impossible d'ouvrir la clé [2]. Erreur système [3]. Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique. </String>
-    <String Id="Error1403">Impossible de supprimer la valeur [2] de la clé [3]. {{ Erreur système [4].}} Vérifiez que vous disposez des droits suffisants pour cette clé ou contactez votre service de support technique. </String>
-    <String Id="Error1404">Impossible de supprimer la clé [2]. Erreur système [3]. Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique. </String>
-    <String Id="Error1405">Impossible de lire la valeur [2] de la clé [3]. {{ Erreur système [4].}} Vérifiez que vous disposez des droits suffisants pour cette clé ou contactez votre service de support technique. </String>
-    <String Id="Error1406">Impossible d'écrire la valeur [2] dans la clé [3].{{ Erreur système [4].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
-    <String Id="Error1407">Impossible d'obtenir le nom des valeurs de la clé [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
-    <String Id="Error1408">Impossible d'obtenir le nom des sous-clés de la clé [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
-    <String Id="Error1409">Impossible de lire les informations sur la sécurité de la clé [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
-    <String Id="Error1410">Impossible d'augmenter l'espace disponible dans le Registre. [2] Ko d'espace doivent être libres dans le Registre pour permettre l'installation de cette application.</String>
-    <String Id="Error1500">Une autre installation est en cours d'exécution. Vous devez la terminer avant de poursuivre cette installation.</String>
-    <String Id="Error1501">Erreur lors de l'accès aux données protégées. Vérifiez que Windows Installer est correctement configuré, puis recommencez l'installation.</String>
-    <String Id="Error1502">L'utilisateur '[2]' a déjà lancé l'installation du produit '[3]'. Il devra réexécuter cette installation avant de pouvoir utiliser le produit. L'installation en cours va se poursuivre.</String>
-    <String Id="Error1503">L'utilisateur '[2]' a déjà lancé l'installation du produit '[3]'. Il devra réexécuter cette installation avant de pouvoir utiliser le produit.</String>
-    <String Id="Error1601">Espace disque insuffisant -- Volume : '[2]' ; espace nécessaire : [3] Ko ; espace disponible : [4] Ko. Libérez de l'espace sur le disque, puis recommencez.</String>
-    <String Id="Error1602">Voulez-vous vraiment annuler ?</String>
-    <String Id="Error1603">Le fichier [2][3] est en cours d'utilisation{ par l'opération suivante : nom : [4], identifiant : [5], titre de la fenêtre : '[6]'}. Fermez cette application et réessayez.</String>
-    <String Id="Error1604">Le produit '[2]' est déjà installé. Impossible d'installer ce produit, car il est incompatible avec celui déjà installé.</String>
-    <String Id="Error1605">Espace insuffisant sur le volume '[2]' pour continuer l'installation avec l'option de récupération. [3] Ko sont requis, alors que seuls [4] Ko sont disponibles. Cliquez sur Ignorer pour poursuivre l'installation sans enregistrer les informations de récupération, cliquez sur Recommencer pour revérifier l'espace libre, ou cliquez sur Annuler pour arrêter.</String>
-    <String Id="Error1606">Impossible d'accéder à l'emplacement réseau [2].</String>
-    <String Id="Error1607">Fermez les applications suivantes avant de poursuivre l'installation :</String>
-    <String Id="Error1608">Impossible de trouver un produit compatible précédemment installé permettant l'installation de ce produit sur cet ordinateur.</String>
-    <String Id="Error1609">Erreur lors de l'application des paramètres de sécurité. [2] n'est pas un utilisateur ou un groupe valide. Cela indique peut-être une erreur au niveau du package ou de la connexion à un contrôleur de domaine sur le réseau. Vérifiez votre connexion réseau et cliquez sur Réessayer ou cliquez sur Annuler pour mettre fin à l'installation. {{Impossible de localiser l'ID de sécurité de l'utilisateur, erreur système [3]}}</String>
-    <String Id="Error1701">La clé [2] n'est pas valide. Vérifiez que vous avez entré la clé correcte.</String>
-    <String Id="Error1702">Le programme d'installation doit redémarrer votre système avant que la configuration de [2] puisse continuer. Cliquez sur Oui pour redémarrer maintenant ou sur Non si vous voulez redémarrer ultérieurement.</String>
-    <String Id="Error1703">Vous devez redémarrer votre système pour que les modifications apportées à la configuration de [2] prennent effet. Cliquez sur Oui pour redémarrer maintenant, ou sur Non si vous voulez redémarrer manuellement ultérieurement.</String>
-    <String Id="Error1704">L'installation de [2] est interrompue. Vous devez annuler les modifications apportées par cette installation pour continuer. Voulez-vous annuler les modifications ?</String>
-    <String Id="Error1705">Une installation de ce produit est déjà en cours. Vous devez annuler les modifications apportées par cette installation pour continuer. Voulez-vous annuler les modifications ?</String>
-    <String Id="Error1706">Aucun package d'installation pour le produit [2] n'a été trouvé. Recommencez l'installation en utilisant une copie valide du package d'installation '[3]'.</String>
-    <String Id="Error1707">Installation terminée.</String>
-    <String Id="Error1708">Échec de l'installation.</String>
-    <String Id="Error1709">Produit : [2] -- [3]</String>
-    <String Id="Error1710">Vous pouvez restaurer l'état antérieur de votre ordinateur ou poursuivre l'installation ultérieurement. Voulez-vous restaurer votre ordinateur ?</String>
-    <String Id="Error1711">Une erreur s'est produite lors de l'écriture des informations concernant l'installation sur le disque. Vérifiez que l'espace disponible sur le disque est suffisant, puis cliquez sur Réessayer ou cliquez sur Annuler pour mettre fin à l'installation.</String>
-    <String Id="Error1712">Impossible de trouver un ou plusieurs des fichiers requis pour restaurer l'état antérieur de votre ordinateur. Impossible de procéder à la restauration.</String>
-    <String Id="Error1713">[2] ne peut pas installer un des produits nécessaires. Contactez votre service de support technique. {{Erreur système : [3].}}</String>
-    <String Id="Error1714">Impossible de supprimer la version antérieure de [2]. Contactez votre service de support technique. {{Erreur système [3].}}</String>
-    <String Id="Error1715">[2] installé</String>
-    <String Id="Error1716">[2] configuré</String>
-    <String Id="Error1717">[2] supprimé</String>
-    <String Id="Error1718">Le fichier [2] a été rejeté par la stratégie de signature numérique.</String>
-    <String Id="Error1719">Impossible d'accéder au service Windows Installer. Ceci peut se produire si Windows est en mode Sans échec, ou si le programme d'installation de Windows n'est pas correctement installé. Contactez votre service de support technique pour assistance.</String>
-    <String Id="Error1720">Il y a un problème au niveau du package Windows Installer. Un script requis pour cette installation n'a pas pu être exécuté. Contactez votre service de support technique ou l'éditeur du package. {{Action personnalisée [2] erreur de script [3], [4] : [5] ligne [6], colonne [7], [8] }}</String>
-    <String Id="Error1721">Il y a un problème au niveau du package Windows Installer. Un programme requis pour cette installation n'a pas pu être exécuté. Contactez votre service de support technique ou l'éditeur du package. {Action : [2], emplacement : [3], commande : [4] }}</String>
-    <String Id="Error1722">Il y a un problème au niveau du package Windows Installer. Un programme nécessaire à l'installation ne s'est pas correctement exécuté. Contactez votre service de support technique ou l'éditeur du package. {{Action [2], emplacement : [3], commande : [4] }}</String>
-    <String Id="Error1723">Il y a un problème au niveau du package Windows Installer. Une DLL requise pour cette installation n'a pas pu être exécutée. Contactez votre service de support technique ou l'éditeur du package. {{Action [2], entrée : [3], bibliothèque : [4] }}</String>
-    <String Id="Error1724">Suppression effectuée.</String>
-    <String Id="Error1725">Échec de la suppression.</String>
-    <String Id="Error1726">Annonce effectuée.</String>
-    <String Id="Error1727">Échec de l'annonce.</String>
-    <String Id="Error1728">Configuration effectuée.</String>
-    <String Id="Error1729">Échec de la configuration.</String>
-    <String Id="Error1730">Vous devez être administrateur pour supprimer cette application. Pour la supprimer, ouvrez une session en tant qu'administrateur ou contactez votre service de support technique pour assistance.</String>
-    <String Id="Error1731">Le package d'installation source pour le produit [2] n'est pas synchronisé avec le package client. Réessayez l'installation en utilisant une copie valide du package d'installation '[3]'.</String>
-    <String Id="Error1732">Vous devez redémarrer l'ordinateur afin de terminer l'installation du produit [2]. D'autres utilisateurs sont actuellement connectés à cet ordinateur et le redémarrer pourrait causer la perte de leurs données. Voulez-vous redémarrer maintenant ?</String>
-    <String Id="Error1801">Le chemin d'accès [2] n'est pas valide. Spécifiez un chemin d'accès valide.</String>
-    <String Id="Error1802">Mémoire insuffisante. Fermez les autres applications avant de recommencer.</String>
-    <String Id="Error1803">Le lecteur [2] est vide. Insérez un disque et cliquez sur Réessayer, ou cliquez sur Annuler pour revenir au volume sélectionné précédemment.</String>
-    <String Id="Error1804">Le lecteur [2] est vide. Insérez un disque et cliquez sur Recommencer, ou cliquez sur Annuler pour revenir dans la boîte de dialogue Sélection de l'emplacement et sélectionner un autre volume.</String>
-    <String Id="Error1805">Le dossier [2] n'existe pas. Entrez un chemin d'accès à un dossier existant.</String>
-    <String Id="Error1806">Vous ne disposez pas des privilèges nécessaires pour lire le contenu de ce dossier.</String>
-    <String Id="Error1807">Impossible de trouver un dossier de destination valide pour l'installation.</String>
-    <String Id="Error1901">Une erreur s'est produite lors de la tentative de lecture de la base de données d'installation source : [2].</String>
-    <String Id="Error1902">Planification du redémarrage : Le fichier [2] est renommé [3]. Pour terminer l'opération, votre système doit être redémarré.</String>
-    <String Id="Error1903">Planification du redémarrage : Suppression du fichier [2]. Pour terminer l'opération, votre système doit être redémarré.</String>
-    <String Id="Error1904">Impossible d'inscrire le module [2]. HRESULT [3]. Contactez votre service de support technique.</String>
-    <String Id="Error1905">Impossible d'annuler l'inscription du module [2]. HRESULT [3]. Contactez votre service de support technique.</String>
-    <String Id="Error1906">Impossible de placer le package [2] dans le cache. Erreur : [3]. Contactez votre Support technique.</String>
-    <String Id="Error1907">Impossible d'inscrire la police [2]. Vérifiez que vous disposez des autorisations nécessaires pour l'installation des polices et que le système prend en charge cette police.</String>
-    <String Id="Error1908">Impossible d'annuler l'inscription de la police [2]. Vérifiez que vous disposez des autorisations requises pour supprimer des polices.</String>
-    <String Id="Error1909">Impossible de créer le raccourci [2]. Vérifiez que le dossier de destination existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1910">Impossible de supprimer le raccourci [2]. Vérifiez que le fichier de raccourcis existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1911">Impossible d'inscrire la bibliothèque de types pour le fichier [2]. Contactez votre service de support technique.</String>
-    <String Id="Error1912">Impossible d'annuler l'inscription de la bibliothèque de types pour le fichier [2]. Contactez votre service de support technique.</String>
-    <String Id="Error1913">Impossible de mettre à jour le fichier ini [2][3]. Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1914">Impossible de planifier le remplacement du fichier [3] par le fichier [2] au redémarrage. Vérifiez que vous êtes autorisé à accéder en écriture au fichier [3].</String>
-    <String Id="Error1915">Erreur lors de la suppression du gestionnaire de pilotes ODBC. Erreur ODBC [2] : [3]. Contactez votre Support technique.</String>
-    <String Id="Error1916">Erreur lors de l'installation du gestionnaire de pilotes ODBC. Erreur ODBC [2] : [3]. Contactez votre Support technique.</String>
-    <String Id="Error1917">Erreur lors de la suppression du pilote ODBC [4]. Erreur ODBC [2] : [3]. Vérifiez que vous disposez des privilèges nécessaires pour supprimer des pilotes ODBC.</String>
-    <String Id="Error1918">Erreur lors de l'installation du pilote ODBC [4]. Erreur ODBC [2] : [3]. Vérifiez que le fichier [4] existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1919">Erreur lors de la configuration de la source de données ODBC [4]. Erreur ODBC [2] : [3]. Vérifiez que le fichier [4] existe et que vous êtes autorisé à y accéder.</String>
-    <String Id="Error1920">Échec du démarrage du service '[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour démarrer les services système.</String>
-    <String Id="Error1921">Impossible d'arrêter le service '[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour arrêter les services système.</String>
-    <String Id="Error1922">Impossible de supprimer le service '[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour supprimer les services système.</String>
-    <String Id="Error1923">Impossible d'installer le service'[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour installer des services système.</String>
-    <String Id="Error1924">Impossible de mettre à jour la variable d'environnement '[2]'. Vérifiez que vous disposez des privilèges nécessaires pour modifier les variables d'environnement.</String>
-    <String Id="Error1925">Vous ne disposez pas des privilèges nécessaires pour exécuter cette installation pour tous les utilisateurs de cet ordinateur. Ouvrez une session en tant qu'administrateur, puis relancez cette installation.</String>
-    <String Id="Error1926">Impossible de définir la sécurité de fichier pour le fichier '[3]'. Erreur : [2]. Vérifiez que vous disposez des privilèges nécessaires pour modifier les autorisations de sécurité pour ce fichier.</String>
-    <String Id="Error1927">Les services de composants (COM+ 1.0) ne sont pas installés sur cet ordinateur. Cette installation nécessite les services de composants afin de se terminer correctement. Les services de composants sont disponibles sur Windows 2000.</String>
-    <String Id="Error1928">Erreur lors de l'inscription de l'application COM+. Contactez votre service de support technique pour plus d'informations.</String>
-    <String Id="Error1929">Erreur lors de l'annulation de l'inscription de l'application COM+. Contactez votre service de support technique pour plus d'informations.</String>
-    <String Id="Error1930">La description du service '[2]' ([3]) n'a pas pu être modifiée.</String>
-    <String Id="Error1931">Le service Windows Installer ne peut pas mettre à jour le fichier système [2], car le fichier est protégé par Windows. Vous devrez peut-être mettre à jour votre système d'exploitation pour que ce programme fonctionne correctement. {{Version du package : [3], version protégée du système d'exploitation : [4]}}</String>
-    <String Id="Error1932">Le service Windows Installer ne peut pas mettre à jour le fichier Windows protégé [2]. {{Version du package : [3], Version protégée du système d'exploitation : [4], Erreur SFP : [5]}}</String>
-    <String Id="Error1933">Le service Windows Installer ne peut pas mettre à jour certains fichiers Windows protégés. {{Erreur SFP : [2]. Liste des fichiers protégés :\r\n[3]}}</String>
-    <String Id="Error1934">Les installations utilisateurs sont désactivées par la stratégie en vigueur sur cet ordinateur.</String>
-    <String Id="Error1935">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. Reportez-vous à l'aide et au support pour plus d'informations. HRESULT : [3]. {{interface d'assembly : [4], fonction : [5], composant : [2]}}</String>
-    <String Id="Error1936">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. L'assembly n'a pas un nom fort et n'est pas signé avec une longueur de clé minimale. HRESULT : [3]. {{interface de l'assembly : [4], fonction : [5], composant: [2]}}</String>
-    <String Id="Error1937">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. La signature ou le catalogue n'a pas pu être vérifié ou n'est pas valide. HRESULT : [3]. {{interface d'assembly : [4], fonction : [5], composant : [2]}}</String>
-    <String Id="Error1938">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. Un ou plusieurs des modules de l'assembly sont introuvables. HRESULT : [3]. {{interface d'assembly : [4], fonction : [5], composant : [2]}}</String>
-
-    <!-- Own / special errors -->
-    <String Id="Error25001">L'application "[2]" doit être fermée pour que l'installation puisse continuer.</String>
-
-    <String Id="ProgressTextInstallValidate">Validation de l'installation</String>
-    <String Id="ProgressTextInstallFiles">Copie des nouveaux fichiers</String>
-    <String Id="ProgressTextInstallFilesTemplate">Fichier : [1],  Répertoire : [9],  Taille : [6]</String>
-    <String Id="ProgressTextInstallAdminPackage">Copie des fichiers d'installation réseau</String>
-    <String Id="ProgressTextInstallAdminPackageTemplate">Fichier : [1], Répertoire : [9], Taille : [6]</String>
-    <String Id="ProgressTextFileCost">Calcul de l'espace nécessaire</String>
-    <String Id="ProgressTextCostInitialize">Calcul de l'espace nécessaire</String>
-    <String Id="ProgressTextCostFinalize">Calcul de l'espace nécessaire</String>
-    <String Id="ProgressTextCreateShortcuts">Création des raccourcis</String>
-    <String Id="ProgressTextCreateShortcutsTemplate">Raccourci : [1]</String>
-    <String Id="ProgressTextPublishComponents">Publication des composants qualifiés</String>
-    <String Id="ProgressTextPublishComponentsTemplate">Identificateur du composant : [1], qualificateur : [2]</String>
-    <String Id="ProgressTextPublishFeatures">Publication des composants du produit</String>
-    <String Id="ProgressTextPublishFeaturesTemplate">Composant : [1]</String>
-    <String Id="ProgressTextPublishProduct">Publication des informations sur le produit</String>
-    <String Id="ProgressTextRegisterClassInfo">Inscription des serveurs de classes</String>
-    <String Id="ProgressTextRegisterClassInfoTemplate">Identificateur de classe : [1]</String>
-    <String Id="ProgressTextRegisterExtensionInfo">Inscription des extensions serveur</String>
-    <String Id="ProgressTextRegisterExtensionInfoTemplate">Extension : [1]</String>
-    <String Id="ProgressTextRegisterMIMEInfo">Inscription des informations MIME</String>
-    <String Id="ProgressTextRegisterMIMEInfoTemplate">Type de contenu MIME : [1], extension : [2]</String>
-    <String Id="ProgressTextRegisterProgIdInfo">Inscription des identificateurs de programmes</String>
-    <String Id="ProgressTextRegisterProgIdInfoTemplate">Identificateur du programme : [1]</String>
-    <String Id="ProgressTextAllocateRegistrySpace">Allocation de l'espace du Registre</String>
-    <String Id="ProgressTextAllocateRegistrySpaceTemplate">Espace libre : [1]</String>
-    <String Id="ProgressTextAppSearch">Recherche des applications déjà installées</String>
-    <String Id="ProgressTextAppSearchTemplate">Propriété : [1], Signature : [2]</String>
-    <String Id="ProgressTextBindImage">Liaison des exécutables</String>
-    <String Id="ProgressTextBindImageTemplate">Fichier : [1]</String>
-    <String Id="ProgressTextCCPSearch">Recherche des produits éligibles</String>
-    <String Id="ProgressTextCreateFolders">Création des dossiers</String>
-    <String Id="ProgressTextCreateFoldersTemplate">Dossier : [1]</String>
-    <String Id="ProgressTextDeleteServices">Suppression des services</String>
-    <String Id="ProgressTextDeleteServicesTemplate">Service : [1]</String>
-    <String Id="ProgressTextDuplicateFiles">Création de fichiers dupliqués</String>
-    <String Id="ProgressTextDuplicateFilesTemplate">Fichier : [1],  Répertoire : [9],  Taille : [6]</String>
-    <String Id="ProgressTextFindRelatedProducts">Recherche des applications associées</String>
-    <String Id="ProgressTextFindRelatedProductsTemplate">Application trouvée : [1]</String>
-    <String Id="ProgressTextInstallODBC">Installation des composants ODBC</String>
-    <String Id="ProgressTextInstallServices">Installation des nouveaux services</String>
-    <String Id="ProgressTextInstallServicesTemplate">Service : [2]</String>
-    <String Id="ProgressTextLaunchConditions">Évaluation des conditions de lancement</String>
-    <String Id="ProgressTextMigrateFeatureStates">Migration de l'état des composants à partir des applications associées</String>
-    <String Id="ProgressTextMigrateFeatureStatesTemplate">Application : [1]</String>
-    <String Id="ProgressTextMoveFiles">Déplacement des fichiers</String>
-    <String Id="ProgressTextMoveFilesTemplate">Fichier : [1],  Répertoire : [9],  Taille : [6]</String>
-    <String Id="ProgressTextPatchFiles">Fichiers de correction</String>
-    <String Id="ProgressTextPatchFilesTemplate">Fichier : [1],  Répertoire : [2],  Taille : [3]</String>
-    <String Id="ProgressTextProcessComponents">Mise à jour de l'inscription des composants</String>
-    <String Id="ProgressTextRegisterComPlus">Inscription des composants et applications COM+</String>
-    <String Id="ProgressTextRegisterComPlusTemplate">Id application : [1]{{, Type application : [2], Utilisateurs : [3], RSN : [4]}}</String>
-    <String Id="ProgressTextRegisterFonts">Inscription des polices</String>
-    <String Id="ProgressTextRegisterFontsTemplate">Police : [1]</String>
-    <String Id="ProgressTextRegisterProduct">Inscription du produit</String>
-    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
-    <String Id="ProgressTextRegisterTypeLibraries">Inscription des bibliothèques de type</String>
-    <String Id="ProgressTextRegisterTypeLibrariesTemplate">Identificateur de la bibliothèque : [1]</String>
-    <String Id="ProgressTextRegisterUser">Inscription de l'utilisateur</String>
-    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
-    <String Id="ProgressTextRemoveDuplicateFiles">Suppression des fichiers dupliqués</String>
-    <String Id="ProgressTextRemoveDuplicateFilesTemplate">Fichier : [1], Répertoire : [9]</String>
-    <String Id="ProgressTextRemoveEnvironmentStrings">Mise à jour des chaînes d'environnement</String>
-    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">Nom : [1], valeur : [2], action : [3]</String>
-    <String Id="ProgressTextRemoveExistingProducts">Suppression des applications</String>
-    <String Id="ProgressTextRemoveExistingProductsTemplate">Application : [1], Ligne de commande : [2]</String>
-    <String Id="ProgressTextRemoveFiles">Suppression des fichiers</String>
-    <String Id="ProgressTextRemoveFilesTemplate">Fichier : [1], Répertoire : [9]</String>
-    <String Id="ProgressTextRemoveFolders">Suppression des dossiers</String>
-    <String Id="ProgressTextRemoveFoldersTemplate">Dossier : [1]</String>
-    <String Id="ProgressTextRemoveIniValues">Suppression des entrées des fichiers INI</String>
-    <String Id="ProgressTextRemoveIniValuesTemplate">Fichier : [1] ; section : [2] ; clé : [3] ; valeur : [4]</String>
-    <String Id="ProgressTextRemoveODBC">Suppression des composants ODBC</String>
-    <String Id="ProgressTextRemoveRegistryValues">Suppression des valeurs du Registre système</String>
-    <String Id="ProgressTextRemoveRegistryValuesTemplate">Clé : [1], Nom : [2]</String>
-    <String Id="ProgressTextRemoveShortcuts">Suppression des raccourcis</String>
-    <String Id="ProgressTextRemoveShortcutsTemplate">Raccourci : [1]</String>
-    <String Id="ProgressTextRMCCPSearch">Recherche des produits éligibles</String>
-    <String Id="ProgressTextSelfRegModules">Inscription des modules</String>
-    <String Id="ProgressTextSelfRegModulesTemplate">Fichier : [1] ; dossier : [2]</String>
-    <String Id="ProgressTextSelfUnregModules">Annulation de l'inscription des modules</String>
-    <String Id="ProgressTextSelfUnregModulesTemplate">Fichier : [1] ; dossier : [2]</String>
-    <String Id="ProgressTextSetODBCFolders">Initialisation des répertoires ODBC en cours</String>
-    <String Id="ProgressTextStartServices">Démarrage des services</String>
-    <String Id="ProgressTextStartServicesTemplate">Service : [1]</String>
-    <String Id="ProgressTextStopServices">Arrêt des services</String>
-    <String Id="ProgressTextStopServicesTemplate">Service : [1]</String>
-    <String Id="ProgressTextUnpublishComponents">Annulation de la publication des composants qualifiés</String>
-    <String Id="ProgressTextUnpublishComponentsTemplate">Identificateur du composant : [1], qualificateur : [2]</String>
-    <String Id="ProgressTextUnpublishFeatures">Annulation de la publication des composants du produit</String>
-    <String Id="ProgressTextUnpublishFeaturesTemplate">Composant : [1]</String>
-    <String Id="ProgressTextUnregisterClassInfo">Annulation de l'inscription des serveurs de classes</String>
-    <String Id="ProgressTextUnregisterClassInfoTemplate">Identificateur de classe : [1]</String>
-    <String Id="ProgressTextUnregisterComPlus">Annulation de l'inscription des composants et applications COM+</String>
-    <String Id="ProgressTextUnregisterComPlusTemplate">Id application : [1]{{, AppType : [2]}}</String>
-    <String Id="ProgressTextUnregisterExtensionInfo">Annulation de l'inscription des extensions serveur</String>
-    <String Id="ProgressTextUnregisterExtensionInfoTemplate">Extension : [1]</String>
-    <String Id="ProgressTextUnregisterFonts">Annulation de l'inscription des polices</String>
-    <String Id="ProgressTextUnregisterFontsTemplate">Police : [1]</String>
-    <String Id="ProgressTextUnregisterMIMEInfo">Annulation de l'inscription des informations MIME</String>
-    <String Id="ProgressTextUnregisterMIMEInfoTemplate">Type de contenu MIME : [1], extension : [2]</String>
-    <String Id="ProgressTextUnregisterProgIdInfo">Annulation de l'inscription des identificateurs de programmes</String>
-    <String Id="ProgressTextUnregisterProgIdInfoTemplate">Identificateur du programme : [1]</String>
-    <String Id="ProgressTextUnregisterTypeLibraries">Annulation de l'inscription des bibliothèques de type</String>
-    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">Identificateur de la bibliothèque : [1]</String>
-    <String Id="ProgressTextWriteEnvironmentStrings">Mise à jour des chaînes d'environnement</String>
-    <String Id="ProgressTextWriteEnvironmentStringsTemplate">Nom : [1], valeur : [2], action : [3]</String>
-    <String Id="ProgressTextWriteIniValues">Écriture des valeurs des fichiers INI</String>
-    <String Id="ProgressTextWriteIniValuesTemplate">Fichier : [1] ; section : [2] ; clé : [3] ; valeur : [4]</String>
-    <String Id="ProgressTextWriteRegistryValues">Écriture des valeurs du Registre système</String>
-    <String Id="ProgressTextWriteRegistryValuesTemplate">Clé : [1], Nom : [2], Valeur : [3]</String>
-    <String Id="ProgressTextAdvertise">Publication d'informations sur l'application</String>
-    <String Id="ProgressTextGenerateScript">Génération de scripts pour l'action :</String>
-    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
-    <String Id="ProgressTextInstallSFPCatalogFile">Installation du catalogue système</String>
-    <String Id="ProgressTextInstallSFPCatalogFileTemplate">Fichier : [1], dépendances : [2]</String>
-    <String Id="ProgressTextMsiPublishAssemblies">Publication des informations de modules</String>
-    <String Id="ProgressTextMsiPublishAssembliesTemplate">Contexte de l'application : [1], nom de l'assembly : [2]</String>
-    <String Id="ProgressTextMsiUnpublishAssemblies">Dépublication des informations sur l'assembly</String>
-    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">Contexte de l'application : [1], nom de l'assembly : [2]</String>
-    <String Id="ProgressTextRollback">Annulation de l'action :</String>
-    <String Id="ProgressTextRollbackTemplate">[1]</String>
-    <String Id="ProgressTextRollbackCleanup">Suppression des fichiers de sauvegarde</String>
-    <String Id="ProgressTextRollbackCleanupTemplate">Fichier : [1]</String>
-    <String Id="ProgressTextUnmoveFiles">Suppression des fichiers déplacés</String>
-    <String Id="ProgressTextUnmoveFilesTemplate">Fichier : [1], Répertoire : [9]</String>
-    <String Id="ProgressTextUnpublishProduct">Annulation de la publication des informations sur le produit</String>
-
-    <String Id="UITextbytes">octets</String>
-    <String Id="UITextGB">Go</String>
-    <String Id="UITextKB">Ko</String>
-    <String Id="UITextMB">Mo</String>
-    <String Id="UITextMenuAbsent">Ce composant ne sera pas disponible.</String>
-    <String Id="UITextMenuAdvertise">Ce composant sera installé à la demande.</String>
-    <String Id="UITextMenuAllCD">Ce composant sera installé en totalité pour être exécuté à partir du CD</String>
-    <String Id="UITextMenuAllLocal">Ce composant sera installé en totalité sur le disque dur local</String>
-    <String Id="UITextMenuAllNetwork">Ce composant sera installé en totalité pour être exécuté à partir du réseau</String>
-    <String Id="UITextMenuCD">Installation pour une exécution à partir du CD</String>
-    <String Id="UITextMenuLocal">Installation sur le disque dur local</String>
-    <String Id="UITextMenuNetwork">Installation pour une exécution à partir du réseau</String>
-    <String Id="UITextScriptInProgress">Collecte des informations nécessaires en cours...</String>
-    <String Id="UITextSelAbsentAbsent">Ce composant ne sera pas installé</String>
-    <String Id="UITextSelAbsentAdvertise">Ce composant sera configuré pour être installé à la demande</String>
-    <String Id="UITextSelAbsentCD">Ce composant sera installé pour être exécuté à partir du CD</String>
-    <String Id="UITextSelAbsentLocal">Ce composant sera installé sur le disque dur local</String>
-    <String Id="UITextSelAbsentNetwork">Ce composant sera installé pour être exécuté à partir du réseau</String>
-    <String Id="UITextSelAdvertiseAbsent">Ce composant ne sera plus disponible</String>
-    <String Id="UITextSelAdvertiseAdvertise">Installation à la demande</String>
-    <String Id="UITextSelAdvertiseCD">Ce composant sera disponible pour être exécuté à partir du CD</String>
-    <String Id="UITextSelAdvertiseLocal">Ce composant sera installé sur votre disque dur local</String>
-    <String Id="UITextSelAdvertiseNetwork">Ce composant sera disponible pour être exécuté à partir du réseau</String>
-    <String Id="UITextSelCDAbsent">Ce composant sera désinstallé en totalité et ne pourra plus être exécuté à partir du CD</String>
-    <String Id="UITextSelCDAdvertise">Ce composant ne pourra plus être exécuté à partir du CD et sera configuré pour être installé à la demande</String>
-    <String Id="UITextSelCDCD">Ce composant sera conservé pour être exécuté à partir du CD</String>
-    <String Id="UITextSelCDLocal">Ce composant ne pourra plus être exécuté à partir du CD et sera installé sur le disque dur local</String>
-    <String Id="UITextSelChildCostNeg">Ce composant libère [1] sur votre disque dur.</String>
-    <String Id="UITextSelChildCostPos">Ce composant nécessite la présence de [1] sur votre disque dur.</String>
-    <String Id="UITextSelCostPending">Calcul de l'espace nécessaire pour ce composant...</String>
-    <String Id="UITextSelLocalAbsent">Ce composant sera supprimé en totalité</String>
-    <String Id="UITextSelLocalAdvertise">Ce composant sera supprimé du disque dur local, mais sera configuré pour être installé à la demande</String>
-    <String Id="UITextSelLocalCD">Ce composant sera supprimé du disque dur local, mais pourra encore être exécuté à partir du CD</String>
-    <String Id="UITextSelLocalLocal">Ce composant sera conservé sur le disque dur local</String>
-    <String Id="UITextSelLocalNetwork">Ce composant sera supprimé de votre disque dur local, mais sera toujours disponible pour être exécuté à partir du réseau</String>
-    <String Id="UITextSelNetworkAbsent">Ce composant sera désinstallé en totalité et ne pourra plus être exécuté à partir du réseau</String>
-    <String Id="UITextSelNetworkAdvertise">Ce composant ne pourra plus être exécuté à partir du réseau et sera configuré pour être installé à la demande</String>
-    <String Id="UITextSelNetworkLocal">Ce composant ne pourra plus être exécuté à partir du réseau et sera installé sur le disque dur local</String>
-    <String Id="UITextSelNetworkNetwork">Ce composant sera conservé pour être exécuté à partir du réseau</String>
-    <String Id="UITextSelParentCostNegNeg">Ce composant libère [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants libèrent [4] sur votre disque dur.</String>
-    <String Id="UITextSelParentCostNegPos">Ce composant libère [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants nécessitent la présence de [4] sur votre disque dur.</String>
-    <String Id="UITextSelParentCostPosNeg">Ce composant nécessite la présence de [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants libèrent [4] sur votre disque dur.</String>
-    <String Id="UITextSelParentCostPosPos">Ce composant nécessite la présence de [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants nécessitent la présence de [4] sur votre disque dur.</String>
-    <String Id="UITextTimeRemaining">Durée restante : {[1] minute(s) }{[2] secondes}</String>
-    <String Id="UITextVolumeCostAvailable">Disponible</String>
-    <String Id="UITextVolumeCostDifference">Différences</String>
-    <String Id="UITextVolumeCostRequired">Nécessaire</String>
-    <String Id="UITextVolumeCostSize">Taille du disque</String>
-    <String Id="UITextVolumeCostVolume">Volume</String>
-
-</WixLocalization>
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="fr_FR">
+
+    <!--
+            Language Definition Include for VirtualBox WiX script.
+
+            Copyright (C) 2011-2016 Oracle Corporation
+
+            This file is part of VirtualBox Open Source Edition (OSE), as
+            available from http://www.virtualbox.org. This file is free software;
+            you can redistribute it and/or modify it under the terms of the GNU
+            General Public License (GPL) as published by the Free Software
+            Foundation, in version 2 as it comes in the "COPYING" file of the
+            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+    -->
+
+    <String Id="LANG">1036</String>
+    <String Id="LangName">Francais</String>
+
+    <String Id="ButtonText_No">&Non</String>
+    <String Id="ButtonText_Yes">&Oui</String>
+    <String Id="ButtonText_Cancel">&Annuler</String>
+    <String Id="ButtonText_Next">&Suivant ></String>
+    <String Id="ButtonText_Back">< &Précédent</String>
+    <String Id="ButtonText_Browse">Parco&urir</String>
+    <String Id="ButtonText_OK">O&K</String>
+    <String Id="ButtonText_Check">&Vérifier</String>
+    <String Id="ButtonText_Install">&Installer</String>
+    <String Id="ButtonText_Remove">&Enlever</String>
+    <String Id="ButtonText_Finish">&Terminer</String>
+    <String Id="ButtonText_Repair">&Réparer</String>
+    <String Id="ButtonText_Return">&Précédent</String>
+    <String Id="ButtonText_Retry">&Réessayer</String>
+    <String Id="ButtonText_Ignore">&Ignorer</String>
+    <String Id="ButtonText_Exit">Q&uitter</String>
+
+    <String Id="InstallModeCustom">Personalisé</String>
+    <String Id="Setup">Installation</String>
+
+    <!---->
+
+    <String Id="StartMenu_License">Licence</String>
+    <String Id="StartMenu_UserManual">Manuel d'utilisation</String>
+
+    <!---->
+
+    <String Id="VB_App">Application [ProductName].</String>
+    <String Id="VB_USBDriver">Pilotes USB [ProductName] pour le support de périphériques USB.</String>
+    <String Id="VB_Network">Pilotes [ProductName] pour le support réseau.</String>
+    <String Id="VB_NetFltDriver">Pilote [ProductName] pour l'accès réseau par pont.</String>
+    <String Id="VB_NetAdpDriver">Pilote de carte réseau virtuelle [ProductName] pour l'accès réseau privé hôte.</String>
+    <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
+    <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
+
+  <String Id="VB_Python">Python support for VirtualBox.</String>
+
+    <!---->
+
+    <String Id="NeedAdmin">Vous ne pouvez pas (dés)installer [ProductName] sans droits d'administrateur! Ce programme d'installation terminera maintenant.</String>
+    <String Id="WrongOS">Cette application nécéssite Windows XP ou plus récent.</String>
+    <String Id="Only32Bit">Cette application ne marche que sur des systèmes Windows 32-bit. Veuillez installer la version 64-bit de [ProductName]!</String>
+    <String Id="Only64Bit">Cette application ne marche que sur des systèmes Windows 64-bit. Veuillez installer la version 32-bit de [ProductName]!</String>
+    <String Id="InnotekFound">Vous avez une ancienne installation de innotek VirtualBox sur cette machine. Il vous faudra la désinstaller avant de pouvoir installer [ProductName].</String>
+
+    <!---->
+
+    <String Id="CancelDlg_Question">Voulez vous vraiment abondonner l'installation de [ProductName]?</String>
+
+    <!---->
+
+    <String Id="WelcomeDlg_Header">Bienvenue dans l'assistent d'installation de [ProductName]</String>
+    <String Id="WelcomeDlg_Body">Cet assistent installera [ProductName] sur votre ordinateur. Appuyez sur Suivant pour continuer ou sur Annuler pour abondonner l'installation.</String>
+
+    <!---->
+
+    <String Id="LicenseAgreementDlg_Header">Contrat de licence de logiciel</String>
+    <String Id="LicenseAgreementDlg_Body">Veuillez lire attentivement le Contrat de licence suivant.</String>
+    <String Id="LicenseAgreementDlg_Accept">J'&accepte les termes du Contrat de licence</String>
+    <String Id="LicenseAgreementDlg_Decline">Je &n'accepte pas les termes du Contrat de licence</String>
+
+    <!---->
+
+    <String Id="CheckSerialDlg_Header">Numéro de série</String>
+    <String Id="CheckSerialDlg_Body">Veulliez entrer votre numéro de série dans les champs ci-dessous. Vous le trouverez sur l'autocollant à l'intérieur du boîtier du CD de VirtualBox.</String>
+    <String Id="CheckSerialDlg_Footer">Quand vous avez fini d'entrer le numéro de série, appuyez sur le bouton Vérifier ci-dessous.</String>
+
+    <!---->
+
+    <String Id="WrongSerialDlg_Header">Le numéro de série que vous avez entré n'est pas valide!</String>
+    <String Id="WrongSerialDlg_Desc1">Veulliez retourner pour réentrer votre numéro de série.</String>
+    <String Id="WrongSerialDlg_Desc2">N'oubliez pas que le numéro de série doit être entré exactement comme il est imprimé sur l'autocollant.</String>
+
+    <!---->
+
+    <String Id="WarnSaveStatesDlg_Header">Avertissement:</String>
+    <String Id="WarnSaveStatesDlg_Header2">Etat sauvegardé incompatible!</String>
+    <String Id="WarnSaveStatesDlg_Desc">Quand vous mettez à jour [ProductName], les états sauvegardés de vos machines existants ne fonctionneront plus! Après l'installation, il vous faudra les rejeter manuellement.</String>
+    <String Id="WarnSaveStatesDlg_Proceed">Poursuivre avec l'installation?</String>
+
+    <!---->
+
+    <String Id="WarnTAPDevicesDlg_Header">Interfaces réseau hôte</String>
+    <String Id="WarnTAPDevicesDlg_Desc">Si vous avez utilisé des interfaces réseau hôte sur votre système avec la version précédente, il vous faudra les recréer manuellement après cette installation.</String>
+
+    <!---->
+
+    <String Id="CustomizeDlg_Location">Location:</String>
+    <String Id="CustomizeDlg_DiskUsage">&Espace disque</String>
+    <String Id="CustomizeDlg_SelFeatures">Choisissez les fonctionnalités que vous souhaiter installer.</String>
+    <String Id="CustomizeDlg_IconTree">Cliquez sur les icônes dans l'arborescence ci-dessous pour choisir les fonctionnalités qui seront installés.</String>
+    <String Id="CustomizeDlg_CustomSetup">Installation personalisée</String>
+    <String Id="CustomizeDlg_SelItemDesc">Description de l'entrée sélectionnée en plusieurs lignes.</String>
+    <String Id="CustomizeDlg_SelItemSize">La taille de l'entrée sélectionnée.</String>
+    <String Id="CustomizeDlg_SelItemPath"><Chemin de l'entrée sélectionnée></String>
+
+    <!---->
+
+    <String Id="Customize2Dlg_Header">Personaliser</String>
+    <String Id="Customize2Dlg_Desc">Veuillez choisir une des options suivantes:</String>
+    <String Id="Customize2Dlg_CreateStartMenuEntries">Créer des éléments dans le menu démarrer</String>
+    <String Id="Customize2Dlg_CreateDesktopShortcut">Créer un raccourci sur le bureau</String>
+    <String Id="Customize2Dlg_CreateQuickLaunch">Créer un raccourci dans la barre de lancement rapide</String>
+    <String Id="Customize2Dlg_RegisterFileExtensions">Inscription des associations de fichiers</String>
+
+    <!---->
+
+    <String Id="SelectionNetworkTypeDlg_CommonDescription">Veuillez choisir le type de pilotes réseau à utiliser :</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
+This is default for older versions of Windows (pre-Vista).</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
+This is default for newer versions of Windows (Vista and newer).</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Utiliser pilotes réseau NDIS5.</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Utiliser pilotes réseau NDIS6.</String>
+
+    <!---->
+
+    <String Id="WarnDisconNetIfacesDlg_Title">Avertissement</String>
+    <String Id="WarnDisconNetIfacesDlg_Title2">Interfaces réseau</String>
+    <String Id="WarnDisconNetIfacesDlg_Desc">L'installation de la fonctionnalité réseau de [ProductName] réinitialisera votre connection réseau et vous déconnectera temporairement du réseau.</String>
+    <String Id="WarnDisconNetIfacesDlg_Question">Désirez-vous poursuivre l'installation maintenant?</String>
+
+    <!---->
+
+    <String Id="DiskCostDlg_SpaceRequired">L'espace disque requise pour l'installation des fonctionnalités sélectionnées.</String>
+    <String Id="DiskCostDlg_NotEnoughSpace">Les supports mises en relief n'ont pas assez d'espace disque disponible pour les fonctionnalités sélectionnées. Vous pouvez soit supprimer des fichiers sur les supports, soit choisir d'installer moins de fonctionnalités sur les supports locals, soit choisir des supports differents pour l'installation.</String>
+    <String Id="DiskCostDlg_SpaceRequirements">Espace disque requise</String>
+    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
+
+    <!---->
+
+    <String Id="BrowseDlg_BrowseDestFolder">Choisissez un dossier pour l'installation</String>
+    <String Id="BrowseDlg_ChangeCurFolder">Changer le dossier d'installation</String>
+    <String Id="BrowseDlg_UpOneLevelTooltip">Dossier parent</String>
+    <String Id="BrowseDlg_CreateNewFolderTooltip">Créer un nouveau dossier</String>
+    <String Id="BrowseDlg_LookIn">&Chercher dans:</String>
+    <String Id="BrowseDlg_FolderName">&Nom du dossier:</String>
+
+    <!---->
+
+    <String Id="VerifyReadyDlg_ReadyToBegin">L'assistent est prêt à commencer l'installation [InstallMode].</String>
+    <String Id="VerifyReadyDlg_ClickInstall">Appuyez sur Installer pour commencer l'installation. Si vous désirez revoir ou modifier vos paramètres d'installation, appuyez sur Précédent. Appuyez sur Annuler pour abondoner l'installation.</String>
+    <String Id="VerifyReadyDlg_ReadyToInstall">Prêt à installer</String>
+
+    <!---->
+
+    <String Id="ExitDlg_ClickFinish">Veuillez appuyez sur Terminer pour quitter l'assistent d'installation.</String>
+    <String Id="ExitDlg_InstComplete">L'installation de [ProductName] est terminé.</String>
+    <String Id="ExitDlg_StartVBox">Démarrer [ProductName] après l'installation</String>
+
+    <!---->
+
+    <String Id="FatalErrorDlg_Header">L'assistent d'installation [ProductName] a terminé anormalement</String>
+    <String Id="FatalErrorDlg_Desc">L'installation de [ProductName] a été terminé en raison d'une erreur. Votre système n'a pas été modifié. Pour installer ce programme plus tard, veuillez relancer l'assistent.</String>
+    <String Id="FatalErrorDlg_Footer">Appuyez sur Terminer pour quitter l'assistent d'installation.</String>
+
+    <!---->
+
+    <String Id="FilesInUse_Text">Les applications suivantes utilisent des fichiers qui doivent être mis à jour dans le cadre de cette installation. Fermez ces applications puis cliquez sur Réessayer pour poursuivre l'installation ou sur Quitter pour quitter l'installation.</String>
+    <String Id="FilesInUse_Description">Certains fichiers devant être mis à jour sont en cours d'utilisation.</String>
+    <String Id="FilesInUse_Title">Fichiers en cours d'utilisation</String>
+
+    <!---->
+
+    <String Id="UserExitDlg_Header">L'assistent d'installation [ProductName] a été interrompu</String>
+    <String Id="UserExitDlg_Desc">L'installation de [ProductName] a été interrompu. Votre système n'a pas été modifié. Pour installer ce programme ultérieurement, veuillez relancer l'assistant.</String>
+    <String Id="UserExitDlg_Footer">Appuyez sur Terminer pour quitter l'assistent d'installation.</String>
+
+    <!---->
+
+    <String Id="ProgressDlg_PleaseWait">Veuillez patienter pendant que l'assistent installe [ProductName]. Ceci peut durer plusieurs minutes.</String>
+
+    <!---->
+
+    <String Id="ResumeDlg_Header">Continuant l'assistent d'installation [ProductName]</String>
+    <String Id="ResumeDlg_Desc">L'assistent d'installation completera l'installation de [ProductName] sur votre ordinateur. Appuyez sur Installer pour continuer ou sur Annuler pour abondonner l'assistent.</String>
+
+    <!---->
+
+    <String Id="MaintenanceTypeDlg_Header">Modifier, réparer ou supprimer une installation</String>
+    <String Id="MaintenanceTypeDlg_SelOption">Choisissez l'opération que vous désirer effectuer.</String>
+    <String Id="MaintenanceTypeDlg_Repair">Ré&parer</String>
+    <String Id="MaintenanceTypeDlg_RepairText">Répare des erreurs dans l'état de l'installation la plus récente - répare des fichiers, racourcis et entrées dans la base de registre manquants ou corrompus.</String>
+    <String Id="MaintenanceTypeDlg_RepairTooltip">Reparer installation</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress1">Repare</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress2">repare</String>
+    <String Id="MaintenanceTypeDlg_Remove">&Désinstaller</String>
+    <String Id="MaintenanceTypeDlg_RemoveText">Supprime [ProductName] de votre ordinateur.</String>
+    <String Id="MaintenanceTypeDlg_RemoveTooltip">Suprimer installation</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress1">Suprime</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress2">suprime</String>
+
+    <!---->
+
+    <String Id="MaintenanceWelcomeDlg_Header">Bienvenue dans l'assistent d'installation [ProductName]</String>
+    <String Id="MaintenanceWelcomeDlg_Desc">L'assistent d'installation vous permettra de réparer ou de supprimer de votre ordinateur l'installation actuelle de [ProductName]. Appuyez sur Suivant pour continuer ou sur Annuler pour abondonner l'assistant.</String>
+
+    <!---->
+
+    <String Id="OutOfDiskDlg_InstallationExceeds">L'espace disque disponible est insuffisant pour l'installation.</String>
+    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">Les supports mises en relief n'ont pas assez d'espace disque disponible pour les fonctionnalités sélectionnées. Vous pouvez soit supprimer des fichiers sur les supports, soit choisir d'installer moins de fonctionnalités sur les supports locals, soit choisir des supports différents pour l'installation.</String>
+    <String Id="OutOfDiskDlg_OutOfDiskSpace">Espace disque insuffisant</String>
+
+    <!---->
+
+    <String Id="OutOfRbDiskDlg_InstallationExceeds">L'espace disque disponible est insuffisant pour l'installation.</String>
+    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">Les supports mises en relief n'ont pas assez d'espace disque disponible pour les fonctionnalités sélectionnées. Vous pouvez soit supprimer des fichiers sur les supports, soit choisir d'installer moins de fonctionnalités sur les supports locals, soit choisir des supports différents pour l'installation.</String>
+    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">Espace disque épuisé</String>
+    <String Id="OutOfRbDiskDlg_Desc">En alternative, vous pouvez choisir de désactiver la fonctionnalité «rollback», qui permet de réstaurer l'état d'origine de votre ordinateur en cas d'interruption de l'installation. Appuyez sur Oui si vous désirer courir le risque de désactiver le rollback.</String>
+
+    <!---->
+
+    <String Id="VerifyRemoveDlg_Header">Supprimer [ProductName]</String>
+    <String Id="VerifyRemoveDlg_Desc">Vous avez choisi de supprimer l'application de votre ordinateur.</String>
+    <String Id="VerifyRemoveDlg_ClickRemove">Appuyez sur Désinstaller pour supprimer [ProductName] de votre ordinateur. Si vous désirez revoir ou modifier vos paramètres d'installation, appuyez sur Précédent. Appuyez sur Annuler pour quitter l'assistent.</String>
+
+    <!---->
+
+    <String Id="VerifyRepairDlg_Header">Réparer [ProductName]</String>
+    <String Id="VerifyRepairDlg_ReadyToBegin">L'assistent d'installation est prêt à commencer la réparation de [ProductName].</String>
+    <String Id="VerifyRepairDlg_ClickRepair">Appuyez sur Réparer pour réparer l'installation de [ProductName]. Si vous désirez revoir ou modifier vos paramètres d'installation, appuyez sur Précédent. Appuyez sur Annuler pour quitter l'assistent.</String>
+
+    <!---->
+
+    <String Id="WaitForCostingDlg_PleaseWait">Veuillez patienter pendant que le programme d'installation découvre l'espace disque requis.</String>
+
+    <!---->
+
+    <String Id="MsiRMFilesInUse_Text">Les applications suivantes utilisent des fichiers qui doivent être mis à jour dans le cadre de cette installation. Vous pouvez laisser l'assistant d'installation les fermer puis essayer de les redémarrer ou redémarrer l'ordinateur ultérieurement.</String>
+    <String Id="MsiRMFilesInUse_Description">Certains fichiers devant être mis à jour sont en cours d'utilisation.</String>
+    <String Id="MsiRMFilesInUse_Title">Fichiers en cours d'utilisation</String>
+    <String Id="MsiRMFilesInUse_UseRM">&Fermer les applications et essayer de les redémarrer.</String>
+    <String Id="MsiRMFilesInUse_DontUseRM">&Ne pas fermer les applications. Un redémarrage sera nécessaire.</String>
+
+    <!-- The following strings are internally used by WiX and MSI -->
+    <String Id="Error0">{{Erreur irrécupérable : }}</String>
+    <String Id="Error1">{{Erreur [1]. }}</String>
+    <String Id="Error2">Avertissement [1]. </String>
+    <String Id="Error4">Informations [1]. </String>
+    <String Id="Error5">Le programme d'installation a rencontré une erreur inattendue lors de l'installation de ce package. Il s'agit peut-être d'un problème lié au package. Le code d'erreur est [1]. {{Les arguments sont : [2], [3], [4]}}</String>
+    <String Id="Error7">{{Disque plein : }}</String>
+    <String Id="Error8">Action [Time] : [1]. [2]</String>
+    <String Id="Error9">[ProductName]</String>
+    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
+    <String Id="Error11">Type de message : [1], Argument : [2]</String>
+    <String Id="Error12">=== Début de l'écriture dans le journal : [Date]  [Time] ===</String>
+    <String Id="Error13">=== Fin de l'écriture dans le journal : [Date]  [Time] ===</String>
+    <String Id="Error14">Début de l'action [Time] : [1].</String>
+    <String Id="Error15">Fin de l'action [Time] : [1]. Valeur renvoyée : [2].</String>
+    <String Id="Error16">Durée restante : {[1] minute(s) }{[2] secondes}</String>
+    <String Id="Error17">Mémoire insuffisante. Fermez les autres applications avant de recommencer.</String>
+    <String Id="Error18">Le programme d'installation ne répond plus.</String>
+    <String Id="Error19">L'exécution du programme d'installation a pris fin prématurément.</String>
+    <String Id="Error20">Veuillez patienter pendant que Windows configure le logiciel "[ProductName]"</String>
+    <String Id="Error21">Collecte des informations nécessaires en cours...</String>
+    <String Id="Error22">Suppression des versions précédentes de cette application...</String>
+    <String Id="Error23">Préparation de la suppression des versions précédentes de cette application...</String>
+    <String Id="Error32">L'installation du logiciel "[ProductName]" s'est terminée correctement.</String>
+    <String Id="Error33">Échec de l'installation du logiciel "[ProductName]".</String>
+    <String Id="Error1101">Erreur lors de la lecture du fichier [2]. {{ Erreur système [3].}} Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1301">Impossible de créer le fichier '[2]'. Un répertoire portant ce nom existe déjà. Annulez l'installation et essayez de l'effectuer à un autre emplacement.</String>
+    <String Id="Error1302">Insérez le disque : [2]</String>
+    <String Id="Error1303">Le programme d'installation ne dispose pas des privilèges suffisants pour accéder à ce répertoire : [2]. Impossible de poursuivre l'installation. Ouvrez une session en tant qu'administrateur ou contactez votre administrateur système.</String>
+    <String Id="Error1304">Erreur lors de l'écriture dans le fichier : [2]. Vérifiez que vous êtes autorisé à accéder à ce répertoire.</String>
+    <String Id="Error1305">Erreur lors de la lecture du fichier [2]. {{ Erreur système [3].}} Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1306">Une autre application dispose d'un droit d'accès exclusif au fichier '[2]'. Fermez toutes les autres applications, puis cliquez sur Réessayer.</String>
+    <String Id="Error1307">L'espace disque est insuffisant pour installer ce fichier : [2]. Libérez de l'espace disque et cliquez sur Réessayer ou cliquez sur Annuler pour quitter.</String>
+    <String Id="Error1308">Fichier source introuvable : [2]. Vérifiez que le fichier existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1309">Erreur lors de la lecture du fichier [3].{{ Erreur système [2].}} Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1310">Erreur lors de l'écriture dans le fichier : [3]. {{ Erreur système [2].}} Vérifiez que vous êtes autorisé à accéder à ce répertoire.</String>
+    <String Id="Error1311">Fichier source introuvable {{(cabinet)}} : [2]. Vérifiez que le fichier existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1312">Impossible de créer le répertoire '[2]'. Un fichier portant ce nom existe déjà. Renommez le fichier et cliquez sur Réessayer ou cliquez sur Annuler pour quitter.</String>
+    <String Id="Error1313">Le volume [2] est actuellement indisponible. Veuillez en sélectionner un autre.</String>
+    <String Id="Error1314">Le chemin d'accès spécifié '[2]' n'est pas disponible.</String>
+    <String Id="Error1315">Impossible d'écrire dans le dossier spécifié : [2].</String>
+    <String Id="Error1316">Une erreur réseau s'est produite lors de la tentative de lecture à partir du fichier : [2]</String>
+    <String Id="Error1317">Erreur lors de la tentative de création du répertoire : [2]</String>
+    <String Id="Error1318">Une erreur réseau s'est produite lors de la tentative de création du répertoire : [2]</String>
+    <String Id="Error1319">Une erreur réseau s'est produite lors de la tentative d'ouverture du fichier CAB du fichier source : [2].</String>
+    <String Id="Error1320">Le chemin d'accès spécifié est trop long : [2]</String>
+    <String Id="Error1321">Le programme d'installation ne dispose pas des privilèges nécessaires pour modifier ce fichier : [2].</String>
+    <String Id="Error1322">Une partie du chemin d'accès au dossier '[2]' n'est pas valide. Il est peut-être vide ou dépasse la longueur autorisée par le système.</String>
+    <String Id="Error1323">Le chemin d'accès au dossier '[2]' contient des mots non valides.</String>
+    <String Id="Error1324">Le chemin d'accès au dossier '[2]' contient un caractère non valide.</String>
+    <String Id="Error1325">Le nom de fichier court '[2]' n'est pas valide.</String>
+    <String Id="Error1326">Erreur lors de l'obtention des informations sur la sécurité du fichier [3] GetLastError : [2]</String>
+    <String Id="Error1327">Lecteur non valide : [2]</String>
+    <String Id="Error1328">Erreur lors de l'application du correctif au fichier [2]. Celui-ci a probablement été mis à jour par d'autres moyens et ne peut plus être modifié par ce correctif. Pour plus d'informations, consultez le fournisseur de votre correctif. {{Erreur système : [3]}}</String>
+    <String Id="Error1329">Un fichier requis ne peut pas être installé, car le fichier CAB [2] n'est pas signé numériquement. Cela indique peut-être que le fichier CAB est endommagé.</String>
+    <String Id="Error1330">Un fichier requis ne peut pas être installé, car le fichier CAB [2] contient une signature numérique non valide. Cela indique peut-être que le fichier est endommagé.{{  L'erreur [3] a été renvoyée par WinVerifyTrust.}}</String>
+    <String Id="Error1331">Échec de la copie du fichier [2] : erreur CRC.</String>
+    <String Id="Error1332">Échec du déplacement du fichier [2] : erreur CRC.</String>
+    <String Id="Error1333">Échec de la modification du fichier [2] : erreur CRC.</String>
+    <String Id="Error1334">Impossible d'installer le fichier '[2]', car il est introuvable dans le fichier CAB '[3]'. Cela indique peut-être une erreur au niveau du réseau, une erreur de lecture à partir du CD-ROM ou un problème inhérent au package.</String>
+    <String Id="Error1335">Le fichier CAB '[2]' requis pour l'installation est endommagé et ne peut pas être utilisé. Cela indique peut-être une erreur au niveau du réseau, une erreur de lecture à partir du CD-ROM ou un problème inhérent au package.</String>
+    <String Id="Error1336">Une erreur s'est produite lors de la création d'un fichier temporaire nécessaire à l'installation.{{  Dossier : [3]. Code d'erreur système : [2]}}</String>
+    <String Id="Error1401">Impossible de créer la clé : [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique. </String>
+    <String Id="Error1402">Impossible d'ouvrir la clé [2]. Erreur système [3]. Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique. </String>
+    <String Id="Error1403">Impossible de supprimer la valeur [2] de la clé [3]. {{ Erreur système [4].}} Vérifiez que vous disposez des droits suffisants pour cette clé ou contactez votre service de support technique. </String>
+    <String Id="Error1404">Impossible de supprimer la clé [2]. Erreur système [3]. Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique. </String>
+    <String Id="Error1405">Impossible de lire la valeur [2] de la clé [3]. {{ Erreur système [4].}} Vérifiez que vous disposez des droits suffisants pour cette clé ou contactez votre service de support technique. </String>
+    <String Id="Error1406">Impossible d'écrire la valeur [2] dans la clé [3].{{ Erreur système [4].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
+    <String Id="Error1407">Impossible d'obtenir le nom des valeurs de la clé [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
+    <String Id="Error1408">Impossible d'obtenir le nom des sous-clés de la clé [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
+    <String Id="Error1409">Impossible de lire les informations sur la sécurité de la clé [2]. {{ Erreur système [3].}} Vérifiez que vous disposez des droits d'accès nécessaires pour cette clé ou contactez votre service de support technique.</String>
+    <String Id="Error1410">Impossible d'augmenter l'espace disponible dans le Registre. [2] Ko d'espace doivent être libres dans le Registre pour permettre l'installation de cette application.</String>
+    <String Id="Error1500">Une autre installation est en cours d'exécution. Vous devez la terminer avant de poursuivre cette installation.</String>
+    <String Id="Error1501">Erreur lors de l'accès aux données protégées. Vérifiez que Windows Installer est correctement configuré, puis recommencez l'installation.</String>
+    <String Id="Error1502">L'utilisateur '[2]' a déjà lancé l'installation du produit '[3]'. Il devra réexécuter cette installation avant de pouvoir utiliser le produit. L'installation en cours va se poursuivre.</String>
+    <String Id="Error1503">L'utilisateur '[2]' a déjà lancé l'installation du produit '[3]'. Il devra réexécuter cette installation avant de pouvoir utiliser le produit.</String>
+    <String Id="Error1601">Espace disque insuffisant -- Volume : '[2]' ; espace nécessaire : [3] Ko ; espace disponible : [4] Ko. Libérez de l'espace sur le disque, puis recommencez.</String>
+    <String Id="Error1602">Voulez-vous vraiment annuler ?</String>
+    <String Id="Error1603">Le fichier [2][3] est en cours d'utilisation{ par l'opération suivante : nom : [4], identifiant : [5], titre de la fenêtre : '[6]'}. Fermez cette application et réessayez.</String>
+    <String Id="Error1604">Le produit '[2]' est déjà installé. Impossible d'installer ce produit, car il est incompatible avec celui déjà installé.</String>
+    <String Id="Error1605">Espace insuffisant sur le volume '[2]' pour continuer l'installation avec l'option de récupération. [3] Ko sont requis, alors que seuls [4] Ko sont disponibles. Cliquez sur Ignorer pour poursuivre l'installation sans enregistrer les informations de récupération, cliquez sur Recommencer pour revérifier l'espace libre, ou cliquez sur Annuler pour arrêter.</String>
+    <String Id="Error1606">Impossible d'accéder à l'emplacement réseau [2].</String>
+    <String Id="Error1607">Fermez les applications suivantes avant de poursuivre l'installation :</String>
+    <String Id="Error1608">Impossible de trouver un produit compatible précédemment installé permettant l'installation de ce produit sur cet ordinateur.</String>
+    <String Id="Error1609">Erreur lors de l'application des paramètres de sécurité. [2] n'est pas un utilisateur ou un groupe valide. Cela indique peut-être une erreur au niveau du package ou de la connexion à un contrôleur de domaine sur le réseau. Vérifiez votre connexion réseau et cliquez sur Réessayer ou cliquez sur Annuler pour mettre fin à l'installation. {{Impossible de localiser l'ID de sécurité de l'utilisateur, erreur système [3]}}</String>
+    <String Id="Error1701">La clé [2] n'est pas valide. Vérifiez que vous avez entré la clé correcte.</String>
+    <String Id="Error1702">Le programme d'installation doit redémarrer votre système avant que la configuration de [2] puisse continuer. Cliquez sur Oui pour redémarrer maintenant ou sur Non si vous voulez redémarrer ultérieurement.</String>
+    <String Id="Error1703">Vous devez redémarrer votre système pour que les modifications apportées à la configuration de [2] prennent effet. Cliquez sur Oui pour redémarrer maintenant, ou sur Non si vous voulez redémarrer manuellement ultérieurement.</String>
+    <String Id="Error1704">L'installation de [2] est interrompue. Vous devez annuler les modifications apportées par cette installation pour continuer. Voulez-vous annuler les modifications ?</String>
+    <String Id="Error1705">Une installation de ce produit est déjà en cours. Vous devez annuler les modifications apportées par cette installation pour continuer. Voulez-vous annuler les modifications ?</String>
+    <String Id="Error1706">Aucun package d'installation pour le produit [2] n'a été trouvé. Recommencez l'installation en utilisant une copie valide du package d'installation '[3]'.</String>
+    <String Id="Error1707">Installation terminée.</String>
+    <String Id="Error1708">Échec de l'installation.</String>
+    <String Id="Error1709">Produit : [2] -- [3]</String>
+    <String Id="Error1710">Vous pouvez restaurer l'état antérieur de votre ordinateur ou poursuivre l'installation ultérieurement. Voulez-vous restaurer votre ordinateur ?</String>
+    <String Id="Error1711">Une erreur s'est produite lors de l'écriture des informations concernant l'installation sur le disque. Vérifiez que l'espace disponible sur le disque est suffisant, puis cliquez sur Réessayer ou cliquez sur Annuler pour mettre fin à l'installation.</String>
+    <String Id="Error1712">Impossible de trouver un ou plusieurs des fichiers requis pour restaurer l'état antérieur de votre ordinateur. Impossible de procéder à la restauration.</String>
+    <String Id="Error1713">[2] ne peut pas installer un des produits nécessaires. Contactez votre service de support technique. {{Erreur système : [3].}}</String>
+    <String Id="Error1714">Impossible de supprimer la version antérieure de [2]. Contactez votre service de support technique. {{Erreur système [3].}}</String>
+    <String Id="Error1715">[2] installé</String>
+    <String Id="Error1716">[2] configuré</String>
+    <String Id="Error1717">[2] supprimé</String>
+    <String Id="Error1718">Le fichier [2] a été rejeté par la stratégie de signature numérique.</String>
+    <String Id="Error1719">Impossible d'accéder au service Windows Installer. Ceci peut se produire si Windows est en mode Sans échec, ou si le programme d'installation de Windows n'est pas correctement installé. Contactez votre service de support technique pour assistance.</String>
+    <String Id="Error1720">Il y a un problème au niveau du package Windows Installer. Un script requis pour cette installation n'a pas pu être exécuté. Contactez votre service de support technique ou l'éditeur du package. {{Action personnalisée [2] erreur de script [3], [4] : [5] ligne [6], colonne [7], [8] }}</String>
+    <String Id="Error1721">Il y a un problème au niveau du package Windows Installer. Un programme requis pour cette installation n'a pas pu être exécuté. Contactez votre service de support technique ou l'éditeur du package. {Action : [2], emplacement : [3], commande : [4] }}</String>
+    <String Id="Error1722">Il y a un problème au niveau du package Windows Installer. Un programme nécessaire à l'installation ne s'est pas correctement exécuté. Contactez votre service de support technique ou l'éditeur du package. {{Action [2], emplacement : [3], commande : [4] }}</String>
+    <String Id="Error1723">Il y a un problème au niveau du package Windows Installer. Une DLL requise pour cette installation n'a pas pu être exécutée. Contactez votre service de support technique ou l'éditeur du package. {{Action [2], entrée : [3], bibliothèque : [4] }}</String>
+    <String Id="Error1724">Suppression effectuée.</String>
+    <String Id="Error1725">Échec de la suppression.</String>
+    <String Id="Error1726">Annonce effectuée.</String>
+    <String Id="Error1727">Échec de l'annonce.</String>
+    <String Id="Error1728">Configuration effectuée.</String>
+    <String Id="Error1729">Échec de la configuration.</String>
+    <String Id="Error1730">Vous devez être administrateur pour supprimer cette application. Pour la supprimer, ouvrez une session en tant qu'administrateur ou contactez votre service de support technique pour assistance.</String>
+    <String Id="Error1731">Le package d'installation source pour le produit [2] n'est pas synchronisé avec le package client. Réessayez l'installation en utilisant une copie valide du package d'installation '[3]'.</String>
+    <String Id="Error1732">Vous devez redémarrer l'ordinateur afin de terminer l'installation du produit [2]. D'autres utilisateurs sont actuellement connectés à cet ordinateur et le redémarrer pourrait causer la perte de leurs données. Voulez-vous redémarrer maintenant ?</String>
+    <String Id="Error1801">Le chemin d'accès [2] n'est pas valide. Spécifiez un chemin d'accès valide.</String>
+    <String Id="Error1802">Mémoire insuffisante. Fermez les autres applications avant de recommencer.</String>
+    <String Id="Error1803">Le lecteur [2] est vide. Insérez un disque et cliquez sur Réessayer, ou cliquez sur Annuler pour revenir au volume sélectionné précédemment.</String>
+    <String Id="Error1804">Le lecteur [2] est vide. Insérez un disque et cliquez sur Recommencer, ou cliquez sur Annuler pour revenir dans la boîte de dialogue Sélection de l'emplacement et sélectionner un autre volume.</String>
+    <String Id="Error1805">Le dossier [2] n'existe pas. Entrez un chemin d'accès à un dossier existant.</String>
+    <String Id="Error1806">Vous ne disposez pas des privilèges nécessaires pour lire le contenu de ce dossier.</String>
+    <String Id="Error1807">Impossible de trouver un dossier de destination valide pour l'installation.</String>
+    <String Id="Error1901">Une erreur s'est produite lors de la tentative de lecture de la base de données d'installation source : [2].</String>
+    <String Id="Error1902">Planification du redémarrage : Le fichier [2] est renommé [3]. Pour terminer l'opération, votre système doit être redémarré.</String>
+    <String Id="Error1903">Planification du redémarrage : Suppression du fichier [2]. Pour terminer l'opération, votre système doit être redémarré.</String>
+    <String Id="Error1904">Impossible d'inscrire le module [2]. HRESULT [3]. Contactez votre service de support technique.</String>
+    <String Id="Error1905">Impossible d'annuler l'inscription du module [2]. HRESULT [3]. Contactez votre service de support technique.</String>
+    <String Id="Error1906">Impossible de placer le package [2] dans le cache. Erreur : [3]. Contactez votre Support technique.</String>
+    <String Id="Error1907">Impossible d'inscrire la police [2]. Vérifiez que vous disposez des autorisations nécessaires pour l'installation des polices et que le système prend en charge cette police.</String>
+    <String Id="Error1908">Impossible d'annuler l'inscription de la police [2]. Vérifiez que vous disposez des autorisations requises pour supprimer des polices.</String>
+    <String Id="Error1909">Impossible de créer le raccourci [2]. Vérifiez que le dossier de destination existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1910">Impossible de supprimer le raccourci [2]. Vérifiez que le fichier de raccourcis existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1911">Impossible d'inscrire la bibliothèque de types pour le fichier [2]. Contactez votre service de support technique.</String>
+    <String Id="Error1912">Impossible d'annuler l'inscription de la bibliothèque de types pour le fichier [2]. Contactez votre service de support technique.</String>
+    <String Id="Error1913">Impossible de mettre à jour le fichier ini [2][3]. Vérifiez que ce fichier existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1914">Impossible de planifier le remplacement du fichier [3] par le fichier [2] au redémarrage. Vérifiez que vous êtes autorisé à accéder en écriture au fichier [3].</String>
+    <String Id="Error1915">Erreur lors de la suppression du gestionnaire de pilotes ODBC. Erreur ODBC [2] : [3]. Contactez votre Support technique.</String>
+    <String Id="Error1916">Erreur lors de l'installation du gestionnaire de pilotes ODBC. Erreur ODBC [2] : [3]. Contactez votre Support technique.</String>
+    <String Id="Error1917">Erreur lors de la suppression du pilote ODBC [4]. Erreur ODBC [2] : [3]. Vérifiez que vous disposez des privilèges nécessaires pour supprimer des pilotes ODBC.</String>
+    <String Id="Error1918">Erreur lors de l'installation du pilote ODBC [4]. Erreur ODBC [2] : [3]. Vérifiez que le fichier [4] existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1919">Erreur lors de la configuration de la source de données ODBC [4]. Erreur ODBC [2] : [3]. Vérifiez que le fichier [4] existe et que vous êtes autorisé à y accéder.</String>
+    <String Id="Error1920">Échec du démarrage du service '[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour démarrer les services système.</String>
+    <String Id="Error1921">Impossible d'arrêter le service '[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour arrêter les services système.</String>
+    <String Id="Error1922">Impossible de supprimer le service '[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour supprimer les services système.</String>
+    <String Id="Error1923">Impossible d'installer le service'[2]' ([3]). Vérifiez que vous disposez des privilèges nécessaires pour installer des services système.</String>
+    <String Id="Error1924">Impossible de mettre à jour la variable d'environnement '[2]'. Vérifiez que vous disposez des privilèges nécessaires pour modifier les variables d'environnement.</String>
+    <String Id="Error1925">Vous ne disposez pas des privilèges nécessaires pour exécuter cette installation pour tous les utilisateurs de cet ordinateur. Ouvrez une session en tant qu'administrateur, puis relancez cette installation.</String>
+    <String Id="Error1926">Impossible de définir la sécurité de fichier pour le fichier '[3]'. Erreur : [2]. Vérifiez que vous disposez des privilèges nécessaires pour modifier les autorisations de sécurité pour ce fichier.</String>
+    <String Id="Error1927">Les services de composants (COM+ 1.0) ne sont pas installés sur cet ordinateur. Cette installation nécessite les services de composants afin de se terminer correctement. Les services de composants sont disponibles sur Windows 2000.</String>
+    <String Id="Error1928">Erreur lors de l'inscription de l'application COM+. Contactez votre service de support technique pour plus d'informations.</String>
+    <String Id="Error1929">Erreur lors de l'annulation de l'inscription de l'application COM+. Contactez votre service de support technique pour plus d'informations.</String>
+    <String Id="Error1930">La description du service '[2]' ([3]) n'a pas pu être modifiée.</String>
+    <String Id="Error1931">Le service Windows Installer ne peut pas mettre à jour le fichier système [2], car le fichier est protégé par Windows. Vous devrez peut-être mettre à jour votre système d'exploitation pour que ce programme fonctionne correctement. {{Version du package : [3], version protégée du système d'exploitation : [4]}}</String>
+    <String Id="Error1932">Le service Windows Installer ne peut pas mettre à jour le fichier Windows protégé [2]. {{Version du package : [3], Version protégée du système d'exploitation : [4], Erreur SFP : [5]}}</String>
+    <String Id="Error1933">Le service Windows Installer ne peut pas mettre à jour certains fichiers Windows protégés. {{Erreur SFP : [2]. Liste des fichiers protégés :\r\n[3]}}</String>
+    <String Id="Error1934">Les installations utilisateurs sont désactivées par la stratégie en vigueur sur cet ordinateur.</String>
+    <String Id="Error1935">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. Reportez-vous à l'aide et au support pour plus d'informations. HRESULT : [3]. {{interface d'assembly : [4], fonction : [5], composant : [2]}}</String>
+    <String Id="Error1936">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. L'assembly n'a pas un nom fort et n'est pas signé avec une longueur de clé minimale. HRESULT : [3]. {{interface de l'assembly : [4], fonction : [5], composant: [2]}}</String>
+    <String Id="Error1937">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. La signature ou le catalogue n'a pas pu être vérifié ou n'est pas valide. HRESULT : [3]. {{interface d'assembly : [4], fonction : [5], composant : [2]}}</String>
+    <String Id="Error1938">Une erreur s'est produite lors de l'installation de l'assembly '[6]'. Un ou plusieurs des modules de l'assembly sont introuvables. HRESULT : [3]. {{interface d'assembly : [4], fonction : [5], composant : [2]}}</String>
+
+    <!-- Own / special errors -->
+    <String Id="Error25001">L'application "[2]" doit être fermée pour que l'installation puisse continuer.</String>
+
+    <String Id="ProgressTextInstallValidate">Validation de l'installation</String>
+    <String Id="ProgressTextInstallFiles">Copie des nouveaux fichiers</String>
+    <String Id="ProgressTextInstallFilesTemplate">Fichier : [1],  Répertoire : [9],  Taille : [6]</String>
+    <String Id="ProgressTextInstallAdminPackage">Copie des fichiers d'installation réseau</String>
+    <String Id="ProgressTextInstallAdminPackageTemplate">Fichier : [1], Répertoire : [9], Taille : [6]</String>
+    <String Id="ProgressTextFileCost">Calcul de l'espace nécessaire</String>
+    <String Id="ProgressTextCostInitialize">Calcul de l'espace nécessaire</String>
+    <String Id="ProgressTextCostFinalize">Calcul de l'espace nécessaire</String>
+    <String Id="ProgressTextCreateShortcuts">Création des raccourcis</String>
+    <String Id="ProgressTextCreateShortcutsTemplate">Raccourci : [1]</String>
+    <String Id="ProgressTextPublishComponents">Publication des composants qualifiés</String>
+    <String Id="ProgressTextPublishComponentsTemplate">Identificateur du composant : [1], qualificateur : [2]</String>
+    <String Id="ProgressTextPublishFeatures">Publication des composants du produit</String>
+    <String Id="ProgressTextPublishFeaturesTemplate">Composant : [1]</String>
+    <String Id="ProgressTextPublishProduct">Publication des informations sur le produit</String>
+    <String Id="ProgressTextRegisterClassInfo">Inscription des serveurs de classes</String>
+    <String Id="ProgressTextRegisterClassInfoTemplate">Identificateur de classe : [1]</String>
+    <String Id="ProgressTextRegisterExtensionInfo">Inscription des extensions serveur</String>
+    <String Id="ProgressTextRegisterExtensionInfoTemplate">Extension : [1]</String>
+    <String Id="ProgressTextRegisterMIMEInfo">Inscription des informations MIME</String>
+    <String Id="ProgressTextRegisterMIMEInfoTemplate">Type de contenu MIME : [1], extension : [2]</String>
+    <String Id="ProgressTextRegisterProgIdInfo">Inscription des identificateurs de programmes</String>
+    <String Id="ProgressTextRegisterProgIdInfoTemplate">Identificateur du programme : [1]</String>
+    <String Id="ProgressTextAllocateRegistrySpace">Allocation de l'espace du Registre</String>
+    <String Id="ProgressTextAllocateRegistrySpaceTemplate">Espace libre : [1]</String>
+    <String Id="ProgressTextAppSearch">Recherche des applications déjà installées</String>
+    <String Id="ProgressTextAppSearchTemplate">Propriété : [1], Signature : [2]</String>
+    <String Id="ProgressTextBindImage">Liaison des exécutables</String>
+    <String Id="ProgressTextBindImageTemplate">Fichier : [1]</String>
+    <String Id="ProgressTextCCPSearch">Recherche des produits éligibles</String>
+    <String Id="ProgressTextCreateFolders">Création des dossiers</String>
+    <String Id="ProgressTextCreateFoldersTemplate">Dossier : [1]</String>
+    <String Id="ProgressTextDeleteServices">Suppression des services</String>
+    <String Id="ProgressTextDeleteServicesTemplate">Service : [1]</String>
+    <String Id="ProgressTextDuplicateFiles">Création de fichiers dupliqués</String>
+    <String Id="ProgressTextDuplicateFilesTemplate">Fichier : [1],  Répertoire : [9],  Taille : [6]</String>
+    <String Id="ProgressTextFindRelatedProducts">Recherche des applications associées</String>
+    <String Id="ProgressTextFindRelatedProductsTemplate">Application trouvée : [1]</String>
+    <String Id="ProgressTextInstallODBC">Installation des composants ODBC</String>
+    <String Id="ProgressTextInstallServices">Installation des nouveaux services</String>
+    <String Id="ProgressTextInstallServicesTemplate">Service : [2]</String>
+    <String Id="ProgressTextLaunchConditions">Évaluation des conditions de lancement</String>
+    <String Id="ProgressTextMigrateFeatureStates">Migration de l'état des composants à partir des applications associées</String>
+    <String Id="ProgressTextMigrateFeatureStatesTemplate">Application : [1]</String>
+    <String Id="ProgressTextMoveFiles">Déplacement des fichiers</String>
+    <String Id="ProgressTextMoveFilesTemplate">Fichier : [1],  Répertoire : [9],  Taille : [6]</String>
+    <String Id="ProgressTextPatchFiles">Fichiers de correction</String>
+    <String Id="ProgressTextPatchFilesTemplate">Fichier : [1],  Répertoire : [2],  Taille : [3]</String>
+    <String Id="ProgressTextProcessComponents">Mise à jour de l'inscription des composants</String>
+    <String Id="ProgressTextRegisterComPlus">Inscription des composants et applications COM+</String>
+    <String Id="ProgressTextRegisterComPlusTemplate">Id application : [1]{{, Type application : [2], Utilisateurs : [3], RSN : [4]}}</String>
+    <String Id="ProgressTextRegisterFonts">Inscription des polices</String>
+    <String Id="ProgressTextRegisterFontsTemplate">Police : [1]</String>
+    <String Id="ProgressTextRegisterProduct">Inscription du produit</String>
+    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
+    <String Id="ProgressTextRegisterTypeLibraries">Inscription des bibliothèques de type</String>
+    <String Id="ProgressTextRegisterTypeLibrariesTemplate">Identificateur de la bibliothèque : [1]</String>
+    <String Id="ProgressTextRegisterUser">Inscription de l'utilisateur</String>
+    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
+    <String Id="ProgressTextRemoveDuplicateFiles">Suppression des fichiers dupliqués</String>
+    <String Id="ProgressTextRemoveDuplicateFilesTemplate">Fichier : [1], Répertoire : [9]</String>
+    <String Id="ProgressTextRemoveEnvironmentStrings">Mise à jour des chaînes d'environnement</String>
+    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">Nom : [1], valeur : [2], action : [3]</String>
+    <String Id="ProgressTextRemoveExistingProducts">Suppression des applications</String>
+    <String Id="ProgressTextRemoveExistingProductsTemplate">Application : [1], Ligne de commande : [2]</String>
+    <String Id="ProgressTextRemoveFiles">Suppression des fichiers</String>
+    <String Id="ProgressTextRemoveFilesTemplate">Fichier : [1], Répertoire : [9]</String>
+    <String Id="ProgressTextRemoveFolders">Suppression des dossiers</String>
+    <String Id="ProgressTextRemoveFoldersTemplate">Dossier : [1]</String>
+    <String Id="ProgressTextRemoveIniValues">Suppression des entrées des fichiers INI</String>
+    <String Id="ProgressTextRemoveIniValuesTemplate">Fichier : [1] ; section : [2] ; clé : [3] ; valeur : [4]</String>
+    <String Id="ProgressTextRemoveODBC">Suppression des composants ODBC</String>
+    <String Id="ProgressTextRemoveRegistryValues">Suppression des valeurs du Registre système</String>
+    <String Id="ProgressTextRemoveRegistryValuesTemplate">Clé : [1], Nom : [2]</String>
+    <String Id="ProgressTextRemoveShortcuts">Suppression des raccourcis</String>
+    <String Id="ProgressTextRemoveShortcutsTemplate">Raccourci : [1]</String>
+    <String Id="ProgressTextRMCCPSearch">Recherche des produits éligibles</String>
+    <String Id="ProgressTextSelfRegModules">Inscription des modules</String>
+    <String Id="ProgressTextSelfRegModulesTemplate">Fichier : [1] ; dossier : [2]</String>
+    <String Id="ProgressTextSelfUnregModules">Annulation de l'inscription des modules</String>
+    <String Id="ProgressTextSelfUnregModulesTemplate">Fichier : [1] ; dossier : [2]</String>
+    <String Id="ProgressTextSetODBCFolders">Initialisation des répertoires ODBC en cours</String>
+    <String Id="ProgressTextStartServices">Démarrage des services</String>
+    <String Id="ProgressTextStartServicesTemplate">Service : [1]</String>
+    <String Id="ProgressTextStopServices">Arrêt des services</String>
+    <String Id="ProgressTextStopServicesTemplate">Service : [1]</String>
+    <String Id="ProgressTextUnpublishComponents">Annulation de la publication des composants qualifiés</String>
+    <String Id="ProgressTextUnpublishComponentsTemplate">Identificateur du composant : [1], qualificateur : [2]</String>
+    <String Id="ProgressTextUnpublishFeatures">Annulation de la publication des composants du produit</String>
+    <String Id="ProgressTextUnpublishFeaturesTemplate">Composant : [1]</String>
+    <String Id="ProgressTextUnregisterClassInfo">Annulation de l'inscription des serveurs de classes</String>
+    <String Id="ProgressTextUnregisterClassInfoTemplate">Identificateur de classe : [1]</String>
+    <String Id="ProgressTextUnregisterComPlus">Annulation de l'inscription des composants et applications COM+</String>
+    <String Id="ProgressTextUnregisterComPlusTemplate">Id application : [1]{{, AppType : [2]}}</String>
+    <String Id="ProgressTextUnregisterExtensionInfo">Annulation de l'inscription des extensions serveur</String>
+    <String Id="ProgressTextUnregisterExtensionInfoTemplate">Extension : [1]</String>
+    <String Id="ProgressTextUnregisterFonts">Annulation de l'inscription des polices</String>
+    <String Id="ProgressTextUnregisterFontsTemplate">Police : [1]</String>
+    <String Id="ProgressTextUnregisterMIMEInfo">Annulation de l'inscription des informations MIME</String>
+    <String Id="ProgressTextUnregisterMIMEInfoTemplate">Type de contenu MIME : [1], extension : [2]</String>
+    <String Id="ProgressTextUnregisterProgIdInfo">Annulation de l'inscription des identificateurs de programmes</String>
+    <String Id="ProgressTextUnregisterProgIdInfoTemplate">Identificateur du programme : [1]</String>
+    <String Id="ProgressTextUnregisterTypeLibraries">Annulation de l'inscription des bibliothèques de type</String>
+    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">Identificateur de la bibliothèque : [1]</String>
+    <String Id="ProgressTextWriteEnvironmentStrings">Mise à jour des chaînes d'environnement</String>
+    <String Id="ProgressTextWriteEnvironmentStringsTemplate">Nom : [1], valeur : [2], action : [3]</String>
+    <String Id="ProgressTextWriteIniValues">Écriture des valeurs des fichiers INI</String>
+    <String Id="ProgressTextWriteIniValuesTemplate">Fichier : [1] ; section : [2] ; clé : [3] ; valeur : [4]</String>
+    <String Id="ProgressTextWriteRegistryValues">Écriture des valeurs du Registre système</String>
+    <String Id="ProgressTextWriteRegistryValuesTemplate">Clé : [1], Nom : [2], Valeur : [3]</String>
+    <String Id="ProgressTextAdvertise">Publication d'informations sur l'application</String>
+    <String Id="ProgressTextGenerateScript">Génération de scripts pour l'action :</String>
+    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
+    <String Id="ProgressTextInstallSFPCatalogFile">Installation du catalogue système</String>
+    <String Id="ProgressTextInstallSFPCatalogFileTemplate">Fichier : [1], dépendances : [2]</String>
+    <String Id="ProgressTextMsiPublishAssemblies">Publication des informations de modules</String>
+    <String Id="ProgressTextMsiPublishAssembliesTemplate">Contexte de l'application : [1], nom de l'assembly : [2]</String>
+    <String Id="ProgressTextMsiUnpublishAssemblies">Dépublication des informations sur l'assembly</String>
+    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">Contexte de l'application : [1], nom de l'assembly : [2]</String>
+    <String Id="ProgressTextRollback">Annulation de l'action :</String>
+    <String Id="ProgressTextRollbackTemplate">[1]</String>
+    <String Id="ProgressTextRollbackCleanup">Suppression des fichiers de sauvegarde</String>
+    <String Id="ProgressTextRollbackCleanupTemplate">Fichier : [1]</String>
+    <String Id="ProgressTextUnmoveFiles">Suppression des fichiers déplacés</String>
+    <String Id="ProgressTextUnmoveFilesTemplate">Fichier : [1], Répertoire : [9]</String>
+    <String Id="ProgressTextUnpublishProduct">Annulation de la publication des informations sur le produit</String>
+
+    <String Id="UITextbytes">octets</String>
+    <String Id="UITextGB">Go</String>
+    <String Id="UITextKB">Ko</String>
+    <String Id="UITextMB">Mo</String>
+    <String Id="UITextMenuAbsent">Ce composant ne sera pas disponible.</String>
+    <String Id="UITextMenuAdvertise">Ce composant sera installé à la demande.</String>
+    <String Id="UITextMenuAllCD">Ce composant sera installé en totalité pour être exécuté à partir du CD</String>
+    <String Id="UITextMenuAllLocal">Ce composant sera installé en totalité sur le disque dur local</String>
+    <String Id="UITextMenuAllNetwork">Ce composant sera installé en totalité pour être exécuté à partir du réseau</String>
+    <String Id="UITextMenuCD">Installation pour une exécution à partir du CD</String>
+    <String Id="UITextMenuLocal">Installation sur le disque dur local</String>
+    <String Id="UITextMenuNetwork">Installation pour une exécution à partir du réseau</String>
+    <String Id="UITextScriptInProgress">Collecte des informations nécessaires en cours...</String>
+    <String Id="UITextSelAbsentAbsent">Ce composant ne sera pas installé</String>
+    <String Id="UITextSelAbsentAdvertise">Ce composant sera configuré pour être installé à la demande</String>
+    <String Id="UITextSelAbsentCD">Ce composant sera installé pour être exécuté à partir du CD</String>
+    <String Id="UITextSelAbsentLocal">Ce composant sera installé sur le disque dur local</String>
+    <String Id="UITextSelAbsentNetwork">Ce composant sera installé pour être exécuté à partir du réseau</String>
+    <String Id="UITextSelAdvertiseAbsent">Ce composant ne sera plus disponible</String>
+    <String Id="UITextSelAdvertiseAdvertise">Installation à la demande</String>
+    <String Id="UITextSelAdvertiseCD">Ce composant sera disponible pour être exécuté à partir du CD</String>
+    <String Id="UITextSelAdvertiseLocal">Ce composant sera installé sur votre disque dur local</String>
+    <String Id="UITextSelAdvertiseNetwork">Ce composant sera disponible pour être exécuté à partir du réseau</String>
+    <String Id="UITextSelCDAbsent">Ce composant sera désinstallé en totalité et ne pourra plus être exécuté à partir du CD</String>
+    <String Id="UITextSelCDAdvertise">Ce composant ne pourra plus être exécuté à partir du CD et sera configuré pour être installé à la demande</String>
+    <String Id="UITextSelCDCD">Ce composant sera conservé pour être exécuté à partir du CD</String>
+    <String Id="UITextSelCDLocal">Ce composant ne pourra plus être exécuté à partir du CD et sera installé sur le disque dur local</String>
+    <String Id="UITextSelChildCostNeg">Ce composant libère [1] sur votre disque dur.</String>
+    <String Id="UITextSelChildCostPos">Ce composant nécessite la présence de [1] sur votre disque dur.</String>
+    <String Id="UITextSelCostPending">Calcul de l'espace nécessaire pour ce composant...</String>
+    <String Id="UITextSelLocalAbsent">Ce composant sera supprimé en totalité</String>
+    <String Id="UITextSelLocalAdvertise">Ce composant sera supprimé du disque dur local, mais sera configuré pour être installé à la demande</String>
+    <String Id="UITextSelLocalCD">Ce composant sera supprimé du disque dur local, mais pourra encore être exécuté à partir du CD</String>
+    <String Id="UITextSelLocalLocal">Ce composant sera conservé sur le disque dur local</String>
+    <String Id="UITextSelLocalNetwork">Ce composant sera supprimé de votre disque dur local, mais sera toujours disponible pour être exécuté à partir du réseau</String>
+    <String Id="UITextSelNetworkAbsent">Ce composant sera désinstallé en totalité et ne pourra plus être exécuté à partir du réseau</String>
+    <String Id="UITextSelNetworkAdvertise">Ce composant ne pourra plus être exécuté à partir du réseau et sera configuré pour être installé à la demande</String>
+    <String Id="UITextSelNetworkLocal">Ce composant ne pourra plus être exécuté à partir du réseau et sera installé sur le disque dur local</String>
+    <String Id="UITextSelNetworkNetwork">Ce composant sera conservé pour être exécuté à partir du réseau</String>
+    <String Id="UITextSelParentCostNegNeg">Ce composant libère [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants libèrent [4] sur votre disque dur.</String>
+    <String Id="UITextSelParentCostNegPos">Ce composant libère [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants nécessitent la présence de [4] sur votre disque dur.</String>
+    <String Id="UITextSelParentCostPosNeg">Ce composant nécessite la présence de [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants libèrent [4] sur votre disque dur.</String>
+    <String Id="UITextSelParentCostPosPos">Ce composant nécessite la présence de [1] sur votre disque dur. [2] sous-composants sur [3] sont sélectionnés. Les sous-composants nécessitent la présence de [4] sur votre disque dur.</String>
+    <String Id="UITextTimeRemaining">Durée restante : {[1] minute(s) }{[2] secondes}</String>
+    <String Id="UITextVolumeCostAvailable">Disponible</String>
+    <String Id="UITextVolumeCostDifference">Différences</String>
+    <String Id="UITextVolumeCostRequired">Nécessaire</String>
+    <String Id="UITextVolumeCostSize">Taille du disque</String>
+    <String Id="UITextVolumeCostVolume">Volume</String>
+
+</WixLocalization>
diff --git a/src/VBox/Installer/win/NLS/zh_TW.wxl b/src/VBox/Installer/win/NLS/zh_TW.wxl
index 9fb3a55..eaaaf60 100644
--- a/src/VBox/Installer/win/NLS/zh_TW.wxl
+++ b/src/VBox/Installer/win/NLS/zh_TW.wxl
@@ -1,600 +1,600 @@
-<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="65001" Culture="zh_TW">
-
-    <!--
-            Language Definition Include for VirtualBox WiX script.
-
-            Copyright (C) 2011-2016 Oracle Corporation
-
-            This file is part of VirtualBox Open Source Edition (OSE), as
-            available from http://www.virtualbox.org. This file is free software;
-            you can redistribute it and/or modify it under the terms of the GNU
-            General Public License (GPL) as published by the Free Software
-            Foundation, in version 2 as it comes in the "COPYING" file of the
-            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-    -->
-
-    <String Id="LANG">1024</String>
-    <String Id="LangName">正體中文</String>
-
-    <String Id="ButtonText_No">否(&N)</String>
-    <String Id="ButtonText_Yes">是(&Y)</String>
-    <String Id="ButtonText_Cancel">取消(&C)</String>
-    <String Id="ButtonText_Next">下一步(&N) ></String>
-    <String Id="ButtonText_Back">< 上一步(&B)</String>
-    <String Id="ButtonText_Browse">瀏覽(&O)</String>
-    <String Id="ButtonText_OK">確定(&K)</String>
-    <String Id="ButtonText_Check">檢查(&C)</String>
-    <String Id="ButtonText_Install">安裝(&I)</String>
-    <String Id="ButtonText_Remove">移除(&R)</String>
-    <String Id="ButtonText_Finish">完成(&F)</String>
-    <String Id="ButtonText_Repair">修理(&R)</String>
-    <String Id="ButtonText_Return">返回(&R)</String>
-    <String Id="ButtonText_Retry">重試(&T)</String>
-    <String Id="ButtonText_Ignore">忽略(&G)</String>
-    <String Id="ButtonText_Exit">結束(&X)</String>
-
-    <String Id="InstallModeCustom">自訂</String>
-    <String Id="Setup">設定</String>
-
-    <!---->
-
-    <String Id="StartMenu_License">授權</String>
-    <String Id="StartMenu_UserManual">使用者手冊</String>
-
-    <!---->
-
-    <String Id="VB_App">[ProductName] 應用程式。</String>
-    <String Id="VB_USBDriver">[ProductName] USB 裝置驅動程式針對 USB 裝置支援。</String>
-    <String Id="VB_Network">[ProductName] 網路裝置驅動程式針對網路支援。</String>
-    <String Id="VB_NetFltDriver">[ProductName] 驅動程式針對橋接網路。</String>
-    <String Id="VB_NetAdpDriver">[ProductName] 虛擬網路介面卡針對「僅限主機」網路。</String>
-    <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
-    <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
-
-  <String Id="VB_Python">VirtualBox 的 Python 支援。</String>
-
-    <!---->
-
-    <String Id="NeedAdmin">您需要有系統管理員特殊權限以安裝 (或解除安裝)[ProductName]!此安裝程式現在將中止。</String>
-    <String Id="WrongOS">此應用程式只能執行在 Windows XP 或以上。</String>
-    <String Id="Only32Bit">此應用程式只能執行在 32 位元的 Windows 系統。 請安裝 [ProductName] 的 64 位元版本!</String>
-    <String Id="Only64Bit">此應用程式只能執行在 64 位元的 Windows 系統。 請安裝 [ProductName] 的 32 位元版本!</String>
-    <String Id="SunFound">在此電腦發現舊的 Sun VirtualBox 安裝。 請先解除安裝此套件然後安裝 [ProductName]!</String>
-    <String Id="InnotekFound">在此電腦發現舊的 innotek VirtualBox 安裝。 請先解除安裝此套件然後安裝 [ProductName]!</String>
-
-    <!---->
-
-    <String Id="CancelDlg_Question">您確定要取消 [ProductName] 安裝嗎?</String>
-
-    <!---->
-
-    <String Id="WelcomeDlg_Header">歡迎使用 [ProductName] 安裝精靈</String>
-    <String Id="WelcomeDlg_Body">安裝精靈將在您的電腦安裝 [ProductName]。 按一下「下一步」繼續或「取消」結束安裝精靈。</String>
-
-    <!---->
-
-    <String Id="LicenseAgreementDlg_Header">最終使用者授權協議</String>
-    <String Id="LicenseAgreementDlg_Body">請仔細閱讀以下授權協議。</String>
-    <String Id="LicenseAgreementDlg_Accept">我接受授權協議中條款(&A)</String>
-    <String Id="LicenseAgreementDlg_Decline">我不接受授權協議中條款(&D)</String>
-
-    <!---->
-
-    <String Id="CheckSerialDlg_Header">序號</String>
-    <String Id="CheckSerialDlg_Body">請在以下欄位輸入您的序號。 您可以在 VirtualBox CD 盒內的貼紙找到。</String>
-    <String Id="CheckSerialDlg_Footer">序號輸入完成時,按一下以下「檢查」按鈕。</String>
-
-    <!---->
-
-    <String Id="WrongSerialDlg_Header">輸入的序號無效!</String>
-    <String Id="WrongSerialDlg_Desc1">請返回再次輸入您的序號。</String>
-    <String Id="WrongSerialDlg_Desc2">請記得,序號必須和印在貼紙上的拼字完全一樣。</String>
-
-    <!---->
-
-    <String Id="WarnSaveStatesDlg_Header">警告:</String>
-    <String Id="WarnSaveStatesDlg_Header2">已經的儲存狀態不相容!</String>
-    <String Id="WarnSaveStatesDlg_Desc">升級 [ProductName] 時,所有來自已經存在機器的儲存狀態不再能動作!安裝後,您必須手動捨棄。</String>
-    <String Id="WarnSaveStatesDlg_Proceed">立即進行安裝嗎?</String>
-
-    <!---->
-
-    <String Id="WarnTAPDevicesDlg_Header">主機介面</String>
-    <String Id="WarnTAPDevicesDlg_Desc">如果您的機器在先前版本使用某些主機介面。 在此安裝後您必須重新建立它們。</String>
-
-    <!---->
-
-    <String Id="NetCfgLocked">繼續安裝前,必須關閉以下應用程式:"[2]"</String>
-
-    <!---->
-
-    <String Id="CustomizeDlg_Location">位置:</String>
-    <String Id="CustomizeDlg_DiskUsage">磁碟使用量(&U)</String>
-    <String Id="CustomizeDlg_SelFeatures">選取您要安裝功能的方式。</String>
-    <String Id="CustomizeDlg_IconTree">按一下以下樹狀中圖示以變更安裝功能的方式。</String>
-    <String Id="CustomizeDlg_CustomSetup">自訂安裝</String>
-    <String Id="CustomizeDlg_SelItemDesc">CustomizeDlgItemDescription-CustomizeDlgItemDescription</String>
-    <String Id="CustomizeDlg_SelItemSize">CustomizeDlgItemSize-CustomizeDlgItemSize</String>
-    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
-
-    <!---->
-
-    <String Id="Customize2Dlg_Header">自訂</String>
-    <String Id="Customize2Dlg_Desc">請選擇以下選項:</String>
-    <String Id="Customize2Dlg_CreateStartMenuEntries">Create start menu entries</String>
-    <String Id="Customize2Dlg_CreateDesktopShortcut">在桌面建立捷徑</String>
-    <String Id="Customize2Dlg_CreateQuickLaunch">在快速啟動列建立捷徑</String>
-    <String Id="Customize2Dlg_RegisterFileExtensions">註冊文件關聯</String>
-
-    <!---->
-
-    <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
-This is default for older versions of Windows (pre-Vista).</String>
-    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
-This is default for newer versions of Windows (Vista and newer).</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
-    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
-
-    <!---->
-
-    <String Id="WarnDisconNetIfacesDlg_Title">警告:</String>
-    <String Id="WarnDisconNetIfacesDlg_Title2">網路介面</String>
-    <String Id="WarnDisconNetIfacesDlg_Desc">安裝 [ProductName] 網路功能將重設您的網路連線並暫時中斷網路連線。</String>
-    <String Id="WarnDisconNetIfacesDlg_Question">立即進行安裝嗎?</String>
-
-    <!---->
-
-    <String Id="DiskCostDlg_SpaceRequired">安裝選取功能所需的磁碟空間。</String>
-    <String Id="DiskCostDlg_NotEnoughSpace">反白的磁碟區(如果有)對於目前選取的功能沒有足夠的磁碟空間可以使用。 您可以從反白的磁碟區移除一些檔案,或選擇安裝較少功能在本機磁碟機,或選取不同目的地磁碟機。</String>
-    <String Id="DiskCostDlg_SpaceRequirements">磁碟空間需求</String>
-    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
-
-    <!---->
-
-    <String Id="BrowseDlg_BrowseDestFolder">瀏覽目的地資料夾</String>
-    <String Id="BrowseDlg_ChangeCurFolder">變更目前目的地資料夾</String>
-    <String Id="BrowseDlg_UpOneLevelTooltip">上一層</String>
-    <String Id="BrowseDlg_CreateNewFolderTooltip">建立新的資料夾</String>
-    <String Id="BrowseDlg_LookIn">瀏覽(&L):</String>
-    <String Id="BrowseDlg_FolderName">資料夾名稱(&F):</String>
-
-    <!---->
-
-    <String Id="VerifyReadyDlg_ReadyToBegin">安裝精靈準備好進行 [InstallMode] 安裝。</String>
-    <String Id="VerifyReadyDlg_ClickInstall">按一下「安裝」開始安裝。 如果您要檢閱或變更任何安裝設定,按一下「上一步」。  按一下「取消」結束精靈。</String>
-    <String Id="VerifyReadyDlg_ReadyToInstall">準備好安裝</String>
-
-    <!---->
-
-    <String Id="ExitDlg_ClickFinish">按一下「完成」按鈕結束安裝精靈。</String>
-    <String Id="ExitDlg_InstComplete">[ProductName] 安裝完成。</String>
-    <String Id="ExitDlg_StartVBox">安裝後啟動 [ProductName]</String>
-
-    <!---->
-
-    <String Id="FatalErrorDlg_Header">[ProductName] 安裝精靈太早結束</String>
-    <String Id="FatalErrorDlg_Desc">[ProductName] 安裝因為錯誤太早結束。 您的系統未做修改。 若要稍後安裝此程式,請再次執行安裝。</String>
-    <String Id="FatalErrorDlg_Footer">按一下「完成」按鈕結束安裝精靈。</String>
-
-    <!---->
-
-    <String Id="FilesInUse_Text">以下應用程式使用此安裝需要更新的檔案。 關閉這些應用程式接著按一下「重試(&R)」以繼續安裝或「取消」結束精靈。</String>
-    <String Id="FilesInUse_Description">某些需要更新的檔案目前使用中。</String>
-    <String Id="FilesInUse_Title">檔案使用中</String>
-
-    <!---->
-
-    <String Id="UserExitDlg_Header">[ProductName] 安裝精靈中斷</String>
-    <String Id="UserExitDlg_Desc">[ProductName] 安裝中斷。 您的系統未做修改。 若要稍後安裝此程式,請再次執行安裝。</String>
-    <String Id="UserExitDlg_Footer">按一下「完成」按鈕結束安裝精靈。</String>
-
-    <!---->
-
-    <String Id="ProgressDlg_PleaseWait">在安裝精靈安裝 [ProductName] 時請稍候。 這需要幾分鐘時間。</String>
-
-    <!---->
-
-    <String Id="ResumeDlg_Header">正在繼續 [ProductName] 安裝精靈</String>
-    <String Id="ResumeDlg_Desc">安裝精靈將在您的電腦完成 [ProductName] 的安裝。 按一下「安裝」以繼續或「取消」結束安裝精靈。</String>
-
-    <!---->
-
-    <String Id="MaintenanceTypeDlg_Header">修改、修復或移除安裝</String>
-    <String Id="MaintenanceTypeDlg_SelOption">選取您希望執行的操作。</String>
-    <String Id="MaintenanceTypeDlg_Repair">修復(&P)</String>
-    <String Id="MaintenanceTypeDlg_RepairText">修復在最近安裝狀態的錯誤 - 修復缺少或損毀的檔案、捷徑和登錄檔項目。</String>
-    <String Id="MaintenanceTypeDlg_RepairTooltip">修復安裝</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress1">正在修復</String>
-    <String Id="MaintenanceTypeDlg_RepairProgress2">repairs</String>
-    <String Id="MaintenanceTypeDlg_Remove">移除(&R)</String>
-    <String Id="MaintenanceTypeDlg_RemoveText">從電腦移除 [ProductName]。</String>
-    <String Id="MaintenanceTypeDlg_RemoveTooltip">移除安裝</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress1">正在移除</String>
-    <String Id="MaintenanceTypeDlg_RemoveProgress2">removes</String>
-
-    <!---->
-
-    <String Id="MaintenanceWelcomeDlg_Header">歡迎使用 [ProductName] 安裝精靈</String>
-    <String Id="MaintenanceWelcomeDlg_Desc">安裝精靈將允許您修復目前的安裝或從您的電腦移除 [ProductName]。 按一下「下一步」以繼續或「取消」結束安裝精靈。</String>
-
-    <!---->
-
-    <String Id="OutOfDiskDlg_InstallationExceeds">安裝所需的磁碟空間超過可用的磁碟空間。</String>
-    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">反白的磁碟區對於目前選取的功能沒有足夠的磁碟空間可以使用。 您可以從反白的磁碟區移除一些檔案,或選擇安裝較少功能在本機磁碟機,或選取不同目的地磁碟機。</String>
-    <String Id="OutOfDiskDlg_OutOfDiskSpace">磁碟空間不足</String>
-
-    <!---->
-
-    <String Id="OutOfRbDiskDlg_InstallationExceeds">安裝所需的磁碟空間超過可用的磁碟空間。</String>
-    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">反白的磁碟區對於目前選取的功能沒有足夠的磁碟空間可以使用。 您可以從反白的磁碟區移除一些檔案,或選擇安裝較少功能在本機磁碟機,或選取不同目的地磁碟機。</String>
-    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">磁碟空間不足</String>
-    <String Id="OutOfRbDiskDlg_Desc">或者,您可以選擇停用安裝程式的回復功能。 這允許安裝程式在任何方式中斷安裝時還原您電腦的原始狀態。 按一下「是」如果您希望承擔停用回復功能的風險。</String>
-
-    <!---->
-
-    <String Id="VerifyRemoveDlg_Header">移除 [ProductName]</String>
-    <String Id="VerifyRemoveDlg_Desc">您已經選擇從您的電腦移除程式。</String>
-    <String Id="VerifyRemoveDlg_ClickRemove">按一下「移除」以從您的電腦移除 [ProductName]。 如果您要檢閱或變更任何安裝設定,按一下「上一步」。  按一下「取消」結束精靈。</String>
-
-    <!---->
-
-    <String Id="VerifyRepairDlg_Header">修復 [ProductName]</String>
-    <String Id="VerifyRepairDlg_ReadyToBegin">安裝精靈準備好開始修復 [ProductName]。</String>
-    <String Id="VerifyRepairDlg_ClickRepair">按一下「修復」以修復 [ProductName] 的安裝。 如果您要檢閱或變更任何安裝設定,按一下「上一步」。  按一下「取消」結束精靈。</String>
-
-    <!---->
-
-    <String Id="WaitForCostingDlg_PleaseWait">在安裝程式完成判斷您的磁碟空間需求時請稍候。</String>
-
-    <!---->
-
-    <String Id="MsiRMFilesInUse_Text">以下應用程式使用此安裝需要更新的檔案。 您可以讓安裝精靈關閉並嘗試重新啟動這些應用程式或稍後重新啟動電腦。</String>
-    <String Id="MsiRMFilesInUse_Description">某些需要更新的檔案目前使用中。</String>
-    <String Id="MsiRMFilesInUse_Title">檔案使用中</String>
-    <String Id="MsiRMFilesInUse_UseRM">關閉應用程式並嘗試重新啟動它們。 (&C)</String>
-    <String Id="MsiRMFilesInUse_DontUseRM">不要關閉應用程式,將需要重新開機。 (&D)</String>
-
-    <!-- The following strings are internally used by WiX and MSI -->
-    <String Id="Error0">{{嚴重錯誤:}}</String>
-    <String Id="Error1">{{錯誤 [1]。}}</String>
-    <String Id="Error2">警告 [1]。</String>
-    <String Id="Error3"/>
-    <String Id="Error4">資訊 [1]。</String>
-    <String Id="Error5">安裝程式安裝這個封裝時發生未預期的錯誤。 這可能表示這個封裝的問題。 錯誤碼 [1]。 {{引數:[2], [3], [4]}}</String>
-    <String Id="Error6"/>
-    <String Id="Error7">{{磁碟已滿:}}</String>
-    <String Id="Error8">動作 [Time]:[1]. [2]</String>
-    <String Id="Error9">[ProductName]</String>
-    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
-    <String Id="Error11">訊息類型:[1], 引數:[2]</String>
-    <String Id="Error12">=== 開啟記錄時間:[Date]  [Time] ===</String>
-    <String Id="Error13">=== 停止記錄時間:[Date]  [Time] ===</String>
-    <String Id="Error14">動作開始 [Time]:[1]。</String>
-    <String Id="Error15">動作結束 [Time]:[1]。 傳回值 [2]。</String>
-    <String Id="Error16">剩餘時間:{[1] 分 }{[2] 秒}</String>
-    <String Id="Error17">記憶體不足,重試之前先關閉其它應用程式。</String>
-    <String Id="Error18">安裝程式不再有回應。</String>
-    <String Id="Error19">安裝程式已經永久中止。</String>
-    <String Id="Error20">在 Windows 組態 [ProductName] 時請稍候</String>
-    <String Id="Error21">正在收集所需的資訊...</String>
-    <String Id="Error22">正在移除此應用程式的舊版本...</String>
-    <String Id="Error23">正在準備移除此應用程式的舊版本...</String>
-    <String Id="Error32">{[ProductName] } 安裝成功完成。</String>
-    <String Id="Error33">{[ProductName] } 安裝失敗。</String>
-    <String Id="Error1101">讀取檔案錯誤:[2]。{{ 系統錯誤 [3]。}} 檢查檔案是否存在,並且可以存取。</String>
-    <String Id="Error1301">無法建立目錄 '[2]'。 同名的目錄已經存在。 取消安裝並嘗試安裝到不同位置。</String>
-    <String Id="Error1302">請插入磁碟:[2]</String>
-    <String Id="Error1303">安裝程式的權限不足,無法存取這個目錄:[2],安裝無法繼續,以系統管理員的身份登入或是連絡您的系統管理員。</String>
-    <String Id="Error1304">寫入至檔案時發生錯誤:[2]。請檢查您可以存取那個目錄。</String>
-    <String Id="Error1305">讀取檔案時發生錯誤:[2]。{{ 系統錯誤 [3]。}} 請檢查檔案是否存在,並且可以存取。</String>
-    <String Id="Error1306">另一個應用程序獨占存取檔案 '[2]'。 請關閉所有其它應用程式,然後按一下「重試」。</String>
-    <String Id="Error1307">磁碟空間不足,無法安裝這個檔案:[2]。釋放一些磁碟空間然後按一下「重試」,或按一下「取消」結束。</String>
-    <String Id="Error1308">找不到來源檔案:[2]。 請驗證檔案存在並且您可以存取它。</String>
-    <String Id="Error1309">讀取檔案錯誤:[3]。{{ 系統錯誤 [2]。}}  請檢查檔案是否存在,並且可以存取。</String>
-    <String Id="Error1310">寫入至檔案時發生錯誤:[3]。{{ 系統錯誤 [2]。}}  請檢查您可以存取那個目錄。</String>
-    <String Id="Error1311">找不到來源檔案 {{(cabinet)}}:[2]。 請檢查檔案存在並且可以存取。</String>
-    <String Id="Error1312">無法建立目錄 '[2]'。 同名的檔案已經存在。 請重新命名或移除檔案並按一下「重試」,或按一下「取消」結束。</String>
-    <String Id="Error1313">磁碟區 [2] 目前不可使用。 請選取另一個。</String>
-    <String Id="Error1314">指定的路徑 '[2]' 不可使用。</String>
-    <String Id="Error1315">無法寫入指定的資料夾:[2]。</String>
-    <String Id="Error1316">嘗試從檔案讀取時發生網路錯誤:[2]</String>
-    <String Id="Error1317">嘗試建立目錄時發生錯誤:[2]</String>
-    <String Id="Error1318">嘗試建立目錄時發生網路錯誤:[2]</String>
-    <String Id="Error1319">嘗試開啟來源檔案時發生網路錯誤:[2]</String>
-    <String Id="Error1320">指定的路徑太長:[2]</String>
-    <String Id="Error1321">Installer 的權限不足以修改這個檔案:[2]。</String>
-    <String Id="Error1322">資料夾路徑的部份 '[2]' 無效。其為空或超過系統允許的長度。</String>
-    <String Id="Error1323">資料夾路徑 '[2]' 包含無效的字在資料夾路徑。</String>
-    <String Id="Error1324">資料夾路徑 '[2]' 包含無效字元。</String>
-    <String Id="Error1325">'[2]' 不是有效的短檔名。</String>
-    <String Id="Error1326">取得檔案安全性錯誤:[3] GetLastString:[2]</String>
-    <String Id="Error1327">無效的磁碟機:[2]</String>
-    <String Id="Error1328">套用修正檔到檔案 [2] 錯誤。 可能已由其他主機更新,且這個修正檔不再能修改。 更多資訊請聯絡您的修正檔供應商。 {{系統錯誤:[3]}}</String>
-    <String Id="Error1329">無法安裝所需的檔案,因為 cabinet 檔案 [2] 沒有數位簽章。 這表示 cabinet 檔案已經損毀。</String>
-    <String Id="Error1330">無法安裝所需的檔案,因為 cabinet 檔案 [2] 有無效的數位簽章。 這表示 cabinet 檔案已經損毀。 {{  WinVerifyTrust 返回錯誤 [3]。}}</String>
-    <String Id="Error1331">修正複製 [2] 檔案失敗:CRC 錯誤。</String>
-    <String Id="Error1332">修正移動 [2] 檔案失敗:CRC 錯誤。</String>
-    <String Id="Error1333">修正路徑 [2] 檔案失敗:CRC 錯誤。</String>
-    <String Id="Error1334">無法安裝 '[2]' 因為在 cainet 檔案 '[3]' 中找不到檔案。 這表示網路錯誤、從 CD-ROM 讀取錯誤、或此安裝包問題。</String>
-    <String Id="Error1335">此安裝所需的 cabinet 檔案 '[2]' 已經損毀且無法使用。 這表示網路錯誤、從 CD-ROM 讀取錯誤、或此安裝包問題。</String>
-    <String Id="Error1336">完成這個安裝所需的暫存檔案建立錯誤。 {{  資料夾:[3]。 系統錯誤碼:[2]}}</String>
-    <String Id="Error1401">無法建立機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1402">無法開啟機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1403">無法從機碼 [3] 刪除值:[2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1404">無法刪除機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1405">無法從機碼 [3] 讀取值 [2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1406">無法寫入值 [2] 至機碼 [3]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1407">無法取得機碼 [2] 的值名稱。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1408">無法取得機碼 [2] 的子機碼名稱。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1409">無法讀取機碼 [2] 的安全資訊。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
-    <String Id="Error1410">無法增加可用的登錄空間。 此應用程式須要 [2] KB 以上的空間。</String>
-    <String Id="Error1500">其它的安裝正在進行中,您必須完成該項安裝之後才能繼續。</String>
-    <String Id="Error1501">存取保全資料時發生錯誤,請確定 Windows Installer 是否正確組態,然後再試一次。</String>
-    <String Id="Error1502">使用者 '[2]' 先前已經啟動產品 '[3]' 的安裝。 該使用者在可以使用該產品前需要再次執行安裝。您目前的安裝現在將繼續。</String>
-    <String Id="Error1503">使用者 '[2]' 先前已經啟動產品 '[3]' 的安裝。 該使用者在可以使用該產品前需要再次執行安裝。</String>
-    <String Id="Error1601">磁碟空間不足 -- 磁碟區:'[2]',所需空間:[3] KB; 可用空間:[4] KB。 釋放一些磁碟空間並重試。</String>
-    <String Id="Error1602">您確定要取消嗎?</String>
-    <String Id="Error1603">檔案 [2][3] 正在由 { 以下處理程序:名稱:[4],Id:[5],視窗標題:'[6]'} 使用中。 關閉該應用程式並重試。</String>
-    <String Id="Error1604">已經安裝產品 '[2]',此產品防止安裝。 兩個產品不相容。</String>
-    <String Id="Error1605">磁碟區 '[2]' 沒有足夠的磁碟空間以啟用復原的安裝繼續。 需要 [3] KB,但只有 [4] KB 可以使用。 按一下「忽略」以不儲存復原資訊繼續安裝,按一下「重試」以再次檢查可用空間,或按一下「取消」以離開安裝。</String>
-    <String Id="Error1606">無法存取網路位置 [2]。</String>
-    <String Id="Error1607">繼續安裝前應該關閉以下應用程式:</String>
-    <String Id="Error1608">無法在本機中找到任何先前已安裝的合格版本。</String>
-    <String Id="Error1609">套用安全性設定時發生錯誤。 [2] 不是有效的使用者或群組。 這會是安裝包的問題或連線到網路上網域控制站的問題。 檢查您的網路連線並按一下「重試」,或「取消」以結束安裝。 {{找不到使用者的 SID,系統錯誤 [3]}}</String>
-    <String Id="Error1701">金鑰 [2] 是無效的,檢查您輸入的金鑰是否正確。</String>
-    <String Id="Error1702">要繼續設定 [2] 之前,Installer 必須重新啟動您的系統,按「是」將立即重新啟動;如果您想要稍後手動重新啟動請按「否」。</String>
-    <String Id="Error1703">您必須重新啟動您的系統,對 [2] 所做的組態變更才會生效,按「是」立即重新啟動;如果您想要稍後手動重新啟動請按「否」。</String>
-    <String Id="Error1704">安裝 [2] 目前已經暫停,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
-    <String Id="Error1705">另一個安裝這個產品的程式正在進行中,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
-    <String Id="Error1706">找不到產品 [2] 的安裝包。 嘗試使用安裝包 '[3]' 的有效副本嘗試再次安裝。</String>
-    <String Id="Error1707">安裝成功完成。</String>
-    <String Id="Error1708">安裝失敗。</String>
-    <String Id="Error1709">產品:[2] -- [3]</String>
-    <String Id="Error1710">您可以將電腦還原成先前的狀態或稍後繼續安裝,您希望還原嗎?</String>
-    <String Id="Error1711">寫入安裝資訊至磁碟時發生錯誤,確定磁碟的空間足夠,並按「重試」,或按「取消」來結束安裝。</String>
-    <String Id="Error1712">還原您的電腦成之前的狀態所需的一個或數個檔案找不到。 無法還原。</String>
-    <String Id="Error1713">[2] 無法安裝其所需的產品之一。 請聯絡您的技術支援小組。 {{系統字串:[3]。}}</String>
-    <String Id="Error1714">無法移除 [2] 的舊版本。 請聯絡您的技術支援小組。 {{系統字串 [3]。}}</String>
-    <String Id="Error1715">已經安裝 [2]</String>
-    <String Id="Error1716">已經組態 [2]</String>
-    <String Id="Error1717">已經移除 [2]</String>
-    <String Id="Error1718">數位簽章原則拒絕檔案 [2] 。</String>
-    <String Id="Error1719">無法存取 Windows Installer 服務。 如果您正執行在 Windows 安全模式,這將會發生。 請聯絡您的技術支援人員以取得協助。</String>
-    <String Id="Error1720">這個 Windows Installer 封裝有問題。 完成這個安裝需要的指令碼無法執行。 聯絡您的支援人員或封裝供應商。 {{自訂動作 [2] 指令碼錯誤 [3],[4]:[5] 行 [6],欄 [7],[8] }}</String>
-    <String Id="Error1721">這個 Windows Installer 封裝有問題。 完成這個安裝需要的程式無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置:[3],命令:[4] }}</String>
-    <String Id="Error1722">這個 Windows Installer 封裝有問題。 以 setup 部分執行的程式無法如預期完成。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置:[3],命令:[4] }}</String>
-    <String Id="Error1723">這個 Windows Installer 封裝有問題。 完成這個安裝需要的 DLL 無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],項目:[3],程式庫:[4] }}</String>
-    <String Id="Error1724">移除成功完成。</String>
-    <String Id="Error1725">移除失敗。</String>
-    <String Id="Error1726">宣告成功完成。</String>
-    <String Id="Error1727">宣告失敗。</String>
-    <String Id="Error1728">組態成功完成。</String>
-    <String Id="Error1729">組態失敗。</String>
-    <String Id="Error1730">您必須是管理者以移除這個應用程式。 要移除這個應用程式,您可以使用系統管理員登入或聯絡您的技術支援群組取得協助。</String>
-    <String Id="Error1801">路徑 [2] 無效。 請指定有效的路徑。</String>
-    <String Id="Error1802">記憶體不足,重試之前先關閉其它應用程式。</String>
-    <String Id="Error1803">磁碟機 [2] 中沒有磁片,請插入磁片然後重試,或按「取消」回到上次選取的磁碟區。</String>
-    <String Id="Error1804">磁碟機 [2] 中沒有磁片,請插入磁片然後按「重試」,或按「取消」回到瀏覽對話方塊,並選取不同的磁碟區。</String>
-    <String Id="Error1805">資料夾 [2] 不存在,請輸入一個現有的資料夾路徑。</String>
-    <String Id="Error1806">您的權限不足,無法讀取這個資料夾。</String>
-    <String Id="Error1807">無法決定合法的目的資料夾。</String>
-    <String Id="Error1901">嘗試讀取來源安裝資料庫時發生錯誤:[2]。</String>
-    <String Id="Error1902">正在排定重新開機作業:正在更改檔案名稱 [2] 成 [3],必須重新開機才能完成作業。</String>
-    <String Id="Error1903">正在排定重新開機作業:正在刪除檔案 [2],必須重新開機才能完成作業。</String>
-    <String Id="Error1904">註冊模組 [2] 失敗。HRESULT [3]。連絡您的支援人員。</String>
-    <String Id="Error1905">取消註冊模組 [2] 失敗。HRESULT [3]。連絡您的支援人員。</String>
-    <String Id="Error1906">無法預存封裝 [2]。錯誤:[3]。請連絡支援人員。</String>
-    <String Id="Error1907">無法註冊字型 [2]。 請確認是否有足夠的權限及系統支援。</String>
-    <String Id="Error1908">無法解除註冊字型 [2]。 請確認您有足夠的權限來移除字型。</String>
-    <String Id="Error1909">無法建立捷徑 [2]。 請確認目地資料夾是否存在及您的存取權。</String>
-    <String Id="Error1910">無法移除捷徑 [2]。 請確認目地資料夾是否存在及您的存取權。</String>
-    <String Id="Error1911">無法註冊檔案 [2] 的類型程式庫。 請連絡系統支援人員。</String>
-    <String Id="Error1912">無法解除註冊檔案 [2] 的 type library。 請連絡系統支援人員。</String>
-    <String Id="Error1913">無法更新 ini 檔 [2][3]。 請確認檔案是否存在及您的存取權。</String>
-    <String Id="Error1914">無法預定在重開機時將檔案 [2] 取代 [3]。 請確認您有 [3] 的存取權。</String>
-    <String Id="Error1915">移除 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]:[3]。請連絡系統支援人員。</String>
-    <String Id="Error1916">安裝 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]:[3]。請連絡系統支援人員。</String>
-    <String Id="Error1917">移除 ODBC 驅動程式管理員錯誤:[4],ODBC 錯誤 [2]:[3]。請確認您有足夠權限。</String>
-    <String Id="Error1918">安裝 ODBC 驅動程式管理員錯誤:[4],ODBC 錯誤 [2]:[3]。請確認檔案[4]存在並可存取。</String>
-    <String Id="Error1919">設定 ODBC 資料來源錯誤:[4],ODBC 錯誤 [2]:[3]。請確認檔案[4]存在並可存取。</String>
-    <String Id="Error1920">啟動服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
-    <String Id="Error1921">停止服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
-    <String Id="Error1922">刪除服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
-    <String Id="Error1923">無法安裝服務 '[2]' ([3]) 。 請確認您有足夠的特殊權限以啟動系統服務。</String>
-    <String Id="Error1924">無法更新環境變數 '[2]'。 請確認您有足夠的特殊權限以修改環境變數。</String>
-    <String Id="Error1925">您沒有足夠的特殊權限使電腦的所有使用者都完成此安裝。請以系統管理員權限登入,接著再重試此安裝。</String>
-    <String Id="Error1926">無法設定檔案 '[3]' 的檔案安全性。 錯誤:[2]。 請確認您有足夠的特殊權限以修改此檔案的安全性權限。</String>
-    <String Id="Error1927">這台電腦並未安裝 Component Services (COM+ 1.0)。這項安裝需要有 Component Services 才能進行。Component Services 包含在 Windows XP 中。</String>
-    <String Id="Error1928">登錄 COM+ 應用程式時發生錯誤。請聯絡您的支援人員以取得其他資訊。</String>
-    <String Id="Error1929">解除 COM+ 應用程式登錄時發生錯誤。請聯絡您的支援人員以取得其他資訊。</String>
-    <String Id="Error1930">無法變更服務 '[2]' ([3]) 的描述。</String>
-    <String Id="Error1931">Windows Installer 服務無法更新系統檔案 [2] 因為檔案受 Windows 保護。 您可能需要更新您的作業系統使這個程式正確動作。 {{{封裝版本:[3],受 OS 保護的版本:[4]}}</String>
-    <String Id="Error1932">Windows Installer 服務無法更新受保護的 Windows 檔案 [2]。 {{封裝版本:[3],受 OS 保護的版本:[4],SFP 錯誤:[5]}}</String>
-    <String Id="Error1933">Windows Installer 服務無法更新一個或數個受保護的 Windows 檔案。 {{SFP 字串:[2]。 受保護的檔案清單:\r\n[3]}}</String>
-    <String Id="Error1934">電腦的原則停用使用者安裝。</String>
-    <String Id="Error1935">組件元件 [2] 的安裝期間發生錯誤。 HRESULT:[3]。 {{組件介面:[4],函數:[5],組件名稱:[6]}}</String>
-
-    <!-- Own / special errors -->
-    <String Id="Error25001">需要關閉應用程式 "[2]" 以繼續關閉。</String>
-
-    <String Id="ProgressTextInstallValidate">正在驗證安裝</String>
-    <String Id="ProgressTextInstallFiles">正在複製新檔案</String>
-    <String Id="ProgressTextInstallFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
-    <String Id="ProgressTextInstallAdminPackage">正在複製網路安裝檔案</String>
-    <String Id="ProgressTextInstallAdminPackageTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
-    <String Id="ProgressTextFileCost">正在計算空間需求</String>
-    <String Id="ProgressTextCostInitialize">正在計算空間需求</String>
-    <String Id="ProgressTextCostFinalize">正在計算空間需求</String>
-    <String Id="ProgressTextCreateShortcuts">正在建立捷徑</String>
-    <String Id="ProgressTextCreateShortcutsTemplate">捷徑:[1]</String>
-    <String Id="ProgressTextPublishComponents">正在發佈合格的元件</String>
-    <String Id="ProgressTextPublishComponentsTemplate">元件 ID:[1], 公佈者:[2]</String>
-    <String Id="ProgressTextPublishFeatures">正在發佈產品功能</String>
-    <String Id="ProgressTextPublishFeaturesTemplate">功能:[1]</String>
-    <String Id="ProgressTextPublishProduct">正在發佈產品資訊</String>
-    <String Id="ProgressTextRegisterClassInfo">正在登錄類別伺服器</String>
-    <String Id="ProgressTextRegisterClassInfoTemplate">類別 Id:[1]</String>
-    <String Id="ProgressTextRegisterExtensionInfo">正在登錄擴充伺服器</String>
-    <String Id="ProgressTextRegisterExtensionInfoTemplate">副檔名 [1]</String>
-    <String Id="ProgressTextRegisterMIMEInfo">正在登錄 MIME 資訊</String>
-    <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME 內容類型:[1],副檔名:[2]</String>
-    <String Id="ProgressTextRegisterProgIdInfo">正在登錄程式辨識字元</String>
-    <String Id="ProgressTextRegisterProgIdInfoTemplate">ProgId: [1]</String>
-    <String Id="ProgressTextAllocateRegistrySpace">正在配置登錄空間</String>
-    <String Id="ProgressTextAllocateRegistrySpaceTemplate">可用空間:[1]</String>
-    <String Id="ProgressTextAppSearch">正在搜尋已安裝的應用程式</String>
-    <String Id="ProgressTextAppSearchTemplate">內容:[1], 簽章:[2]</String>
-    <String Id="ProgressTextBindImage">正在繫結執行檔</String>
-    <String Id="ProgressTextBindImageTemplate">檔案:[1]</String>
-    <String Id="ProgressTextCCPSearch">正在搜尋查詢產品</String>
-    <String Id="ProgressTextCreateFolders">正在建立資料夾</String>
-    <String Id="ProgressTextCreateFoldersTemplate">資料夾:[1]</String>
-    <String Id="ProgressTextDeleteServices">正在刪除服務</String>
-    <String Id="ProgressTextDeleteServicesTemplate">服務:[1]</String>
-    <String Id="ProgressTextDuplicateFiles">正在建立重複檔案</String>
-    <String Id="ProgressTextDuplicateFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
-    <String Id="ProgressTextFindRelatedProducts">正在搜尋相關的應用程式</String>
-    <String Id="ProgressTextFindRelatedProductsTemplate">找到應用程式:[1]</String>
-    <String Id="ProgressTextInstallODBC">正在安裝 ODBC 元件</String>
-    <String Id="ProgressTextInstallServices">正在安裝新服務</String>
-    <String Id="ProgressTextInstallServicesTemplate">服務:[2]</String>
-    <String Id="ProgressTextLaunchConditions">正在評估啟動條件</String>
-    <String Id="ProgressTextMigrateFeatureStates">正在從相關的應用程式遷移功能狀態</String>
-    <String Id="ProgressTextMigrateFeatureStatesTemplate">應用程式:[1]</String>
-    <String Id="ProgressTextMoveFiles">正在移動檔案</String>
-    <String Id="ProgressTextMoveFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
-    <String Id="ProgressTextPatchFiles">正在修補檔案</String>
-    <String Id="ProgressTextPatchFilesTemplate">檔案:[1], 目錄:[2], 大小:[3]</String>
-    <String Id="ProgressTextProcessComponents">正在更新元件註冊</String>
-    <String Id="ProgressTextRegisterComPlus">正在註冊 COM+ 應用程式和元件</String>
-    <String Id="ProgressTextRegisterComPlusTemplate">AppId:[1]{{, AppType:[2],使用者:[3],RSN:[4]}}</String>
-    <String Id="ProgressTextRegisterFonts">正在註冊字型</String>
-    <String Id="ProgressTextRegisterFontsTemplate">字型:[1]</String>
-    <String Id="ProgressTextRegisterProduct">正在註冊產品</String>
-    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
-    <String Id="ProgressTextRegisterTypeLibraries">正在登錄類別程式庫</String>
-    <String Id="ProgressTextRegisterTypeLibrariesTemplate">LibID: [1]</String>
-    <String Id="ProgressTextRegisterUser">正在登錄使用者</String>
-    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
-    <String Id="ProgressTextRemoveDuplicateFiles">正在移除重複的檔案</String>
-    <String Id="ProgressTextRemoveDuplicateFilesTemplate">檔案:[1], 目錄:[9]</String>
-    <String Id="ProgressTextRemoveEnvironmentStrings">正在更新環境字串</String>
-    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">名稱:[1], 數值:[2], 動作:[3]</String>
-    <String Id="ProgressTextRemoveExistingProducts">正在移除應用程式</String>
-    <String Id="ProgressTextRemoveExistingProductsTemplate">應用程式:[1], 命令列:[2]</String>
-    <String Id="ProgressTextRemoveFiles">正在移除檔案</String>
-    <String Id="ProgressTextRemoveFilesTemplate">檔案:[1], 目錄:[9]</String>
-    <String Id="ProgressTextRemoveFolders">正在移除資料夾</String>
-    <String Id="ProgressTextRemoveFoldersTemplate">資料夾:[1]</String>
-    <String Id="ProgressTextRemoveIniValues">正在移除 INI 檔案項目</String>
-    <String Id="ProgressTextRemoveIniValuesTemplate">檔案:[1], 區段:[2], 機碼:[3], 數值:[4]</String>
-    <String Id="ProgressTextRemoveODBC">正在移除 ODBC 元件</String>
-    <String Id="ProgressTextRemoveRegistryValues">正在移除系統登錄檔數值</String>
-    <String Id="ProgressTextRemoveRegistryValuesTemplate">機碼:[1], 名稱:[2]</String>
-    <String Id="ProgressTextRemoveShortcuts">正在移除捷徑</String>
-    <String Id="ProgressTextRemoveShortcutsTemplate">捷徑:[1]</String>
-    <String Id="ProgressTextRMCCPSearch">正在搜尋查詢產品</String>
-    <String Id="ProgressTextSelfRegModules">正在註冊模組</String>
-    <String Id="ProgressTextSelfRegModulesTemplate">檔案:[1], 資料夾:[2]</String>
-    <String Id="ProgressTextSelfUnregModules">正在解除模組登錄</String>
-    <String Id="ProgressTextSelfUnregModulesTemplate">檔案:[1], 資料夾:[2]</String>
-    <String Id="ProgressTextSetODBCFolders">正在初始化 ODBC 目錄</String>
-    <String Id="ProgressTextStartServices">正在啟動服務</String>
-    <String Id="ProgressTextStartServicesTemplate">服務:[1]</String>
-    <String Id="ProgressTextStopServices">正在停止服務</String>
-    <String Id="ProgressTextStopServicesTemplate">服務:[1]</String>
-    <String Id="ProgressTextUnpublishComponents">正在取消元件公佈</String>
-    <String Id="ProgressTextUnpublishComponentsTemplate">元件 ID:[1], 公佈者:[2]</String>
-    <String Id="ProgressTextUnpublishFeatures">正在取消功能公佈</String>
-    <String Id="ProgressTextUnpublishFeaturesTemplate">功能:[1]</String>
-    <String Id="ProgressTextUnregisterClassInfo">解除類別伺服器登錄</String>
-    <String Id="ProgressTextUnregisterClassInfoTemplate">類別 Id:[1]</String>
-    <String Id="ProgressTextUnregisterComPlus">正在解除 COM+ 應用程式和元件登錄</String>
-    <String Id="ProgressTextUnregisterComPlusTemplate">AppId: [1]{{, AppType: [2]}}</String>
-    <String Id="ProgressTextUnregisterExtensionInfo">正在解除擴充伺服器登錄</String>
-    <String Id="ProgressTextUnregisterExtensionInfoTemplate">副檔名 [1]</String>
-    <String Id="ProgressTextUnregisterFonts">正在解除字型登錄</String>
-    <String Id="ProgressTextUnregisterFontsTemplate">字型:[1]</String>
-    <String Id="ProgressTextUnregisterMIMEInfo">正在解除 MIME 資訊登錄</String>
-    <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME 內容類型:[1],副檔名:[2]</String>
-    <String Id="ProgressTextUnregisterProgIdInfo">正在解除程式識別碼登錄</String>
-    <String Id="ProgressTextUnregisterProgIdInfoTemplate">ProgId: [1]</String>
-    <String Id="ProgressTextUnregisterTypeLibraries">正在解除類別程式庫登錄</String>
-    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">LibID: [1]</String>
-    <String Id="ProgressTextWriteEnvironmentStrings">正在更新環境字串</String>
-    <String Id="ProgressTextWriteEnvironmentStringsTemplate">名稱:[1], 數值:[2], 動作:[3]</String>
-    <String Id="ProgressTextWriteIniValues">正在寫入 INI 檔案數值</String>
-    <String Id="ProgressTextWriteIniValuesTemplate">檔案:[1], 區段:[2], 機碼:[3], 數值:[4]</String>
-    <String Id="ProgressTextWriteRegistryValues">正在寫入系統登錄檔數值</String>
-    <String Id="ProgressTextWriteRegistryValuesTemplate">機碼:[1],名稱:[2],值:[3]</String>
-    <String Id="ProgressTextAdvertise">正在宣告應用程式</String>
-    <String Id="ProgressTextGenerateScript">正在產生動作的 script 操作:</String>
-    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
-    <String Id="ProgressTextInstallSFPCatalogFile">正在安裝系統目錄</String>
-    <String Id="ProgressTextInstallSFPCatalogFileTemplate">檔案:[1],依存關係:[2]</String>
-    <String Id="ProgressTextMsiPublishAssemblies">正在發佈組件資訊</String>
-    <String Id="ProgressTextMsiPublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
-    <String Id="ProgressTextMsiUnpublishAssemblies">正在取消資訊公佈</String>
-    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
-    <String Id="ProgressTextRollback">回復動作:</String>
-    <String Id="ProgressTextRollbackTemplate">[1]</String>
-    <String Id="ProgressTextRollbackCleanup">正在移除備份檔案</String>
-    <String Id="ProgressTextRollbackCleanupTemplate">檔案:[1]</String>
-    <String Id="ProgressTextUnmoveFiles">正在移除移動的檔案</String>
-    <String Id="ProgressTextUnmoveFilesTemplate">檔案:[1], 目錄:[9]</String>
-    <String Id="ProgressTextUnpublishProduct">正在取消發佈產品資訊</String>
-
-    <String Id="UITextbytes">位元組</String>
-    <String Id="UITextGB">GB</String>
-    <String Id="UITextKB">KB</String>
-    <String Id="UITextMB">MB</String>
-    <String Id="UITextMenuAbsent">整個功能將不可用</String>
-    <String Id="UITextMenuAdvertise">需要時將安裝的功能</String>
-    <String Id="UITextMenuAllCD">整個功能將會安裝成從 CD 上執行</String>
-    <String Id="UITextMenuAllLocal">整個功能將會安裝到本機硬碟</String>
-    <String Id="UITextMenuAllNetwork">整個功能將會安裝成從網路上執行</String>
-    <String Id="UITextMenuCD">將會安裝成從 CD 上執行</String>
-    <String Id="UITextMenuLocal">將會安裝到本機硬碟</String>
-    <String Id="UITextMenuNetwork">將會安裝成從網路執行</String>
-    <String Id="UITextScriptInProgress">正在收集所需的資訊...</String>
-    <String Id="UITextSelAbsentAbsent">這個功能將保持未安裝的狀態</String>
-    <String Id="UITextSelAbsentAdvertise">這個功能會設定成視需要進行安裝</String>
-    <String Id="UITextSelAbsentCD">這個功能將會安裝成從 CD 執行</String>
-    <String Id="UITextSelAbsentLocal">這個功能將會安裝在本機硬碟中</String>
-    <String Id="UITextSelAbsentNetwork">這個功能將會安裝成從網路執行</String>
-    <String Id="UITextSelAdvertiseAbsent">這個功能將無法使用</String>
-    <String Id="UITextSelAdvertiseAdvertise">將會視需要進行安裝</String>
-    <String Id="UITextSelAdvertiseCD">這個功能可以從 CD 上執行</String>
-    <String Id="UITextSelAdvertiseLocal">這個功能將安裝在您的本機硬碟</String>
-    <String Id="UITextSelAdvertiseNetwork">這個功能可以從網路執行</String>
-    <String Id="UITextSelCDAbsent">這個功能將完整解除安裝,您將不能從 CD 執行</String>
-    <String Id="UITextSelCDAdvertise">這個功能會從 CD 執行變更成視需要進行安裝</String>
-    <String Id="UITextSelCDCD">這個功能仍將從 CD 執行</String>
-    <String Id="UITextSelCDLocal">這個功能將會從 CD 執行變更為安裝在本機硬碟中</String>
-    <String Id="UITextSelChildCostNeg">這個功能會在您的硬碟釋放 [1] 。</String>
-    <String Id="UITextSelChildCostPos">這個功能要求 [1] 在您的硬碟上。</String>
-    <String Id="UITextSelCostPending">正在編譯這個功能的花費...</String>
-    <String Id="UITextSelLocalAbsent">這個功能將會完整移除</String>
-    <String Id="UITextSelLocalAdvertise">這個功能會從您的本機硬碟上移除,但是會設定成視需要進行安裝</String>
-    <String Id="UITextSelLocalCD">這個功能將會從您的本機硬碟中移除,但是仍然可以從 CD 執行</String>
-    <String Id="UITextSelLocalLocal">這個功能將會保留在您的本機硬碟中</String>
-    <String Id="UITextSelLocalNetwork">這個功能將會從您的本機硬碟中移除,但是仍然可從網路上執行</String>
-    <String Id="UITextSelNetworkAbsent">這個功能將完整解除安裝,您將不能從網路執行</String>
-    <String Id="UITextSelNetworkAdvertise">這個功能將會從網路執行變更成視需要進行安裝</String>
-    <String Id="UITextSelNetworkLocal">這個功能將會從網路執行變更為安裝在本機硬碟中。</String>
-    <String Id="UITextSelNetworkNetwork">這個功能仍將保留成從網路執行</String>
-    <String Id="UITextSelParentCostNegNeg">這個功能在您的硬碟釋放 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟釋放 [4] 。</String>
-    <String Id="UITextSelParentCostNegPos">這個功能在您的硬碟釋放 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟需要 [4] 。</String>
-    <String Id="UITextSelParentCostPosNeg">這個功能在您的硬碟需要 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟釋放 [4] 。</String>
-    <String Id="UITextSelParentCostPosPos">這個功能在您的硬碟需要 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟需要 [4] 。</String>
-    <String Id="UITextTimeRemaining">剩餘時間:{[1] 分 }{[2] 秒}</String>
-    <String Id="UITextVolumeCostAvailable">可用</String>
-    <String Id="UITextVolumeCostDifference">差異</String>
-    <String Id="UITextVolumeCostRequired">需求</String>
-    <String Id="UITextVolumeCostSize">磁碟大小</String>
-    <String Id="UITextVolumeCostVolume">分割區</String>
-
-</WixLocalization>
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="65001" Culture="zh_TW">
+
+    <!--
+            Language Definition Include for VirtualBox WiX script.
+
+            Copyright (C) 2011-2016 Oracle Corporation
+
+            This file is part of VirtualBox Open Source Edition (OSE), as
+            available from http://www.virtualbox.org. This file is free software;
+            you can redistribute it and/or modify it under the terms of the GNU
+            General Public License (GPL) as published by the Free Software
+            Foundation, in version 2 as it comes in the "COPYING" file of the
+            VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+            hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+    -->
+
+    <String Id="LANG">1024</String>
+    <String Id="LangName">正體中文</String>
+
+    <String Id="ButtonText_No">否(&N)</String>
+    <String Id="ButtonText_Yes">是(&Y)</String>
+    <String Id="ButtonText_Cancel">取消(&C)</String>
+    <String Id="ButtonText_Next">下一步(&N) ></String>
+    <String Id="ButtonText_Back">< 上一步(&B)</String>
+    <String Id="ButtonText_Browse">瀏覽(&O)</String>
+    <String Id="ButtonText_OK">確定(&K)</String>
+    <String Id="ButtonText_Check">檢查(&C)</String>
+    <String Id="ButtonText_Install">安裝(&I)</String>
+    <String Id="ButtonText_Remove">移除(&R)</String>
+    <String Id="ButtonText_Finish">完成(&F)</String>
+    <String Id="ButtonText_Repair">修理(&R)</String>
+    <String Id="ButtonText_Return">返回(&R)</String>
+    <String Id="ButtonText_Retry">重試(&T)</String>
+    <String Id="ButtonText_Ignore">忽略(&G)</String>
+    <String Id="ButtonText_Exit">結束(&X)</String>
+
+    <String Id="InstallModeCustom">自訂</String>
+    <String Id="Setup">設定</String>
+
+    <!---->
+
+    <String Id="StartMenu_License">授權</String>
+    <String Id="StartMenu_UserManual">使用者手冊</String>
+
+    <!---->
+
+    <String Id="VB_App">[ProductName] 應用程式。</String>
+    <String Id="VB_USBDriver">[ProductName] USB 裝置驅動程式針對 USB 裝置支援。</String>
+    <String Id="VB_Network">[ProductName] 網路裝置驅動程式針對網路支援。</String>
+    <String Id="VB_NetFltDriver">[ProductName] 驅動程式針對橋接網路。</String>
+    <String Id="VB_NetAdpDriver">[ProductName] 虛擬網路介面卡針對「僅限主機」網路。</String>
+    <String Id="VB_NetLwfDriver">[ProductName] driver for NDIS6 Bridged Networking.</String>
+    <String Id="VB_NetAdp6Driver">[ProductName] virtual network adapter driver for NDIS6 Host-Only Networking.</String>
+
+  <String Id="VB_Python">VirtualBox 的 Python 支援。</String>
+
+    <!---->
+
+    <String Id="NeedAdmin">您需要有系統管理員特殊權限以安裝 (或解除安裝)[ProductName]!此安裝程式現在將中止。</String>
+    <String Id="WrongOS">此應用程式只能執行在 Windows XP 或以上。</String>
+    <String Id="Only32Bit">此應用程式只能執行在 32 位元的 Windows 系統。 請安裝 [ProductName] 的 64 位元版本!</String>
+    <String Id="Only64Bit">此應用程式只能執行在 64 位元的 Windows 系統。 請安裝 [ProductName] 的 32 位元版本!</String>
+    <String Id="SunFound">在此電腦發現舊的 Sun VirtualBox 安裝。 請先解除安裝此套件然後安裝 [ProductName]!</String>
+    <String Id="InnotekFound">在此電腦發現舊的 innotek VirtualBox 安裝。 請先解除安裝此套件然後安裝 [ProductName]!</String>
+
+    <!---->
+
+    <String Id="CancelDlg_Question">您確定要取消 [ProductName] 安裝嗎?</String>
+
+    <!---->
+
+    <String Id="WelcomeDlg_Header">歡迎使用 [ProductName] 安裝精靈</String>
+    <String Id="WelcomeDlg_Body">安裝精靈將在您的電腦安裝 [ProductName]。 按一下「下一步」繼續或「取消」結束安裝精靈。</String>
+
+    <!---->
+
+    <String Id="LicenseAgreementDlg_Header">最終使用者授權協議</String>
+    <String Id="LicenseAgreementDlg_Body">請仔細閱讀以下授權協議。</String>
+    <String Id="LicenseAgreementDlg_Accept">我接受授權協議中條款(&A)</String>
+    <String Id="LicenseAgreementDlg_Decline">我不接受授權協議中條款(&D)</String>
+
+    <!---->
+
+    <String Id="CheckSerialDlg_Header">序號</String>
+    <String Id="CheckSerialDlg_Body">請在以下欄位輸入您的序號。 您可以在 VirtualBox CD 盒內的貼紙找到。</String>
+    <String Id="CheckSerialDlg_Footer">序號輸入完成時,按一下以下「檢查」按鈕。</String>
+
+    <!---->
+
+    <String Id="WrongSerialDlg_Header">輸入的序號無效!</String>
+    <String Id="WrongSerialDlg_Desc1">請返回再次輸入您的序號。</String>
+    <String Id="WrongSerialDlg_Desc2">請記得,序號必須和印在貼紙上的拼字完全一樣。</String>
+
+    <!---->
+
+    <String Id="WarnSaveStatesDlg_Header">警告:</String>
+    <String Id="WarnSaveStatesDlg_Header2">已經的儲存狀態不相容!</String>
+    <String Id="WarnSaveStatesDlg_Desc">升級 [ProductName] 時,所有來自已經存在機器的儲存狀態不再能動作!安裝後,您必須手動捨棄。</String>
+    <String Id="WarnSaveStatesDlg_Proceed">立即進行安裝嗎?</String>
+
+    <!---->
+
+    <String Id="WarnTAPDevicesDlg_Header">主機介面</String>
+    <String Id="WarnTAPDevicesDlg_Desc">如果您的機器在先前版本使用某些主機介面。 在此安裝後您必須重新建立它們。</String>
+
+    <!---->
+
+    <String Id="NetCfgLocked">繼續安裝前,必須關閉以下應用程式:"[2]"</String>
+
+    <!---->
+
+    <String Id="CustomizeDlg_Location">位置:</String>
+    <String Id="CustomizeDlg_DiskUsage">磁碟使用量(&U)</String>
+    <String Id="CustomizeDlg_SelFeatures">選取您要安裝功能的方式。</String>
+    <String Id="CustomizeDlg_IconTree">按一下以下樹狀中圖示以變更安裝功能的方式。</String>
+    <String Id="CustomizeDlg_CustomSetup">自訂安裝</String>
+    <String Id="CustomizeDlg_SelItemDesc">CustomizeDlgItemDescription-CustomizeDlgItemDescription</String>
+    <String Id="CustomizeDlg_SelItemSize">CustomizeDlgItemSize-CustomizeDlgItemSize</String>
+    <String Id="CustomizeDlg_SelItemPath">CustomizeDlgLocation-CustomizeDlgLocation</String>
+
+    <!---->
+
+    <String Id="Customize2Dlg_Header">自訂</String>
+    <String Id="Customize2Dlg_Desc">請選擇以下選項:</String>
+    <String Id="Customize2Dlg_CreateStartMenuEntries">Create start menu entries</String>
+    <String Id="Customize2Dlg_CreateDesktopShortcut">在桌面建立捷徑</String>
+    <String Id="Customize2Dlg_CreateQuickLaunch">在快速啟動列建立捷徑</String>
+    <String Id="Customize2Dlg_RegisterFileExtensions">註冊文件關聯</String>
+
+    <!---->
+
+    <String Id="SelectionNetworkTypeDlg_CommonDescription">Please choose which type of network drivers you will use:</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS5">NDIS5 network drivers.
+This is default for older versions of Windows (pre-Vista).</String>
+    <String Id="SelectionNetworkTypeDlg_DescriptionNDIS6">NDIS6 network drivers.
+This is default for newer versions of Windows (Vista and newer).</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS5">Use NDIS5 network drivers.</String>
+    <String Id="SelectionNetworkTypeDlg_RadioButtonNDIS6">Use NDIS6 network drivers.</String>
+
+    <!---->
+
+    <String Id="WarnDisconNetIfacesDlg_Title">警告:</String>
+    <String Id="WarnDisconNetIfacesDlg_Title2">網路介面</String>
+    <String Id="WarnDisconNetIfacesDlg_Desc">安裝 [ProductName] 網路功能將重設您的網路連線並暫時中斷網路連線。</String>
+    <String Id="WarnDisconNetIfacesDlg_Question">立即進行安裝嗎?</String>
+
+    <!---->
+
+    <String Id="DiskCostDlg_SpaceRequired">安裝選取功能所需的磁碟空間。</String>
+    <String Id="DiskCostDlg_NotEnoughSpace">反白的磁碟區(如果有)對於目前選取的功能沒有足夠的磁碟空間可以使用。 您可以從反白的磁碟區移除一些檔案,或選擇安裝較少功能在本機磁碟機,或選取不同目的地磁碟機。</String>
+    <String Id="DiskCostDlg_SpaceRequirements">磁碟空間需求</String>
+    <String Id="DiskCostDlg_VolumeList">{120}{70}{70}{70}{70}</String>
+
+    <!---->
+
+    <String Id="BrowseDlg_BrowseDestFolder">瀏覽目的地資料夾</String>
+    <String Id="BrowseDlg_ChangeCurFolder">變更目前目的地資料夾</String>
+    <String Id="BrowseDlg_UpOneLevelTooltip">上一層</String>
+    <String Id="BrowseDlg_CreateNewFolderTooltip">建立新的資料夾</String>
+    <String Id="BrowseDlg_LookIn">瀏覽(&L):</String>
+    <String Id="BrowseDlg_FolderName">資料夾名稱(&F):</String>
+
+    <!---->
+
+    <String Id="VerifyReadyDlg_ReadyToBegin">安裝精靈準備好進行 [InstallMode] 安裝。</String>
+    <String Id="VerifyReadyDlg_ClickInstall">按一下「安裝」開始安裝。 如果您要檢閱或變更任何安裝設定,按一下「上一步」。  按一下「取消」結束精靈。</String>
+    <String Id="VerifyReadyDlg_ReadyToInstall">準備好安裝</String>
+
+    <!---->
+
+    <String Id="ExitDlg_ClickFinish">按一下「完成」按鈕結束安裝精靈。</String>
+    <String Id="ExitDlg_InstComplete">[ProductName] 安裝完成。</String>
+    <String Id="ExitDlg_StartVBox">安裝後啟動 [ProductName]</String>
+
+    <!---->
+
+    <String Id="FatalErrorDlg_Header">[ProductName] 安裝精靈太早結束</String>
+    <String Id="FatalErrorDlg_Desc">[ProductName] 安裝因為錯誤太早結束。 您的系統未做修改。 若要稍後安裝此程式,請再次執行安裝。</String>
+    <String Id="FatalErrorDlg_Footer">按一下「完成」按鈕結束安裝精靈。</String>
+
+    <!---->
+
+    <String Id="FilesInUse_Text">以下應用程式使用此安裝需要更新的檔案。 關閉這些應用程式接著按一下「重試(&R)」以繼續安裝或「取消」結束精靈。</String>
+    <String Id="FilesInUse_Description">某些需要更新的檔案目前使用中。</String>
+    <String Id="FilesInUse_Title">檔案使用中</String>
+
+    <!---->
+
+    <String Id="UserExitDlg_Header">[ProductName] 安裝精靈中斷</String>
+    <String Id="UserExitDlg_Desc">[ProductName] 安裝中斷。 您的系統未做修改。 若要稍後安裝此程式,請再次執行安裝。</String>
+    <String Id="UserExitDlg_Footer">按一下「完成」按鈕結束安裝精靈。</String>
+
+    <!---->
+
+    <String Id="ProgressDlg_PleaseWait">在安裝精靈安裝 [ProductName] 時請稍候。 這需要幾分鐘時間。</String>
+
+    <!---->
+
+    <String Id="ResumeDlg_Header">正在繼續 [ProductName] 安裝精靈</String>
+    <String Id="ResumeDlg_Desc">安裝精靈將在您的電腦完成 [ProductName] 的安裝。 按一下「安裝」以繼續或「取消」結束安裝精靈。</String>
+
+    <!---->
+
+    <String Id="MaintenanceTypeDlg_Header">修改、修復或移除安裝</String>
+    <String Id="MaintenanceTypeDlg_SelOption">選取您希望執行的操作。</String>
+    <String Id="MaintenanceTypeDlg_Repair">修復(&P)</String>
+    <String Id="MaintenanceTypeDlg_RepairText">修復在最近安裝狀態的錯誤 - 修復缺少或損毀的檔案、捷徑和登錄檔項目。</String>
+    <String Id="MaintenanceTypeDlg_RepairTooltip">修復安裝</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress1">正在修復</String>
+    <String Id="MaintenanceTypeDlg_RepairProgress2">repairs</String>
+    <String Id="MaintenanceTypeDlg_Remove">移除(&R)</String>
+    <String Id="MaintenanceTypeDlg_RemoveText">從電腦移除 [ProductName]。</String>
+    <String Id="MaintenanceTypeDlg_RemoveTooltip">移除安裝</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress1">正在移除</String>
+    <String Id="MaintenanceTypeDlg_RemoveProgress2">removes</String>
+
+    <!---->
+
+    <String Id="MaintenanceWelcomeDlg_Header">歡迎使用 [ProductName] 安裝精靈</String>
+    <String Id="MaintenanceWelcomeDlg_Desc">安裝精靈將允許您修復目前的安裝或從您的電腦移除 [ProductName]。 按一下「下一步」以繼續或「取消」結束安裝精靈。</String>
+
+    <!---->
+
+    <String Id="OutOfDiskDlg_InstallationExceeds">安裝所需的磁碟空間超過可用的磁碟空間。</String>
+    <String Id="OutOfDiskDlg_NotEnoughDiskSpace">反白的磁碟區對於目前選取的功能沒有足夠的磁碟空間可以使用。 您可以從反白的磁碟區移除一些檔案,或選擇安裝較少功能在本機磁碟機,或選取不同目的地磁碟機。</String>
+    <String Id="OutOfDiskDlg_OutOfDiskSpace">磁碟空間不足</String>
+
+    <!---->
+
+    <String Id="OutOfRbDiskDlg_InstallationExceeds">安裝所需的磁碟空間超過可用的磁碟空間。</String>
+    <String Id="OutOfRbDiskDlg_NotEnoughDiskSpace">反白的磁碟區對於目前選取的功能沒有足夠的磁碟空間可以使用。 您可以從反白的磁碟區移除一些檔案,或選擇安裝較少功能在本機磁碟機,或選取不同目的地磁碟機。</String>
+    <String Id="OutOfRbDiskDlg_OutOfDiskSpace">磁碟空間不足</String>
+    <String Id="OutOfRbDiskDlg_Desc">或者,您可以選擇停用安裝程式的回復功能。 這允許安裝程式在任何方式中斷安裝時還原您電腦的原始狀態。 按一下「是」如果您希望承擔停用回復功能的風險。</String>
+
+    <!---->
+
+    <String Id="VerifyRemoveDlg_Header">移除 [ProductName]</String>
+    <String Id="VerifyRemoveDlg_Desc">您已經選擇從您的電腦移除程式。</String>
+    <String Id="VerifyRemoveDlg_ClickRemove">按一下「移除」以從您的電腦移除 [ProductName]。 如果您要檢閱或變更任何安裝設定,按一下「上一步」。  按一下「取消」結束精靈。</String>
+
+    <!---->
+
+    <String Id="VerifyRepairDlg_Header">修復 [ProductName]</String>
+    <String Id="VerifyRepairDlg_ReadyToBegin">安裝精靈準備好開始修復 [ProductName]。</String>
+    <String Id="VerifyRepairDlg_ClickRepair">按一下「修復」以修復 [ProductName] 的安裝。 如果您要檢閱或變更任何安裝設定,按一下「上一步」。  按一下「取消」結束精靈。</String>
+
+    <!---->
+
+    <String Id="WaitForCostingDlg_PleaseWait">在安裝程式完成判斷您的磁碟空間需求時請稍候。</String>
+
+    <!---->
+
+    <String Id="MsiRMFilesInUse_Text">以下應用程式使用此安裝需要更新的檔案。 您可以讓安裝精靈關閉並嘗試重新啟動這些應用程式或稍後重新啟動電腦。</String>
+    <String Id="MsiRMFilesInUse_Description">某些需要更新的檔案目前使用中。</String>
+    <String Id="MsiRMFilesInUse_Title">檔案使用中</String>
+    <String Id="MsiRMFilesInUse_UseRM">關閉應用程式並嘗試重新啟動它們。 (&C)</String>
+    <String Id="MsiRMFilesInUse_DontUseRM">不要關閉應用程式,將需要重新開機。 (&D)</String>
+
+    <!-- The following strings are internally used by WiX and MSI -->
+    <String Id="Error0">{{嚴重錯誤:}}</String>
+    <String Id="Error1">{{錯誤 [1]。}}</String>
+    <String Id="Error2">警告 [1]。</String>
+    <String Id="Error3"/>
+    <String Id="Error4">資訊 [1]。</String>
+    <String Id="Error5">安裝程式安裝這個封裝時發生未預期的錯誤。 這可能表示這個封裝的問題。 錯誤碼 [1]。 {{引數:[2], [3], [4]}}</String>
+    <String Id="Error6"/>
+    <String Id="Error7">{{磁碟已滿:}}</String>
+    <String Id="Error8">動作 [Time]:[1]. [2]</String>
+    <String Id="Error9">[ProductName]</String>
+    <String Id="Error10">{[2]}{, [3]}{, [4]}</String>
+    <String Id="Error11">訊息類型:[1], 引數:[2]</String>
+    <String Id="Error12">=== 開啟記錄時間:[Date]  [Time] ===</String>
+    <String Id="Error13">=== 停止記錄時間:[Date]  [Time] ===</String>
+    <String Id="Error14">動作開始 [Time]:[1]。</String>
+    <String Id="Error15">動作結束 [Time]:[1]。 傳回值 [2]。</String>
+    <String Id="Error16">剩餘時間:{[1] 分 }{[2] 秒}</String>
+    <String Id="Error17">記憶體不足,重試之前先關閉其它應用程式。</String>
+    <String Id="Error18">安裝程式不再有回應。</String>
+    <String Id="Error19">安裝程式已經永久中止。</String>
+    <String Id="Error20">在 Windows 組態 [ProductName] 時請稍候</String>
+    <String Id="Error21">正在收集所需的資訊...</String>
+    <String Id="Error22">正在移除此應用程式的舊版本...</String>
+    <String Id="Error23">正在準備移除此應用程式的舊版本...</String>
+    <String Id="Error32">{[ProductName] } 安裝成功完成。</String>
+    <String Id="Error33">{[ProductName] } 安裝失敗。</String>
+    <String Id="Error1101">讀取檔案錯誤:[2]。{{ 系統錯誤 [3]。}} 檢查檔案是否存在,並且可以存取。</String>
+    <String Id="Error1301">無法建立目錄 '[2]'。 同名的目錄已經存在。 取消安裝並嘗試安裝到不同位置。</String>
+    <String Id="Error1302">請插入磁碟:[2]</String>
+    <String Id="Error1303">安裝程式的權限不足,無法存取這個目錄:[2],安裝無法繼續,以系統管理員的身份登入或是連絡您的系統管理員。</String>
+    <String Id="Error1304">寫入至檔案時發生錯誤:[2]。請檢查您可以存取那個目錄。</String>
+    <String Id="Error1305">讀取檔案時發生錯誤:[2]。{{ 系統錯誤 [3]。}} 請檢查檔案是否存在,並且可以存取。</String>
+    <String Id="Error1306">另一個應用程序獨占存取檔案 '[2]'。 請關閉所有其它應用程式,然後按一下「重試」。</String>
+    <String Id="Error1307">磁碟空間不足,無法安裝這個檔案:[2]。釋放一些磁碟空間然後按一下「重試」,或按一下「取消」結束。</String>
+    <String Id="Error1308">找不到來源檔案:[2]。 請驗證檔案存在並且您可以存取它。</String>
+    <String Id="Error1309">讀取檔案錯誤:[3]。{{ 系統錯誤 [2]。}}  請檢查檔案是否存在,並且可以存取。</String>
+    <String Id="Error1310">寫入至檔案時發生錯誤:[3]。{{ 系統錯誤 [2]。}}  請檢查您可以存取那個目錄。</String>
+    <String Id="Error1311">找不到來源檔案 {{(cabinet)}}:[2]。 請檢查檔案存在並且可以存取。</String>
+    <String Id="Error1312">無法建立目錄 '[2]'。 同名的檔案已經存在。 請重新命名或移除檔案並按一下「重試」,或按一下「取消」結束。</String>
+    <String Id="Error1313">磁碟區 [2] 目前不可使用。 請選取另一個。</String>
+    <String Id="Error1314">指定的路徑 '[2]' 不可使用。</String>
+    <String Id="Error1315">無法寫入指定的資料夾:[2]。</String>
+    <String Id="Error1316">嘗試從檔案讀取時發生網路錯誤:[2]</String>
+    <String Id="Error1317">嘗試建立目錄時發生錯誤:[2]</String>
+    <String Id="Error1318">嘗試建立目錄時發生網路錯誤:[2]</String>
+    <String Id="Error1319">嘗試開啟來源檔案時發生網路錯誤:[2]</String>
+    <String Id="Error1320">指定的路徑太長:[2]</String>
+    <String Id="Error1321">Installer 的權限不足以修改這個檔案:[2]。</String>
+    <String Id="Error1322">資料夾路徑的部份 '[2]' 無效。其為空或超過系統允許的長度。</String>
+    <String Id="Error1323">資料夾路徑 '[2]' 包含無效的字在資料夾路徑。</String>
+    <String Id="Error1324">資料夾路徑 '[2]' 包含無效字元。</String>
+    <String Id="Error1325">'[2]' 不是有效的短檔名。</String>
+    <String Id="Error1326">取得檔案安全性錯誤:[3] GetLastString:[2]</String>
+    <String Id="Error1327">無效的磁碟機:[2]</String>
+    <String Id="Error1328">套用修正檔到檔案 [2] 錯誤。 可能已由其他主機更新,且這個修正檔不再能修改。 更多資訊請聯絡您的修正檔供應商。 {{系統錯誤:[3]}}</String>
+    <String Id="Error1329">無法安裝所需的檔案,因為 cabinet 檔案 [2] 沒有數位簽章。 這表示 cabinet 檔案已經損毀。</String>
+    <String Id="Error1330">無法安裝所需的檔案,因為 cabinet 檔案 [2] 有無效的數位簽章。 這表示 cabinet 檔案已經損毀。 {{  WinVerifyTrust 返回錯誤 [3]。}}</String>
+    <String Id="Error1331">修正複製 [2] 檔案失敗:CRC 錯誤。</String>
+    <String Id="Error1332">修正移動 [2] 檔案失敗:CRC 錯誤。</String>
+    <String Id="Error1333">修正路徑 [2] 檔案失敗:CRC 錯誤。</String>
+    <String Id="Error1334">無法安裝 '[2]' 因為在 cainet 檔案 '[3]' 中找不到檔案。 這表示網路錯誤、從 CD-ROM 讀取錯誤、或此安裝包問題。</String>
+    <String Id="Error1335">此安裝所需的 cabinet 檔案 '[2]' 已經損毀且無法使用。 這表示網路錯誤、從 CD-ROM 讀取錯誤、或此安裝包問題。</String>
+    <String Id="Error1336">完成這個安裝所需的暫存檔案建立錯誤。 {{  資料夾:[3]。 系統錯誤碼:[2]}}</String>
+    <String Id="Error1401">無法建立機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1402">無法開啟機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1403">無法從機碼 [3] 刪除值:[2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1404">無法刪除機碼:[2]。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1405">無法從機碼 [3] 讀取值 [2]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1406">無法寫入值 [2] 至機碼 [3]。{{ 系統錯誤 [4]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1407">無法取得機碼 [2] 的值名稱。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1408">無法取得機碼 [2] 的子機碼名稱。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1409">無法讀取機碼 [2] 的安全資訊。{{ 系統錯誤 [3]。}} 檢查您是有足夠的權限存取該機碼,或是連絡您的支援人員。</String>
+    <String Id="Error1410">無法增加可用的登錄空間。 此應用程式須要 [2] KB 以上的空間。</String>
+    <String Id="Error1500">其它的安裝正在進行中,您必須完成該項安裝之後才能繼續。</String>
+    <String Id="Error1501">存取保全資料時發生錯誤,請確定 Windows Installer 是否正確組態,然後再試一次。</String>
+    <String Id="Error1502">使用者 '[2]' 先前已經啟動產品 '[3]' 的安裝。 該使用者在可以使用該產品前需要再次執行安裝。您目前的安裝現在將繼續。</String>
+    <String Id="Error1503">使用者 '[2]' 先前已經啟動產品 '[3]' 的安裝。 該使用者在可以使用該產品前需要再次執行安裝。</String>
+    <String Id="Error1601">磁碟空間不足 -- 磁碟區:'[2]',所需空間:[3] KB; 可用空間:[4] KB。 釋放一些磁碟空間並重試。</String>
+    <String Id="Error1602">您確定要取消嗎?</String>
+    <String Id="Error1603">檔案 [2][3] 正在由 { 以下處理程序:名稱:[4],Id:[5],視窗標題:'[6]'} 使用中。 關閉該應用程式並重試。</String>
+    <String Id="Error1604">已經安裝產品 '[2]',此產品防止安裝。 兩個產品不相容。</String>
+    <String Id="Error1605">磁碟區 '[2]' 沒有足夠的磁碟空間以啟用復原的安裝繼續。 需要 [3] KB,但只有 [4] KB 可以使用。 按一下「忽略」以不儲存復原資訊繼續安裝,按一下「重試」以再次檢查可用空間,或按一下「取消」以離開安裝。</String>
+    <String Id="Error1606">無法存取網路位置 [2]。</String>
+    <String Id="Error1607">繼續安裝前應該關閉以下應用程式:</String>
+    <String Id="Error1608">無法在本機中找到任何先前已安裝的合格版本。</String>
+    <String Id="Error1609">套用安全性設定時發生錯誤。 [2] 不是有效的使用者或群組。 這會是安裝包的問題或連線到網路上網域控制站的問題。 檢查您的網路連線並按一下「重試」,或「取消」以結束安裝。 {{找不到使用者的 SID,系統錯誤 [3]}}</String>
+    <String Id="Error1701">金鑰 [2] 是無效的,檢查您輸入的金鑰是否正確。</String>
+    <String Id="Error1702">要繼續設定 [2] 之前,Installer 必須重新啟動您的系統,按「是」將立即重新啟動;如果您想要稍後手動重新啟動請按「否」。</String>
+    <String Id="Error1703">您必須重新啟動您的系統,對 [2] 所做的組態變更才會生效,按「是」立即重新啟動;如果您想要稍後手動重新啟動請按「否」。</String>
+    <String Id="Error1704">安裝 [2] 目前已經暫停,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
+    <String Id="Error1705">另一個安裝這個產品的程式正在進行中,您必須復原該安裝所做的變更才能繼續,您要復原這些變更嗎?</String>
+    <String Id="Error1706">找不到產品 [2] 的安裝包。 嘗試使用安裝包 '[3]' 的有效副本嘗試再次安裝。</String>
+    <String Id="Error1707">安裝成功完成。</String>
+    <String Id="Error1708">安裝失敗。</String>
+    <String Id="Error1709">產品:[2] -- [3]</String>
+    <String Id="Error1710">您可以將電腦還原成先前的狀態或稍後繼續安裝,您希望還原嗎?</String>
+    <String Id="Error1711">寫入安裝資訊至磁碟時發生錯誤,確定磁碟的空間足夠,並按「重試」,或按「取消」來結束安裝。</String>
+    <String Id="Error1712">還原您的電腦成之前的狀態所需的一個或數個檔案找不到。 無法還原。</String>
+    <String Id="Error1713">[2] 無法安裝其所需的產品之一。 請聯絡您的技術支援小組。 {{系統字串:[3]。}}</String>
+    <String Id="Error1714">無法移除 [2] 的舊版本。 請聯絡您的技術支援小組。 {{系統字串 [3]。}}</String>
+    <String Id="Error1715">已經安裝 [2]</String>
+    <String Id="Error1716">已經組態 [2]</String>
+    <String Id="Error1717">已經移除 [2]</String>
+    <String Id="Error1718">數位簽章原則拒絕檔案 [2] 。</String>
+    <String Id="Error1719">無法存取 Windows Installer 服務。 如果您正執行在 Windows 安全模式,這將會發生。 請聯絡您的技術支援人員以取得協助。</String>
+    <String Id="Error1720">這個 Windows Installer 封裝有問題。 完成這個安裝需要的指令碼無法執行。 聯絡您的支援人員或封裝供應商。 {{自訂動作 [2] 指令碼錯誤 [3],[4]:[5] 行 [6],欄 [7],[8] }}</String>
+    <String Id="Error1721">這個 Windows Installer 封裝有問題。 完成這個安裝需要的程式無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置:[3],命令:[4] }}</String>
+    <String Id="Error1722">這個 Windows Installer 封裝有問題。 以 setup 部分執行的程式無法如預期完成。 聯絡您的支援人員或封裝供應商。 {{動作 [2],位置:[3],命令:[4] }}</String>
+    <String Id="Error1723">這個 Windows Installer 封裝有問題。 完成這個安裝需要的 DLL 無法執行。 聯絡您的支援人員或封裝供應商。 {{動作 [2],項目:[3],程式庫:[4] }}</String>
+    <String Id="Error1724">移除成功完成。</String>
+    <String Id="Error1725">移除失敗。</String>
+    <String Id="Error1726">宣告成功完成。</String>
+    <String Id="Error1727">宣告失敗。</String>
+    <String Id="Error1728">組態成功完成。</String>
+    <String Id="Error1729">組態失敗。</String>
+    <String Id="Error1730">您必須是管理者以移除這個應用程式。 要移除這個應用程式,您可以使用系統管理員登入或聯絡您的技術支援群組取得協助。</String>
+    <String Id="Error1801">路徑 [2] 無效。 請指定有效的路徑。</String>
+    <String Id="Error1802">記憶體不足,重試之前先關閉其它應用程式。</String>
+    <String Id="Error1803">磁碟機 [2] 中沒有磁片,請插入磁片然後重試,或按「取消」回到上次選取的磁碟區。</String>
+    <String Id="Error1804">磁碟機 [2] 中沒有磁片,請插入磁片然後按「重試」,或按「取消」回到瀏覽對話方塊,並選取不同的磁碟區。</String>
+    <String Id="Error1805">資料夾 [2] 不存在,請輸入一個現有的資料夾路徑。</String>
+    <String Id="Error1806">您的權限不足,無法讀取這個資料夾。</String>
+    <String Id="Error1807">無法決定合法的目的資料夾。</String>
+    <String Id="Error1901">嘗試讀取來源安裝資料庫時發生錯誤:[2]。</String>
+    <String Id="Error1902">正在排定重新開機作業:正在更改檔案名稱 [2] 成 [3],必須重新開機才能完成作業。</String>
+    <String Id="Error1903">正在排定重新開機作業:正在刪除檔案 [2],必須重新開機才能完成作業。</String>
+    <String Id="Error1904">註冊模組 [2] 失敗。HRESULT [3]。連絡您的支援人員。</String>
+    <String Id="Error1905">取消註冊模組 [2] 失敗。HRESULT [3]。連絡您的支援人員。</String>
+    <String Id="Error1906">無法預存封裝 [2]。錯誤:[3]。請連絡支援人員。</String>
+    <String Id="Error1907">無法註冊字型 [2]。 請確認是否有足夠的權限及系統支援。</String>
+    <String Id="Error1908">無法解除註冊字型 [2]。 請確認您有足夠的權限來移除字型。</String>
+    <String Id="Error1909">無法建立捷徑 [2]。 請確認目地資料夾是否存在及您的存取權。</String>
+    <String Id="Error1910">無法移除捷徑 [2]。 請確認目地資料夾是否存在及您的存取權。</String>
+    <String Id="Error1911">無法註冊檔案 [2] 的類型程式庫。 請連絡系統支援人員。</String>
+    <String Id="Error1912">無法解除註冊檔案 [2] 的 type library。 請連絡系統支援人員。</String>
+    <String Id="Error1913">無法更新 ini 檔 [2][3]。 請確認檔案是否存在及您的存取權。</String>
+    <String Id="Error1914">無法預定在重開機時將檔案 [2] 取代 [3]。 請確認您有 [3] 的存取權。</String>
+    <String Id="Error1915">移除 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]:[3]。請連絡系統支援人員。</String>
+    <String Id="Error1916">安裝 ODBC 驅動程式管理員錯誤,ODBC 錯誤 [2]:[3]。請連絡系統支援人員。</String>
+    <String Id="Error1917">移除 ODBC 驅動程式管理員錯誤:[4],ODBC 錯誤 [2]:[3]。請確認您有足夠權限。</String>
+    <String Id="Error1918">安裝 ODBC 驅動程式管理員錯誤:[4],ODBC 錯誤 [2]:[3]。請確認檔案[4]存在並可存取。</String>
+    <String Id="Error1919">設定 ODBC 資料來源錯誤:[4],ODBC 錯誤 [2]:[3]。請確認檔案[4]存在並可存取。</String>
+    <String Id="Error1920">啟動服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
+    <String Id="Error1921">停止服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
+    <String Id="Error1922">刪除服務 '[2]' ([3]) 失敗。 請確認您有足夠的特殊權限以啟動系統服務。</String>
+    <String Id="Error1923">無法安裝服務 '[2]' ([3]) 。 請確認您有足夠的特殊權限以啟動系統服務。</String>
+    <String Id="Error1924">無法更新環境變數 '[2]'。 請確認您有足夠的特殊權限以修改環境變數。</String>
+    <String Id="Error1925">您沒有足夠的特殊權限使電腦的所有使用者都完成此安裝。請以系統管理員權限登入,接著再重試此安裝。</String>
+    <String Id="Error1926">無法設定檔案 '[3]' 的檔案安全性。 錯誤:[2]。 請確認您有足夠的特殊權限以修改此檔案的安全性權限。</String>
+    <String Id="Error1927">這台電腦並未安裝 Component Services (COM+ 1.0)。這項安裝需要有 Component Services 才能進行。Component Services 包含在 Windows XP 中。</String>
+    <String Id="Error1928">登錄 COM+ 應用程式時發生錯誤。請聯絡您的支援人員以取得其他資訊。</String>
+    <String Id="Error1929">解除 COM+ 應用程式登錄時發生錯誤。請聯絡您的支援人員以取得其他資訊。</String>
+    <String Id="Error1930">無法變更服務 '[2]' ([3]) 的描述。</String>
+    <String Id="Error1931">Windows Installer 服務無法更新系統檔案 [2] 因為檔案受 Windows 保護。 您可能需要更新您的作業系統使這個程式正確動作。 {{{封裝版本:[3],受 OS 保護的版本:[4]}}</String>
+    <String Id="Error1932">Windows Installer 服務無法更新受保護的 Windows 檔案 [2]。 {{封裝版本:[3],受 OS 保護的版本:[4],SFP 錯誤:[5]}}</String>
+    <String Id="Error1933">Windows Installer 服務無法更新一個或數個受保護的 Windows 檔案。 {{SFP 字串:[2]。 受保護的檔案清單:\r\n[3]}}</String>
+    <String Id="Error1934">電腦的原則停用使用者安裝。</String>
+    <String Id="Error1935">組件元件 [2] 的安裝期間發生錯誤。 HRESULT:[3]。 {{組件介面:[4],函數:[5],組件名稱:[6]}}</String>
+
+    <!-- Own / special errors -->
+    <String Id="Error25001">需要關閉應用程式 "[2]" 以繼續關閉。</String>
+
+    <String Id="ProgressTextInstallValidate">正在驗證安裝</String>
+    <String Id="ProgressTextInstallFiles">正在複製新檔案</String>
+    <String Id="ProgressTextInstallFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+    <String Id="ProgressTextInstallAdminPackage">正在複製網路安裝檔案</String>
+    <String Id="ProgressTextInstallAdminPackageTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+    <String Id="ProgressTextFileCost">正在計算空間需求</String>
+    <String Id="ProgressTextCostInitialize">正在計算空間需求</String>
+    <String Id="ProgressTextCostFinalize">正在計算空間需求</String>
+    <String Id="ProgressTextCreateShortcuts">正在建立捷徑</String>
+    <String Id="ProgressTextCreateShortcutsTemplate">捷徑:[1]</String>
+    <String Id="ProgressTextPublishComponents">正在發佈合格的元件</String>
+    <String Id="ProgressTextPublishComponentsTemplate">元件 ID:[1], 公佈者:[2]</String>
+    <String Id="ProgressTextPublishFeatures">正在發佈產品功能</String>
+    <String Id="ProgressTextPublishFeaturesTemplate">功能:[1]</String>
+    <String Id="ProgressTextPublishProduct">正在發佈產品資訊</String>
+    <String Id="ProgressTextRegisterClassInfo">正在登錄類別伺服器</String>
+    <String Id="ProgressTextRegisterClassInfoTemplate">類別 Id:[1]</String>
+    <String Id="ProgressTextRegisterExtensionInfo">正在登錄擴充伺服器</String>
+    <String Id="ProgressTextRegisterExtensionInfoTemplate">副檔名 [1]</String>
+    <String Id="ProgressTextRegisterMIMEInfo">正在登錄 MIME 資訊</String>
+    <String Id="ProgressTextRegisterMIMEInfoTemplate">MIME 內容類型:[1],副檔名:[2]</String>
+    <String Id="ProgressTextRegisterProgIdInfo">正在登錄程式辨識字元</String>
+    <String Id="ProgressTextRegisterProgIdInfoTemplate">ProgId: [1]</String>
+    <String Id="ProgressTextAllocateRegistrySpace">正在配置登錄空間</String>
+    <String Id="ProgressTextAllocateRegistrySpaceTemplate">可用空間:[1]</String>
+    <String Id="ProgressTextAppSearch">正在搜尋已安裝的應用程式</String>
+    <String Id="ProgressTextAppSearchTemplate">內容:[1], 簽章:[2]</String>
+    <String Id="ProgressTextBindImage">正在繫結執行檔</String>
+    <String Id="ProgressTextBindImageTemplate">檔案:[1]</String>
+    <String Id="ProgressTextCCPSearch">正在搜尋查詢產品</String>
+    <String Id="ProgressTextCreateFolders">正在建立資料夾</String>
+    <String Id="ProgressTextCreateFoldersTemplate">資料夾:[1]</String>
+    <String Id="ProgressTextDeleteServices">正在刪除服務</String>
+    <String Id="ProgressTextDeleteServicesTemplate">服務:[1]</String>
+    <String Id="ProgressTextDuplicateFiles">正在建立重複檔案</String>
+    <String Id="ProgressTextDuplicateFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+    <String Id="ProgressTextFindRelatedProducts">正在搜尋相關的應用程式</String>
+    <String Id="ProgressTextFindRelatedProductsTemplate">找到應用程式:[1]</String>
+    <String Id="ProgressTextInstallODBC">正在安裝 ODBC 元件</String>
+    <String Id="ProgressTextInstallServices">正在安裝新服務</String>
+    <String Id="ProgressTextInstallServicesTemplate">服務:[2]</String>
+    <String Id="ProgressTextLaunchConditions">正在評估啟動條件</String>
+    <String Id="ProgressTextMigrateFeatureStates">正在從相關的應用程式遷移功能狀態</String>
+    <String Id="ProgressTextMigrateFeatureStatesTemplate">應用程式:[1]</String>
+    <String Id="ProgressTextMoveFiles">正在移動檔案</String>
+    <String Id="ProgressTextMoveFilesTemplate">檔案:[1], 目錄:[9], 大小:[6]</String>
+    <String Id="ProgressTextPatchFiles">正在修補檔案</String>
+    <String Id="ProgressTextPatchFilesTemplate">檔案:[1], 目錄:[2], 大小:[3]</String>
+    <String Id="ProgressTextProcessComponents">正在更新元件註冊</String>
+    <String Id="ProgressTextRegisterComPlus">正在註冊 COM+ 應用程式和元件</String>
+    <String Id="ProgressTextRegisterComPlusTemplate">AppId:[1]{{, AppType:[2],使用者:[3],RSN:[4]}}</String>
+    <String Id="ProgressTextRegisterFonts">正在註冊字型</String>
+    <String Id="ProgressTextRegisterFontsTemplate">字型:[1]</String>
+    <String Id="ProgressTextRegisterProduct">正在註冊產品</String>
+    <String Id="ProgressTextRegisterProductTemplate">[1]</String>
+    <String Id="ProgressTextRegisterTypeLibraries">正在登錄類別程式庫</String>
+    <String Id="ProgressTextRegisterTypeLibrariesTemplate">LibID: [1]</String>
+    <String Id="ProgressTextRegisterUser">正在登錄使用者</String>
+    <String Id="ProgressTextRegisterUserTemplate">[1]</String>
+    <String Id="ProgressTextRemoveDuplicateFiles">正在移除重複的檔案</String>
+    <String Id="ProgressTextRemoveDuplicateFilesTemplate">檔案:[1], 目錄:[9]</String>
+    <String Id="ProgressTextRemoveEnvironmentStrings">正在更新環境字串</String>
+    <String Id="ProgressTextRemoveEnvironmentStringsTemplate">名稱:[1], 數值:[2], 動作:[3]</String>
+    <String Id="ProgressTextRemoveExistingProducts">正在移除應用程式</String>
+    <String Id="ProgressTextRemoveExistingProductsTemplate">應用程式:[1], 命令列:[2]</String>
+    <String Id="ProgressTextRemoveFiles">正在移除檔案</String>
+    <String Id="ProgressTextRemoveFilesTemplate">檔案:[1], 目錄:[9]</String>
+    <String Id="ProgressTextRemoveFolders">正在移除資料夾</String>
+    <String Id="ProgressTextRemoveFoldersTemplate">資料夾:[1]</String>
+    <String Id="ProgressTextRemoveIniValues">正在移除 INI 檔案項目</String>
+    <String Id="ProgressTextRemoveIniValuesTemplate">檔案:[1], 區段:[2], 機碼:[3], 數值:[4]</String>
+    <String Id="ProgressTextRemoveODBC">正在移除 ODBC 元件</String>
+    <String Id="ProgressTextRemoveRegistryValues">正在移除系統登錄檔數值</String>
+    <String Id="ProgressTextRemoveRegistryValuesTemplate">機碼:[1], 名稱:[2]</String>
+    <String Id="ProgressTextRemoveShortcuts">正在移除捷徑</String>
+    <String Id="ProgressTextRemoveShortcutsTemplate">捷徑:[1]</String>
+    <String Id="ProgressTextRMCCPSearch">正在搜尋查詢產品</String>
+    <String Id="ProgressTextSelfRegModules">正在註冊模組</String>
+    <String Id="ProgressTextSelfRegModulesTemplate">檔案:[1], 資料夾:[2]</String>
+    <String Id="ProgressTextSelfUnregModules">正在解除模組登錄</String>
+    <String Id="ProgressTextSelfUnregModulesTemplate">檔案:[1], 資料夾:[2]</String>
+    <String Id="ProgressTextSetODBCFolders">正在初始化 ODBC 目錄</String>
+    <String Id="ProgressTextStartServices">正在啟動服務</String>
+    <String Id="ProgressTextStartServicesTemplate">服務:[1]</String>
+    <String Id="ProgressTextStopServices">正在停止服務</String>
+    <String Id="ProgressTextStopServicesTemplate">服務:[1]</String>
+    <String Id="ProgressTextUnpublishComponents">正在取消元件公佈</String>
+    <String Id="ProgressTextUnpublishComponentsTemplate">元件 ID:[1], 公佈者:[2]</String>
+    <String Id="ProgressTextUnpublishFeatures">正在取消功能公佈</String>
+    <String Id="ProgressTextUnpublishFeaturesTemplate">功能:[1]</String>
+    <String Id="ProgressTextUnregisterClassInfo">解除類別伺服器登錄</String>
+    <String Id="ProgressTextUnregisterClassInfoTemplate">類別 Id:[1]</String>
+    <String Id="ProgressTextUnregisterComPlus">正在解除 COM+ 應用程式和元件登錄</String>
+    <String Id="ProgressTextUnregisterComPlusTemplate">AppId: [1]{{, AppType: [2]}}</String>
+    <String Id="ProgressTextUnregisterExtensionInfo">正在解除擴充伺服器登錄</String>
+    <String Id="ProgressTextUnregisterExtensionInfoTemplate">副檔名 [1]</String>
+    <String Id="ProgressTextUnregisterFonts">正在解除字型登錄</String>
+    <String Id="ProgressTextUnregisterFontsTemplate">字型:[1]</String>
+    <String Id="ProgressTextUnregisterMIMEInfo">正在解除 MIME 資訊登錄</String>
+    <String Id="ProgressTextUnregisterMIMEInfoTemplate">MIME 內容類型:[1],副檔名:[2]</String>
+    <String Id="ProgressTextUnregisterProgIdInfo">正在解除程式識別碼登錄</String>
+    <String Id="ProgressTextUnregisterProgIdInfoTemplate">ProgId: [1]</String>
+    <String Id="ProgressTextUnregisterTypeLibraries">正在解除類別程式庫登錄</String>
+    <String Id="ProgressTextUnregisterTypeLibrariesTemplate">LibID: [1]</String>
+    <String Id="ProgressTextWriteEnvironmentStrings">正在更新環境字串</String>
+    <String Id="ProgressTextWriteEnvironmentStringsTemplate">名稱:[1], 數值:[2], 動作:[3]</String>
+    <String Id="ProgressTextWriteIniValues">正在寫入 INI 檔案數值</String>
+    <String Id="ProgressTextWriteIniValuesTemplate">檔案:[1], 區段:[2], 機碼:[3], 數值:[4]</String>
+    <String Id="ProgressTextWriteRegistryValues">正在寫入系統登錄檔數值</String>
+    <String Id="ProgressTextWriteRegistryValuesTemplate">機碼:[1],名稱:[2],值:[3]</String>
+    <String Id="ProgressTextAdvertise">正在宣告應用程式</String>
+    <String Id="ProgressTextGenerateScript">正在產生動作的 script 操作:</String>
+    <String Id="ProgressTextGenerateScriptTemplate">[1]</String>
+    <String Id="ProgressTextInstallSFPCatalogFile">正在安裝系統目錄</String>
+    <String Id="ProgressTextInstallSFPCatalogFileTemplate">檔案:[1],依存關係:[2]</String>
+    <String Id="ProgressTextMsiPublishAssemblies">正在發佈組件資訊</String>
+    <String Id="ProgressTextMsiPublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
+    <String Id="ProgressTextMsiUnpublishAssemblies">正在取消資訊公佈</String>
+    <String Id="ProgressTextMsiUnpublishAssembliesTemplate">應用程式內容:[1],組件名稱:[2]</String>
+    <String Id="ProgressTextRollback">回復動作:</String>
+    <String Id="ProgressTextRollbackTemplate">[1]</String>
+    <String Id="ProgressTextRollbackCleanup">正在移除備份檔案</String>
+    <String Id="ProgressTextRollbackCleanupTemplate">檔案:[1]</String>
+    <String Id="ProgressTextUnmoveFiles">正在移除移動的檔案</String>
+    <String Id="ProgressTextUnmoveFilesTemplate">檔案:[1], 目錄:[9]</String>
+    <String Id="ProgressTextUnpublishProduct">正在取消發佈產品資訊</String>
+
+    <String Id="UITextbytes">位元組</String>
+    <String Id="UITextGB">GB</String>
+    <String Id="UITextKB">KB</String>
+    <String Id="UITextMB">MB</String>
+    <String Id="UITextMenuAbsent">整個功能將不可用</String>
+    <String Id="UITextMenuAdvertise">需要時將安裝的功能</String>
+    <String Id="UITextMenuAllCD">整個功能將會安裝成從 CD 上執行</String>
+    <String Id="UITextMenuAllLocal">整個功能將會安裝到本機硬碟</String>
+    <String Id="UITextMenuAllNetwork">整個功能將會安裝成從網路上執行</String>
+    <String Id="UITextMenuCD">將會安裝成從 CD 上執行</String>
+    <String Id="UITextMenuLocal">將會安裝到本機硬碟</String>
+    <String Id="UITextMenuNetwork">將會安裝成從網路執行</String>
+    <String Id="UITextScriptInProgress">正在收集所需的資訊...</String>
+    <String Id="UITextSelAbsentAbsent">這個功能將保持未安裝的狀態</String>
+    <String Id="UITextSelAbsentAdvertise">這個功能會設定成視需要進行安裝</String>
+    <String Id="UITextSelAbsentCD">這個功能將會安裝成從 CD 執行</String>
+    <String Id="UITextSelAbsentLocal">這個功能將會安裝在本機硬碟中</String>
+    <String Id="UITextSelAbsentNetwork">這個功能將會安裝成從網路執行</String>
+    <String Id="UITextSelAdvertiseAbsent">這個功能將無法使用</String>
+    <String Id="UITextSelAdvertiseAdvertise">將會視需要進行安裝</String>
+    <String Id="UITextSelAdvertiseCD">這個功能可以從 CD 上執行</String>
+    <String Id="UITextSelAdvertiseLocal">這個功能將安裝在您的本機硬碟</String>
+    <String Id="UITextSelAdvertiseNetwork">這個功能可以從網路執行</String>
+    <String Id="UITextSelCDAbsent">這個功能將完整解除安裝,您將不能從 CD 執行</String>
+    <String Id="UITextSelCDAdvertise">這個功能會從 CD 執行變更成視需要進行安裝</String>
+    <String Id="UITextSelCDCD">這個功能仍將從 CD 執行</String>
+    <String Id="UITextSelCDLocal">這個功能將會從 CD 執行變更為安裝在本機硬碟中</String>
+    <String Id="UITextSelChildCostNeg">這個功能會在您的硬碟釋放 [1] 。</String>
+    <String Id="UITextSelChildCostPos">這個功能要求 [1] 在您的硬碟上。</String>
+    <String Id="UITextSelCostPending">正在編譯這個功能的花費...</String>
+    <String Id="UITextSelLocalAbsent">這個功能將會完整移除</String>
+    <String Id="UITextSelLocalAdvertise">這個功能會從您的本機硬碟上移除,但是會設定成視需要進行安裝</String>
+    <String Id="UITextSelLocalCD">這個功能將會從您的本機硬碟中移除,但是仍然可以從 CD 執行</String>
+    <String Id="UITextSelLocalLocal">這個功能將會保留在您的本機硬碟中</String>
+    <String Id="UITextSelLocalNetwork">這個功能將會從您的本機硬碟中移除,但是仍然可從網路上執行</String>
+    <String Id="UITextSelNetworkAbsent">這個功能將完整解除安裝,您將不能從網路執行</String>
+    <String Id="UITextSelNetworkAdvertise">這個功能將會從網路執行變更成視需要進行安裝</String>
+    <String Id="UITextSelNetworkLocal">這個功能將會從網路執行變更為安裝在本機硬碟中。</String>
+    <String Id="UITextSelNetworkNetwork">這個功能仍將保留成從網路執行</String>
+    <String Id="UITextSelParentCostNegNeg">這個功能在您的硬碟釋放 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟釋放 [4] 。</String>
+    <String Id="UITextSelParentCostNegPos">這個功能在您的硬碟釋放 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟需要 [4] 。</String>
+    <String Id="UITextSelParentCostPosNeg">這個功能在您的硬碟需要 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟釋放 [4] 。</String>
+    <String Id="UITextSelParentCostPosPos">這個功能在您的硬碟需要 [1]。 它已選取 [2] 之 [3] 子功能。 子功能在您的硬碟需要 [4] 。</String>
+    <String Id="UITextTimeRemaining">剩餘時間:{[1] 分 }{[2] 秒}</String>
+    <String Id="UITextVolumeCostAvailable">可用</String>
+    <String Id="UITextVolumeCostDifference">差異</String>
+    <String Id="UITextVolumeCostRequired">需求</String>
+    <String Id="UITextVolumeCostSize">磁碟大小</String>
+    <String Id="UITextVolumeCostVolume">分割區</String>
+
+</WixLocalization>
diff --git a/src/VBox/Installer/win/Resources/VBoxRes.rc b/src/VBox/Installer/win/Resources/VBoxRes.rc
index 2e5e97b..0d5cb93 100644
--- a/src/VBox/Installer/win/Resources/VBoxRes.rc
+++ b/src/VBox/Installer/win/Resources/VBoxRes.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Resources/dummy.cpp b/src/VBox/Installer/win/Resources/dummy.cpp
index 99fa814..2e6d8e6 100644
--- a/src/VBox/Installer/win/Resources/dummy.cpp
+++ b/src/VBox/Installer/win/Resources/dummy.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Resources/resource.h b/src/VBox/Installer/win/Resources/resource.h
index f26ffc2..cd2f8cc 100644
--- a/src/VBox/Installer/win/Resources/resource.h
+++ b/src/VBox/Installer/win/Resources/resource.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.cpp b/src/VBox/Installer/win/Stub/VBoxStub.cpp
index 8fe4b1f..3bea52b 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.cpp
+++ b/src/VBox/Installer/win/Stub/VBoxStub.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.h b/src/VBox/Installer/win/Stub/VBoxStub.h
index 8c1c108..85e0b16 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.h
+++ b/src/VBox/Installer/win/Stub/VBoxStub.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.rc b/src/VBox/Installer/win/Stub/VBoxStub.rc
index 0e82fb3..48f651c 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.rc
+++ b/src/VBox/Installer/win/Stub/VBoxStub.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/VBoxStubCertUtil.cpp b/src/VBox/Installer/win/Stub/VBoxStubCertUtil.cpp
index a15e947..2fe495f 100644
--- a/src/VBox/Installer/win/Stub/VBoxStubCertUtil.cpp
+++ b/src/VBox/Installer/win/Stub/VBoxStubCertUtil.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/VBoxStubCertUtil.h b/src/VBox/Installer/win/Stub/VBoxStubCertUtil.h
index 8c2fcd1..6c23cbb 100644
--- a/src/VBox/Installer/win/Stub/VBoxStubCertUtil.h
+++ b/src/VBox/Installer/win/Stub/VBoxStubCertUtil.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/crypt32.def b/src/VBox/Installer/win/Stub/crypt32.def
index 2c0ea9a..330e7ed 100644
--- a/src/VBox/Installer/win/Stub/crypt32.def
+++ b/src/VBox/Installer/win/Stub/crypt32.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2009-2016 Oracle Corporation
+; Copyright (C) 2009-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/msi.def b/src/VBox/Installer/win/Stub/msi.def
index dd4c8e6..85c7146 100644
--- a/src/VBox/Installer/win/Stub/msi.def
+++ b/src/VBox/Installer/win/Stub/msi.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2009-2016 Oracle Corporation
+; Copyright (C) 2009-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/resource.h b/src/VBox/Installer/win/Stub/resource.h
index 2f4ebb6..f00ffc5 100644
--- a/src/VBox/Installer/win/Stub/resource.h
+++ b/src/VBox/Installer/win/Stub/resource.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/shell32.def b/src/VBox/Installer/win/Stub/shell32.def
index d4c7d8d..e5df0e4 100644
--- a/src/VBox/Installer/win/Stub/shell32.def
+++ b/src/VBox/Installer/win/Stub/shell32.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2009-2016 Oracle Corporation
+; Copyright (C) 2009-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/user32.def b/src/VBox/Installer/win/Stub/user32.def
index b4c8faf..9730efb 100644
--- a/src/VBox/Installer/win/Stub/user32.def
+++ b/src/VBox/Installer/win/Stub/user32.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2009-2016 Oracle Corporation
+; Copyright (C) 2009-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/Stub/ws2_32.def b/src/VBox/Installer/win/Stub/ws2_32.def
index c7b4900..a802933 100644
--- a/src/VBox/Installer/win/Stub/ws2_32.def
+++ b/src/VBox/Installer/win/Stub/ws2_32.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2009-2016 Oracle Corporation
+; Copyright (C) 2009-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp b/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp
index dd6e706..d50ce2a 100644
--- a/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp
+++ b/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/StubBld/VBoxStubBld.h b/src/VBox/Installer/win/StubBld/VBoxStubBld.h
index b3151bd..c6a4b01 100644
--- a/src/VBox/Installer/win/StubBld/VBoxStubBld.h
+++ b/src/VBox/Installer/win/StubBld/VBoxStubBld.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Installer/win/VBoxMergeApp.wxi b/src/VBox/Installer/win/VBoxMergeApp.wxi
index 4b28c19..3c9c85f 100644
--- a/src/VBox/Installer/win/VBoxMergeApp.wxi
+++ b/src/VBox/Installer/win/VBoxMergeApp.wxi
@@ -81,7 +81,7 @@
         <!-- Include the auto-generated TypeLib block -->
         <?include $(env.PATH_TARGET)\VirtualBox_TypeLib.wxi ?>
 <?endif?>
-        
+
 <?if $(env.VBOX_WITH_SDS) = "yes" ?>
         <File Id="VBoxSDS" Name="VBoxSDS.exe"
               Source="$(env.PATH_OUT)\bin\VBoxSDS.exe">
@@ -123,7 +123,7 @@
 <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
     <Component Id="cp_RegisterExtensions" Guid="FEB8943E-5D60-4E2D-846F-458207019D40"
                Win64="$(var.Property_Win64)" KeyPath="yes">
-               
+
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
             <Condition><![CDATA[(local_VBOX_REGISTERFILEEXTENSIONS="1")]]></Condition>
 <?else ?>
diff --git a/src/VBox/Installer/win/VBoxMergeApp.wxs b/src/VBox/Installer/win/VBoxMergeApp.wxs
index 06da9aa..b02bb53 100644
--- a/src/VBox/Installer/win/VBoxMergeApp.wxs
+++ b/src/VBox/Installer/win/VBoxMergeApp.wxs
@@ -51,10 +51,10 @@
         <?include PublicProperties.wxi ?>
 
 
-        <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" /> 
+        <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">
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp.wxs b/src/VBox/Installer/win/VBoxMergeNetAdp.wxs
index fe55751..645f63e 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp.wxs
@@ -37,10 +37,10 @@
         <?include PublicProperties.wxi ?>
 
 <?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" /> 
+        <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 ?>
 
@@ -56,7 +56,7 @@
         <!-- Custom actions -->
         <Binary Id="VBoxInstallHelper" SourceFile="$(env.PATH_OUT)\bin\VBoxInstallHelper.dll" />
         <?include VBoxMergeNetAdpCA.wxi ?>
-        
+
         <InstallExecuteSequence>
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
             <Custom Action="setNetworkTypeADP" After="CostInitialize"/>
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs
index e2dbec4..c51d74e 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxs
@@ -37,10 +37,10 @@
         <?include PublicProperties.wxi ?>
 
 <?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" /> 
+        <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 ?>
 
diff --git a/src/VBox/Installer/win/VBoxMergeNetFlt.wxs b/src/VBox/Installer/win/VBoxMergeNetFlt.wxs
index d3bd24a..07e1587 100644
--- a/src/VBox/Installer/win/VBoxMergeNetFlt.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetFlt.wxs
@@ -37,10 +37,10 @@
         <?include PublicProperties.wxi ?>
 
 <?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" /> 
+        <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 ?>
 
diff --git a/src/VBox/Installer/win/VBoxMergeNetLwf.wxs b/src/VBox/Installer/win/VBoxMergeNetLwf.wxs
index 62aae12..b30ca68 100644
--- a/src/VBox/Installer/win/VBoxMergeNetLwf.wxs
+++ b/src/VBox/Installer/win/VBoxMergeNetLwf.wxs
@@ -37,10 +37,10 @@
         <?include PublicProperties.wxi ?>
 
 <?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" /> 
+        <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 ?>
 
diff --git a/src/VBox/Installer/win/VirtualBox.wxs b/src/VBox/Installer/win/VirtualBox.wxs
index 6371ccc..5ad577d 100644
--- a/src/VBox/Installer/win/VirtualBox.wxs
+++ b/src/VBox/Installer/win/VirtualBox.wxs
@@ -237,7 +237,7 @@
     <CustomAction Id="ca_InstallVBoxSDS" Directory="INSTALLDIR" ExeCommand='"[INSTALLDIR]\VBoxSDS.exe" --regservice' Return="check" Impersonate="no" />
     <CustomAction Id="ca_UninstallVBoxSDS" Directory="INSTALLDIR" ExeCommand='"[INSTALLDIR]\VBoxSDS.exe" --unregservice' Return="check" Impersonate="no" />
 <?endif?>
-        
+
 <?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
     <?include VBoxMergeAppCA.wxi ?>
     <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
@@ -569,7 +569,7 @@
 
         <!-- Check + unininstall old TAP instances - we  don't need them anymore -->
         <Custom Action="ca_UninstallTAPInstances" Before="InstallFiles" >1</Custom>
-        
+
         <Custom Action="ca_InstallBrandingArgs" Before="ca_InstallBranding" ><![CDATA[NOT REMOVE]]></Custom>
         <Custom Action="ca_InstallBranding" Before="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
 
diff --git a/src/VBox/Installer/win/VirtualBox_TypeLib.xsl b/src/VBox/Installer/win/VirtualBox_TypeLib.xsl
index 5b8b093..db1ff1d 100644
--- a/src/VBox/Installer/win/VirtualBox_TypeLib.xsl
+++ b/src/VBox/Installer/win/VirtualBox_TypeLib.xsl
@@ -82,7 +82,7 @@
             <xsl:call-template name="application_template" />
         </xsl:if>
     </xsl:template>
-    
+
     <!--
     * applications
     -->
@@ -104,7 +104,7 @@
             </xsl:choose>
         </AppId>
     </xsl:template>
-    
+
 
 <!--
  *  classes
diff --git a/src/VBox/Installer/win/VirtualBox_TypeLibWithInterfaces.xsl b/src/VBox/Installer/win/VirtualBox_TypeLibWithInterfaces.xsl
index 9e2c5e1..b21c7ac 100644
--- a/src/VBox/Installer/win/VirtualBox_TypeLibWithInterfaces.xsl
+++ b/src/VBox/Installer/win/VirtualBox_TypeLibWithInterfaces.xsl
@@ -89,7 +89,7 @@
   </Include>
 </xsl:template>
 
-<!-- 
+<!--
 Applications.
 -->
 <xsl:template match="application">
@@ -178,7 +178,7 @@ Applications.
   </Class>
 </xsl:template>
 
- 
+
 <!--
   Interfaces.
 -->
@@ -196,7 +196,7 @@ Applications.
   </Interface>
 </xsl:template>
 
-    
+
 
 <!--
   Count the number of methods.  This must match what midl.exe initializes
diff --git a/src/VBox/Main/.scm-settings b/src/VBox/Main/.scm-settings
new file mode 100644
index 0000000..13b5b06
--- /dev/null
+++ b/src/VBox/Main/.scm-settings
@@ -0,0 +1,69 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the Main API.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# cbindings have different licences.
+/cbinding/*.h:                          --license-lgpl
+/cbinding/VBoxCAPIGlue.c:               --license-mit
+/cbinding/VBoxCAPIGlue.h.in:            --license-mit --treat-as .h
+/cbinding/makefile.tstCAPIGlue:         --license-mit --treat-as Makefile
+
+# The Python bindings is licensed under dual GPL and CDDL.
+/glue/vboxapi.py:                       --license-ose-dual
+
+# Source dirs.
+--filter-out-files /src-all/VBoxAPI-end.d
+--filter-out-files /src-client/README.testing
+--filter-out-files /src-server/custom.ids
+--filter-out-files /src-server/usb.ids
+
+# IDL and XML
+/idl/VirtualBox.xidl:                   --treat-as .xml
+/idl/VirtualBox.dtd:                    --treat-as .xml
+
+/xml/VirtualBox-settings.xsd:           --treat-as .xml
+--filter-out-files /xml/samples/*.xml
+
+# We don't have any copyright or license in the .cfg and .sif files.
+# Exploint --external-copyright to check that this remains the case.
+# This does not imply anything wrt to the copyright status of the files.
+/UnattendedTemplates/*.cfg:             --external-copyright --treat-as .sh
+/UnattendedTemplates/*.sif:             --external-copyright
+/UnattendedTemplates/*.xml:             --dont-set-svn-eol --no-convert-eol
+
+# The webservice is fun.
+/webservice/Makefile.webtest:           --treat-as Makefile
+--filter-out-files /webservice/types.txt
+--filter-out-files /webservice/MANIFEST.MF.in
+--filter-out-dirs  /webservice/jaxlibs/.
+
+# The webservice samples are MIT and need some hacks to handle unusual file types.
+/webservice/samples/*:                  --license-mit
+/webservice/samples/*/Makefile.glue:    --treat-as Makefile
+/webservice/samples/php/clienttest.php: --treat-as .c
+
+
+# Testcases.
+/testcase/makefile.tstVBoxAPIWin:       --treat-as Makefile
+/testcase/makefile.tstVBoxAPIXPCOM:     --treat-as Makefile
+--filter-out-files /testcase/ovf-dummy.vmdk
+--filter-out-files /testcase/ovf-joomla-0.9/joomla-1.1.4-ovf.ovf
+--filter-out-files /testcase/ovf-winhost-audio-nodisks/WinXP.ovf
+--filter-out-files /testcase/ovf-winxp-vbox-sharedfolders/winxp.ovf
+--filter-out-files /testcase/VBoxVBTest/TestForm.frm
+--filter-out-files /testcase/VBoxVBTest/TestForm.frx
+--filter-out-files /testcase/VBoxVBTest/VBoxVBTest.vbp
+
diff --git a/src/VBox/Main/Docs-Intro.cpp b/src/VBox/Main/Docs-Intro.cpp
index 65814ef..10df991 100644
--- a/src/VBox/Main/Docs-Intro.cpp
+++ b/src/VBox/Main/Docs-Intro.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk
index 063de61..9b3d28a 100644
--- a/src/VBox/Main/Makefile.kmk
+++ b/src/VBox/Main/Makefile.kmk
@@ -127,7 +127,7 @@ if "$(KBUILD_TARGET)" != "win"
  BLDDIRS += \
 	$(VBOX_PATH_SDK)/bindings/xpcom/idl \
 	$(VBOX_PATH_SDK)/bindings/xpcom/include
- # disable VBoxSDS for XPCOM	
+ # disable VBoxSDS for XPCOM
  override VBOX_WITH_SDS =
 endif # xpcom
 
@@ -277,7 +277,6 @@ testschemadefs: $(VBOX_XML_SCHEMADEFS_H) $(VBOX_XML_SCHEMADEFS_CPP)
 if defined(VBOX_WITH_SDS) && "$(KBUILD_TARGET)" == "win"
  PROGRAMS += VBoxSDS
  VBoxSDS_TEMPLATE = VBOXMAINEXE
- VBoxSDS_DEFS = \
  VBoxSDS_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
  VBoxSDS_DEFS.win += _WIN32_WINNT=0x0510
  VBoxSDS_INCS = \
@@ -366,7 +365,8 @@ VBoxSVC_DEFS = \
 	$(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) \
 	$(if $(VBOX_WITH_NAT_SERVICE),VBOX_WITH_NAT_SERVICE,) \
 	$(if $(VBOX_WITH_CROGL),VBOX_WITH_CROGL,) \
-	$(if $(VBOX_WITH_CRHGSMI),VBOX_WITH_CRHGSMI,)
+	$(if $(VBOX_WITH_CRHGSMI),VBOX_WITH_CRHGSMI,) \
+	$(if-expr defined(VBOX_WITH_SDS),VBOX_WITH_SDS,)
 ifdef VBOX_WITH_USB
  VBoxSVC_DEFS += \
 	VBOX_WITH_USB \
@@ -780,6 +780,9 @@ endif
 VBoxC_SDKS = VBOX_LIBPNG VBOX_ZLIB
 
 ifdef VBOX_WITH_VIDEOREC
+   VBoxC_SOURCES += \
+	src-client/EBMLWriter.cpp \
+	src-client/WebMWriter.cpp
   ifdef VBOX_WITH_LIBVPX
    VBoxC_SDKS += VBOX_VPX
    VBoxC_DEFS += VBOX_WITH_LIBVPX
@@ -889,7 +892,6 @@ VBoxC_SOURCES += \
 	src-client/DisplayImpl.cpp \
 	src-client/DisplayImplLegacy.cpp \
 	src-client/DisplaySourceBitmapImpl.cpp \
-	src-client/EbmlWriter.cpp \
 	src-client/EmulatedUSBImpl.cpp \
 	src-client/GuestImpl.cpp \
 	src-client/GuestCtrlImpl.cpp \
diff --git a/src/VBox/Main/UnattendedTemplates/fedora_ks.cfg b/src/VBox/Main/UnattendedTemplates/fedora_ks.cfg
index 013de2b..c4c44c6 100644
--- a/src/VBox/Main/UnattendedTemplates/fedora_ks.cfg
+++ b/src/VBox/Main/UnattendedTemplates/fedora_ks.cfg
@@ -45,8 +45,8 @@ zerombr
 clearpart --all --initlabel
 
 # Disk partitioning information
-part / --fstype ext4 --size 6000 --grow --asprimary 
-part swap --size 1024 
+part / --fstype ext4 --size 6000 --grow --asprimary
+part swap --size 1024
 
 #Initial user
 user --name=@@VBOX_INSERT_USER_LOGIN_SH@@ --password=@@VBOX_INSERT_USER_PASSWORD_SH@@
diff --git a/src/VBox/Main/UnattendedTemplates/ol_ks.cfg b/src/VBox/Main/UnattendedTemplates/ol_ks.cfg
index d0e08dd..0d73644 100644
--- a/src/VBox/Main/UnattendedTemplates/ol_ks.cfg
+++ b/src/VBox/Main/UnattendedTemplates/ol_ks.cfg
@@ -48,8 +48,8 @@ zerombr
 clearpart --all --initlabel
 
 # Disk partitioning information
-part / --fstype ext4 --size 6000 --grow --asprimary 
-part swap --size 1024 
+part / --fstype ext4 --size 6000 --grow --asprimary
+part swap --size 1024
 
 #Initial user
 user --name=@@VBOX_INSERT_USER_LOGIN_SH@@ --password=@@VBOX_INSERT_USER_PASSWORD_SH@@
diff --git a/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg b/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg
index 7df172b..2819cd3 100644
--- a/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg
+++ b/src/VBox/Main/UnattendedTemplates/redhat67_ks.cfg
@@ -48,8 +48,8 @@ zerombr
 clearpart --all --initlabel
 
 # Disk partitioning information
-part / --fstype ext4 --size 6000 --grow --asprimary 
-part swap --size 1024 
+part / --fstype ext4 --size 6000 --grow --asprimary
+part swap --size 1024
 
 #Initial user
 user --name=@@VBOX_INSERT_USER_LOGIN_SH@@ --password=@@VBOX_INSERT_USER_PASSWORD_SH@@
diff --git a/src/VBox/Main/UnattendedTemplates/suse_autoinstall.xml b/src/VBox/Main/UnattendedTemplates/suse_autoinstall.xml
index 07f97b9..f660869 100644
--- a/src/VBox/Main/UnattendedTemplates/suse_autoinstall.xml
+++ b/src/VBox/Main/UnattendedTemplates/suse_autoinstall.xml
@@ -22,7 +22,7 @@
       <!-- 'smpppd' is required on openSUSE 11.4 -->
       <package>smpppd</package>
     </packages>
-    
+
     <patterns config:type="list">
       <pattern>apparmor</pattern>
       <pattern>apparmor_opt</pattern>
diff --git a/src/VBox/Main/cbinding/Makefile.kmk b/src/VBox/Main/cbinding/Makefile.kmk
index 0957bde..fc6d567 100644
--- a/src/VBox/Main/cbinding/Makefile.kmk
+++ b/src/VBox/Main/cbinding/Makefile.kmk
@@ -51,6 +51,8 @@ CAPIHeaders_SOURCES = \
 	VBoxCAPI_v4_2.h \
 	VBoxCAPI_v4_3.h \
 	$(CAPIHeaders_0_OUTDIR)/VBoxCAPI.h=>VBoxCAPI_v$(VBOX_API_VERSION).h
+CAPIHeaders_CLEAN = \
+	$(CAPIHeaders_0_OUTDIR)/VBoxCAPI.h
 
 $$(CAPIHeaders_0_OUTDIR)/VBoxCAPIGlue.h: \
 		$(PATH_SUB_CURRENT)/VBoxCAPIGlue.h.in \
diff --git a/src/VBox/Main/cbinding/VBoxCAPI.cpp b/src/VBox/Main/cbinding/VBoxCAPI.cpp
index 470b98c..152e0a1 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI.cpp
+++ b/src/VBox/Main/cbinding/VBoxCAPI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/cbinding/VBoxCAPI.rc b/src/VBox/Main/cbinding/VBoxCAPI.rc
index 69bb0bd..d3e8975 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI.rc
+++ b/src/VBox/Main/cbinding/VBoxCAPI.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/cbinding/VBoxCAPIGlue.c b/src/VBox/Main/cbinding/VBoxCAPIGlue.c
index 293c029..1292857 100644
--- a/src/VBox/Main/cbinding/VBoxCAPIGlue.c
+++ b/src/VBox/Main/cbinding/VBoxCAPIGlue.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/Main/cbinding/VBoxCAPIGlue.h.in b/src/VBox/Main/cbinding/VBoxCAPIGlue.h.in
index 9ef5314..163564a 100644
--- a/src/VBox/Main/cbinding/VBoxCAPIGlue.h.in
+++ b/src/VBox/Main/cbinding/VBoxCAPIGlue.h.in
@@ -1,10 +1,10 @@
-/* $Revision: 91752 $ */
+/* $Id: VBoxCAPIGlue.h.in $ */
 /** @file VBoxCAPIGlue.h
  * Glue for dynamically linking with VBoxCAPI.
  */
 
 /*
- * Copyright (C) 2008-2014 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
@@ -21,7 +21,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v2_2.h b/src/VBox/Main/cbinding/VBoxCAPI_v2_2.h
index 316b1b4..51c10ea 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v2_2.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v2_2.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v3_0.h b/src/VBox/Main/cbinding/VBoxCAPI_v3_0.h
index 0e5aa98..d6f028b 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v3_0.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v3_0.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v3_1.h b/src/VBox/Main/cbinding/VBoxCAPI_v3_1.h
index a2fab99..bfb3a8f 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v3_1.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v3_1.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v3_2.h b/src/VBox/Main/cbinding/VBoxCAPI_v3_2.h
index 7df26af..9276864 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v3_2.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v3_2.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v4_0.h b/src/VBox/Main/cbinding/VBoxCAPI_v4_0.h
index 3e6b435..dbc28a8 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v4_0.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v4_0.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v4_1.h b/src/VBox/Main/cbinding/VBoxCAPI_v4_1.h
index 4fcd938..28b30d0 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v4_1.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v4_1.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v4_2.h b/src/VBox/Main/cbinding/VBoxCAPI_v4_2.h
index d541eab..9e6a54c 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v4_2.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v4_2.h
@@ -19,7 +19,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/VBoxCAPI_v4_3.h b/src/VBox/Main/cbinding/VBoxCAPI_v4_3.h
index d8ff302..6564d2c 100644
--- a/src/VBox/Main/cbinding/VBoxCAPI_v4_3.h
+++ b/src/VBox/Main/cbinding/VBoxCAPI_v4_3.h
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of a free software library; you can redistribute
  * it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/cbinding/capiidl.xsl b/src/VBox/Main/cbinding/capiidl.xsl
index 8138fa7..4078191 100644
--- a/src/VBox/Main/cbinding/capiidl.xsl
+++ b/src/VBox/Main/cbinding/capiidl.xsl
@@ -1625,7 +1625,7 @@ typedef PCVBOXCAPI (*PFNVBOXGETXPCOMCFUNCTIONS)(unsigned uVersion);
   <xsl:call-template name="xsltprocNewlineOutputHack"/>
   <!-- all enums go first -->
   <xsl:apply-templates select="application/enum | application/if/enum"/>
-  <!-- everything else but result codes and enums 
+  <!-- everything else but result codes and enums
   <xsl:apply-templates select="*[not(self::result or self::enum) and
                                  not(self::if[result] or self::if[enum])]"/> -->
     <!-- the modules (i.e. everything else) -->
@@ -2713,4 +2713,4 @@ typedef PCVBOXCAPI (*PFNVBOXGETXPCOMCFUNCTIONS)(unsigned uVersion);
 <xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" mode="forward" />
 
 
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/src/VBox/Main/cbinding/makefile.tstCAPIGlue b/src/VBox/Main/cbinding/makefile.tstCAPIGlue
index 40b85aa..37959a7 100644
--- a/src/VBox/Main/cbinding/makefile.tstCAPIGlue
+++ b/src/VBox/Main/cbinding/makefile.tstCAPIGlue
@@ -1,18 +1,31 @@
-# $Revision: 91752 $
+# $Id: makefile.tstCAPIGlue $
 ## @file makefile.tstCAPIGlue
 # Makefile for sample program illustrating use of C binding for COM/XPCOM.
 #
 
 #
-# Copyright (C) 2009-2014 Oracle Corporation
+# Copyright (C) 2009-2017 Oracle Corporation
 #
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
 #
 
 PATH_SDK      = ../../..
diff --git a/src/VBox/Main/cbinding/tstCAPIGlue.c b/src/VBox/Main/cbinding/tstCAPIGlue.c
index ad22479..67749a5 100644
--- a/src/VBox/Main/cbinding/tstCAPIGlue.c
+++ b/src/VBox/Main/cbinding/tstCAPIGlue.c
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/AutoLock.cpp b/src/VBox/Main/glue/AutoLock.cpp
index 9ac343f..419d342 100644
--- a/src/VBox/Main/glue/AutoLock.cpp
+++ b/src/VBox/Main/glue/AutoLock.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/ErrorInfo.cpp b/src/VBox/Main/glue/ErrorInfo.cpp
index e825998..09c9461 100644
--- a/src/VBox/Main/glue/ErrorInfo.cpp
+++ b/src/VBox/Main/glue/ErrorInfo.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/EventQueue.cpp b/src/VBox/Main/glue/EventQueue.cpp
index 41957e9..3859556 100644
--- a/src/VBox/Main/glue/EventQueue.cpp
+++ b/src/VBox/Main/glue/EventQueue.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/GetVBoxUserHomeDirectory.cpp b/src/VBox/Main/glue/GetVBoxUserHomeDirectory.cpp
index 69afc54..55054a5 100644
--- a/src/VBox/Main/glue/GetVBoxUserHomeDirectory.cpp
+++ b/src/VBox/Main/glue/GetVBoxUserHomeDirectory.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,6 +15,7 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Main/glue/NativeEventQueue.cpp b/src/VBox/Main/glue/NativeEventQueue.cpp
index 04800dc..ca4f859 100644
--- a/src/VBox/Main/glue/NativeEventQueue.cpp
+++ b/src/VBox/Main/glue/NativeEventQueue.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/VBoxLogRelCreate.cpp b/src/VBox/Main/glue/VBoxLogRelCreate.cpp
index 9d6ff93..7f89e47 100644
--- a/src/VBox/Main/glue/VBoxLogRelCreate.cpp
+++ b/src/VBox/Main/glue/VBoxLogRelCreate.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -140,10 +140,8 @@ int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
                      const char *pcszEnvVarBase, uint32_t fDestFlags,
                      uint32_t cMaxEntriesPerGroup, uint32_t cHistory,
                      uint32_t uHistoryFileTime, uint64_t uHistoryFileSize,
-                     char *pszError, size_t cbError)
+                     PRTERRINFO pErrInfo)
 {
-    Assert(cbError >= RTPATH_MAX + 128);
-
     /* create release logger */
     PRTLOGGER pReleaseLogger;
     static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
@@ -154,8 +152,7 @@ int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
     int vrc = RTLogCreateEx(&pReleaseLogger, fFlags, pcszGroupSettings,
                             pcszEnvVarBase, RT_ELEMENTS(s_apszGroups), s_apszGroups, fDestFlags,
                             vboxHeaderFooter, cHistory, uHistoryFileSize, uHistoryFileTime,
-                            pszError, cbError,
-                            pcszLogFile ? "%s" : NULL, pcszLogFile);
+                            pErrInfo, pcszLogFile ? "%s" : NULL, pcszLogFile);
     if (RT_SUCCESS(vrc))
     {
         /* make sure that we don't flood logfiles */
diff --git a/src/VBox/Main/glue/com.cpp b/src/VBox/Main/glue/com.cpp
index 8871274..2306264 100644
--- a/src/VBox/Main/glue/com.cpp
+++ b/src/VBox/Main/glue/com.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/errorprint.cpp b/src/VBox/Main/glue/errorprint.cpp
index c2d4451..09fc8e6 100644
--- a/src/VBox/Main/glue/errorprint.cpp
+++ b/src/VBox/Main/glue/errorprint.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/glue-java.xsl b/src/VBox/Main/glue/glue-java.xsl
index d585c5e..ecc9bd5 100644
--- a/src/VBox/Main/glue/glue-java.xsl
+++ b/src/VBox/Main/glue/glue-java.xsl
@@ -1923,7 +1923,7 @@
         <xsl:with-param name="safearray" select="@safearray" />
       </xsl:call-template>
       </xsl:variable>
-      <xsl:value-of select="concat('        ', $attrname, ' = ', $wrapped, ';
')" /> 
+      <xsl:value-of select="concat('        ', $attrname, ' = ', $wrapped, ';
')" />
     </xsl:if>
   </xsl:for-each>
   <xsl:text>    }

</xsl:text>
@@ -4890,7 +4890,7 @@ class VBoxTLSSocketFactory extends SSLSocketFactory
         return sf.getSupportedCipherSuites();
     }
 }
-        
+
 
 public class VirtualBoxManager
 {
@@ -5184,6 +5184,16 @@ public class VirtualBoxManager
         </xsl:if>
       </xsl:when>
 
+      <xsl:when test="$G_vboxGlueStyle='xpcom'">
+        <!-- We don't need WSDL-specific nor MIDL-specific interfaces here -->
+        <xsl:if test="not(@internal='yes') and not($self_target='wsdl') and not($module) and not($self_target='midl')">
+          <xsl:call-template name="genIface">
+            <xsl:with-param name="ifname" select="@name" />
+            <xsl:with-param name="filename" select="concat(@name, '.java')" />
+          </xsl:call-template>
+        </xsl:if>
+      </xsl:when>
+
       <xsl:otherwise>
         <!-- We don't need WSDL-specific interfaces here -->
         <xsl:if test="not(@internal='yes') and not($self_target='wsdl') and not($module)">
diff --git a/src/VBox/Main/glue/initterm.cpp b/src/VBox/Main/glue/initterm.cpp
index 4b9dbdb..32eb24e 100644
--- a/src/VBox/Main/glue/initterm.cpp
+++ b/src/VBox/Main/glue/initterm.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -257,7 +257,7 @@ HRESULT Initialize(bool fGui /*= false*/, bool fAutoRegUpdate /*= true*/)
         SetLastError(ERROR_SUCCESS);
         HANDLE hLeakIt = CreateMutexW(NULL/*pSecAttr*/, FALSE, L"Global\\VirtualBoxComLazyRegistrationMutant");
         DWORD  dwErr   = GetLastError();
-        AssertMsg(dwErr == ERROR_SUCCESS || dwErr == ERROR_ALREADY_EXISTS, ("%u\n", dwErr));
+        AssertMsg(dwErr == ERROR_SUCCESS || dwErr == ERROR_ALREADY_EXISTS || dwErr == ERROR_ACCESS_DENIED, ("%u\n", dwErr));
         if (dwErr == ERROR_SUCCESS)
         {
             char szPath[RTPATH_MAX];
@@ -289,8 +289,8 @@ HRESULT Initialize(bool fGui /*= false*/, bool fAutoRegUpdate /*= true*/)
                     /* Just keep it loaded. */
                 }
             }
+            Assert(hLeakIt != NULL); NOREF(hLeakIt);
         }
-        Assert(hLeakIt != NULL); NOREF(hLeakIt);
     }
 # endif
 
@@ -388,17 +388,17 @@ HRESULT Initialize(bool fGui /*= false*/, bool fAutoRegUpdate /*= true*/)
     AssertRCReturn(vrc, NS_ERROR_FAILURE);
     vrc = RTStrCopy(szXptiDat, sizeof(szXptiDat), szCompReg);
     AssertRCReturn(vrc, NS_ERROR_FAILURE);
-#ifdef VBOX_IN_32_ON_64_MAIN_API
+# ifdef VBOX_IN_32_ON_64_MAIN_API
     vrc = RTPathAppend(szCompReg, sizeof(szCompReg), "compreg-x86.dat");
     AssertRCReturn(vrc, NS_ERROR_FAILURE);
     vrc = RTPathAppend(szXptiDat, sizeof(szXptiDat), "xpti-x86.dat");
     AssertRCReturn(vrc, NS_ERROR_FAILURE);
-#else
+# else
     vrc = RTPathAppend(szCompReg, sizeof(szCompReg), "compreg.dat");
     AssertRCReturn(vrc, NS_ERROR_FAILURE);
     vrc = RTPathAppend(szXptiDat, sizeof(szXptiDat), "xpti.dat");
     AssertRCReturn(vrc, NS_ERROR_FAILURE);
-#endif
+# endif
 
     LogFlowFunc(("component registry  : \"%s\"\n", szCompReg));
     LogFlowFunc(("XPTI data file      : \"%s\"\n", szXptiDat));
@@ -437,9 +437,9 @@ HRESULT Initialize(bool fGui /*= false*/, bool fAutoRegUpdate /*= true*/)
         }
         else if (i == 2)
         {
-#ifdef VBOX_WITH_HARDENING
+# ifdef VBOX_WITH_HARDENING
             continue;
-#else /* !VBOX_WITH_HARDENING */
+# else /* !VBOX_WITH_HARDENING */
             /* Use parent of RTPathAppPrivateArch() if ends with "testcase" */
             vrc = RTPathAppPrivateArch(szAppHomeDir, sizeof(szAppHomeDir));
             AssertRC(vrc);
@@ -449,7 +449,7 @@ HRESULT Initialize(bool fGui /*= false*/, bool fAutoRegUpdate /*= true*/)
             if (!filename || strcmp(filename, "testcase"))
                 continue;
             RTPathStripFilename(szAppHomeDir);
-#endif /* !VBOX_WITH_HARDENING */
+# endif /* !VBOX_WITH_HARDENING */
         }
         else
         {
diff --git a/src/VBox/Main/glue/string.cpp b/src/VBox/Main/glue/string.cpp
index 3cd33d8..205c40d 100644
--- a/src/VBox/Main/glue/string.cpp
+++ b/src/VBox/Main/glue/string.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/glue/tests/Makefile b/src/VBox/Main/glue/tests/Makefile
index 0b6f909..b005f71 100644
--- a/src/VBox/Main/glue/tests/Makefile
+++ b/src/VBox/Main/glue/tests/Makefile
@@ -2,7 +2,7 @@
 # Makefile for a sample/testcase using the 'glue' Java API bindings
 
 #
-# Copyright (C) 2010-2012 Oracle Corporation
+# Copyright (C) 2010-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -33,7 +33,7 @@ JAVAC = javac
 JAVA = java
 
 
-# 
+#
 # No changes should be necessary after this point.
 #
 
diff --git a/src/VBox/Main/glue/tests/TestVBox.java b/src/VBox/Main/glue/tests/TestVBox.java
index c3bea12..cf0bfe7 100644
--- a/src/VBox/Main/glue/tests/TestVBox.java
+++ b/src/VBox/Main/glue/tests/TestVBox.java
@@ -1,10 +1,11 @@
 /* $Id: TestVBox.java $ */
-
-/* Small sample/testcase which demonstrates that the same source code can
- * be used to connect to the webservice and (XP)COM APIs. */
+/*! file
+ * Small sample/testcase which demonstrates that the same source code can
+ * be used to connect to the webservice and (XP)COM APIs.
+ */
 
 /*
- * Copyright (C) 2010-2015 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +15,7 @@
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
+
 import org.virtualbox_5_0.*;
 import java.util.List;
 import java.util.Arrays;
@@ -140,7 +142,7 @@ public class TestVBox
         IMachine m = vbox.getMachines().get(0);
         String name = m.getName();
         System.out.println("\nAttempting to start VM '" + name + "'");
-        
+
         ISession session = mgr.getSessionObject();
         IProgress p = m.launchVMProcess(session, "gui", "");
         progressBar(mgr, p, 10000);
diff --git a/src/VBox/Main/glue/tests/TestVBoxNATEngine.java b/src/VBox/Main/glue/tests/TestVBoxNATEngine.java
index 7ffed27..89bedd8 100644
--- a/src/VBox/Main/glue/tests/TestVBoxNATEngine.java
+++ b/src/VBox/Main/glue/tests/TestVBoxNATEngine.java
@@ -1,10 +1,11 @@
 /* $Id: TestVBoxNATEngine.java $ */
-
-/* Small sample/testcase which demonstrates that the same source code can
- * be used to connect to the webservice and (XP)COM APIs. */
+/*!file
+ * Small sample/testcase which demonstrates that the same source code can
+ * be used to connect to the webservice and (XP)COM APIs.
+ */
 
 /*
- * Copyright (C) 2013-2015 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -14,6 +15,7 @@
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
+
 import org.virtualbox_5_0.*;
 import java.util.List;
 import java.util.Arrays;
@@ -28,7 +30,7 @@ public class TestVBoxNATEngine
         boolean inaccessible = false;
         /* different chipsets might have different number of attachments */
         ChipsetType chipsetType = vm.getChipsetType();
-        INetworkAdapter adapters[] = 
+        INetworkAdapter adapters[] =
             new INetworkAdapter[
                     vbox.getSystemProperties().getMaxNetworkAdapters(chipsetType).intValue()];
 
@@ -39,13 +41,13 @@ public class TestVBoxNATEngine
              * Dump adapters and if it's got NAT attachment
              * dump it settings
              */
-                
+
             for (int nidx = 0; nidx < adapters.length; ++nidx)
             {
                 /* select available and NATs only. */
                 adapters[nidx] = vm.getNetworkAdapter(new Long(nidx));
                 INetworkAdapter n = adapters[nidx];
-                    
+
                 if (n == null)
                     continue;
                 NetworkAttachmentType attachmentType = n.getAttachmentType();
@@ -66,7 +68,7 @@ public class TestVBoxNATEngine
                         String pfAttributes[] = pf.split(",");
                         /* name,proto,hostip,host,hostport,guestip,guestport */
                         nat.removeRedirect(pfAttributes[0]);
-                        nat.addRedirect("", 
+                        nat.addRedirect("",
                                         NATProtocol.fromValue(new Integer(pfAttributes[1]).longValue()),
                                         pfAttributes[2],
                                         new Integer(
@@ -77,13 +79,13 @@ public class TestVBoxNATEngine
 
                 }
             }
-                
+
         }
         catch (VBoxException e)
         {
             name = "<inaccessible>";
             inaccessible = true;
-        }            
+        }
 
         // process system event queue
         mgr.waitForEvents(0);
diff --git a/src/VBox/Main/glue/vboxapi.py b/src/VBox/Main/glue/vboxapi.py
index dde5d71..adeba29 100755
--- a/src/VBox/Main/glue/vboxapi.py
+++ b/src/VBox/Main/glue/vboxapi.py
@@ -5,27 +5,27 @@ VirtualBox Python API Glue.
 """
 
 __copyright__ = \
-    """
-    Copyright (C) 2009-2016 Oracle Corporation
-
-    This file is part of VirtualBox Open Source Edition (OSE), as
-    available from http://www.virtualbox.org. This file is free software;
-    you can redistribute it and/or modify it under the terms of the GNU
-    General Public License (GPL) as published by the Free Software
-    Foundation, in version 2 as it comes in the "COPYING" file of the
-    VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-    hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-
-    The contents of this file may alternatively be used under the terms
-    of the Common Development and Distribution License Version 1.0
-    (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-    VirtualBox OSE distribution, in which case the provisions of the
-    CDDL are applicable instead of those of the GPL.
-
-    You may elect to license modified versions of this file under the
-    terms and conditions of either the GPL or the CDDL or both.
-    """
-__version__ = "$Revision: 118418 $"
+"""
+Copyright (C) 2009-2017 Oracle Corporation
+
+This file is part of VirtualBox Open Source Edition (OSE), as
+available from http://www.virtualbox.org. This file is free software;
+you can redistribute it and/or modify it under the terms of the GNU
+General Public License (GPL) as published by the Free Software
+Foundation, in version 2 as it comes in the "COPYING" file of the
+VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+The contents of this file may alternatively be used under the terms
+of the Common Development and Distribution License Version 1.0
+(CDDL) only, as it comes in the "COPYING.CDDL" file of the
+VirtualBox OSE distribution, in which case the provisions of the
+CDDL are applicable instead of those of the GPL.
+
+You may elect to license modified versions of this file under the
+terms and conditions of either the GPL or the CDDL or both.
+"""
+__version__ = "$Revision: 118906 $"
 
 
 # Note! To set Python bitness on OSX use 'export VERSIONER_PYTHON_PREFER_32_BIT=yes'
@@ -457,7 +457,7 @@ class PlatformMSCOM(PlatformBase):
         # Remember this thread ID and get its handle so we can wait on it in waitForEvents().
         self.tid = GetCurrentThreadId()
         pid = GetCurrentProcess()
-        self.handles = [DuplicateHandle(pid, GetCurrentThread(), pid, 0, 0, DUPLICATE_SAME_ACCESS),];
+        self.aoHandles = [DuplicateHandle(pid, GetCurrentThread(), pid, 0, 0, DUPLICATE_SAME_ACCESS),]; # type: list[PyHANDLE]
 
         # Hack the COM dispatcher base class so we can modify method and
         # attribute names to match those in xpcom.
@@ -617,11 +617,11 @@ class PlatformMSCOM(PlatformBase):
             cMsTimeout = INFINITE
         else:
             cMsTimeout = timeout
-        rc = MsgWaitForMultipleObjects(self.handles, 0, cMsTimeout, QS_ALLINPUT)
-        if WAIT_OBJECT_0 <= rc < WAIT_OBJECT_0 + len(self.handles):
+        rc = MsgWaitForMultipleObjects(self.aoHandles, 0, cMsTimeout, QS_ALLINPUT)
+        if WAIT_OBJECT_0 <= rc < WAIT_OBJECT_0 + len(self.aoHandles):
             # is it possible?
             rc = 2
-        elif rc == WAIT_OBJECT_0 + len(self.handles):
+        elif rc == WAIT_OBJECT_0 + len(self.aoHandles):
             # Waiting messages
             PumpWaitingMessages()
             rc = 0
@@ -661,16 +661,18 @@ class PlatformMSCOM(PlatformBase):
         return True
 
     def deinit(self):
-        import pythoncom
-        from win32file import CloseHandle
-
-        for h in self.handles:
-            if h is not None:
-                CloseHandle(h)
-        self.handles = None
-        del self.oClient
-        oClient = None
-        pythoncom.CoUninitialize()
+        for oHandle in self.aoHandles:
+            if oHandle is not None:
+                oHandle.Close();
+        self.oHandle = None;
+
+        del self.oClient;
+        self.oClient = None;
+
+        # This non-sense doesn't pair up with any pythoncom.CoInitialize[Ex].
+        # See @bugref{9037}.
+        #import pythoncom
+        #pythoncom.CoUninitialize()
 
     def queryInterface(self, oIUnknown, sClassName):
         from win32com.client import CastTo
diff --git a/src/VBox/Main/glue/xpcom/helpers.cpp b/src/VBox/Main/glue/xpcom/helpers.cpp
index 9e0774a..284a604 100644
--- a/src/VBox/Main/glue/xpcom/helpers.cpp
+++ b/src/VBox/Main/glue/xpcom/helpers.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/idl/VirtualBox.xidl b/src/VBox/Main/idl/VirtualBox.xidl
index 10e1c93..4133b06 100644
--- a/src/VBox/Main/idl/VirtualBox.xidl
+++ b/src/VBox/Main/idl/VirtualBox.xidl
@@ -24372,16 +24372,45 @@ Snapshot 1 (B.vdi)            Snapshot 1 (B.vdi)
 >
 
 <if target="midl">
+
+  <!--
+  // IVBoxSVC
+  // Note! This actually extends IUnknown rather than IDispatch, notdual=yes
+  //       sees to that.
+  //////////////////////////////////////////////////////////////////////////
+  -->
+  <interface
+    name="IVBoxSVCRegistration" extends="$unknown" notdual="yes"
+    uuid="f22181fb-921b-4f2a-7801-0cc5ec28cdae"
+    wsmap="suppress" internal="yes"
+    reservedMethods="0" reservedAttributes="0"
+    >
+      <desc>
+          Implemented by the VirtualBox class factory and registered with VBoxSDS
+          so it can retrieve IVirtualBox on behalf of other VBoxSVCs.
+      </desc>
+
+      <method name="getVirtualBox" >
+        <desc> Gets an IUnknown interface to the VirtualBox object in the VBoxSVC process. </desc>
+        <param name="result" type="$unknown" dir="return" >
+          <desc> Where to return the IUnknown interface. </desc>
+        </param>
+      </method>
+
+  </interface>
+
   <!--
   // IVirtualBoxSDS
+  // Note! This actually extends IUnknown rather than IDispatch, notdual=yes
+  //       sees to that.
   //////////////////////////////////////////////////////////////////////////
   -->
 
   <interface
-    name="IVirtualBoxSDS" extends="$unknown"
-    uuid="28932695-fb72-4708-8904-e1077dac7f9a"
-    wsmap="suppress"
-    reservedMethods="4" reservedAttributes="8"
+    name="IVirtualBoxSDS" extends="$unknown" notdual="yes"
+    uuid="787d20ed-faf3-4170-6697-3a2a7de6e086"
+    wsmap="suppress" internal="yes"
+    reservedMethods="0" reservedAttributes="0"
     >
       <desc>
           The IVirtualBoxSDS interface represents the system-wide directory service
@@ -24392,22 +24421,34 @@ Snapshot 1 (B.vdi)            Snapshot 1 (B.vdi)
           behavior.
       </desc>
 
-      <method name="getVirtualBox" >
-       <param name="result" type="IVirtualBox" dir="out" >
-        <desc>
-          Reference to the server-side API root object.
-        </desc>
-      </param>
-      <param name="token" type="IToken" dir="out">
-        <desc>
-          Reference to the token object given to client and linked with IVirtualBox.
-          Client should keep it till the end.
-        </desc>
-      </param>
+      <method name="registerVBoxSVC">
+        <desc>Registers a VBoxSVC instance with the SDS.</desc>
+        <param name="vboxSVC" type="IVBoxSVCRegistration" dir="in">
+          <desc>Interface implemented by the VirtualBox class factory.</desc>
+        </param>
+        <param name="pid" type="long" dir="in">
+          <desc>The process ID of the VBoxSVC instance.</desc>
+        </param>
+        <param name="existingVirtualBox" type="$unknown" dir="return">
+          <desc>If there is already an VBoxSVC for this user, the an IUnknown
+            interface to its VirtualBox object is returned here, otherwise it
+            is set to NULL.</desc>
+        </param>
+      </method>
+
+      <method name="deregisterVBoxSVC">
+        <desc>Registers a VBoxSVC instance with the SDS.</desc>
+        <param name="vboxSVC" type="IVBoxSVCRegistration" dir="in">
+          <desc>Same as specified during registration.</desc>
+        </param>
+        <param name="pid" type="long" dir="in">
+          <desc>The process ID of the VBoxSVC instance (same as during registration).</desc>
+        </param>
       </method>
 
   </interface>
-</if>
+
+</if> <!-- bird: shouldn't this if-element at leat include the VBoxSDS module, if not the whole system service application? -->
 
   <module name="VBoxSDS" context="LocalService">
     <class name="VirtualBoxSDS" uuid="74ab5ffe-8726-4435-aa7e-876d705bcba5"
diff --git a/src/VBox/Main/idl/apiwrap-server-filelist.xsl b/src/VBox/Main/idl/apiwrap-server-filelist.xsl
index 55290bb..cc935fe 100644
--- a/src/VBox/Main/idl/apiwrap-server-filelist.xsl
+++ b/src/VBox/Main/idl/apiwrap-server-filelist.xsl
@@ -31,7 +31,7 @@
 <!-- - - - - - - - - - - - - - - - - - - - - - -
    XSLT parameters
  - - - - - - - - - - - - - - - - - - - - - - -->
-    
+
 <!-- Whether to generate wrappers for VBoxSDS-->
 <xsl:param name="g_fVBoxWithSDS" select="'no'"/>
 
@@ -156,7 +156,7 @@
     <xsl:value-of select="concat($G_sNewLine, $G_sNewLine)"/>
 </xsl:template>
 
-    
+
     <xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']" mode="filelist-even-sources" >
         <xsl:if test="$g_fVBoxWithSDS='yes'" >
             <xsl:call-template name="template_app_filelist_even_sources" />
@@ -174,7 +174,7 @@
             <xsl:call-template name="template_app_filelist_odd_sources" />
         </xsl:if>
     </xsl:template>
-    
+
 
 </xsl:stylesheet>
 <!-- vi: set tabstop=4 shiftwidth=4 expandtab: -->
diff --git a/src/VBox/Main/idl/midl.xsl b/src/VBox/Main/idl/midl.xsl
index 9af076d..55f7f25 100644
--- a/src/VBox/Main/idl/midl.xsl
+++ b/src/VBox/Main/idl/midl.xsl
@@ -68,7 +68,7 @@ import "unknwn.idl";
 </xsl:text>
   <xsl:apply-templates/>
 </xsl:template>
-    
+
 
 <!--
  *  ignore all |if|s except those for MIDL target
@@ -218,7 +218,7 @@ import "unknwn.idl";
 <xsl:template match="interface" name="template_interface">[
     uuid(<xsl:value-of select="@uuid"/>),
     object,
-    dual,
+<xsl:if test="not(@notdual = 'yes')">    dual,</xsl:if>
     oleautomation
 <xsl:if test="$g_fGenProxy = 'yes'">
   <!-- Indicates to the typelib that we are using a proxy stub DLL and that interfaces
@@ -231,6 +231,7 @@ import "unknwn.idl";
   <xsl:value-of select="$name"/>
   <xsl:text> : </xsl:text>
   <xsl:choose>
+    <xsl:when test="(@extends = '$unknown') and (@notdual = 'yes')">IUnknown</xsl:when>
     <xsl:when test="@extends='$unknown'">IDispatch</xsl:when>
     <xsl:when test="@extends='$errorinfo'">IErrorInfo</xsl:when>
     <!-- TODO/FIXME/BUGBUG: The above $errorinfo value causes the following warning (/W4):
@@ -881,28 +882,28 @@ warning MIDL2460 : dual interface should be derived from IDispatch : IVirtualBox
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>
-    
-    
+
+
 <!-- Filters for switch on/off VBoxSDS definitions -->
-  
+
 <xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//module/class" >
     <xsl:if test="$g_fVBoxWithSDS='yes'" >
         <xsl:call-template name="template_class" />
     </xsl:if>
 </xsl:template>
-    
-<xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']/if//interface 
+
+<xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']/if//interface
                                 | application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" >
     <xsl:if test="$g_fVBoxWithSDS='yes'" >
         <xsl:call-template name="template_interface" />
     </xsl:if>
 </xsl:template>
-    
+
 <xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" mode="forward" >
     <xsl:if test="$g_fVBoxWithSDS='yes'" >
         <xsl:call-template name="template_interface_forward" />
     </xsl:if>
 </xsl:template>
-      
+
 
 </xsl:stylesheet>
diff --git a/src/VBox/Main/idl/xpidl.xsl b/src/VBox/Main/idl/xpidl.xsl
index 5863926..5927b57 100644
--- a/src/VBox/Main/idl/xpidl.xsl
+++ b/src/VBox/Main/idl/xpidl.xsl
@@ -156,7 +156,7 @@
   <xsl:text>&#x0A;</xsl:text>
   <!-- all enums go first -->
   <xsl:apply-templates select="application/enum | application/if/enum"/>
-  <!-- everything else but result codes and enums 
+  <!-- everything else but result codes and enums
   <xsl:apply-templates select="*[not(self::application/result or self::application/enum) and
                                  not(self::application[result] or self::application/if[enum])]"/> -->
   <!-- the modules (i.e. everything else) -->
@@ -1042,7 +1042,7 @@
 </xsl:template>
 
 <!-- Filters for switch off VBoxSDS definitions -->
-  
+
 <xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//module/class" />
 
 <xsl:template match="application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']/if//interface
diff --git a/src/VBox/Main/include/AdditionsFacilityImpl.h b/src/VBox/Main/include/AdditionsFacilityImpl.h
index f6c14ab..0e12f08 100644
--- a/src/VBox/Main/include/AdditionsFacilityImpl.h
+++ b/src/VBox/Main/include/AdditionsFacilityImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ApplianceImpl.h b/src/VBox/Main/include/ApplianceImpl.h
index 349184f..2e9dc75 100644
--- a/src/VBox/Main/include/ApplianceImpl.h
+++ b/src/VBox/Main/include/ApplianceImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ApplianceImplPrivate.h b/src/VBox/Main/include/ApplianceImplPrivate.h
index 103cfb0..db60903 100644
--- a/src/VBox/Main/include/ApplianceImplPrivate.h
+++ b/src/VBox/Main/include/ApplianceImplPrivate.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/AudioAdapterImpl.h b/src/VBox/Main/include/AudioAdapterImpl.h
index b15564b..2530ea5 100644
--- a/src/VBox/Main/include/AudioAdapterImpl.h
+++ b/src/VBox/Main/include/AudioAdapterImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/AuthLibrary.h b/src/VBox/Main/include/AuthLibrary.h
index 3425975..f3ccf7a 100644
--- a/src/VBox/Main/include/AuthLibrary.h
+++ b/src/VBox/Main/include/AuthLibrary.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/AutoCaller.h b/src/VBox/Main/include/AutoCaller.h
index 8896f9f..3a943a7 100644
--- a/src/VBox/Main/include/AutoCaller.h
+++ b/src/VBox/Main/include/AutoCaller.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/AutoStateDep.h b/src/VBox/Main/include/AutoStateDep.h
index 8cc483e..3aa0e23 100644
--- a/src/VBox/Main/include/AutoStateDep.h
+++ b/src/VBox/Main/include/AutoStateDep.h
@@ -10,7 +10,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/AutostartDb.h b/src/VBox/Main/include/AutostartDb.h
index 70b9010..5ac103e 100644
--- a/src/VBox/Main/include/AutostartDb.h
+++ b/src/VBox/Main/include/AutostartDb.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/BIOSSettingsImpl.h b/src/VBox/Main/include/BIOSSettingsImpl.h
index 6b0c565..8dcb92b 100644
--- a/src/VBox/Main/include/BIOSSettingsImpl.h
+++ b/src/VBox/Main/include/BIOSSettingsImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/BandwidthControlImpl.h b/src/VBox/Main/include/BandwidthControlImpl.h
index a93ab6d..4c062c7 100644
--- a/src/VBox/Main/include/BandwidthControlImpl.h
+++ b/src/VBox/Main/include/BandwidthControlImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/BandwidthGroupImpl.h b/src/VBox/Main/include/BandwidthGroupImpl.h
index d7137b3..5dba7a5 100644
--- a/src/VBox/Main/include/BandwidthGroupImpl.h
+++ b/src/VBox/Main/include/BandwidthGroupImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/BusAssignmentManager.h b/src/VBox/Main/include/BusAssignmentManager.h
index 9a9f007..a2ba60f 100644
--- a/src/VBox/Main/include/BusAssignmentManager.h
+++ b/src/VBox/Main/include/BusAssignmentManager.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/CertificateImpl.h b/src/VBox/Main/include/CertificateImpl.h
index 5d87361..ee37d80 100644
--- a/src/VBox/Main/include/CertificateImpl.h
+++ b/src/VBox/Main/include/CertificateImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ClientToken.h b/src/VBox/Main/include/ClientToken.h
index 1b3ee18..08e7283 100644
--- a/src/VBox/Main/include/ClientToken.h
+++ b/src/VBox/Main/include/ClientToken.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ClientTokenHolder.h b/src/VBox/Main/include/ClientTokenHolder.h
index 172072b..6ff3c2c 100644
--- a/src/VBox/Main/include/ClientTokenHolder.h
+++ b/src/VBox/Main/include/ClientTokenHolder.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ClientWatcher.h b/src/VBox/Main/include/ClientWatcher.h
index f6cfc4c..054556b 100644
--- a/src/VBox/Main/include/ClientWatcher.h
+++ b/src/VBox/Main/include/ClientWatcher.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ConsoleVRDPServer.h b/src/VBox/Main/include/ConsoleVRDPServer.h
index 42c3042..448029f 100644
--- a/src/VBox/Main/include/ConsoleVRDPServer.h
+++ b/src/VBox/Main/include/ConsoleVRDPServer.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/DHCPServerImpl.h b/src/VBox/Main/include/DHCPServerImpl.h
index 7e5e60a..e558f7d 100644
--- a/src/VBox/Main/include/DHCPServerImpl.h
+++ b/src/VBox/Main/include/DHCPServerImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/DisplayUtils.h b/src/VBox/Main/include/DisplayUtils.h
index c0d50bc..274a08d 100644
--- a/src/VBox/Main/include/DisplayUtils.h
+++ b/src/VBox/Main/include/DisplayUtils.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/DrvAudioVRDE.h b/src/VBox/Main/include/DrvAudioVRDE.h
index 3690219..7ec9c48 100644
--- a/src/VBox/Main/include/DrvAudioVRDE.h
+++ b/src/VBox/Main/include/DrvAudioVRDE.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/EmulatedUSBImpl.h b/src/VBox/Main/include/EmulatedUSBImpl.h
index ddb8ac9..2208331 100644
--- a/src/VBox/Main/include/EmulatedUSBImpl.h
+++ b/src/VBox/Main/include/EmulatedUSBImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/EventImpl.h b/src/VBox/Main/include/EventImpl.h
index 2d55b55..917cec5 100644
--- a/src/VBox/Main/include/EventImpl.h
+++ b/src/VBox/Main/include/EventImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/Global.h b/src/VBox/Main/include/Global.h
index 86513a8..ec78e93 100644
--- a/src/VBox/Main/include/Global.h
+++ b/src/VBox/Main/include/Global.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestDirectoryImpl.h b/src/VBox/Main/include/GuestDirectoryImpl.h
index 1a0bcba..a988f95 100644
--- a/src/VBox/Main/include/GuestDirectoryImpl.h
+++ b/src/VBox/Main/include/GuestDirectoryImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestDnDPrivate.h b/src/VBox/Main/include/GuestDnDPrivate.h
index d3ed475..fbd0ed7 100644
--- a/src/VBox/Main/include/GuestDnDPrivate.h
+++ b/src/VBox/Main/include/GuestDnDPrivate.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestDnDSourceImpl.h b/src/VBox/Main/include/GuestDnDSourceImpl.h
index 1e42375..bd835ef 100644
--- a/src/VBox/Main/include/GuestDnDSourceImpl.h
+++ b/src/VBox/Main/include/GuestDnDSourceImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestDnDTargetImpl.h b/src/VBox/Main/include/GuestDnDTargetImpl.h
index 597316f..e5ebe49 100644
--- a/src/VBox/Main/include/GuestDnDTargetImpl.h
+++ b/src/VBox/Main/include/GuestDnDTargetImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestFileImpl.h b/src/VBox/Main/include/GuestFileImpl.h
index c64f318..0b296cc 100644
--- a/src/VBox/Main/include/GuestFileImpl.h
+++ b/src/VBox/Main/include/GuestFileImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestFsObjInfoImpl.h b/src/VBox/Main/include/GuestFsObjInfoImpl.h
index a3b1e6d..42c65b4 100644
--- a/src/VBox/Main/include/GuestFsObjInfoImpl.h
+++ b/src/VBox/Main/include/GuestFsObjInfoImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestImpl.h b/src/VBox/Main/include/GuestImpl.h
index d47217d..376f106 100644
--- a/src/VBox/Main/include/GuestImpl.h
+++ b/src/VBox/Main/include/GuestImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestOSTypeImpl.h b/src/VBox/Main/include/GuestOSTypeImpl.h
index f625e80..0254e9a 100644
--- a/src/VBox/Main/include/GuestOSTypeImpl.h
+++ b/src/VBox/Main/include/GuestOSTypeImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestProcessImpl.h b/src/VBox/Main/include/GuestProcessImpl.h
index ffbe741..1779280 100644
--- a/src/VBox/Main/include/GuestProcessImpl.h
+++ b/src/VBox/Main/include/GuestProcessImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/GuestSessionImpl.h b/src/VBox/Main/include/GuestSessionImpl.h
index 1de95db..3a82358 100644
--- a/src/VBox/Main/include/GuestSessionImpl.h
+++ b/src/VBox/Main/include/GuestSessionImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HGCM.h b/src/VBox/Main/include/HGCM.h
index 422fd68..a9b76f0 100644
--- a/src/VBox/Main/include/HGCM.h
+++ b/src/VBox/Main/include/HGCM.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HGCMObjects.h b/src/VBox/Main/include/HGCMObjects.h
index d9839ea..a45cc07 100644
--- a/src/VBox/Main/include/HGCMObjects.h
+++ b/src/VBox/Main/include/HGCMObjects.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HGCMThread.h b/src/VBox/Main/include/HGCMThread.h
index 74b93e6..427491f 100644
--- a/src/VBox/Main/include/HGCMThread.h
+++ b/src/VBox/Main/include/HGCMThread.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HashedPw.h b/src/VBox/Main/include/HashedPw.h
index 4134939..f3ae552 100644
--- a/src/VBox/Main/include/HashedPw.h
+++ b/src/VBox/Main/include/HashedPw.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HostHardwareLinux.h b/src/VBox/Main/include/HostHardwareLinux.h
index 5780e84..776c73c 100644
--- a/src/VBox/Main/include/HostHardwareLinux.h
+++ b/src/VBox/Main/include/HostHardwareLinux.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HostImpl.h b/src/VBox/Main/include/HostImpl.h
index ad472ed..e9ade04 100644
--- a/src/VBox/Main/include/HostImpl.h
+++ b/src/VBox/Main/include/HostImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HostNetworkInterfaceImpl.h b/src/VBox/Main/include/HostNetworkInterfaceImpl.h
index e5fb059..5fbc9c9 100644
--- a/src/VBox/Main/include/HostNetworkInterfaceImpl.h
+++ b/src/VBox/Main/include/HostNetworkInterfaceImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HostPower.h b/src/VBox/Main/include/HostPower.h
index b6c0242..4856c48 100644
--- a/src/VBox/Main/include/HostPower.h
+++ b/src/VBox/Main/include/HostPower.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HostUSBDeviceImpl.h b/src/VBox/Main/include/HostUSBDeviceImpl.h
index abd7ff0..be4b16e 100644
--- a/src/VBox/Main/include/HostUSBDeviceImpl.h
+++ b/src/VBox/Main/include/HostUSBDeviceImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/HostVideoInputDeviceImpl.h b/src/VBox/Main/include/HostVideoInputDeviceImpl.h
index 289f611..735c1bd 100644
--- a/src/VBox/Main/include/HostVideoInputDeviceImpl.h
+++ b/src/VBox/Main/include/HostVideoInputDeviceImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/KeyboardImpl.h b/src/VBox/Main/include/KeyboardImpl.h
index 01767e4..4dc436a 100644
--- a/src/VBox/Main/include/KeyboardImpl.h
+++ b/src/VBox/Main/include/KeyboardImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/Logging.h b/src/VBox/Main/include/Logging.h
index e5cbd75..3e3f044 100644
--- a/src/VBox/Main/include/Logging.h
+++ b/src/VBox/Main/include/Logging.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MachineDebuggerImpl.h b/src/VBox/Main/include/MachineDebuggerImpl.h
index 5a28b05..3eb81e0 100644
--- a/src/VBox/Main/include/MachineDebuggerImpl.h
+++ b/src/VBox/Main/include/MachineDebuggerImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MachineImplCloneVM.h b/src/VBox/Main/include/MachineImplCloneVM.h
index 60b0d32..7cad922 100644
--- a/src/VBox/Main/include/MachineImplCloneVM.h
+++ b/src/VBox/Main/include/MachineImplCloneVM.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/Matching.h b/src/VBox/Main/include/Matching.h
index c26422f..8841b86 100644
--- a/src/VBox/Main/include/Matching.h
+++ b/src/VBox/Main/include/Matching.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MediumAttachmentImpl.h b/src/VBox/Main/include/MediumAttachmentImpl.h
index 6591584..9c4a6c9 100644
--- a/src/VBox/Main/include/MediumAttachmentImpl.h
+++ b/src/VBox/Main/include/MediumAttachmentImpl.h
@@ -1,11 +1,11 @@
-/* $Id:  $ */
+/* $Id: MediumAttachmentImpl.h $ */
 /** @file
  *
  * VirtualBox COM class implementation
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MediumFormatImpl.h b/src/VBox/Main/include/MediumFormatImpl.h
index ff04579..80abaa5 100644
--- a/src/VBox/Main/include/MediumFormatImpl.h
+++ b/src/VBox/Main/include/MediumFormatImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MediumImpl.h b/src/VBox/Main/include/MediumImpl.h
index b1f2375..354e7fc 100644
--- a/src/VBox/Main/include/MediumImpl.h
+++ b/src/VBox/Main/include/MediumImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MediumLock.h b/src/VBox/Main/include/MediumLock.h
index ff45d8b..999c8e1 100644
--- a/src/VBox/Main/include/MediumLock.h
+++ b/src/VBox/Main/include/MediumLock.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/MouseImpl.h b/src/VBox/Main/include/MouseImpl.h
index 715a139..d7c7638 100644
--- a/src/VBox/Main/include/MouseImpl.h
+++ b/src/VBox/Main/include/MouseImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/NATEngineImpl.h b/src/VBox/Main/include/NATEngineImpl.h
index fd449f2..c094582 100644
--- a/src/VBox/Main/include/NATEngineImpl.h
+++ b/src/VBox/Main/include/NATEngineImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/NATNetworkImpl.h b/src/VBox/Main/include/NATNetworkImpl.h
index cc5446f..0e046fe 100644
--- a/src/VBox/Main/include/NATNetworkImpl.h
+++ b/src/VBox/Main/include/NATNetworkImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/NetworkAdapterImpl.h b/src/VBox/Main/include/NetworkAdapterImpl.h
index bb4db0e..81fc818 100644
--- a/src/VBox/Main/include/NetworkAdapterImpl.h
+++ b/src/VBox/Main/include/NetworkAdapterImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/NetworkServiceRunner.h b/src/VBox/Main/include/NetworkServiceRunner.h
index c04d0a7..61ae30f 100644
--- a/src/VBox/Main/include/NetworkServiceRunner.h
+++ b/src/VBox/Main/include/NetworkServiceRunner.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/Nvram.h b/src/VBox/Main/include/Nvram.h
index 9629277..b86f602 100644
--- a/src/VBox/Main/include/Nvram.h
+++ b/src/VBox/Main/include/Nvram.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ObjectState.h b/src/VBox/Main/include/ObjectState.h
index d373178..53b46b4 100644
--- a/src/VBox/Main/include/ObjectState.h
+++ b/src/VBox/Main/include/ObjectState.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/PCIDeviceAttachmentImpl.h b/src/VBox/Main/include/PCIDeviceAttachmentImpl.h
index 821b90f..1f6d930 100644
--- a/src/VBox/Main/include/PCIDeviceAttachmentImpl.h
+++ b/src/VBox/Main/include/PCIDeviceAttachmentImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/PCIRawDevImpl.h b/src/VBox/Main/include/PCIRawDevImpl.h
index 79202db..eb9bc44 100644
--- a/src/VBox/Main/include/PCIRawDevImpl.h
+++ b/src/VBox/Main/include/PCIRawDevImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ParallelPortImpl.h b/src/VBox/Main/include/ParallelPortImpl.h
index 987204b..2528c13 100644
--- a/src/VBox/Main/include/ParallelPortImpl.h
+++ b/src/VBox/Main/include/ParallelPortImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/Performance.h b/src/VBox/Main/include/Performance.h
index c465f9d..f21b872 100644
--- a/src/VBox/Main/include/Performance.h
+++ b/src/VBox/Main/include/Performance.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/PerformanceImpl.h b/src/VBox/Main/include/PerformanceImpl.h
index 8c043dd..5026ad0 100644
--- a/src/VBox/Main/include/PerformanceImpl.h
+++ b/src/VBox/Main/include/PerformanceImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ProgressImpl.h b/src/VBox/Main/include/ProgressImpl.h
index 58afaee..d33dd96 100644
--- a/src/VBox/Main/include/ProgressImpl.h
+++ b/src/VBox/Main/include/ProgressImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ProgressProxyImpl.h b/src/VBox/Main/include/ProgressProxyImpl.h
index 3f30d8f..55e4b29 100644
--- a/src/VBox/Main/include/ProgressProxyImpl.h
+++ b/src/VBox/Main/include/ProgressProxyImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/QMTranslator.h b/src/VBox/Main/include/QMTranslator.h
index 73cb51a..b0e5cf1 100644
--- a/src/VBox/Main/include/QMTranslator.h
+++ b/src/VBox/Main/include/QMTranslator.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/RemoteUSBBackend.h b/src/VBox/Main/include/RemoteUSBBackend.h
index b91cba7..fd553f7 100644
--- a/src/VBox/Main/include/RemoteUSBBackend.h
+++ b/src/VBox/Main/include/RemoteUSBBackend.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/RemoteUSBDeviceImpl.h b/src/VBox/Main/include/RemoteUSBDeviceImpl.h
index 9f47a0b..151ebc2 100644
--- a/src/VBox/Main/include/RemoteUSBDeviceImpl.h
+++ b/src/VBox/Main/include/RemoteUSBDeviceImpl.h
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/SecretKeyStore.h b/src/VBox/Main/include/SecretKeyStore.h
index 1f3f3ab..2fc195d 100644
--- a/src/VBox/Main/include/SecretKeyStore.h
+++ b/src/VBox/Main/include/SecretKeyStore.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/SerialPortImpl.h b/src/VBox/Main/include/SerialPortImpl.h
index 574eeb4..f31083c 100644
--- a/src/VBox/Main/include/SerialPortImpl.h
+++ b/src/VBox/Main/include/SerialPortImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/SharedFolderImpl.h b/src/VBox/Main/include/SharedFolderImpl.h
index 113052b..8494102 100644
--- a/src/VBox/Main/include/SharedFolderImpl.h
+++ b/src/VBox/Main/include/SharedFolderImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/SnapshotImpl.h b/src/VBox/Main/include/SnapshotImpl.h
index dd657ad..79a292e 100644
--- a/src/VBox/Main/include/SnapshotImpl.h
+++ b/src/VBox/Main/include/SnapshotImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/StorageControllerImpl.h b/src/VBox/Main/include/StorageControllerImpl.h
index 4a90add..0fb6fa9 100644
--- a/src/VBox/Main/include/StorageControllerImpl.h
+++ b/src/VBox/Main/include/StorageControllerImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/SystemPropertiesImpl.h b/src/VBox/Main/include/SystemPropertiesImpl.h
index 6fe23b2..cc1c719 100644
--- a/src/VBox/Main/include/SystemPropertiesImpl.h
+++ b/src/VBox/Main/include/SystemPropertiesImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ThreadTask.h b/src/VBox/Main/include/ThreadTask.h
index 840cf7e..99af36c 100644
--- a/src/VBox/Main/include/ThreadTask.h
+++ b/src/VBox/Main/include/ThreadTask.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/TokenImpl.h b/src/VBox/Main/include/TokenImpl.h
index 11f8078..287c51a 100644
--- a/src/VBox/Main/include/TokenImpl.h
+++ b/src/VBox/Main/include/TokenImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBControllerImpl.h b/src/VBox/Main/include/USBControllerImpl.h
index e137f94..1672300 100644
--- a/src/VBox/Main/include/USBControllerImpl.h
+++ b/src/VBox/Main/include/USBControllerImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBDeviceFilterImpl.h b/src/VBox/Main/include/USBDeviceFilterImpl.h
index b6d2c07..393e857 100644
--- a/src/VBox/Main/include/USBDeviceFilterImpl.h
+++ b/src/VBox/Main/include/USBDeviceFilterImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBDeviceFiltersImpl.h b/src/VBox/Main/include/USBDeviceFiltersImpl.h
index 4a2c00b..acbd9b4 100644
--- a/src/VBox/Main/include/USBDeviceFiltersImpl.h
+++ b/src/VBox/Main/include/USBDeviceFiltersImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBDeviceImpl.h b/src/VBox/Main/include/USBDeviceImpl.h
index 2ff1dbf..a970b94 100644
--- a/src/VBox/Main/include/USBDeviceImpl.h
+++ b/src/VBox/Main/include/USBDeviceImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBGetDevices.h b/src/VBox/Main/include/USBGetDevices.h
index ad6627f..952d43a 100644
--- a/src/VBox/Main/include/USBGetDevices.h
+++ b/src/VBox/Main/include/USBGetDevices.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBIdDatabase.h b/src/VBox/Main/include/USBIdDatabase.h
index 5f77bfa..50a2e60 100644
--- a/src/VBox/Main/include/USBIdDatabase.h
+++ b/src/VBox/Main/include/USBIdDatabase.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBProxyBackend.h b/src/VBox/Main/include/USBProxyBackend.h
index d2cec48..c6b5e95 100644
--- a/src/VBox/Main/include/USBProxyBackend.h
+++ b/src/VBox/Main/include/USBProxyBackend.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/USBProxyService.h b/src/VBox/Main/include/USBProxyService.h
index 6450ebb..1847792 100644
--- a/src/VBox/Main/include/USBProxyService.h
+++ b/src/VBox/Main/include/USBProxyService.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/UsbCardReader.h b/src/VBox/Main/include/UsbCardReader.h
index a5326df..b222de5 100644
--- a/src/VBox/Main/include/UsbCardReader.h
+++ b/src/VBox/Main/include/UsbCardReader.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/UsbWebcamInterface.h b/src/VBox/Main/include/UsbWebcamInterface.h
index 8ab3754..2ba0761 100644
--- a/src/VBox/Main/include/UsbWebcamInterface.h
+++ b/src/VBox/Main/include/UsbWebcamInterface.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/VFSExplorerImpl.h b/src/VBox/Main/include/VFSExplorerImpl.h
index a27a72f..2422c65 100644
--- a/src/VBox/Main/include/VFSExplorerImpl.h
+++ b/src/VBox/Main/include/VFSExplorerImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/VMMDev.h b/src/VBox/Main/include/VMMDev.h
index 107ae73..a1d62a8 100644
--- a/src/VBox/Main/include/VMMDev.h
+++ b/src/VBox/Main/include/VMMDev.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/VRDEServerImpl.h b/src/VBox/Main/include/VRDEServerImpl.h
index 25db6dd..d32129c 100644
--- a/src/VBox/Main/include/VRDEServerImpl.h
+++ b/src/VBox/Main/include/VRDEServerImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/VirtualBoxBase.h b/src/VBox/Main/include/VirtualBoxBase.h
index dd6cc44..04df15a 100644
--- a/src/VBox/Main/include/VirtualBoxBase.h
+++ b/src/VBox/Main/include/VirtualBoxBase.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/VirtualBoxClientImpl.h b/src/VBox/Main/include/VirtualBoxClientImpl.h
index add664e..d23b36e 100644
--- a/src/VBox/Main/include/VirtualBoxClientImpl.h
+++ b/src/VBox/Main/include/VirtualBoxClientImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -71,8 +71,8 @@ private:
 #endif
 
 #ifdef VBOX_WITH_SDS
-    int     getServiceAccount(const wchar_t *pwszServiceName, wchar_t *pwszAccountName, size_t cwcAccountName);
-    HRESULT isServiceDisabled(const wchar_t *pwszServiceName, bool *pfOutIsDisabled);
+    int     i_getServiceAccountAndStartType(const wchar_t *pwszServiceName,
+                                            wchar_t *pwszAccountName, size_t cwcAccountName, uint32_t *puStartType);
 #endif
 
     static DECLCALLBACK(int) SVCWatcherThread(RTTHREAD ThreadSelf, void *pvUser);
diff --git a/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h b/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h
index 7035a0e..30d281a 100644
--- a/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h
+++ b/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/VirtualBoxImpl.h b/src/VBox/Main/include/VirtualBoxImpl.h
index 090a5aa..1c046a5 100644
--- a/src/VBox/Main/include/VirtualBoxImpl.h
+++ b/src/VBox/Main/include/VirtualBoxImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -58,6 +58,12 @@ namespace settings
     struct MediaRegistry;
 }
 
+
+#if defined(VBOX_WITH_SDS) && !defined(VBOX_WITH_XPCOM)
+class VirtualBoxClassFactory; /* See ../src-server/win/svcmain.cpp  */
+#endif
+
+
 class ATL_NO_VTABLE VirtualBox :
     public VirtualBoxWrap
 #ifdef RT_OS_WINDOWS
@@ -73,7 +79,13 @@ public:
     class CallbackEvent;
     friend class CallbackEvent;
 
+#ifndef VBOX_WITH_XPCOM
+# ifdef VBOX_WITH_SDS
+    DECLARE_CLASSFACTORY_EX(VirtualBoxClassFactory)
+# else
     DECLARE_CLASSFACTORY_SINGLETON(VirtualBox)
+# endif
+#endif
 
     // Do not use any ATL registry support.
     //DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
diff --git a/src/VBox/Main/include/VirtualBoxSDSImpl.h b/src/VBox/Main/include/VirtualBoxSDSImpl.h
index 7f84ffc..6cc8ce1 100644
--- a/src/VBox/Main/include/VirtualBoxSDSImpl.h
+++ b/src/VBox/Main/include/VirtualBoxSDSImpl.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2015 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -18,122 +18,86 @@
 #ifndef ____H_VIRTUALBOXSDSIMPL
 #define ____H_VIRTUALBOXSDSIMPL
 
-#include "VirtualBoxSDSWrap.h"
-#include "TokenWrap.h"
+#include "VirtualBoxBase.h"
 
-#ifdef RT_OS_WINDOWS
-# include "win/resource.h"
-#endif
 
- /**
- * The MediumLockToken class automates cleanup of a Medium lock.
+class VBoxSDSPerUserData; /* See VirtualBoxSDSImpl.cpp. */
+
+/**
+ * The IVirtualBoxSDS implementation.
+ *
+ * This class helps different VBoxSVC processes make sure a user only have a
+ * single VirtualBox instance.
+ *
+ * @note This is a simple internal class living in a privileged process.  So, we
+ *       do not use the API wrappers as they add complexity.  In particular,
+ *       they add the auto caller logic, which is an excellent tool to create
+ *       unkillable processes.  If an API method during development or product
+ *       for instance triggers an NT exception like STATUS_ACCESS_VIOLATION, the
+ *       caller will be unwound without releasing the caller.  When uninit is
+ *       called during COM shutdown/whatever, the thread gets stuck waiting for
+ *       the long gone caller and cannot be killed (Windows 10, build 16299),
+ *       requiring a reboot to continue.
+ *
+ * @todo Would be very nice to get rid of the ATL cruft too here.
  */
-class ATL_NO_VTABLE VirtualBoxToken :
-    public TokenWrap
+class VirtualBoxSDS
+    : public IVirtualBoxSDS
+    , public ATL::CComObjectRootEx<ATL::CComMultiThreadModel>
+    , public ATL::CComCoClass<VirtualBoxSDS, &CLSID_VirtualBoxSDS>
 {
-public:
-
-    DECLARE_EMPTY_CTOR_DTOR(VirtualBoxToken)
-
-    HRESULT FinalConstruct();
-    void FinalRelease();
-
-    // public initializer/uninitializer for internal purposes only
-    HRESULT init(const std::wstring& wstrUserName);
-    void uninit();
-
-    /**
-    * Fabrique method to create and initialize COM token object.
-    *
-    * @param aToken         Pointer to result Token COM object.
-    * @param wstrUserName   User name of client for that we create the token
-    */
-    static HRESULT CreateToken(ComPtr<IToken>& aToken, const std::wstring& wstrUserName);
-
-    // Trace COM reference counting in debug mode
-#ifdef RT_STRICT
-    virtual ULONG InternalAddRef();
-    virtual ULONG InternalRelease();
-#endif
-
 private:
+    typedef std::map<com::Utf8Str, VBoxSDSPerUserData *> UserDataMap_T;
+    /** Per user data map (key is SID string).
+     * This is an insert-only map! */
+    UserDataMap_T       m_UserDataMap;
+    /** Lock protecting m_UserDataMap.*/
+    RTCRITSECTRW        m_MapCritSect;
 
-    // wrapped IToken methods
-    HRESULT abandon(AutoCaller &aAutoCaller);
-    HRESULT dummy();
-
-    // data
-    struct Data
-    {
-        std::wstring wstrUserName;
-    };
-
-    Data m;
-};
-
-class ATL_NO_VTABLE VirtualBoxSDS :
-    public VirtualBoxSDSWrap
-#ifdef RT_OS_WINDOWS
-    , public ATL::CComCoClass<VirtualBoxSDS, &CLSID_VirtualBoxSDS>
-#endif
-{
 public:
-
     DECLARE_CLASSFACTORY_SINGLETON(VirtualBoxSDS)
-
-    //DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
-
-    // Kind of redundant (VirtualBoxSDSWrap declares itself not aggregatable
-    // and CComCoClass<VirtualBoxSDS, &CLSID_VirtualBoxSDS> as aggregatable,
-    // the former is the first inheritance), but the C multiple inheritance
-    // rules and the class factory in VBoxSDS.cpp needs this to disambiguate.
     DECLARE_NOT_AGGREGATABLE(VirtualBoxSDS)
+    DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+    BEGIN_COM_MAP(VirtualBoxSDS)
+        COM_INTERFACE_ENTRY(IVirtualBoxSDS)
+    END_COM_MAP()
 
     DECLARE_EMPTY_CTOR_DTOR(VirtualBoxSDS)
 
     HRESULT FinalConstruct();
-    void FinalRelease();
-
-    // public initializers/uninitializers for internal purposes only
-    HRESULT init();
-    void uninit();
+    void    FinalRelease();
 
 private:
 
-    // Wrapped IVirtualBoxSDS properties
-
-    /**
-    *    Returns the instance of VirtualBox for client.
-    *    It impersonates client and returns his VirtualBox instance
-    *    either from cahce or makes new one.
-    */
-    HRESULT getVirtualBox(ComPtr<IVirtualBox> &aVirtualBox, ComPtr<IToken> &aToken);
+    // IVirtualBoxSDS methods
+    HRESULT RegisterVBoxSVC(IVBoxSVCRegistration *aVBoxSVC, LONG aPid, IUnknown **aExistingVirtualBox);
+    HRESULT DeregisterVBoxSVC(IVBoxSVCRegistration *aVBoxSVC, LONG aPid);
 
-    // Wrapped IVirtualBoxSDS methods
 
-    // Inner methods
+    // Private methods
 
     /**
-    *  Gets the current user name of current thread
-    */
-    int GetCurrentUserName(std::wstring& wstrUserName);
+     * Gets the client user SID of the
+     */
+    static bool i_getClientUserSid(com::Utf8Str *a_pStrSid, com::Utf8Str *a_pStrUsername);
 
     /**
-    *  Prints current user name of this thread to the log
-    *  @param prefix    string fragment that will be inserted at the beginning
-    *                   of the logging line
-    */
-    void LogUserName(char *prefix);
+     * Looks up the given user.
+     *
+     * @returns Pointer to the LOCKED per user data.  NULL if not found.
+     * @param   a_rStrUserSid   The user SID.
+     */
+    VBoxSDSPerUserData *i_lookupPerUserData(com::Utf8Str const &a_rStrUserSid);
 
     /**
-    *  Thread that periodically checks items in cache and cleans obsolete items
-    */
-    static DWORD WINAPI CheckCacheThread(LPVOID);
-
-    // data fields
-    class VirtualBoxCache;
-    static VirtualBoxCache m_cache;
-    friend VirtualBoxToken;
+     * Looks up the given user, creating it if not found
+     *
+     * @returns Pointer to the LOCKED per user data.  NULL on allocation error.
+     * @param   a_rStrUserSid   The user SID.
+     * @param   a_rStrUsername  The user name if available.
+     */
+    VBoxSDSPerUserData *i_lookupOrCreatePerUserData(com::Utf8Str const &a_rStrUserSid, com::Utf8Str const &a_rStrUsername);
 };
 
 
diff --git a/src/VBox/Main/include/Wrapper.h b/src/VBox/Main/include/Wrapper.h
index 5045903..cb2a456 100644
--- a/src/VBox/Main/include/Wrapper.h
+++ b/src/VBox/Main/include/Wrapper.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/netif.h b/src/VBox/Main/include/netif.h
index 49c4904..bd4b414 100644
--- a/src/VBox/Main/include/netif.h
+++ b/src/VBox/Main/include/netif.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/objectslist.h b/src/VBox/Main/include/objectslist.h
index 61750e8..a69994b 100644
--- a/src/VBox/Main/include/objectslist.h
+++ b/src/VBox/Main/include/objectslist.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/ovfreader.h b/src/VBox/Main/include/ovfreader.h
index 3ed538b..3d84e6b 100644
--- a/src/VBox/Main/include/ovfreader.h
+++ b/src/VBox/Main/include/ovfreader.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/vbox-libhal.h b/src/VBox/Main/include/vbox-libhal.h
index 9205e57..b05405f 100644
--- a/src/VBox/Main/include/vbox-libhal.h
+++ b/src/VBox/Main/include/vbox-libhal.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/vector.h b/src/VBox/Main/include/vector.h
index 7ed95b2..a6219d7 100644
--- a/src/VBox/Main/include/vector.h
+++ b/src/VBox/Main/include/vector.h
@@ -13,7 +13,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/include/win/resource.h b/src/VBox/Main/include/win/resource.h
index 026f84b..2219fc6 100644
--- a/src/VBox/Main/include/win/resource.h
+++ b/src/VBox/Main/include/win/resource.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/AuthLibrary.cpp b/src/VBox/Main/src-all/AuthLibrary.cpp
index 7595fa5..9114b12 100644
--- a/src/VBox/Main/src-all/AuthLibrary.cpp
+++ b/src/VBox/Main/src-all/AuthLibrary.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/AutoCaller.cpp b/src/VBox/Main/src-all/AutoCaller.cpp
index f801567..8cb7bdb 100644
--- a/src/VBox/Main/src-all/AutoCaller.cpp
+++ b/src/VBox/Main/src-all/AutoCaller.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/DisplayPNGUtil.cpp b/src/VBox/Main/src-all/DisplayPNGUtil.cpp
index 260b4b7..5aa4322 100644
--- a/src/VBox/Main/src-all/DisplayPNGUtil.cpp
+++ b/src/VBox/Main/src-all/DisplayPNGUtil.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/DisplayResampleImage.cpp b/src/VBox/Main/src-all/DisplayResampleImage.cpp
index 1612879..7102a6b 100644
--- a/src/VBox/Main/src-all/DisplayResampleImage.cpp
+++ b/src/VBox/Main/src-all/DisplayResampleImage.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/DisplayUtils.cpp b/src/VBox/Main/src-all/DisplayUtils.cpp
index 70bff6d..d4576dd 100644
--- a/src/VBox/Main/src-all/DisplayUtils.cpp
+++ b/src/VBox/Main/src-all/DisplayUtils.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/EventImpl.cpp b/src/VBox/Main/src-all/EventImpl.cpp
index 5b1ef82..65e4054 100644
--- a/src/VBox/Main/src-all/EventImpl.cpp
+++ b/src/VBox/Main/src-all/EventImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -861,6 +861,7 @@ HRESULT ListenerRecord::enqueue(IEvent *aEvent)
     if (queueSize > 1000 || (queueSize > 500 && sinceRead > 60 * 1000))
     {
         ::RTCritSectLeave(&mcsQLock);
+        LogRel(("Event: forcefully unregistering passive event listener %p due to excessive queue size\n", this));
         return E_ABORT;
     }
 
diff --git a/src/VBox/Main/src-all/ExtPackManagerImpl.cpp b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
index 4d724de..92ac975 100644
--- a/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
+++ b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1964,14 +1964,14 @@ HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPAC
      * that exceed the max name length in RTDIRENTRYEX.
      */
     HRESULT hrc = S_OK;
-    PRTDIR pDir;
-    int vrc = RTDirOpen(&pDir, szBaseDir);
+    RTDIR   hDir;
+    int vrc = RTDirOpen(&hDir, szBaseDir);
     if (RT_SUCCESS(vrc))
     {
         for (;;)
         {
             RTDIRENTRYEX Entry;
-            vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+            vrc = RTDirReadEx(hDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
             if (RT_FAILURE(vrc))
             {
                 AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
@@ -2012,7 +2012,7 @@ HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPAC
                     hrc = E_UNEXPECTED;
             }
         }
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
     /* else: ignore, the directory probably does not exist or something. */
 
@@ -2540,14 +2540,14 @@ HRESULT ExtPackManager::i_refreshExtPack(const char *a_pszName, bool a_fUnusable
         bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode);
         if (!fExists)
         {
-            PRTDIR pDir;
-            vrc = RTDirOpen(&pDir, m->strBaseDir.c_str());
+            RTDIR hDir;
+            vrc = RTDirOpen(&hDir, m->strBaseDir.c_str());
             if (RT_SUCCESS(vrc))
             {
                 const char *pszMangledName = RTPathFilename(szDir);
                 for (;;)
                 {
-                    vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+                    vrc = RTDirReadEx(hDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
                     if (RT_FAILURE(vrc))
                     {
                         AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
@@ -2561,13 +2561,13 @@ HRESULT ExtPackManager::i_refreshExtPack(const char *a_pszName, bool a_fUnusable
                          * Update the name and directory variables.
                          */
                         vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */
-                        AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED);
+                        AssertLogRelRCReturnStmt(vrc, RTDirClose(hDir), E_UNEXPECTED);
                         a_pszName = Entry.szName;
                         fExists   = true;
                         break;
                     }
                 }
-                RTDirClose(pDir);
+                RTDirClose(hDir);
             }
         }
         if (fExists)
diff --git a/src/VBox/Main/src-all/Global.cpp b/src/VBox/Main/src-all/Global.cpp
index 6918ace..522f99f 100644
--- a/src/VBox/Main/src-all/Global.cpp
+++ b/src/VBox/Main/src-all/Global.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/HashedPw.cpp b/src/VBox/Main/src-all/HashedPw.cpp
index 70f2f01..cb2011a 100644
--- a/src/VBox/Main/src-all/HashedPw.cpp
+++ b/src/VBox/Main/src-all/HashedPw.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/Logging.cpp b/src/VBox/Main/src-all/Logging.cpp
index c6e5c2e..55286bc 100644
--- a/src/VBox/Main/src-all/Logging.cpp
+++ b/src/VBox/Main/src-all/Logging.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp b/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp
index bac02bd..3698e56 100644
--- a/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp
+++ b/src/VBox/Main/src-all/PCIDeviceAttachmentImpl.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/ProgressImpl.cpp b/src/VBox/Main/src-all/ProgressImpl.cpp
index a8c5c10..cf4efbf 100644
--- a/src/VBox/Main/src-all/ProgressImpl.cpp
+++ b/src/VBox/Main/src-all/ProgressImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -563,16 +563,13 @@ bool Progress::i_setCancelCallback(void (*pfnCallback)(void *), void *pvUser)
         if (!pThis->mCanceled)
         {
             if (uPercentage > pThis->m_ulOperationPercent)
-                pThis->m_ulOperationPercent = RT_MIN(uPercentage, 100);
+                pThis->setCurrentOperationProgress(uPercentage);
         }
         else
         {
             Assert(pThis->mCancelable);
             vrc = VERR_CANCELLED;
         }
-        ULONG actualPercent = 0;
-        pThis->getPercent(&actualPercent);
-        fireProgressPercentageChangedEvent(pThis->pEventSource, pThis->mId.toUtf16().raw(), actualPercent);
     }
     /* else ignored */
     return vrc;
@@ -821,11 +818,13 @@ HRESULT Progress::setCurrentOperationProgress(ULONG aPercent)
         AssertReturn(!mCompleted, E_FAIL);
     AssertReturn(!mCompleted && !mCanceled, E_FAIL);
 
-    m_ulOperationPercent = aPercent;
-
-    ULONG actualPercent = 0;
-    getPercent(&actualPercent);
-    fireProgressPercentageChangedEvent(pEventSource, mId.toUtf16().raw(), actualPercent);
+    if (m_ulOperationPercent != aPercent)
+    {
+        m_ulOperationPercent = aPercent;
+        ULONG actualPercent = 0;
+        getPercent(&actualPercent);
+        fireProgressPercentageChangedEvent(pEventSource, mId.toUtf16().raw(), actualPercent);
+    }
 
     return S_OK;
 }
diff --git a/src/VBox/Main/src-all/QMTranslatorImpl.cpp b/src/VBox/Main/src-all/QMTranslatorImpl.cpp
index aaf1687..8417667 100644
--- a/src/VBox/Main/src-all/QMTranslatorImpl.cpp
+++ b/src/VBox/Main/src-all/QMTranslatorImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/SecretKeyStore.cpp b/src/VBox/Main/src-all/SecretKeyStore.cpp
index 67a72ac..2132adb 100644
--- a/src/VBox/Main/src-all/SecretKeyStore.cpp
+++ b/src/VBox/Main/src-all/SecretKeyStore.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/SharedFolderImpl.cpp b/src/VBox/Main/src-all/SharedFolderImpl.cpp
index 87853f2..3ba0428 100644
--- a/src/VBox/Main/src-all/SharedFolderImpl.cpp
+++ b/src/VBox/Main/src-all/SharedFolderImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/ThreadTask.cpp b/src/VBox/Main/src-all/ThreadTask.cpp
index b85cca8..4f6436a 100644
--- a/src/VBox/Main/src-all/ThreadTask.cpp
+++ b/src/VBox/Main/src-all/ThreadTask.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/VBoxAPI-start.d b/src/VBox/Main/src-all/VBoxAPI-start.d
index 8968e7a..9e7790f 100644
--- a/src/VBox/Main/src-all/VBoxAPI-start.d
+++ b/src/VBox/Main/src-all/VBoxAPI-start.d
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/VirtualBoxBase.cpp b/src/VBox/Main/src-all/VirtualBoxBase.cpp
index b2b44b5..53795be 100644
--- a/src/VBox/Main/src-all/VirtualBoxBase.cpp
+++ b/src/VBox/Main/src-all/VirtualBoxBase.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp b/src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp
index b39676d..06415c4 100644
--- a/src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp
+++ b/src/VBox/Main/src-all/VirtualBoxErrorInfoImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/win/VBoxAPIWrap-precomp_vcc.h b/src/VBox/Main/src-all/win/VBoxAPIWrap-precomp_vcc.h
index e911729..94b5d10 100644
--- a/src/VBox/Main/src-all/win/VBoxAPIWrap-precomp_vcc.h
+++ b/src/VBox/Main/src-all/win/VBoxAPIWrap-precomp_vcc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,4 +38,3 @@
 # error "Log() from iprt/log.h cannot be defined in the precompiled header!"
 #endif
 
-
diff --git a/src/VBox/Main/src-all/win/VBoxProxyStub-x86.rc b/src/VBox/Main/src-all/win/VBoxProxyStub-x86.rc
index bdb85d3..01295b4 100644
--- a/src/VBox/Main/src-all/win/VBoxProxyStub-x86.rc
+++ b/src/VBox/Main/src-all/win/VBoxProxyStub-x86.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/win/VBoxProxyStub.c b/src/VBox/Main/src-all/win/VBoxProxyStub.c
index f4b1994..ea307d3 100644
--- a/src/VBox/Main/src-all/win/VBoxProxyStub.c
+++ b/src/VBox/Main/src-all/win/VBoxProxyStub.c
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -169,6 +169,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 
             /* Init IPRT. */
             RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
+            Log12(("VBoxProxyStub[%u]/DllMain: DLL_PROCESS_ATTACH\n", GetCurrentProcessId()));
 
 #ifdef VBOX_STRICT
             {
@@ -194,6 +195,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
             break;
 
         case DLL_PROCESS_DETACH:
+            Log12(("VBoxProxyStub[%u]/DllMain: DLL_PROCESS_DETACH\n", GetCurrentProcessId()));
             break;
     }
 
@@ -209,6 +211,7 @@ void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppapInfo, const CLSID **pp
 {
     *ppapInfo = &g_apProxyFiles[0];
     *ppClsid  = &g_ProxyClsId;
+    Log12(("VBoxProxyStub[%u]/GetProxyDllInfo:\n", GetCurrentProcessId()));
 }
 
 
@@ -236,6 +239,8 @@ HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid, REFIID riid, void **pp
      * /target being set to NT51.
      */
     AssertLogRelMsg(hrc == S_OK, ("%Rhrc\n",  hrc));
+    Log12(("VBoxProxyStub[%u]/DllGetClassObject(%RTuuid, %RTuuid, %p): %#x + *ppv=%p\n",
+           GetCurrentProcessId(), rclsid, riid, ppv, hrc, ppv ? *ppv : NULL));
     return hrc;
 }
 
@@ -247,7 +252,9 @@ HRESULT STDAPICALLTYPE DllGetClassObject(REFCLSID rclsid, REFIID riid, void **pp
  */
 HRESULT STDAPICALLTYPE DllCanUnloadNow(void)
 {
-    return NdrDllCanUnloadNow(&g_ProxyStubFactory);                                        /* see DLLCANUNLOADNOW in RpcProxy.h */
+    HRESULT hrc = NdrDllCanUnloadNow(&g_ProxyStubFactory);                                 /* see DLLCANUNLOADNOW in RpcProxy.h */
+    Log12(("VBoxProxyStub[%u]/DllCanUnloadNow: %Rhrc\n", GetCurrentProcessId(), hrc));
+    return hrc;
 }
 
 
@@ -261,7 +268,9 @@ HRESULT STDAPICALLTYPE DllCanUnloadNow(void)
  */
 ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *pThis)                /* see CSTDSTUBBUFFERRELEASE in RpcProxy.h */
 {
-    return NdrCStdStubBuffer_Release(pThis, (IPSFactoryBuffer *)&g_ProxyStubFactory);
+    ULONG cRefs =  NdrCStdStubBuffer_Release(pThis, (IPSFactoryBuffer *)&g_ProxyStubFactory);
+    Log12(("VBoxProxyStub[%u]/CStdStubBuffer_Release: %p -> %#x\n", GetCurrentProcessId(), pThis, cRefs));
+    return cRefs;
 }
 
 
@@ -274,7 +283,9 @@ ULONG STDMETHODCALLTYPE CStdStubBuffer_Release(IRpcStubBuffer *pThis)
  */
 ULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *pThis)                         /* see CSTDSTUBBUFFER2RELEASE in RpcProxy.h */
 {
-    return NdrCStdStubBuffer2_Release(pThis, (IPSFactoryBuffer *)&g_ProxyStubFactory);
+    ULONG cRefs = NdrCStdStubBuffer2_Release(pThis, (IPSFactoryBuffer *)&g_ProxyStubFactory);
+    Log12(("VBoxProxyStub[%u]/CStdStubBuffer2_Release: %p -> %#x\n", GetCurrentProcessId(), pThis, cRefs));
+    return cRefs;
 }
 
 
@@ -2285,184 +2296,168 @@ HRESULT STDAPICALLTYPE DllUnregisterServer(void)
 }
 
 
-BOOL IsInstalledWindowsService(const WCHAR* wszServiceName)
-{
-    BOOL bResult = FALSE;
-    SC_HANDLE hSCM;
-    SC_HANDLE hService;
+#ifdef VBOX_WITH_SDS
 
-    hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+static BOOL vbpsIsInstalledWindowsService(const WCHAR *pwszServiceName)
+{
+    BOOL fRet = FALSE;
+    SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
     if (hSCM != NULL)
     {
-        hService = OpenService(hSCM, wszServiceName, SERVICE_QUERY_CONFIG);
+        SC_HANDLE hService = OpenService(hSCM, pwszServiceName, SERVICE_QUERY_CONFIG);
         if (hService != NULL)
         {
-            bResult = TRUE;
             CloseServiceHandle(hService);
+            fRet = TRUE;
         }
         CloseServiceHandle(hSCM);
     }
-    return bResult;
+    return fRet;
 }
 
 
-BOOL InstallWindowsService(const WCHAR* wszVBoxDir,
-    const WCHAR* wszServiceModule,
-    const WCHAR* wszServiceName,
-    const WCHAR* wszServiceDisplayName,
-    const WCHAR* wszServiceDescription
-)
+/**
+ * Worker for installing a SCM service.
+ *
+ * @returns Success indicator.
+ * @param   pwszVBoxDir         The VirtualBox install directory (unicode),
+ *                              trailing slash.
+ * @param   pwszModule          The service module.
+ * @param   pwszServiceName     The service name.
+ * @param   pwszDisplayName     The service display name.
+ * @param   pwszDescription     The service description.
+ */
+static BOOL vbpsInstallWindowsService(const WCHAR *pwszVBoxDir, const WCHAR *pwszModule, const WCHAR *pwszServiceName,
+                                      const WCHAR *pwszDisplayName, const WCHAR *pwszDescription)
 {
-    #define QUOTES_SPACE 2
-
-    WCHAR szFilePath[MAX_PATH + QUOTES_SPACE];
-    size_t dirLen;
-    size_t moduleLen;
-    SC_HANDLE hSCM;
-    SC_HANDLE hService;
-    SERVICE_DESCRIPTION sd;
-
-    if (IsInstalledWindowsService(wszServiceName))
-        return TRUE;
-
-    // Make the executable file path
-    dirLen = RTUtf16Len(wszVBoxDir);
-    moduleLen = RTUtf16Len(wszServiceModule);
-
-    if (   dirLen + moduleLen + 2 >= MAX_PATH + QUOTES_SPACE
-        || !RT_SUCCESS(RTUtf16Copy(szFilePath + 1, MAX_PATH + QUOTES_SPACE - 1, wszVBoxDir))
-        || !RT_SUCCESS(RTUtf16Copy(szFilePath + dirLen + 1, MAX_PATH + QUOTES_SPACE - dirLen - 1, wszServiceModule)))
-    {
-        LogWarnFunc(("Error: The path to a windows service module is too long\n"));
-        return FALSE;
-    }
-
-    // Quote the FilePath before calling CreateService
-    szFilePath[0] = L'\"';
-    szFilePath[dirLen + moduleLen + 1] = L'\"';
-    szFilePath[dirLen + moduleLen + 2] = 0;
-
-    hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
-    if (hSCM == NULL)
+    BOOL fRet = vbpsIsInstalledWindowsService(pwszServiceName);
+    if (!fRet)
     {
-        LogWarnFunc(("Error: Could not open Service Manager\n"));
-        Assert(0);
-        return FALSE;
-    }
-
-    hService = CreateService(hSCM, wszServiceName, wszServiceDisplayName,
-                             SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
-                             SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
-                             szFilePath, NULL, NULL, L"RPCSS\0", NULL, NULL);
-    if (hService == NULL)
-    {
-        CloseServiceHandle(hSCM);
-        LogWarnFunc(("Error: Could not start service\n"));
-        Assert(0);
-        return FALSE;
-    }
-
-    sd.lpDescription = (LPWSTR)wszServiceDescription;
-    if (!ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &sd))
-    {
-        LogWarnFunc(("Error: could not set service description. code: %x\n",
-                    GetLastError()));
-        Assert(0);
+        /* Make double quoted executable file path. ASSUMES pwszVBoxDir ends with a slash! */
+        WCHAR wszFilePath[MAX_PATH + 2];
+        int rc = RTUtf16CopyAscii(wszFilePath, RT_ELEMENTS(wszFilePath), "\"");
+        if (RT_SUCCESS(rc))
+            rc = RTUtf16Cat(wszFilePath, RT_ELEMENTS(wszFilePath), pwszVBoxDir);
+        if (RT_SUCCESS(rc))
+            rc = RTUtf16Cat(wszFilePath, RT_ELEMENTS(wszFilePath), pwszModule);
+        if (RT_SUCCESS(rc))
+            rc = RTUtf16CatAscii(wszFilePath, RT_ELEMENTS(wszFilePath), "\"");
+        if (RT_SUCCESS(rc))
+        {
+            SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+            if (hSCM != NULL)
+            {
+                SC_HANDLE hService = CreateService(hSCM, pwszServiceName, pwszDisplayName,
+                                                   SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
+                                                   SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
+                                                   wszFilePath, NULL, NULL, L"RPCSS\0", NULL, NULL);
+                if (hService != NULL)
+                {
+                    SERVICE_DESCRIPTION sd;
+                    sd.lpDescription = (WCHAR *)pwszDescription;
+                    if (ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &sd))
+                        fRet = TRUE;
+                    else
+                        AssertMsgFailed(("Could not set service description for %ls: %u\n", pwszServiceName, GetLastError()));
+                    CloseServiceHandle(hService);
+                }
+                else
+                    AssertMsgFailed(("Could not create service %ls: %u\n", pwszServiceName, GetLastError()));
+                CloseServiceHandle(hSCM);
+            }
+            else
+                AssertMsg(GetLastError() == ERROR_ACCESS_DENIED,
+                          ("Could not open service %ls: %u\n", pwszServiceName, GetLastError()));
+        }
+        else
+            AssertMsgFailed(("Could not open Service Manager: %u\n", GetLastError()));
     }
-
-    CloseServiceHandle(hService);
-    CloseServiceHandle(hSCM);
-    return TRUE;
+    return fRet;
 }
 
-BOOL UninstallWindowsService(const WCHAR* wszServiceName)
-{
-    SC_HANDLE hSCM;
-    SC_HANDLE hService;
-    SERVICE_STATUS status;
-    BOOL bRet;
-    BOOL bDelete;
-
-    if (!IsInstalledWindowsService(wszServiceName))
-        return TRUE;
 
-    hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
-    if (hSCM == NULL)
-    {
-        LogWarnFunc(("Error: Could not open Service Manager\n"));
-        Assert(0);
-        return FALSE;
-    }
-
-    hService = OpenService(hSCM, wszServiceName, SERVICE_STOP | DELETE);
-    if (hService == NULL)
-    {
-        CloseServiceHandle(hSCM);
-        hSCM = NULL;
-        LogWarnFunc(("Error: Could not open service\n"));
-        Assert(0);
-        return FALSE;
-    }
-
-    bRet = ControlService(hService, SERVICE_CONTROL_STOP, &status);
-    if (!bRet)
+/**
+ * Worker for uninstalling a SCM service.
+ *
+ * @returns Success indicator.
+ * @param   pwszServiceName The name of the SCM service.
+ */
+static BOOL vbpsUninstallWindowsService(const WCHAR *pwszServiceName)
+{
+    BOOL fRet = !vbpsIsInstalledWindowsService(pwszServiceName);
+    if (!fRet)
     {
-        DWORD dwError = GetLastError();
-        if (!(   dwError == ERROR_SERVICE_NOT_ACTIVE
-              || (   dwError == ERROR_SERVICE_CANNOT_ACCEPT_CTRL
-                  && status.dwCurrentState == SERVICE_STOP_PENDING)))
+        SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+        if (hSCM != NULL)
         {
+            SC_HANDLE hService = OpenService(hSCM, pwszServiceName, SERVICE_STOP | DELETE);
+            if (hService)
+            {
+                DWORD          dwErr;
+                SERVICE_STATUS Status;
+                RT_ZERO(Status);
+                fRet = ControlService(hService, SERVICE_CONTROL_STOP, &Status);
+                dwErr = GetLastError();
+                if (   fRet
+                    || dwErr == ERROR_SERVICE_NOT_ACTIVE
+                    || (   dwErr == ERROR_SERVICE_CANNOT_ACCEPT_CTRL
+                        && Status.dwCurrentState == SERVICE_STOP_PENDING) )
+                {
+                    fRet = DeleteService(hService);
+                    AssertMsg(fRet, ("Could not delete service %ls: %u\n", pwszServiceName, GetLastError()));
+                }
+                else
+                    AssertMsg(dwErr == ERROR_ACCESS_DENIED,
+                              ("Could not stop service %ls: %u (state=%u)\n", pwszServiceName, dwErr, Status.dwCurrentState));
+                CloseServiceHandle(hService);
+            }
+            else
+                AssertMsg(GetLastError() == ERROR_ACCESS_DENIED,
+                          ("Could not open service %ls: %u\n", pwszServiceName, GetLastError()));
             CloseServiceHandle(hSCM);
-            hSCM = NULL;
-            LogWarnFunc(("Could not stop service\n"));
-            Assert(0);
         }
+        else
+            AssertMsgFailed(("Could not open Service Manager: %u\n", GetLastError()));
     }
-
-    bDelete = DeleteService(hService);
-    CloseServiceHandle(hService);
-    CloseServiceHandle(hSCM);
-
-    if (!bDelete)
-    {
-        LogWarnFunc(("Error: Could not delete service\n"));
-        Assert(0);
-        return FALSE;
-    }
-
-    return TRUE;
+    return fRet;
 }
 
 
-static void vbpsUpdateVBoxSDSWindowsService(VBPSREGSTATE* pState, const WCHAR* wszVBoxDir)
+/**
+ * Updates the VBoxSDS service with SCM.
+ *
+ * @param   pState              The registry modifier state.
+ * @param   pwszVBoxDir         The VirtualBox install directory (unicode),
+ *                              trailing slash.
+ */
+static void vbpsUpdateVBoxSDSWindowsService(VBPSREGSTATE *pState, const WCHAR *pwszVBoxDir)
 {
-    const WCHAR* wszModuleName =            L"VBoxSDS.exe";
-    const WCHAR* wszServiceName =           L"VBoxSDS";
-    const WCHAR* wszServiceDisplayName =    L"VirtualBox system service";
-    const WCHAR* wszServiceDescription =    L"Used as a COM server for VirtualBox API.";
+    const WCHAR s_wszModuleName[]         = L"VBoxSDS.exe";
+    const WCHAR s_wszServiceName[]        = L"VBoxSDS";
+    const WCHAR s_wszServiceDisplayName[] = L"VirtualBox system service";
+    const WCHAR s_wszServiceDescription[] = L"Used as a COM server for VirtualBox API.";
 
     if (pState->fUpdate)
     {
-        if (!InstallWindowsService(wszVBoxDir,
-            wszModuleName,
-            wszServiceName,
-            wszServiceDisplayName,
-            wszServiceDescription))
+        if (!vbpsInstallWindowsService(pwszVBoxDir, s_wszModuleName, s_wszServiceName,
+                                       s_wszServiceDisplayName, s_wszServiceDescription))
         {
-            LogWarnFunc(("Error: Windows service '%ls' cannot be registered\n", wszServiceName));
+            LogWarnFunc(("Error: Windows service '%ls' cannot be registered\n", s_wszServiceName));
             pState->rc = E_FAIL;
         }
     }
-    else if(pState->fDelete)
+    else if (pState->fDelete)
     {
-        if (!UninstallWindowsService(wszServiceName))
+        if (!vbpsUninstallWindowsService(s_wszServiceName))
         {
-            LogWarnFunc(("Error: Windows service '%ls' cannot be unregistered\n", wszServiceName));
+            LogWarnFunc(("Error: Windows service '%ls' cannot be unregistered\n", s_wszServiceName));
             pState->rc = E_FAIL;
         }
     }
 }
 
+#endif /* VBOX_WITH_SDS */
+
 
 
 /**
diff --git a/src/VBox/Main/src-all/win/VBoxProxyStub.def b/src/VBox/Main/src-all/win/VBoxProxyStub.def
index 1ace52b..1f87ecd 100644
--- a/src/VBox/Main/src-all/win/VBoxProxyStub.def
+++ b/src/VBox/Main/src-all/win/VBoxProxyStub.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/win/VBoxProxyStub.rc b/src/VBox/Main/src-all/win/VBoxProxyStub.rc
index 157ccb7..c9761db 100644
--- a/src/VBox/Main/src-all/win/VBoxProxyStub.rc
+++ b/src/VBox/Main/src-all/win/VBoxProxyStub.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/win/VBoxProxyStubLegacy.rc b/src/VBox/Main/src-all/win/VBoxProxyStubLegacy.rc
index ad588f0..d6c3782 100644
--- a/src/VBox/Main/src-all/win/VBoxProxyStubLegacy.rc
+++ b/src/VBox/Main/src-all/win/VBoxProxyStubLegacy.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-all/win/comregister.cmd b/src/VBox/Main/src-all/win/comregister.cmd
index c7fef8a..f60f99e 100644
--- a/src/VBox/Main/src-all/win/comregister.cmd
+++ b/src/VBox/Main/src-all/win/comregister.cmd
@@ -6,7 +6,7 @@ REM (both inproc and out-of-process)
 REM
 
 REM
-REM Copyright (C) 2006-2016 Oracle Corporation
+REM Copyright (C) 2006-2017 Oracle Corporation
 REM
 REM This file is part of VirtualBox Open Source Edition (OSE), as
 REM available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/AdditionsFacilityImpl.cpp b/src/VBox/Main/src-client/AdditionsFacilityImpl.cpp
index 3a3ec04..7209749 100644
--- a/src/VBox/Main/src-client/AdditionsFacilityImpl.cpp
+++ b/src/VBox/Main/src-client/AdditionsFacilityImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/BusAssignmentManager.cpp b/src/VBox/Main/src-client/BusAssignmentManager.cpp
index 586a4c9..9bede76 100644
--- a/src/VBox/Main/src-client/BusAssignmentManager.cpp
+++ b/src/VBox/Main/src-client/BusAssignmentManager.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/ClientTokenHolder.cpp b/src/VBox/Main/src-client/ClientTokenHolder.cpp
index 4975468..8a132fd 100644
--- a/src/VBox/Main/src-client/ClientTokenHolder.cpp
+++ b/src/VBox/Main/src-client/ClientTokenHolder.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/ConsoleImpl.cpp b/src/VBox/Main/src-client/ConsoleImpl.cpp
index 1c53b97..575d81c 100644
--- a/src/VBox/Main/src-client/ConsoleImpl.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl.cpp
@@ -7216,17 +7216,16 @@ HRESULT Console::i_consoleInitReleaseLog(const ComPtr<IMachine> aMachine)
         }
     }
 
-    char szError[RTPATH_MAX + 128];
+    RTERRINFOSTATIC ErrInfo;
     int vrc = com::VBoxLogRelCreate("VM", logFile.c_str(),
                                     RTLOGFLAGS_PREFIX_TIME_PROG | RTLOGFLAGS_RESTRICT_GROUPS,
                                     "all all.restrict -default.restrict",
                                     "VBOX_RELEASE_LOG", RTLOGDEST_FILE,
                                     32768 /* cMaxEntriesPerGroup */,
                                     0 /* cHistory */, 0 /* uHistoryFileTime */,
-                                    0 /* uHistoryFileSize */, szError, sizeof(szError));
+                                    0 /* uHistoryFileSize */, RTErrInfoInitStatic(&ErrInfo));
     if (RT_FAILURE(vrc))
-        hrc = setError(E_FAIL, tr("Failed to open release log (%s, %Rrc)"),
-                       szError, vrc);
+        hrc = setError(E_FAIL, tr("Failed to open release log (%s, %Rrc)"), ErrInfo.Core.pszMsg, vrc);
 
     /* If we've made any directory changes, flush the directory to increase
        the likelihood that the log file will be usable after a system panic.
diff --git a/src/VBox/Main/src-client/ConsoleImplTeleporter.cpp b/src/VBox/Main/src-client/ConsoleImplTeleporter.cpp
index b6e25cb..58830c1 100644
--- a/src/VBox/Main/src-client/ConsoleImplTeleporter.cpp
+++ b/src/VBox/Main/src-client/ConsoleImplTeleporter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp
index b4f31ad..3c60de3 100644
--- a/src/VBox/Main/src-client/DisplayImpl.cpp
+++ b/src/VBox/Main/src-client/DisplayImpl.cpp
@@ -2745,25 +2745,26 @@ int Display::i_videoRecStart(void)
         return VINF_SUCCESS;
 
     int rc = VideoRecContextCreate(mcMonitors, &mVideoRecCfg, &mpVideoRecCtx);
-    if (RT_FAILURE(rc))
-    {
-        LogFlow(("Failed to create video recording context (%Rrc)!\n", rc));
-        return rc;
-    }
-
-    for (unsigned uScreen = 0; uScreen < mcMonitors; uScreen++)
+    if (RT_SUCCESS(rc))
     {
-        int rc2 = VideoRecStreamInit(mpVideoRecCtx, uScreen);
-        if (RT_SUCCESS(rc2))
+        for (unsigned uScreen = 0; uScreen < mcMonitors; uScreen++)
         {
-            i_videoRecScreenChanged(uScreen);
-        }
-        else
-            LogRel(("VideoRec: Failed to initialize video recording context #%u (%Rrc)\n", uScreen, rc2));
+            int rc2 = VideoRecStreamInit(mpVideoRecCtx, uScreen);
+            if (RT_SUCCESS(rc2))
+            {
+                i_videoRecScreenChanged(uScreen);
+            }
+            else
+                LogRel(("VideoRec: Failed to initialize video recording context #%u (%Rrc)\n", uScreen, rc2));
 
-        if (RT_SUCCESS(rc))
-            rc = rc2;
+            if (RT_SUCCESS(rc))
+                rc = rc2;
+        }
     }
+
+    if (RT_FAILURE(rc))
+        LogRel(("VideoRec: Failed to start video recording (%Rrc)\n", rc));
+
     return rc;
 }
 
diff --git a/src/VBox/Main/src-client/DisplayImplLegacy.cpp b/src/VBox/Main/src-client/DisplayImplLegacy.cpp
index 35f7021..42e7052 100644
--- a/src/VBox/Main/src-client/DisplayImplLegacy.cpp
+++ b/src/VBox/Main/src-client/DisplayImplLegacy.cpp
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/DisplaySourceBitmapImpl.cpp b/src/VBox/Main/src-client/DisplaySourceBitmapImpl.cpp
index 317336d..2731b4d 100644
--- a/src/VBox/Main/src-client/DisplaySourceBitmapImpl.cpp
+++ b/src/VBox/Main/src-client/DisplaySourceBitmapImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/DrvAudioVideoRec.cpp b/src/VBox/Main/src-client/DrvAudioVideoRec.cpp
index 4712127..eaed062 100644
--- a/src/VBox/Main/src-client/DrvAudioVideoRec.cpp
+++ b/src/VBox/Main/src-client/DrvAudioVideoRec.cpp
@@ -78,6 +78,7 @@
  *   The Console object in turn then will route the data to the Display / video capturing interface then.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -88,7 +89,7 @@
 #include "ConsoleImpl.h"
 
 #include "../../Devices/Audio/DrvAudio.h"
-#include "EbmlWriter.h"
+#include "WebMWriter.h"
 
 #include <iprt/mem.h>
 #include <iprt/cdefs.h>
@@ -231,6 +232,8 @@ typedef struct AVRECSINK
     AVRECCONTAINER       Con;
     /** Codec data this sink uses for encoding. */
     AVRECCODEC           Codec;
+    /** Timestamp (in ms) of when the sink was created. */
+    uint64_t             tsStartMs;
 } AVRECSINK, *PAVRECSINK;
 
 /**
@@ -244,6 +247,8 @@ typedef struct AVRECSTREAM
     PRTCIRCBUF           pCircBuf;
     /** Pointer to sink to use for writing. */
     PAVRECSINK           pSink;
+    /** Last encoded PTS (in ms). */
+    uint64_t             uLastPTSMs;
 } AVRECSTREAM, *PAVRECSTREAM;
 
 /**
@@ -409,6 +414,8 @@ static int avRecSinkInit(PDRVAUDIOVIDEOREC pThis, PAVRECSINK pSink, PAVRECCONTAI
         pSink->Codec.STAM.cEncFrames = 0;
         pSink->Codec.STAM.msEncTotal = 0;
 #endif
+
+        pSink->tsStartMs             = RTTimeMilliTS();
     }
     else
     {
@@ -508,7 +515,8 @@ static int avRecCreateStreamOut(PDRVAUDIOVIDEOREC pThis, PAVRECSTREAM pStreamAV,
     rc = RTCircBufCreate(&pStreamAV->pCircBuf, cbFrame * cFrames);
     if (RT_SUCCESS(rc))
     {
-        pStreamAV->pSink = pSink; /* Assign sink to stream. */
+        pStreamAV->pSink      = pSink; /* Assign sink to stream. */
+        pStreamAV->uLastPTSMs = 0;
 
         if (pCfgAcq)
         {
@@ -759,13 +767,19 @@ static DECLCALLBACK(int) drvAudioVideoRecStreamPlay(PPDMIHOSTAUDIO pInterface, P
 
             Assert(cEncFrames == 1); /* At the moment we encode exactly *one* frame per frame. */
 
+            if (pStreamAV->uLastPTSMs == 0)
+                pStreamAV->uLastPTSMs = RTTimeMilliTS() - pSink->tsStartMs;
+
             const uint64_t uDurationMs = pSink->Codec.Opus.msFrame * cEncFrames;
+            const uint64_t uPTSMs      = pStreamAV->uLastPTSMs + uDurationMs;
+
+            pStreamAV->uLastPTSMs += uDurationMs;
 
             switch (pSink->Con.Parms.enmType)
             {
                 case AVRECCONTAINERTYPE_MAIN_CONSOLE:
                 {
-                    HRESULT hr = pSink->Con.Main.pConsole->i_audioVideoRecSendAudio(abDst, cbDst, uDurationMs);
+                    HRESULT hr = pSink->Con.Main.pConsole->i_audioVideoRecSendAudio(abDst, cbDst, uPTSMs);
                     Assert(hr == S_OK);
                     RT_NOREF(hr);
 
@@ -774,7 +788,7 @@ static DECLCALLBACK(int) drvAudioVideoRecStreamPlay(PPDMIHOSTAUDIO pInterface, P
 
                 case AVRECCONTAINERTYPE_WEBM:
                 {
-                    WebMWriter::BlockData_Opus blockData = { abDst, cbDst, uDurationMs };
+                    WebMWriter::BlockData_Opus blockData = { abDst, cbDst, uPTSMs };
                     rc = pSink->Con.WebM.pWebM->WriteBlock(pSink->Con.WebM.uTrack, &blockData, sizeof(blockData));
                     AssertRC(rc);
 
diff --git a/src/VBox/Main/src-client/EBMLWriter.cpp b/src/VBox/Main/src-client/EBMLWriter.cpp
new file mode 100644
index 0000000..3e6601b
--- /dev/null
+++ b/src/VBox/Main/src-client/EBMLWriter.cpp
@@ -0,0 +1,265 @@
+/* $Id: EBMLWriter.cpp $ */
+/** @file
+ * EBMLWriter.cpp - EBML writer implementation.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/**
+ * For more information, see:
+ * - https://w3c.github.io/media-source/webm-byte-stream-format.html
+ * - https://www.webmproject.org/docs/container/#muxer-guidelines
+ */
+
+#ifdef LOG_GROUP
+# undef LOG_GROUP
+#endif
+#define LOG_GROUP LOG_GROUP_MAIN_DISPLAY
+#include "LoggingNew.h"
+
+#include <list>
+#include <map>
+#include <queue>
+#include <stack>
+
+#include <math.h> /* For lround.h. */
+
+#include <iprt/asm.h>
+#include <iprt/buildconfig.h>
+#include <iprt/cdefs.h>
+#include <iprt/critsect.h>
+#include <iprt/err.h>
+#include <iprt/file.h>
+#include <iprt/rand.h>
+#include <iprt/string.h>
+
+#include <VBox/log.h>
+#include <VBox/version.h>
+
+#include "EBMLWriter.h"
+#include "EBML_MKV.h"
+
+/** No flags set. */
+#define VBOX_EBMLWRITER_FLAG_NONE               0
+/** The file handle was inherited. */
+#define VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED   RT_BIT(0)
+
+/** Creates an EBML output file using an existing, open file handle. */
+int EBMLWriter::createEx(const char *a_pszFile, PRTFILE phFile)
+{
+    AssertPtrReturn(phFile, VERR_INVALID_POINTER);
+
+    m_hFile   = *phFile;
+    m_fFlags |= VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED;
+    m_strFile = a_pszFile;
+
+    return VINF_SUCCESS;
+}
+
+/** Creates an EBML output file using a file name. */
+int EBMLWriter::create(const char *a_pszFile, uint64_t fOpen)
+{
+    int rc = RTFileOpen(&m_hFile, a_pszFile, fOpen);
+    if (RT_SUCCESS(rc))
+        m_strFile = a_pszFile;
+
+    return rc;
+}
+
+/** Returns available space on storage. */
+uint64_t EBMLWriter::getAvailableSpace(void)
+{
+    RTFOFF pcbFree;
+    int rc = RTFileQueryFsSizes(m_hFile, NULL, &pcbFree, 0, 0);
+    return (RT_SUCCESS(rc)? (uint64_t)pcbFree : UINT64_MAX);
+}
+
+/** Closes the file. */
+void EBMLWriter::close(void)
+{
+    if (!isOpen())
+        return;
+
+    AssertMsg(m_Elements.size() == 0,
+              ("%zu elements are not closed yet (next element to close is 0x%x)\n",
+               m_Elements.size(), m_Elements.top().classId));
+
+    if (!(m_fFlags & VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED))
+    {
+        RTFileClose(m_hFile);
+        m_hFile = NIL_RTFILE;
+    }
+
+    m_fFlags  = VBOX_EBMLWRITER_FLAG_NONE;
+    m_strFile = "";
+}
+
+/** Starts an EBML sub-element. */
+EBMLWriter& EBMLWriter::subStart(EbmlClassId classId)
+{
+    writeClassId(classId);
+    /* store the current file offset. */
+    m_Elements.push(EbmlSubElement(RTFileTell(m_hFile), classId));
+    /* Indicates that size of the element
+     * is unkown (as according to EBML specs).
+     */
+    writeUnsignedInteger(UINT64_C(0x01FFFFFFFFFFFFFF));
+    return *this;
+}
+
+/** Ends an EBML sub-element. */
+EBMLWriter& EBMLWriter::subEnd(EbmlClassId classId)
+{
+#ifdef VBOX_STRICT
+    /* Class ID on the top of the stack should match the class ID passed
+     * to the function. Otherwise it may mean that we have a bug in the code.
+     */
+    AssertMsg(!m_Elements.empty(), ("No elements to close anymore\n"));
+    AssertMsg(m_Elements.top().classId == classId,
+              ("Ending sub element 0x%x is in wrong order (next to close is 0x%x)\n", classId, m_Elements.top().classId));
+#else
+    RT_NOREF(classId);
+#endif
+
+    uint64_t uPos = RTFileTell(m_hFile);
+    uint64_t uSize = uPos - m_Elements.top().offset - 8;
+    RTFileSeek(m_hFile, m_Elements.top().offset, RTFILE_SEEK_BEGIN, NULL);
+
+    /* Make sure that size will be serialized as uint64_t. */
+    writeUnsignedInteger(uSize | UINT64_C(0x0100000000000000));
+    RTFileSeek(m_hFile, uPos, RTFILE_SEEK_BEGIN, NULL);
+    m_Elements.pop();
+    return *this;
+}
+
+/** Serializes a null-terminated string. */
+EBMLWriter& EBMLWriter::serializeString(EbmlClassId classId, const char *str)
+{
+    writeClassId(classId);
+    uint64_t size = strlen(str);
+    writeSize(size);
+    write(str, size);
+    return *this;
+}
+
+/** Serializes an UNSIGNED integer.
+ *  If size is zero then it will be detected automatically. */
+EBMLWriter& EBMLWriter::serializeUnsignedInteger(EbmlClassId classId, uint64_t parm, size_t size /* = 0 */)
+{
+    writeClassId(classId);
+    if (!size) size = getSizeOfUInt(parm);
+    writeSize(size);
+    writeUnsignedInteger(parm, size);
+    return *this;
+}
+
+/** Serializes a floating point value.
+ *
+ * Only 8-bytes double precision values are supported
+ * by this function.
+ */
+EBMLWriter& EBMLWriter::serializeFloat(EbmlClassId classId, float value)
+{
+    writeClassId(classId);
+    Assert(sizeof(uint32_t) == sizeof(float));
+    writeSize(sizeof(float));
+
+    union
+    {
+        float   f;
+        uint8_t u8[4];
+    } u;
+
+    u.f = value;
+
+    for (int i = 3; i >= 0; i--) /* Converts values to big endian. */
+        write(&u.u8[i], 1);
+
+    return *this;
+}
+
+/** Serializes binary data. */
+EBMLWriter& EBMLWriter::serializeData(EbmlClassId classId, const void *pvData, size_t cbData)
+{
+    writeClassId(classId);
+    writeSize(cbData);
+    write(pvData, cbData);
+    return *this;
+}
+
+/** Writes raw data to file. */
+int EBMLWriter::write(const void *data, size_t size)
+{
+    return RTFileWrite(m_hFile, data, size, NULL);
+}
+
+/** Writes an unsigned integer of variable of fixed size. */
+void EBMLWriter::writeUnsignedInteger(uint64_t value, size_t size /* = sizeof(uint64_t) */)
+{
+    /* convert to big-endian */
+    value = RT_H2BE_U64(value);
+    write(reinterpret_cast<uint8_t*>(&value) + sizeof(value) - size, size);
+}
+
+/** Writes EBML class ID to file.
+ *
+ * EBML ID already has a UTF8-like represenation
+ * so getSizeOfUInt is used to determine
+ * the number of its bytes.
+ */
+void EBMLWriter::writeClassId(EbmlClassId parm)
+{
+    writeUnsignedInteger(parm, getSizeOfUInt(parm));
+}
+
+/** Writes data size value. */
+void EBMLWriter::writeSize(uint64_t parm)
+{
+    /* The following expression defines the size of the value that will be serialized
+     * as an EBML UTF-8 like integer (with trailing bits represeting its size):
+      1xxx xxxx                                                                              - value 0 to  2^7-2
+      01xx xxxx  xxxx xxxx                                                                   - value 0 to 2^14-2
+      001x xxxx  xxxx xxxx  xxxx xxxx                                                        - value 0 to 2^21-2
+      0001 xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                             - value 0 to 2^28-2
+      0000 1xxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                  - value 0 to 2^35-2
+      0000 01xx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                       - value 0 to 2^42-2
+      0000 001x  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx            - value 0 to 2^49-2
+      0000 0001  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx - value 0 to 2^56-2
+     */
+    size_t size = 8 - ! (parm & (UINT64_MAX << 49)) - ! (parm & (UINT64_MAX << 42)) -
+                      ! (parm & (UINT64_MAX << 35)) - ! (parm & (UINT64_MAX << 28)) -
+                      ! (parm & (UINT64_MAX << 21)) - ! (parm & (UINT64_MAX << 14)) -
+                      ! (parm & (UINT64_MAX << 7));
+    /* One is subtracted in order to avoid loosing significant bit when size = 8. */
+    uint64_t mask = RT_BIT_64(size * 8 - 1);
+    writeUnsignedInteger((parm & (((mask << 1) - 1) >> size)) | (mask >> (size - 1)), size);
+}
+
+/** Size calculation for variable size UNSIGNED integer.
+ *
+ * The function defines the size of the number by trimming
+ * consequent trailing zero bytes starting from the most significant.
+ * The following statement is always true:
+ * 1 <= getSizeOfUInt(arg) <= 8.
+ *
+ * Every !(arg & (UINT64_MAX << X)) expression gives one
+ * if an only if all the bits from X to 63 are set to zero.
+ */
+size_t EBMLWriter::getSizeOfUInt(uint64_t arg)
+{
+    return 8 - ! (arg & (UINT64_MAX << 56)) - ! (arg & (UINT64_MAX << 48)) -
+               ! (arg & (UINT64_MAX << 40)) - ! (arg & (UINT64_MAX << 32)) -
+               ! (arg & (UINT64_MAX << 24)) - ! (arg & (UINT64_MAX << 16)) -
+               ! (arg & (UINT64_MAX << 8));
+}
+
diff --git a/src/VBox/Main/src-client/EBMLWriter.h b/src/VBox/Main/src-client/EBMLWriter.h
new file mode 100644
index 0000000..38d6c5c
--- /dev/null
+++ b/src/VBox/Main/src-client/EBMLWriter.h
@@ -0,0 +1,143 @@
+/* $Id: EBMLWriter.h $ */
+/** @file
+ * EBMLWriter.h - EBML writer.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____EBMLWRITER
+#define ____EBMLWRITER
+
+#include <iprt/file.h>
+#include <VBox/com/string.h> /* For Utf8Str. */
+
+using namespace com;
+
+#ifdef LOG_GROUP
+# undef LOG_GROUP
+#endif
+#define LOG_GROUP LOG_GROUP_MAIN_DISPLAY
+#include "LoggingNew.h"
+
+#include <list>
+#include <map>
+#include <queue>
+#include <stack>
+
+#include <math.h> /* For lround.h. */
+
+#include <iprt/asm.h>
+#include <iprt/buildconfig.h>
+#include <iprt/cdefs.h>
+#include <iprt/critsect.h>
+#include <iprt/err.h>
+#include <iprt/file.h>
+#include <iprt/rand.h>
+#include <iprt/string.h>
+
+#include <VBox/log.h>
+#include <VBox/version.h>
+
+/** No flags set. */
+#define VBOX_EBMLWRITER_FLAG_NONE               0
+/** The file handle was inherited. */
+#define VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED   RT_BIT(0)
+
+class EBMLWriter
+{
+public:
+    typedef uint32_t EbmlClassId;
+
+private:
+
+    struct EbmlSubElement
+    {
+        uint64_t offset;
+        EbmlClassId classId;
+        EbmlSubElement(uint64_t offs, EbmlClassId cid) : offset(offs), classId(cid) {}
+    };
+
+    /** Stack of EBML sub elements. */
+    std::stack<EbmlSubElement> m_Elements;
+    /** The file's handle. */
+    RTFILE                     m_hFile;
+    /** The file's name (path). */
+    Utf8Str                    m_strFile;
+    /** Flags. */
+    uint32_t                   m_fFlags;
+
+public:
+
+    EBMLWriter(void)
+        : m_hFile(NIL_RTFILE)
+        , m_fFlags(VBOX_EBMLWRITER_FLAG_NONE) { }
+
+    virtual ~EBMLWriter(void) { close(); }
+
+public:
+
+    int createEx(const char *a_pszFile, PRTFILE phFile);
+
+    int create(const char *a_pszFile, uint64_t fOpen);
+
+    void close(void);
+
+    /** Returns the file name. */
+    const Utf8Str& getFileName(void) { return m_strFile; }
+
+    /** Returns file size. */
+    uint64_t getFileSize(void) { return RTFileTell(m_hFile); }
+
+    /** Get reference to file descriptor */
+    inline const RTFILE &getFile(void) { return m_hFile; }
+
+    /** Returns available space on storage. */
+    uint64_t getAvailableSpace(void);
+
+    /**
+     * Returns whether the file is open or not.
+     *
+     * @returns True if open, false if not.
+     */
+    bool isOpen(void) { return RTFileIsValid(m_hFile); }
+
+public:
+
+    EBMLWriter &subStart(EbmlClassId classId);
+
+    EBMLWriter &subEnd(EbmlClassId classId);
+
+    EBMLWriter &serializeString(EbmlClassId classId, const char *str);
+
+    EBMLWriter &serializeUnsignedInteger(EbmlClassId classId, uint64_t parm, size_t size = 0);
+
+    EBMLWriter &serializeFloat(EbmlClassId classId, float value);
+
+    EBMLWriter &serializeData(EbmlClassId classId, const void *pvData, size_t cbData);
+
+    int write(const void *data, size_t size);
+
+    void writeUnsignedInteger(uint64_t value, size_t size = sizeof(uint64_t));
+
+    void writeClassId(EbmlClassId parm);
+
+    void writeSize(uint64_t parm);
+
+    static inline size_t getSizeOfUInt(uint64_t arg);
+
+private:
+
+    void operator=(const EBMLWriter &);
+};
+
+#endif /* !____EBMLWRITER */
diff --git a/src/VBox/Main/src-client/EBML_MKV.h b/src/VBox/Main/src-client/EBML_MKV.h
new file mode 100644
index 0000000..73d7b2e
--- /dev/null
+++ b/src/VBox/Main/src-client/EBML_MKV.h
@@ -0,0 +1,86 @@
+/* $Id: EBML_MKV.h $ */
+/** @file
+ * EbmlMkvIDs.h - Matroska EBML Class IDs.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/** Matroska EBML Class IDs supported by WebM.
+ *
+ *  Keep the structure clean and group elements where it makes sense
+ *  for easier reading / lookup. */
+enum MkvElem
+{
+    MkvElem_EBML                    = 0x1A45DFA3,
+    MkvElem_EBMLVersion             = 0x4286,
+    MkvElem_EBMLReadVersion         = 0x42F7,
+    MkvElem_EBMLMaxIDLength         = 0x42F2,
+    MkvElem_EBMLMaxSizeLength       = 0x42F3,
+
+    MkvElem_DocType                 = 0x4282,
+    MkvElem_DocTypeVersion          = 0x4287,
+    MkvElem_DocTypeReadVersion      = 0x4285,
+
+    MkvElem_Segment                 = 0x18538067,
+    MkvElem_Segment_Duration        = 0x4489,
+
+    MkvElem_SeekHead                = 0x114D9B74,
+    MkvElem_Seek                    = 0x4DBB,
+    MkvElem_SeekID                  = 0x53AB,
+    MkvElem_SeekPosition            = 0x53AC,
+
+    MkvElem_Info                    = 0x1549A966,
+    MkvElem_TimecodeScale           = 0x2AD7B1,
+    MkvElem_MuxingApp               = 0x4D80,
+    MkvElem_WritingApp              = 0x5741,
+
+    MkvElem_Tracks                  = 0x1654AE6B,
+    MkvElem_TrackEntry              = 0xAE,
+    MkvElem_TrackNumber             = 0xD7,
+    MkvElem_TrackUID                = 0x73C5,
+    MkvElem_TrackType               = 0x83,
+
+    MkvElem_Language                = 0x22B59C,
+
+    MkvElem_FlagLacing              = 0x9C,
+
+    MkvElem_Cluster                 = 0x1F43B675,
+    MkvElem_Timecode                = 0xE7,
+
+    MkvElem_SimpleBlock             = 0xA3,
+
+    MkvElem_SeekPreRoll             = 0x56BB,
+
+    MkvElem_CodecID                 = 0x86,
+    MkvElem_CodecDelay              = 0x56AA,
+    MkvElem_CodecPrivate            = 0x63A2,
+    MkvElem_CodecName               = 0x258688,
+
+    MkvElem_Video                   = 0xE0,
+    MkvElem_PixelWidth              = 0xB0,
+    MkvElem_PixelHeight             = 0xBA,
+
+    MkvElem_Audio                   = 0xE1,
+    MkvElem_SamplingFrequency       = 0xB5,
+    MkvElem_OutputSamplingFrequency = 0x78B5,
+    MkvElem_Channels                = 0x9F,
+    MkvElem_BitDepth                = 0x6264,
+
+    MkvElem_Cues                    = 0x1C53BB6B,
+    MkvElem_CuePoint                = 0xBB,
+    MkvElem_CueTime                 = 0xB3,
+    MkvElem_CueTrackPositions       = 0xB7,
+    MkvElem_CueTrack                = 0xF7,
+    MkvElem_CueClusterPosition      = 0xF1
+};
+
diff --git a/src/VBox/Main/src-client/EbmlMkvIDs.h b/src/VBox/Main/src-client/EbmlMkvIDs.h
deleted file mode 100644
index 33d95b3..0000000
--- a/src/VBox/Main/src-client/EbmlMkvIDs.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $Id$ */
-/** @file
- * EbmlMkvIDs.h - Matroska EBML Class IDs.
- */
-
-/*
- * Copyright (C) 2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/** Matroska EBML Class IDs supported by WebM.
- *
- *  Keep the structure clean and group elements where it makes sense
- *  for easier reading / lookup. */
-enum MkvElem
-{
-    MkvElem_EBML                    = 0x1A45DFA3,
-    MkvElem_EBMLVersion             = 0x4286,
-    MkvElem_EBMLReadVersion         = 0x42F7,
-    MkvElem_EBMLMaxIDLength         = 0x42F2,
-    MkvElem_EBMLMaxSizeLength       = 0x42F3,
-
-    MkvElem_DocType                 = 0x4282,
-    MkvElem_DocTypeVersion          = 0x4287,
-    MkvElem_DocTypeReadVersion      = 0x4285,
-
-    MkvElem_Segment                 = 0x18538067,
-    MkvElem_Segment_Duration        = 0x4489,
-
-    MkvElem_SeekHead                = 0x114D9B74,
-    MkvElem_Seek                    = 0x4DBB,
-    MkvElem_SeekID                  = 0x53AB,
-    MkvElem_SeekPosition            = 0x53AC,
-
-    MkvElem_Info                    = 0x1549A966,
-    MkvElem_TimecodeScale           = 0x2AD7B1,
-    MkvElem_MuxingApp               = 0x4D80,
-    MkvElem_WritingApp              = 0x5741,
-
-    MkvElem_Tracks                  = 0x1654AE6B,
-    MkvElem_TrackEntry              = 0xAE,
-    MkvElem_TrackNumber             = 0xD7,
-    MkvElem_TrackUID                = 0x73C5,
-    MkvElem_TrackType               = 0x83,
-
-    MkvElem_Language                = 0x22B59C,
-
-    MkvElem_FlagLacing              = 0x9C,
-
-    MkvElem_Cluster                 = 0x1F43B675,
-    MkvElem_Timecode                = 0xE7,
-
-    MkvElem_SimpleBlock             = 0xA3,
-
-    MkvElem_SeekPreRoll             = 0x56BB,
-
-    MkvElem_CodecID                 = 0x86,
-    MkvElem_CodecDelay              = 0x56AA,
-    MkvElem_CodecPrivate            = 0x63A2,
-    MkvElem_CodecName               = 0x258688,
-
-    MkvElem_Video                   = 0xE0,
-    MkvElem_PixelWidth              = 0xB0,
-    MkvElem_PixelHeight             = 0xBA,
-
-    MkvElem_Audio                   = 0xE1,
-    MkvElem_SamplingFrequency       = 0xB5,
-    MkvElem_OutputSamplingFrequency = 0x78B5,
-    MkvElem_Channels                = 0x9F,
-    MkvElem_BitDepth                = 0x6264,
-
-    MkvElem_Cues                    = 0x1C53BB6B,
-    MkvElem_CuePoint                = 0xBB,
-    MkvElem_CueTime                 = 0xB3,
-    MkvElem_CueTrackPositions       = 0xB7,
-    MkvElem_CueTrack                = 0xF7,
-    MkvElem_CueClusterPosition      = 0xF1
-};
-
diff --git a/src/VBox/Main/src-client/EbmlWriter.cpp b/src/VBox/Main/src-client/EbmlWriter.cpp
deleted file mode 100644
index cd20283..0000000
--- a/src/VBox/Main/src-client/EbmlWriter.cpp
+++ /dev/null
@@ -1,1252 +0,0 @@
-/* $Id: EbmlWriter.cpp $ */
-/** @file
- * EbmlWriter.cpp - EBML writer + WebM container handling.
- */
-
-/*
- * Copyright (C) 2013-2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-/**
- * For more information, see:
- * - https://w3c.github.io/media-source/webm-byte-stream-format.html
- * - https://www.webmproject.org/docs/container/#muxer-guidelines
- */
-
-#define LOG_GROUP LOG_GROUP_MAIN_DISPLAY
-#include "LoggingNew.h"
-
-#include <list>
-#include <map>
-#include <stack>
-
-#include <math.h> /* For lround.h. */
-
-#include <iprt/asm.h>
-#include <iprt/buildconfig.h>
-#include <iprt/cdefs.h>
-#include <iprt/err.h>
-#include <iprt/file.h>
-#include <iprt/rand.h>
-#include <iprt/string.h>
-
-#include <VBox/log.h>
-#include <VBox/version.h>
-
-#include "EbmlWriter.h"
-#include "EbmlMkvIDs.h"
-
-/** No flags set. */
-#define VBOX_EBMLWRITER_FLAG_NONE               0
-/** The file handle was inherited. */
-#define VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED   RT_BIT(0)
-
-class Ebml
-{
-public:
-    typedef uint32_t EbmlClassId;
-
-private:
-
-    struct EbmlSubElement
-    {
-        uint64_t offset;
-        EbmlClassId classId;
-        EbmlSubElement(uint64_t offs, EbmlClassId cid) : offset(offs), classId(cid) {}
-    };
-
-    /** Stack of EBML sub elements. */
-    std::stack<EbmlSubElement> m_Elements;
-    /** The file's handle. */
-    RTFILE                     m_hFile;
-    /** The file's name (path). */
-    Utf8Str                    m_strFile;
-    /** Flags. */
-    uint32_t                   m_fFlags;
-
-public:
-
-    Ebml(void)
-        : m_hFile(NIL_RTFILE)
-        , m_fFlags(VBOX_EBMLWRITER_FLAG_NONE) { }
-
-    virtual ~Ebml(void) { close(); }
-
-public:
-
-    /** Creates an EBML output file using an existing, open file handle. */
-    inline int createEx(const char *a_pszFile, PRTFILE phFile)
-    {
-        AssertPtrReturn(phFile, VERR_INVALID_POINTER);
-
-        m_hFile   = *phFile;
-        m_fFlags |= VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED;
-        m_strFile = a_pszFile;
-
-        return VINF_SUCCESS;
-    }
-
-    /** Creates an EBML output file using a file name. */
-    inline int create(const char *a_pszFile, uint64_t fOpen)
-    {
-        int rc = RTFileOpen(&m_hFile, a_pszFile, fOpen);
-        if (RT_SUCCESS(rc))
-            m_strFile = a_pszFile;
-
-        return rc;
-    }
-
-    /** Returns the file name. */
-    inline const Utf8Str& getFileName(void)
-    {
-        return m_strFile;
-    }
-
-    /** Returns file size. */
-    inline uint64_t getFileSize(void)
-    {
-        return RTFileTell(m_hFile);
-    }
-
-    /** Get reference to file descriptor */
-    inline const RTFILE &getFile(void)
-    {
-        return m_hFile;
-    }
-
-    /** Returns available space on storage. */
-    inline uint64_t getAvailableSpace(void)
-    {
-        RTFOFF pcbFree;
-        int rc = RTFileQueryFsSizes(m_hFile, NULL, &pcbFree, 0, 0);
-        return (RT_SUCCESS(rc)? (uint64_t)pcbFree : UINT64_MAX);
-    }
-
-    /** Closes the file. */
-    inline void close(void)
-    {
-        if (!isOpen())
-            return;
-
-        AssertMsg(m_Elements.size() == 0,
-                  ("%zu elements are not closed yet (next element to close is 0x%x)\n",
-                   m_Elements.size(), m_Elements.top().classId));
-
-        if (!(m_fFlags & VBOX_EBMLWRITER_FLAG_HANDLE_INHERITED))
-        {
-            RTFileClose(m_hFile);
-            m_hFile = NIL_RTFILE;
-        }
-
-        m_fFlags  = VBOX_EBMLWRITER_FLAG_NONE;
-        m_strFile = "";
-    }
-
-    /**
-     * Returns whether the file is open or not.
-     *
-     * @returns True if open, false if not.
-     */
-    inline bool isOpen(void)
-    {
-        return RTFileIsValid(m_hFile);
-    }
-
-    /** Starts an EBML sub-element. */
-    inline Ebml &subStart(EbmlClassId classId)
-    {
-        writeClassId(classId);
-        /* store the current file offset. */
-        m_Elements.push(EbmlSubElement(RTFileTell(m_hFile), classId));
-        /* Indicates that size of the element
-         * is unkown (as according to EBML specs).
-         */
-        writeUnsignedInteger(UINT64_C(0x01FFFFFFFFFFFFFF));
-        return *this;
-    }
-
-    /** Ends an EBML sub-element. */
-    inline Ebml &subEnd(EbmlClassId classId)
-    {
-#ifdef VBOX_STRICT
-        /* Class ID on the top of the stack should match the class ID passed
-         * to the function. Otherwise it may mean that we have a bug in the code.
-         */
-        AssertMsg(!m_Elements.empty(), ("No elements to close anymore\n"));
-        AssertMsg(m_Elements.top().classId == classId,
-                  ("Ending sub element 0x%x is in wrong order (next to close is 0x%x)\n", classId, m_Elements.top().classId));
-#else
-        RT_NOREF(classId);
-#endif
-
-        uint64_t uPos = RTFileTell(m_hFile);
-        uint64_t uSize = uPos - m_Elements.top().offset - 8;
-        RTFileSeek(m_hFile, m_Elements.top().offset, RTFILE_SEEK_BEGIN, NULL);
-
-        /* Make sure that size will be serialized as uint64_t. */
-        writeUnsignedInteger(uSize | UINT64_C(0x0100000000000000));
-        RTFileSeek(m_hFile, uPos, RTFILE_SEEK_BEGIN, NULL);
-        m_Elements.pop();
-        return *this;
-    }
-
-    /** Serializes a null-terminated string. */
-    inline Ebml &serializeString(EbmlClassId classId, const char *str)
-    {
-        writeClassId(classId);
-        uint64_t size = strlen(str);
-        writeSize(size);
-        write(str, size);
-        return *this;
-    }
-
-    /* Serializes an UNSIGNED integer
-     * If size is zero then it will be detected automatically. */
-    inline Ebml &serializeUnsignedInteger(EbmlClassId classId, uint64_t parm, size_t size = 0)
-    {
-        writeClassId(classId);
-        if (!size) size = getSizeOfUInt(parm);
-        writeSize(size);
-        writeUnsignedInteger(parm, size);
-        return *this;
-    }
-
-    /** Serializes a floating point value.
-     *
-     * Only 8-bytes double precision values are supported
-     * by this function.
-     */
-    inline Ebml &serializeFloat(EbmlClassId classId, float value)
-    {
-        writeClassId(classId);
-        Assert(sizeof(uint32_t) == sizeof(float));
-        writeSize(sizeof(float));
-
-        union
-        {
-            float   f;
-            uint8_t u8[4];
-        } u;
-
-        u.f = value;
-
-        for (int i = 3; i >= 0; i--) /* Converts values to big endian. */
-            write(&u.u8[i], 1);
-
-        return *this;
-    }
-
-    /** Serializes binary data. */
-    inline Ebml &serializeData(EbmlClassId classId, const void *pvData, size_t cbData)
-    {
-        writeClassId(classId);
-        writeSize(cbData);
-        write(pvData, cbData);
-        return *this;
-    }
-
-    /** Writes raw data to file. */
-    inline int write(const void *data, size_t size)
-    {
-        return RTFileWrite(m_hFile, data, size, NULL);
-    }
-
-    /** Writes an unsigned integer of variable of fixed size. */
-    inline void writeUnsignedInteger(uint64_t value, size_t size = sizeof(uint64_t))
-    {
-        /* convert to big-endian */
-        value = RT_H2BE_U64(value);
-        write(reinterpret_cast<uint8_t*>(&value) + sizeof(value) - size, size);
-    }
-
-    /** Writes EBML class ID to file.
-     *
-     * EBML ID already has a UTF8-like represenation
-     * so getSizeOfUInt is used to determine
-     * the number of its bytes.
-     */
-    inline void writeClassId(EbmlClassId parm)
-    {
-        writeUnsignedInteger(parm, getSizeOfUInt(parm));
-    }
-
-    /** Writes data size value. */
-    inline void writeSize(uint64_t parm)
-    {
-        /* The following expression defines the size of the value that will be serialized
-         * as an EBML UTF-8 like integer (with trailing bits represeting its size):
-          1xxx xxxx                                                                              - value 0 to  2^7-2
-          01xx xxxx  xxxx xxxx                                                                   - value 0 to 2^14-2
-          001x xxxx  xxxx xxxx  xxxx xxxx                                                        - value 0 to 2^21-2
-          0001 xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                             - value 0 to 2^28-2
-          0000 1xxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                  - value 0 to 2^35-2
-          0000 01xx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                       - value 0 to 2^42-2
-          0000 001x  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx            - value 0 to 2^49-2
-          0000 0001  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx - value 0 to 2^56-2
-         */
-        size_t size = 8 - ! (parm & (UINT64_MAX << 49)) - ! (parm & (UINT64_MAX << 42)) -
-                          ! (parm & (UINT64_MAX << 35)) - ! (parm & (UINT64_MAX << 28)) -
-                          ! (parm & (UINT64_MAX << 21)) - ! (parm & (UINT64_MAX << 14)) -
-                          ! (parm & (UINT64_MAX << 7));
-        /* One is subtracted in order to avoid loosing significant bit when size = 8. */
-        uint64_t mask = RT_BIT_64(size * 8 - 1);
-        writeUnsignedInteger((parm & (((mask << 1) - 1) >> size)) | (mask >> (size - 1)), size);
-    }
-
-    /** Size calculation for variable size UNSIGNED integer.
-     *
-     * The function defines the size of the number by trimming
-     * consequent trailing zero bytes starting from the most significant.
-     * The following statement is always true:
-     * 1 <= getSizeOfUInt(arg) <= 8.
-     *
-     * Every !(arg & (UINT64_MAX << X)) expression gives one
-     * if an only if all the bits from X to 63 are set to zero.
-     */
-    static inline size_t getSizeOfUInt(uint64_t arg)
-    {
-        return 8 - ! (arg & (UINT64_MAX << 56)) - ! (arg & (UINT64_MAX << 48)) -
-                   ! (arg & (UINT64_MAX << 40)) - ! (arg & (UINT64_MAX << 32)) -
-                   ! (arg & (UINT64_MAX << 24)) - ! (arg & (UINT64_MAX << 16)) -
-                   ! (arg & (UINT64_MAX << 8));
-    }
-
-private:
-    void operator=(const Ebml &);
-
-};
-
-/** No flags specified. */
-#define VBOX_WEBM_BLOCK_FLAG_NONE           0
-/** Invisible block which can be skipped. */
-#define VBOX_WEBM_BLOCK_FLAG_INVISIBLE      0x08
-/** The block marks a key frame. */
-#define VBOX_WEBM_BLOCK_FLAG_KEY_FRAME      0x80
-
-/** The default timecode scale factor for WebM -- all timecodes in the segments are expressed in ms.
- *  This allows every cluster to have blocks with positive values up to 32.767 seconds. */
-#define VBOX_WEBM_TIMECODESCALE_FACTOR_MS   1000000
-
-/** Maximum time (in ms) a cluster can store. */
-#define VBOX_WEBM_CLUSTER_MAX_LEN_MS        INT16_MAX
-
-/** Maximum time a block can store.
- *  With signed 16-bit timecodes and a default timecode scale of 1ms per unit this makes 65536ms. */
-#define VBOX_WEBM_BLOCK_MAX_LEN_MS          UINT16_MAX
-
-#ifdef VBOX_WITH_LIBOPUS
-# pragma pack(push)
-# pragma pack(1)
-    /** Opus codec private data within the MKV (WEBM) container.
-     *  Taken from: https://wiki.xiph.org/MatroskaOpus */
-    typedef struct WEBMOPUSPRIVDATA
-    {
-        WEBMOPUSPRIVDATA(uint32_t a_u32SampleRate, uint8_t a_u8Channels)
-        {
-            au64Head        = RT_MAKE_U64_FROM_U8('O', 'p', 'u', 's', 'H', 'e', 'a', 'd');
-            u8Version       = 1;
-            u8Channels      = a_u8Channels;
-            u16PreSkip      = 0;
-            u32SampleRate   = a_u32SampleRate;
-            u16Gain         = 0;
-            u8MappingFamily = 0;
-        }
-
-        uint64_t au64Head;          /**< Defaults to "OpusHead". */
-        uint8_t  u8Version;         /**< Must be set to 1. */
-        uint8_t  u8Channels;
-        uint16_t u16PreSkip;
-        /** Sample rate *before* encoding to Opus.
-         *  Note: This rate has nothing to do with the playback rate later! */
-        uint32_t u32SampleRate;
-        uint16_t u16Gain;
-        /** Must stay 0 -- otherwise a mapping table must be appended
-         *  right after this header. */
-        uint8_t  u8MappingFamily;
-    } WEBMOPUSPRIVDATA, *PWEBMOPUSPRIVDATA;
-    AssertCompileSize(WEBMOPUSPRIVDATA, 19);
-# pragma pack(pop)
-#endif /* VBOX_WITH_LIBOPUS */
-
-class WebMWriter_Impl
-{
-    /**
-     * Track type enumeration.
-     */
-    enum WebMTrackType
-    {
-        /** Unknown / invalid type. */
-        WebMTrackType_Invalid     = 0,
-        /** Only writes audio. */
-        WebMTrackType_Audio       = 1,
-        /** Only writes video. */
-        WebMTrackType_Video       = 2
-    };
-
-    /**
-     * Structure for keeping a WebM track entry.
-     */
-    struct WebMTrack
-    {
-        WebMTrack(WebMTrackType a_enmType, uint8_t a_uTrack, uint64_t a_offID)
-            : enmType(a_enmType)
-            , uTrack(a_uTrack)
-            , offUUID(a_offID)
-            , cTotalBlocks(0)
-            , tcLastWriteMs(0)
-        {
-            uUUID = RTRandU32();
-        }
-
-        /** The type of this track. */
-        WebMTrackType enmType;
-        /** Track parameters. */
-        union
-        {
-            struct
-            {
-                /** Sample rate of input data. */
-                uint32_t uHz;
-                /** Duration of the frame in samples (per channel).
-                 *  Valid frame size are:
-                 *
-                 *  ms           Frame size
-                 *  2.5          120
-                 *  5            240
-                 *  10           480
-                 *  20 (Default) 960
-                 *  40           1920
-                 *  60           2880
-                 */
-                uint16_t framesPerBlock;
-                /** How many milliseconds (ms) one written (simple) block represents. */
-                uint16_t msPerBlock;
-            } Audio;
-        };
-        /** This track's track number. Also used as key in track map. */
-        uint8_t       uTrack;
-        /** The track's "UUID".
-         *  Needed in case this track gets mux'ed with tracks from other files. Not really unique though. */
-        uint32_t      uUUID;
-        /** Absolute offset in file of track UUID.
-         *  Needed to write the hash sum within the footer. */
-        uint64_t      offUUID;
-        /** Total number of blocks. */
-        uint64_t      cTotalBlocks;
-        /** Timecode (in ms) of last write. */
-        uint64_t      tcLastWriteMs;
-    };
-
-    /**
-     * Structure for keeping a cue point.
-     */
-    struct WebMCuePoint
-    {
-        WebMCuePoint(WebMTrack *a_pTrack, uint32_t a_tcClusterStart, uint64_t a_offClusterStart)
-            : pTrack(a_pTrack)
-            , tcClusterStart(a_tcClusterStart), offClusterStart(a_offClusterStart) {}
-
-        /** Associated track. */
-        WebMTrack *pTrack;
-        /** Start time code of the related cluster. */
-        uint32_t   tcClusterStart;
-        /** Start offset of the related cluster. */
-        uint64_t   offClusterStart;
-    };
-
-    /**
-     * Structure for keeping a WebM cluster entry.
-     */
-    struct WebMCluster
-    {
-        WebMCluster(void)
-            : uID(0)
-            , offCluster(0)
-            , fOpen(false)
-            , tcStartMs(0)
-            , tcLastWriteMs(0)
-            , cBlocks(0) { }
-
-        /** This cluster's ID. */
-        uint64_t      uID;
-        /** Absolute offset (in bytes) of current cluster.
-         *  Needed for seeking info table. */
-        uint64_t      offCluster;
-        /** Whether this cluster element is opened currently. */
-        bool          fOpen;
-        /** Timecode (in ms) when starting this cluster. */
-        uint64_t      tcStartMs;
-        /** Timecode (in ms) of last write. */
-        uint64_t      tcLastWriteMs;
-        /** Number of (simple) blocks in this cluster. */
-        uint64_t      cBlocks;
-    };
-
-    /**
-     * Structure for keeping a WebM segment entry.
-     *
-     * Current we're only using one segment.
-     */
-    struct WebMSegment
-    {
-        WebMSegment(void)
-            : tcStartMs(0)
-            , tcLastWriteMs(0)
-            , offStart(0)
-            , offInfo(0)
-            , offSeekInfo(0)
-            , offTracks(0)
-            , offCues(0)
-        {
-            uTimecodeScaleFactor = VBOX_WEBM_TIMECODESCALE_FACTOR_MS;
-
-            LogFunc(("Default timecode scale is: %RU64ns\n", uTimecodeScaleFactor));
-        }
-
-        /** The timecode scale factor of this segment. */
-        uint64_t                        uTimecodeScaleFactor;
-
-        /** Timecode (in ms) when starting this segment. */
-        uint64_t                        tcStartMs;
-        /** Timecode (in ms) of last write. */
-        uint64_t                        tcLastWriteMs;
-
-        /** Absolute offset (in bytes) of CurSeg. */
-        uint64_t                        offStart;
-        /** Absolute offset (in bytes) of general info. */
-        uint64_t                        offInfo;
-        /** Absolute offset (in bytes) of seeking info. */
-        uint64_t                        offSeekInfo;
-        /** Absolute offset (in bytes) of tracks. */
-        uint64_t                        offTracks;
-        /** Absolute offset (in bytes) of cues table. */
-        uint64_t                        offCues;
-        /** List of cue points. Needed for seeking table. */
-        std::list<WebMCuePoint>         lstCues;
-
-        /** Total number of clusters. */
-        uint64_t                        cClusters;
-
-        /** Map of tracks.
-         *  The key marks the track number (*not* the UUID!). */
-        std::map <uint8_t, WebMTrack *> mapTracks;
-
-        /** Current cluster which is being handled.
-         *
-         *  Note that we don't need (and shouldn't need, as this can be a *lot* of data!) a
-         *  list of all clusters. */
-        WebMCluster                     CurCluster;
-
-    } CurSeg;
-
-    /** Audio codec to use. */
-    WebMWriter::AudioCodec      m_enmAudioCodec;
-    /** Video codec to use. */
-    WebMWriter::VideoCodec      m_enmVideoCodec;
-
-    /** Whether we're currently in the tracks section. */
-    bool                        m_fInTracksSection;
-
-    /** Size of timecodes in bytes. */
-    size_t                      m_cbTimecode;
-    /** Maximum value a timecode can have. */
-    uint32_t                    m_uTimecodeMax;
-
-    Ebml                        m_Ebml;
-
-public:
-
-    typedef std::map <uint8_t, WebMTrack *> WebMTracks;
-
-public:
-
-    WebMWriter_Impl() :
-        m_fInTracksSection(false)
-    {
-        /* Size (in bytes) of time code to write. We use 2 bytes (16 bit) by default. */
-        m_cbTimecode   = 2;
-        m_uTimecodeMax = UINT16_MAX;
-    }
-
-    virtual ~WebMWriter_Impl()
-    {
-        close();
-    }
-
-    /**
-     * Adds an audio track.
-     *
-     * @returns IPRT status code.
-     * @param   uHz             Input sampling rate.
-     *                          Must be supported by the selected audio codec.
-     * @param   cChannels       Number of input audio channels.
-     * @param   cBits           Number of input bits per channel.
-     * @param   puTrack         Track number on successful creation. Optional.
-     */
-    int AddAudioTrack(uint16_t uHz, uint8_t cChannels, uint8_t cBits, uint8_t *puTrack)
-    {
-#ifdef VBOX_WITH_LIBOPUS
-        int rc;
-
-        /*
-         * Check if the requested codec rate is supported.
-         *
-         * Only the following values are supported by an Opus standard build
-         * -- every other rate only is supported by a custom build.
-         */
-        switch (uHz)
-        {
-            case 48000:
-            case 24000:
-            case 16000:
-            case 12000:
-            case  8000:
-                rc = VINF_SUCCESS;
-                break;
-
-            default:
-                rc = VERR_NOT_SUPPORTED;
-                break;
-        }
-
-        if (RT_FAILURE(rc))
-            return rc;
-
-        const uint8_t uTrack = (uint8_t)CurSeg.mapTracks.size();
-
-        m_Ebml.subStart(MkvElem_TrackEntry);
-
-        m_Ebml.serializeUnsignedInteger(MkvElem_TrackNumber, (uint8_t)uTrack);
-        m_Ebml.serializeString         (MkvElem_Language,    "und" /* "Undefined"; see ISO-639-2. */);
-        m_Ebml.serializeUnsignedInteger(MkvElem_FlagLacing,  (uint8_t)0);
-
-        WebMTrack *pTrack = new WebMTrack(WebMTrackType_Audio, uTrack, RTFileTell(m_Ebml.getFile()));
-
-        pTrack->Audio.uHz            = uHz;
-        pTrack->Audio.msPerBlock     = 20; /** Opus uses 20ms by default. Make this configurable? */
-        pTrack->Audio.framesPerBlock = uHz / (1000 /* s in ms */ / pTrack->Audio.msPerBlock);
-
-        WEBMOPUSPRIVDATA opusPrivData(uHz, cChannels);
-
-        LogFunc(("Opus @ %RU16Hz (%RU16ms + %RU16 frames per block)\n",
-                 pTrack->Audio.uHz, pTrack->Audio.msPerBlock, pTrack->Audio.framesPerBlock));
-
-        m_Ebml.serializeUnsignedInteger(MkvElem_TrackUID,     pTrack->uUUID, 4)
-              .serializeUnsignedInteger(MkvElem_TrackType,    2 /* Audio */)
-              .serializeString(MkvElem_CodecID,               "A_OPUS")
-              .serializeData(MkvElem_CodecPrivate,            &opusPrivData, sizeof(opusPrivData))
-              .serializeUnsignedInteger(MkvElem_CodecDelay,   0)
-              .serializeUnsignedInteger(MkvElem_SeekPreRoll,  80 * 1000000) /* 80ms in ns. */
-              .subStart(MkvElem_Audio)
-                  .serializeFloat(MkvElem_SamplingFrequency,  (float)uHz)
-                  .serializeUnsignedInteger(MkvElem_Channels, cChannels)
-                  .serializeUnsignedInteger(MkvElem_BitDepth, cBits)
-              .subEnd(MkvElem_Audio)
-              .subEnd(MkvElem_TrackEntry);
-
-        CurSeg.mapTracks[uTrack] = pTrack;
-
-        if (puTrack)
-            *puTrack = uTrack;
-
-        return VINF_SUCCESS;
-#else
-        RT_NOREF(uHz, cChannels, cBits, puTrack);
-        return VERR_NOT_SUPPORTED;
-#endif
-    }
-
-    int AddVideoTrack(uint16_t uWidth, uint16_t uHeight, double dbFPS, uint8_t *puTrack)
-    {
-#ifdef VBOX_WITH_LIBVPX
-        RT_NOREF(dbFPS);
-
-        const uint8_t uTrack = (uint8_t)CurSeg.mapTracks.size();
-
-        m_Ebml.subStart(MkvElem_TrackEntry);
-
-        m_Ebml.serializeUnsignedInteger(MkvElem_TrackNumber, (uint8_t)uTrack);
-        m_Ebml.serializeString         (MkvElem_Language,    "und" /* "Undefined"; see ISO-639-2. */);
-        m_Ebml.serializeUnsignedInteger(MkvElem_FlagLacing,  (uint8_t)0);
-
-        WebMTrack *pTrack = new WebMTrack(WebMTrackType_Video, uTrack, RTFileTell(m_Ebml.getFile()));
-
-        /** @todo Resolve codec type. */
-        m_Ebml.serializeUnsignedInteger(MkvElem_TrackUID,    pTrack->uUUID /* UID */, 4)
-              .serializeUnsignedInteger(MkvElem_TrackType,   1 /* Video */)
-              .serializeString(MkvElem_CodecID,              "V_VP8")
-              .subStart(MkvElem_Video)
-                  .serializeUnsignedInteger(MkvElem_PixelWidth,  uWidth)
-                  .serializeUnsignedInteger(MkvElem_PixelHeight, uHeight)
-              .subEnd(MkvElem_Video);
-
-        m_Ebml.subEnd(MkvElem_TrackEntry);
-
-        CurSeg.mapTracks[uTrack] = pTrack;
-
-        if (puTrack)
-            *puTrack = uTrack;
-
-        return VINF_SUCCESS;
-#else
-        RT_NOREF(uWidth, uHeight, dbFPS, puTrack);
-        return VERR_NOT_SUPPORTED;
-#endif
-    }
-
-    int writeHeader(void)
-    {
-        LogFunc(("Header @ %RU64\n", RTFileTell(m_Ebml.getFile())));
-
-        m_Ebml.subStart(MkvElem_EBML)
-              .serializeUnsignedInteger(MkvElem_EBMLVersion, 1)
-              .serializeUnsignedInteger(MkvElem_EBMLReadVersion, 1)
-              .serializeUnsignedInteger(MkvElem_EBMLMaxIDLength, 4)
-              .serializeUnsignedInteger(MkvElem_EBMLMaxSizeLength, 8)
-              .serializeString(MkvElem_DocType, "webm")
-              .serializeUnsignedInteger(MkvElem_DocTypeVersion, 2)
-              .serializeUnsignedInteger(MkvElem_DocTypeReadVersion, 2)
-              .subEnd(MkvElem_EBML);
-
-        m_Ebml.subStart(MkvElem_Segment);
-
-        /* Save offset of current segment. */
-        CurSeg.offStart = RTFileTell(m_Ebml.getFile());
-
-        writeSegSeekInfo();
-
-        /* Save offset of upcoming tracks segment. */
-        CurSeg.offTracks = RTFileTell(m_Ebml.getFile());
-
-        /* The tracks segment starts right after this header. */
-        m_Ebml.subStart(MkvElem_Tracks);
-        m_fInTracksSection = true;
-
-        return VINF_SUCCESS;
-    }
-
-    int writeSimpleBlockInternal(WebMTrack *a_pTrack, uint64_t a_uTimecode,
-                                 const void *a_pvData, size_t a_cbData, uint8_t a_fFlags)
-    {
-        Log3Func(("SimpleBlock @ %RU64 (T%RU8, TS=%RU64, %zu bytes)\n",
-                  RTFileTell(m_Ebml.getFile()), a_pTrack->uTrack, a_uTimecode, a_cbData));
-
-        /** @todo Mask out non-valid timecode bits, e.g. the upper 48 bits for a (default) 16-bit timecode. */
-        Assert(a_uTimecode <= m_uTimecodeMax);
-
-        /* Write a "Simple Block". */
-        m_Ebml.writeClassId(MkvElem_SimpleBlock);
-        /* Block size. */
-        m_Ebml.writeUnsignedInteger(0x10000000u | (  1            /* Track number size. */
-                                                   + m_cbTimecode /* Timecode size .*/
-                                                   + 1            /* Flags size. */
-                                                   + a_cbData     /* Actual frame data size. */),  4);
-        /* Track number. */
-        m_Ebml.writeSize(a_pTrack->uTrack);
-        /* Timecode (relative to cluster opening timecode). */
-        m_Ebml.writeUnsignedInteger(a_uTimecode, m_cbTimecode);
-        /* Flags. */
-        m_Ebml.writeUnsignedInteger(a_fFlags, 1);
-        /* Frame data. */
-        m_Ebml.write(a_pvData, a_cbData);
-
-        a_pTrack->cTotalBlocks++;
-
-        return VINF_SUCCESS;
-    }
-
-#ifdef VBOX_WITH_LIBVPX
-    int writeBlockVP8(WebMTrack *a_pTrack, const vpx_codec_enc_cfg_t *a_pCfg, const vpx_codec_cx_pkt_t *a_pPkt)
-    {
-        RT_NOREF(a_pTrack);
-
-        WebMCluster &Cluster = CurSeg.CurCluster;
-
-        /* Calculate the PTS of this frame (in ms). */
-        uint64_t tcPTSMs = a_pPkt->data.frame.pts * 1000
-                         * (uint64_t) a_pCfg->g_timebase.num / a_pCfg->g_timebase.den;
-        /* Sanity. */
-        Assert(tcPTSMs);
-        //Assert(tcPTSMs >= Cluster.tcLastWriteMs);
-
-        if (   tcPTSMs
-            && tcPTSMs <= a_pTrack->tcLastWriteMs)
-        {
-            tcPTSMs = a_pTrack->tcLastWriteMs + 1;
-        }
-
-        /* Whether to start a new cluster or not. */
-        bool fClusterStart = false;
-
-        /* No blocks written yet? Start a new cluster. */
-        if (a_pTrack->cTotalBlocks == 0)
-            fClusterStart = true;
-
-        /* Did we reach the maximum a cluster can hold? Use a new cluster then. */
-        if (tcPTSMs > VBOX_WEBM_CLUSTER_MAX_LEN_MS)
-        {
-            LogFunc(("[T%RU8C%RU64] Exceeded max length (%RU64ms)\n",
-                     a_pTrack->uTrack, Cluster.uID, VBOX_WEBM_CLUSTER_MAX_LEN_MS));
-
-            /* Note: Do not reset the PTS here -- the new cluster starts time-wise
-             *       where the old cluster left off. */
-
-            fClusterStart = true;
-        }
-
-        const bool fKeyframe = RT_BOOL(a_pPkt->data.frame.flags & VPX_FRAME_IS_KEY);
-
-        if (   fClusterStart
-            || fKeyframe)
-        {
-            if (Cluster.fOpen) /* Close current cluster first. */
-            {
-                m_Ebml.subEnd(MkvElem_Cluster);
-                Cluster.fOpen = false;
-            }
-
-            Cluster.fOpen      = true;
-            Cluster.uID        = CurSeg.cClusters;
-            Cluster.tcStartMs  = tcPTSMs;
-            Cluster.offCluster = RTFileTell(m_Ebml.getFile());
-            Cluster.cBlocks    = 0;
-
-            if (CurSeg.cClusters)
-                AssertMsg(Cluster.tcStartMs, ("[T%RU8C%RU64] @ %RU64 start is 0 which is invalid\n",
-                                              a_pTrack->uTrack, Cluster.uID, Cluster.offCluster));
-
-            LogFunc(("[T%RU8C%RU64] Start @ %RU64ms / %RU64 bytes\n",
-                     a_pTrack->uTrack, Cluster.uID, Cluster.tcStartMs, Cluster.offCluster));
-
-            m_Ebml.subStart(MkvElem_Cluster)
-                  .serializeUnsignedInteger(MkvElem_Timecode, Cluster.tcStartMs);
-
-            /* Save a cue point if this is a keyframe. */
-            if (fKeyframe)
-            {
-                WebMCuePoint cue(a_pTrack, Cluster.tcStartMs, Cluster.offCluster);
-                CurSeg.lstCues.push_back(cue);
-            }
-
-            CurSeg.cClusters++;
-        }
-
-        Cluster.tcLastWriteMs = tcPTSMs;
-        Cluster.cBlocks++;
-
-        a_pTrack->tcLastWriteMs = tcPTSMs;
-
-        if (CurSeg.tcLastWriteMs < a_pTrack->tcLastWriteMs)
-            CurSeg.tcLastWriteMs = a_pTrack->tcLastWriteMs;
-
-        /* Calculate the block's timecode, which is relative to the cluster's starting timecode. */
-        uint16_t tcBlockMs = static_cast<uint16_t>(tcPTSMs - Cluster.tcStartMs);
-
-        Log2Func(("[T%RU8C%RU64] tcPTSMs=%RU64, (%RU64ms)\n", a_pTrack->uTrack, Cluster.uID, tcPTSMs, tcBlockMs));
-
-        uint8_t fFlags = 0;
-        if (fKeyframe)
-            fFlags |= VBOX_WEBM_BLOCK_FLAG_KEY_FRAME;
-        if (a_pPkt->data.frame.flags & VPX_FRAME_IS_INVISIBLE)
-            fFlags |= VBOX_WEBM_BLOCK_FLAG_INVISIBLE;
-
-        return writeSimpleBlockInternal(a_pTrack, tcBlockMs, a_pPkt->data.frame.buf, a_pPkt->data.frame.sz, fFlags);
-    }
-#endif /* VBOX_WITH_LIBVPX */
-
-#ifdef VBOX_WITH_LIBOPUS
-    /* Audio blocks that have same absolute timecode as video blocks SHOULD be written before the video blocks. */
-    int writeBlockOpus(WebMTrack *a_pTrack, const void *pvData, size_t cbData, uint64_t uDurationMs)
-    {
-        AssertPtrReturn(a_pTrack, VERR_INVALID_POINTER);
-        AssertPtrReturn(pvData,   VERR_INVALID_POINTER);
-        AssertReturn(cbData,      VERR_INVALID_PARAMETER);
-
-        WebMCluster &Cluster = CurSeg.CurCluster;
-
-        /* Calculate the PTS of the current block:
-         *
-         * The "raw PTS" is the exact time of an object represented in nanoseconds):
-         *     Raw Timecode = (Block timecode + Cluster timecode) * TimecodeScaleFactor
-         */
-        uint64_t tcPTSMs = CurSeg.tcLastWriteMs + uDurationMs;
-
-        /* Sanity. */
-        Assert(tcPTSMs);
-        //Assert(tcPTSMs >= Cluster.tcLastWriteMs);
-
-        /* Whether to start a new cluster or not. */
-        bool fClusterStart = false;
-
-        /* Did we reach the maximum a cluster can hold? Use a new cluster then. */
-        if (tcPTSMs > VBOX_WEBM_CLUSTER_MAX_LEN_MS)
-            fClusterStart = true;
-
-        if (fClusterStart)
-        {
-            if (Cluster.fOpen) /* Close current clusters first. */
-            {
-                m_Ebml.subEnd(MkvElem_Cluster);
-                Cluster.fOpen = false;
-            }
-
-            Cluster.fOpen      = true;
-            Cluster.uID        = CurSeg.cClusters;
-            Cluster.tcStartMs  = Cluster.tcLastWriteMs;
-            Cluster.offCluster = RTFileTell(m_Ebml.getFile());
-            Cluster.cBlocks    = 0;
-
-            if (CurSeg.cClusters)
-                AssertMsg(Cluster.tcStartMs, ("[T%RU8C%RU64] @ %RU64 start is 0 which is invalid\n",
-                                              a_pTrack->uTrack, Cluster.uID, Cluster.offCluster));
-
-            LogFunc(("[T%RU8C%RU64] Start @ %RU64ms / %RU64 bytes\n",
-                     a_pTrack->uTrack, Cluster.uID, Cluster.tcStartMs, Cluster.offCluster));
-
-            /* As all audio frame as key frames, insert a new cue point when a new cluster starts. */
-            WebMCuePoint cue(a_pTrack, Cluster.tcStartMs, Cluster.offCluster);
-            CurSeg.lstCues.push_back(cue);
-
-            m_Ebml.subStart(MkvElem_Cluster)
-                  .serializeUnsignedInteger(MkvElem_Timecode, Cluster.tcStartMs);
-
-            CurSeg.cClusters++;
-        }
-
-        Cluster.tcLastWriteMs = tcPTSMs;
-        Cluster.cBlocks++;
-
-        a_pTrack->tcLastWriteMs = tcPTSMs;
-
-        if (CurSeg.tcLastWriteMs < a_pTrack->tcLastWriteMs)
-            CurSeg.tcLastWriteMs = a_pTrack->tcLastWriteMs;
-
-        /* Calculate the block's timecode, which is relative to the cluster's starting timecode. */
-        uint16_t tcBlockMs = static_cast<uint16_t>(tcPTSMs - Cluster.tcStartMs);
-
-        Log2Func(("[T%RU8C%RU64] tcPTSMs=%RU64, (%RU64ms)\n", a_pTrack->uTrack, Cluster.uID, tcPTSMs, tcBlockMs));
-
-        return writeSimpleBlockInternal(a_pTrack, tcBlockMs,
-                                        pvData, cbData, VBOX_WEBM_BLOCK_FLAG_KEY_FRAME);
-    }
-#endif /* VBOX_WITH_LIBOPUS */
-
-    int WriteBlock(uint8_t uTrack, const void *pvData, size_t cbData)
-    {
-        RT_NOREF(pvData, cbData); /* Only needed for assertions for now. */
-
-        WebMTracks::iterator itTrack = CurSeg.mapTracks.find(uTrack);
-        if (itTrack == CurSeg.mapTracks.end())
-            return VERR_NOT_FOUND;
-
-        WebMTrack *pTrack = itTrack->second;
-        AssertPtr(pTrack);
-
-        int rc;
-
-        if (m_fInTracksSection)
-        {
-            m_Ebml.subEnd(MkvElem_Tracks);
-            m_fInTracksSection = false;
-        }
-
-        switch (pTrack->enmType)
-        {
-
-            case WebMTrackType_Audio:
-            {
-#ifdef VBOX_WITH_LIBOPUS
-                if (m_enmAudioCodec == WebMWriter::AudioCodec_Opus)
-                {
-                    Assert(cbData == sizeof(WebMWriter::BlockData_Opus));
-                    WebMWriter::BlockData_Opus *pData = (WebMWriter::BlockData_Opus *)pvData;
-                    rc = writeBlockOpus(pTrack, pData->pvData, pData->cbData, pData->uDurationMs);
-                }
-                else
-#endif /* VBOX_WITH_LIBOPUS */
-                    rc = VERR_NOT_SUPPORTED;
-                break;
-            }
-
-            case WebMTrackType_Video:
-            {
-#ifdef VBOX_WITH_LIBVPX
-                if (m_enmVideoCodec == WebMWriter::VideoCodec_VP8)
-                {
-                    Assert(cbData == sizeof(WebMWriter::BlockData_VP8));
-                    WebMWriter::BlockData_VP8 *pData = (WebMWriter::BlockData_VP8 *)pvData;
-                    rc = writeBlockVP8(pTrack, pData->pCfg, pData->pPkt);
-                }
-                else
-#endif /* VBOX_WITH_LIBVPX */
-                    rc = VERR_NOT_SUPPORTED;
-                break;
-            }
-
-            default:
-                rc = VERR_NOT_SUPPORTED;
-                break;
-        }
-
-        return rc;
-    }
-
-    int writeFooter(void)
-    {
-        if (m_fInTracksSection)
-        {
-            m_Ebml.subEnd(MkvElem_Tracks);
-            m_fInTracksSection = false;
-        }
-
-        if (CurSeg.CurCluster.fOpen)
-        {
-            m_Ebml.subEnd(MkvElem_Cluster);
-            CurSeg.CurCluster.fOpen = false;
-        }
-
-        /*
-         * Write Cues element.
-         */
-        LogFunc(("Cues @ %RU64\n", RTFileTell(m_Ebml.getFile())));
-
-        CurSeg.offCues = RTFileTell(m_Ebml.getFile());
-
-        m_Ebml.subStart(MkvElem_Cues);
-
-        std::list<WebMCuePoint>::iterator itCuePoint = CurSeg.lstCues.begin();
-        while (itCuePoint != CurSeg.lstCues.end())
-        {
-            /* Sanity. */
-            AssertPtr(itCuePoint->pTrack);
-
-            const uint64_t uClusterPos = itCuePoint->offClusterStart - CurSeg.offStart;
-
-            LogFunc(("CuePoint @ %RU64: Track #%RU8 (Time %RU64, Pos %RU64)\n",
-                     RTFileTell(m_Ebml.getFile()), itCuePoint->pTrack->uTrack, itCuePoint->tcClusterStart, uClusterPos));
-
-            m_Ebml.subStart(MkvElem_CuePoint)
-                      .serializeUnsignedInteger(MkvElem_CueTime, itCuePoint->tcClusterStart)
-                      .subStart(MkvElem_CueTrackPositions)
-                          .serializeUnsignedInteger(MkvElem_CueTrack,           itCuePoint->pTrack->uTrack)
-                          .serializeUnsignedInteger(MkvElem_CueClusterPosition, uClusterPos, 8)
-                  .subEnd(MkvElem_CueTrackPositions)
-                  .subEnd(MkvElem_CuePoint);
-
-            itCuePoint++;
-        }
-
-        m_Ebml.subEnd(MkvElem_Cues);
-        m_Ebml.subEnd(MkvElem_Segment);
-
-        /*
-         * Re-Update SeekHead / Info elements.
-         */
-
-        writeSegSeekInfo();
-
-        return RTFileSeek(m_Ebml.getFile(), 0, RTFILE_SEEK_END, NULL);
-    }
-
-    int close(void)
-    {
-        WebMTracks::iterator itTrack = CurSeg.mapTracks.begin();
-        for (; itTrack != CurSeg.mapTracks.end(); ++itTrack)
-        {
-            delete itTrack->second;
-            CurSeg.mapTracks.erase(itTrack);
-        }
-
-        Assert(CurSeg.mapTracks.size() == 0);
-
-        m_Ebml.close();
-
-        return VINF_SUCCESS;
-    }
-
-    friend class Ebml;
-    friend class WebMWriter;
-
-private:
-
-    /**
-     * Writes the segment's seek information and cue points.
-     *
-     * @returns IPRT status code.
-     */
-    void writeSegSeekInfo(void)
-    {
-        if (CurSeg.offSeekInfo)
-            RTFileSeek(m_Ebml.getFile(), CurSeg.offSeekInfo, RTFILE_SEEK_BEGIN, NULL);
-        else
-            CurSeg.offSeekInfo = RTFileTell(m_Ebml.getFile());
-
-        LogFunc(("SeekHead @ %RU64\n", CurSeg.offSeekInfo));
-
-        m_Ebml.subStart(MkvElem_SeekHead);
-
-        m_Ebml.subStart(MkvElem_Seek)
-              .serializeUnsignedInteger(MkvElem_SeekID, MkvElem_Tracks)
-              .serializeUnsignedInteger(MkvElem_SeekPosition, CurSeg.offTracks - CurSeg.offStart, 8)
-              .subEnd(MkvElem_Seek);
-
-        Assert(CurSeg.offCues - CurSeg.offStart > 0); /* Sanity. */
-
-        m_Ebml.subStart(MkvElem_Seek)
-              .serializeUnsignedInteger(MkvElem_SeekID, MkvElem_Cues)
-              .serializeUnsignedInteger(MkvElem_SeekPosition, CurSeg.offCues - CurSeg.offStart, 8)
-              .subEnd(MkvElem_Seek);
-
-        m_Ebml.subStart(MkvElem_Seek)
-              .serializeUnsignedInteger(MkvElem_SeekID, MkvElem_Info)
-              .serializeUnsignedInteger(MkvElem_SeekPosition, CurSeg.offInfo - CurSeg.offStart, 8)
-              .subEnd(MkvElem_Seek);
-
-        m_Ebml.subEnd(MkvElem_SeekHead);
-
-        //int64_t iFrameTime = (int64_t)1000 * 1 / 25; //m_Framerate.den / m_Framerate.num; /** @todo Fix this! */
-        CurSeg.offInfo = RTFileTell(m_Ebml.getFile());
-
-        LogFunc(("Info @ %RU64\n", CurSeg.offInfo));
-
-        char szMux[64];
-        RTStrPrintf(szMux, sizeof(szMux),
-#ifdef VBOX_WITH_LIBVPX
-                     "vpxenc%s", vpx_codec_version_str());
-#else
-                     "unknown");
-#endif
-        char szApp[64];
-        RTStrPrintf(szApp, sizeof(szApp), VBOX_PRODUCT " %sr%u", VBOX_VERSION_STRING, RTBldCfgRevision());
-
-        const uint64_t tcDuration = CurSeg.tcLastWriteMs - CurSeg.tcStartMs;
-
-        if (!CurSeg.lstCues.empty())
-        {
-            LogFunc(("tcDuration=%RU64\n", tcDuration));
-            AssertMsg(tcDuration, ("Segment seems to be empty\n"));
-        }
-
-        m_Ebml.subStart(MkvElem_Info)
-              .serializeUnsignedInteger(MkvElem_TimecodeScale, CurSeg.uTimecodeScaleFactor)
-              .serializeFloat(MkvElem_Segment_Duration, tcDuration)
-              .serializeString(MkvElem_MuxingApp, szMux)
-              .serializeString(MkvElem_WritingApp, szApp)
-              .subEnd(MkvElem_Info);
-    }
-};
-
-WebMWriter::WebMWriter(void)
-    : m_pImpl(new WebMWriter_Impl()) {}
-
-WebMWriter::~WebMWriter(void)
-{
-    if (m_pImpl)
-    {
-        Close();
-        delete m_pImpl;
-    }
-}
-
-int WebMWriter::CreateEx(const char *a_pszFilename, PRTFILE a_phFile,
-                         WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec)
-{
-    try
-    {
-        m_pImpl->m_enmAudioCodec = a_enmAudioCodec;
-        m_pImpl->m_enmVideoCodec = a_enmVideoCodec;
-
-        LogFunc(("Creating '%s'\n", a_pszFilename));
-
-        int rc = m_pImpl->m_Ebml.createEx(a_pszFilename, a_phFile);
-        if (RT_SUCCESS(rc))
-            rc = m_pImpl->writeHeader();
-    }
-    catch(int rc)
-    {
-        return rc;
-    }
-    return VINF_SUCCESS;
-}
-
-int WebMWriter::Create(const char *a_pszFilename, uint64_t a_fOpen,
-                       WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec)
-{
-    try
-    {
-        m_pImpl->m_enmAudioCodec = a_enmAudioCodec;
-        m_pImpl->m_enmVideoCodec = a_enmVideoCodec;
-
-        LogFunc(("Creating '%s'\n", a_pszFilename));
-
-        int rc = m_pImpl->m_Ebml.create(a_pszFilename, a_fOpen);
-        if (RT_SUCCESS(rc))
-            rc = m_pImpl->writeHeader();
-    }
-    catch(int rc)
-    {
-        return rc;
-    }
-    return VINF_SUCCESS;
-}
-
-int WebMWriter::Close(void)
-{
-    if (!m_pImpl->m_Ebml.isOpen())
-        return VINF_SUCCESS;
-
-    int rc = m_pImpl->writeFooter();
-    if (RT_SUCCESS(rc))
-        m_pImpl->close();
-
-    return rc;
-}
-
-int WebMWriter::AddAudioTrack(uint16_t uHz, uint8_t cChannels, uint8_t cBitDepth, uint8_t *puTrack)
-{
-    return m_pImpl->AddAudioTrack(uHz, cChannels, cBitDepth, puTrack);
-}
-
-int WebMWriter::AddVideoTrack(uint16_t uWidth, uint16_t uHeight, double dbFPS, uint8_t *puTrack)
-{
-    return m_pImpl->AddVideoTrack(uWidth, uHeight, dbFPS, puTrack);
-}
-
-int WebMWriter::WriteBlock(uint8_t uTrack, const void *pvData, size_t cbData)
-{
-    int rc;
-
-    try
-    {
-        rc = m_pImpl->WriteBlock(uTrack, pvData, cbData);
-    }
-    catch(int rc2)
-    {
-        rc = rc2;
-    }
-    return rc;
-}
-
-const Utf8Str& WebMWriter::GetFileName(void)
-{
-    return m_pImpl->m_Ebml.getFileName();
-}
-
-uint64_t WebMWriter::GetFileSize(void)
-{
-    return m_pImpl->m_Ebml.getFileSize();
-}
-
-uint64_t WebMWriter::GetAvailableSpace(void)
-{
-    return m_pImpl->m_Ebml.getAvailableSpace();
-}
-
diff --git a/src/VBox/Main/src-client/EbmlWriter.h b/src/VBox/Main/src-client/EbmlWriter.h
deleted file mode 100644
index 5467036..0000000
--- a/src/VBox/Main/src-client/EbmlWriter.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* $Id: EbmlWriter.h $ */
-/** @file
- * EbmlWriter.h - EBML writer + WebM container.
- */
-
-/*
- * Copyright (C) 2013-2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ____EBMLWRITER
-#define ____EBMLWRITER
-
-#ifdef VBOX_WITH_LIBVPX
-# ifdef _MSC_VER
-#  pragma warning(push)
-#  pragma warning(disable: 4668) /* vpx_codec.h(64) : warning C4668: '__GNUC__' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' */
-#  include <vpx/vpx_encoder.h>
-#  pragma warning(pop)
-# else
-#  include <vpx/vpx_encoder.h>
-# endif
-#endif /* VBOX_WITH_LIBVPX */
-
-#include <iprt/file.h>
-
-#include <VBox/com/string.h> /* For Utf8Str. */
-
-using namespace com;
-
-class WebMWriter_Impl;
-
-class WebMWriter
-{
-
-public:
-
-    /**
-     * Supported audio codecs.
-     */
-    enum AudioCodec
-    {
-        /** No audio codec specified. */
-        AudioCodec_None = 0,
-        /** Opus. */
-        AudioCodec_Opus = 1
-    };
-
-    /**
-     * Supported video codecs.
-     */
-    enum VideoCodec
-    {
-        /** No video codec specified. */
-        VideoCodec_None = 0,
-        /** VP8. */
-        VideoCodec_VP8  = 1
-    };
-
-#ifdef VBOX_WITH_LIBVPX
-    /**
-     * Block data for VP8-encoded video data.
-     */
-    struct BlockData_VP8
-    {
-        const vpx_codec_enc_cfg_t *pCfg;
-        const vpx_codec_cx_pkt_t  *pPkt;
-    };
-#endif /* VBOX_WITH_LIBVPX */
-
-#ifdef VBOX_WITH_LIBOPUS
-    /**
-     * Block data for Opus-encoded audio data.
-     */
-    struct BlockData_Opus
-    {
-        /** Pointer to encoded Opus audio data. */
-        const void *pvData;
-        /** Size (in bytes) of encoded Opus audio data. */
-        size_t      cbData;
-        /** Duration (in ms) of encoded Opus audio data. */
-        uint64_t    uDurationMs;
-    };
-#endif /* VBOX_WITH_LIBOPUS */
-
-public:
-
-    WebMWriter();
-    virtual ~WebMWriter();
-
-    /**
-     * Creates an output file using an already open file handle.
-     *
-     * @param   a_pszFilename   Name of the file the file handle points at.
-     * @param   a_phFile        Pointer to open file handle to use.
-     * @param   a_enmAudioCodec Audio codec to use.
-     * @param   a_enmVideoCodec Video codec to use.
-     *
-     * @returns VBox status code. */
-    int CreateEx(const char *a_pszFilename, PRTFILE a_phFile,
-                 WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec);
-
-    /**
-     * Creates an output file.
-     *
-     * @param   a_pszFilename   Name of the file to create.
-     * @param   a_fOpen         File open mode of type RTFILE_O_.
-     * @param   a_enmAudioCodec Audio codec to use.
-     * @param   a_enmVideoCodec Video codec to use.
-     *
-     * @returns VBox status code. */
-    int Create(const char *a_pszFilename, uint64_t a_fOpen,
-               WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec);
-
-    /** Closes output file. */
-    int Close(void);
-
-    int AddAudioTrack(uint16_t uHz, uint8_t cChannels, uint8_t cBits, uint8_t *puTrack);
-
-    int AddVideoTrack(uint16_t uWidth, uint16_t uHeight, double dbFPS, uint8_t *puTrack);
-
-    /**
-     * Writes a block of compressed data.
-     *
-     * @param uTrack            Track number to write data to.
-     * @param pvData            Pointer to block data to write.
-     * @param cbData            Size (in bytes) of block data to write.
-     *
-     * @returns VBox status code.
-     */
-    int WriteBlock(uint8_t uTrack, const void *pvData, size_t cbData);
-
-    /**
-     * Gets file name.
-     *
-     * @returns File name as UTF-8 string.
-     */
-    const Utf8Str& GetFileName(void);
-
-    /**
-     * Gets current output file size.
-     *
-     * @returns File size in bytes.
-     */
-    uint64_t GetFileSize(void);
-
-    /**
-     * Gets current free storage space available for the file.
-     *
-     * @returns Available storage free space.
-     */
-    uint64_t GetAvailableSpace(void);
-
-private:
-
-    /** WebMWriter implementation.
-     *  To isolate some include files. */
-    WebMWriter_Impl *m_pImpl;
-
-    DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(WebMWriter);
-};
-
-#endif /* !____EBMLWRITER */
diff --git a/src/VBox/Main/src-client/EmulatedUSBImpl.cpp b/src/VBox/Main/src-client/EmulatedUSBImpl.cpp
index c996ed8..8553f62 100644
--- a/src/VBox/Main/src-client/EmulatedUSBImpl.cpp
+++ b/src/VBox/Main/src-client/EmulatedUSBImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestCtrlImpl.cpp b/src/VBox/Main/src-client/GuestCtrlImpl.cpp
index ad7be60..3836fd1 100644
--- a/src/VBox/Main/src-client/GuestCtrlImpl.cpp
+++ b/src/VBox/Main/src-client/GuestCtrlImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestDirectoryImpl.cpp b/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
index 0943f82..a612a41 100644
--- a/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
+++ b/src/VBox/Main/src-client/GuestDirectoryImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestDnDPrivate.cpp b/src/VBox/Main/src-client/GuestDnDPrivate.cpp
index 8b74b9c..f4fac50 100644
--- a/src/VBox/Main/src-client/GuestDnDPrivate.cpp
+++ b/src/VBox/Main/src-client/GuestDnDPrivate.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestDnDSourceImpl.cpp b/src/VBox/Main/src-client/GuestDnDSourceImpl.cpp
index cdc29a2..cbbd0c8 100644
--- a/src/VBox/Main/src-client/GuestDnDSourceImpl.cpp
+++ b/src/VBox/Main/src-client/GuestDnDSourceImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp b/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp
index e18871c..f18cb1f 100644
--- a/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp
+++ b/src/VBox/Main/src-client/GuestDnDTargetImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestFileImpl.cpp b/src/VBox/Main/src-client/GuestFileImpl.cpp
index 25a2591..c68e592 100644
--- a/src/VBox/Main/src-client/GuestFileImpl.cpp
+++ b/src/VBox/Main/src-client/GuestFileImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp b/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp
index e882831..2d354e8 100644
--- a/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp
+++ b/src/VBox/Main/src-client/GuestFsObjInfoImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestImpl.cpp b/src/VBox/Main/src-client/GuestImpl.cpp
index 1dee9be..ad8fed7 100644
--- a/src/VBox/Main/src-client/GuestImpl.cpp
+++ b/src/VBox/Main/src-client/GuestImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestProcessImpl.cpp b/src/VBox/Main/src-client/GuestProcessImpl.cpp
index c4676ad..912d816 100644
--- a/src/VBox/Main/src-client/GuestProcessImpl.cpp
+++ b/src/VBox/Main/src-client/GuestProcessImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestSessionImpl.cpp b/src/VBox/Main/src-client/GuestSessionImpl.cpp
index 0833255..d6e2a3d 100644
--- a/src/VBox/Main/src-client/GuestSessionImpl.cpp
+++ b/src/VBox/Main/src-client/GuestSessionImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/GuestSessionImplTasks.cpp b/src/VBox/Main/src-client/GuestSessionImplTasks.cpp
index 99a49e9..97c1212 100644
--- a/src/VBox/Main/src-client/GuestSessionImplTasks.cpp
+++ b/src/VBox/Main/src-client/GuestSessionImplTasks.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/HGCM.cpp b/src/VBox/Main/src-client/HGCM.cpp
index 3ba0495..fb0f1f6 100644
--- a/src/VBox/Main/src-client/HGCM.cpp
+++ b/src/VBox/Main/src-client/HGCM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/HGCMObjects.cpp b/src/VBox/Main/src-client/HGCMObjects.cpp
index 39847fb..111cc6c 100644
--- a/src/VBox/Main/src-client/HGCMObjects.cpp
+++ b/src/VBox/Main/src-client/HGCMObjects.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/HGCMThread.cpp b/src/VBox/Main/src-client/HGCMThread.cpp
index 5f9f0fe..153a10e 100644
--- a/src/VBox/Main/src-client/HGCMThread.cpp
+++ b/src/VBox/Main/src-client/HGCMThread.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/KeyboardImpl.cpp b/src/VBox/Main/src-client/KeyboardImpl.cpp
index 15e7293..633af79 100644
--- a/src/VBox/Main/src-client/KeyboardImpl.cpp
+++ b/src/VBox/Main/src-client/KeyboardImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/MachineDebuggerImpl.cpp b/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
index 87af937..2584931 100644
--- a/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
+++ b/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/MouseImpl.cpp b/src/VBox/Main/src-client/MouseImpl.cpp
index 66dc52f..db3c3a5 100644
--- a/src/VBox/Main/src-client/MouseImpl.cpp
+++ b/src/VBox/Main/src-client/MouseImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/Nvram.cpp b/src/VBox/Main/src-client/Nvram.cpp
index d54e83f..0e6f22e 100644
--- a/src/VBox/Main/src-client/Nvram.cpp
+++ b/src/VBox/Main/src-client/Nvram.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/PCIRawDevImpl.cpp b/src/VBox/Main/src-client/PCIRawDevImpl.cpp
index f7e1a88..e33febd 100644
--- a/src/VBox/Main/src-client/PCIRawDevImpl.cpp
+++ b/src/VBox/Main/src-client/PCIRawDevImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/RemoteUSBBackend.cpp b/src/VBox/Main/src-client/RemoteUSBBackend.cpp
index b8acf5c..f95c054 100644
--- a/src/VBox/Main/src-client/RemoteUSBBackend.cpp
+++ b/src/VBox/Main/src-client/RemoteUSBBackend.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp b/src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp
index 1dd026c..4e6b3d7 100644
--- a/src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp
+++ b/src/VBox/Main/src-client/RemoteUSBDeviceImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/USBDeviceImpl.cpp b/src/VBox/Main/src-client/USBDeviceImpl.cpp
index 3d0a2ba..4058ca4 100644
--- a/src/VBox/Main/src-client/USBDeviceImpl.cpp
+++ b/src/VBox/Main/src-client/USBDeviceImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/UsbCardReader.cpp b/src/VBox/Main/src-client/UsbCardReader.cpp
index 7e01bad..4de6801 100644
--- a/src/VBox/Main/src-client/UsbCardReader.cpp
+++ b/src/VBox/Main/src-client/UsbCardReader.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/UsbWebcamInterface.cpp b/src/VBox/Main/src-client/UsbWebcamInterface.cpp
index 1bfc758..edc65b1 100644
--- a/src/VBox/Main/src-client/UsbWebcamInterface.cpp
+++ b/src/VBox/Main/src-client/UsbWebcamInterface.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/VMMDevInterface.cpp b/src/VBox/Main/src-client/VMMDevInterface.cpp
index ab6c0fa..5d39f98 100644
--- a/src/VBox/Main/src-client/VMMDevInterface.cpp
+++ b/src/VBox/Main/src-client/VMMDevInterface.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/VideoRec.cpp b/src/VBox/Main/src-client/VideoRec.cpp
index e2837b8..61e02ac 100644
--- a/src/VBox/Main/src-client/VideoRec.cpp
+++ b/src/VBox/Main/src-client/VideoRec.cpp
@@ -15,6 +15,9 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+#ifdef LOG_GROUP
+# undef LOG_GROUP
+#endif
 #define LOG_GROUP LOG_GROUP_MAIN_DISPLAY
 #include "LoggingNew.h"
 
@@ -31,7 +34,7 @@
 
 #include <VBox/com/VirtualBox.h>
 
-#include "EbmlWriter.h"
+#include "WebMWriter.h"
 #include "VideoRec.h"
 
 #ifdef VBOX_WITH_LIBVPX
@@ -203,6 +206,8 @@ typedef struct VIDEORECSTREAM
         VIDEORECVIDEOFRAME  Frame;
         bool                fHasVideoData;
 #endif
+        /** Number of failed attempts to encode the current video frame in a row. */
+        uint16_t            cFailedEncodingFrames;
     } Video;
 } VIDEORECSTREAM, *PVIDEORECSTREAM;
 
@@ -1040,9 +1045,11 @@ int VideoRecStreamInit(PVIDEORECCONTEXT pCtx, uint32_t uScreen)
     PVIDEORECCFG pCfg = &pCtx->Cfg;
 
     pStream->pCtx          = pCtx;
+
     /** @todo Make the following parameters configurable on a per-stream basis? */
-    pStream->Video.uWidth  = pCfg->Video.uWidth;
-    pStream->Video.uHeight = pCfg->Video.uHeight;
+    pStream->Video.uWidth                = pCfg->Video.uWidth;
+    pStream->Video.uHeight               = pCfg->Video.uHeight;
+    pStream->Video.cFailedEncodingFrames = 0;
 
 #ifndef VBOX_VIDEOREC_WITH_QUEUE
     /* When not using a queue, we only use one frame per stream at once.
@@ -1076,13 +1083,13 @@ int VideoRecStreamInit(PVIDEORECCONTEXT pCtx, uint32_t uScreen)
     {
         case VIDEORECDEST_FILE:
         {
-            rc = pStream->File.pWEBM->CreateEx(pStream->File.pszFile, &pStream->File.hFile,
+            rc = pStream->File.pWEBM->OpenEx(pStream->File.pszFile, &pStream->File.hFile,
 #ifdef VBOX_WITH_AUDIO_VIDEOREC
-                                               pCfg->Audio.fEnabled ? WebMWriter::AudioCodec_Opus : WebMWriter::AudioCodec_None,
+                                             pCfg->Audio.fEnabled ? WebMWriter::AudioCodec_Opus : WebMWriter::AudioCodec_None,
 #else
-                                               WebMWriter::AudioCodec_None,
+                                             WebMWriter::AudioCodec_None,
 #endif
-                                               pCfg->Video.fEnabled ? WebMWriter::VideoCodec_VP8 : WebMWriter::VideoCodec_None);
+                                             pCfg->Video.fEnabled ? WebMWriter::VideoCodec_VP8 : WebMWriter::VideoCodec_None);
             if (RT_FAILURE(rc))
             {
                 LogRel(("VideoRec: Failed to create the capture output file '%s' (%Rrc)\n", pStream->File.pszFile, rc));
@@ -1170,13 +1177,13 @@ int VideoRecStreamInit(PVIDEORECCONTEXT pCtx, uint32_t uScreen)
     rcv = vpx_codec_enc_init(&pVC->VPX.Ctx, DEFAULTCODEC, &pVC->VPX.Cfg, 0);
     if (rcv != VPX_CODEC_OK)
     {
-        LogFlow(("Failed to initialize VP8 encoder: %s\n", vpx_codec_err_to_string(rcv)));
+        LogRel(("VideoRec: Failed to initialize VP8 encoder: %s\n", vpx_codec_err_to_string(rcv)));
         return VERR_INVALID_PARAMETER;
     }
 
     if (!vpx_img_alloc(&pVC->VPX.RawImage, VPX_IMG_FMT_I420, pCfg->Video.uWidth, pCfg->Video.uHeight, 1))
     {
-        LogFlow(("Failed to allocate image %RU32x%RU32\n", pCfg->Video.uWidth, pCfg->Video.uHeight));
+        LogRel(("VideoRec: Failed to allocate image %RU32x%RU32\n", pCfg->Video.uWidth, pCfg->Video.uHeight));
         return VERR_NO_MEMORY;
     }
 
@@ -1296,7 +1303,7 @@ bool VideoRecIsLimitReached(PVIDEORECCONTEXT pCtx, uint32_t uScreen, uint64_t ts
 
         /* Check for available free disk space */
         if (   pStream->File.pWEBM
-            && pStream->File.pWEBM->GetAvailableSpace() < 0x100000) /**@todo r=andy WTF? Fix this. */
+            && pStream->File.pWEBM->GetAvailableSpace() < 0x100000) /** @todo r=andy WTF? Fix this. */
         {
             LogRel(("VideoRec: Not enough free storage space available, stopping video capture\n"));
             return true;
@@ -1334,10 +1341,15 @@ static int videoRecEncodeAndWrite(PVIDEORECSTREAM pStream, PVIDEORECVIDEOFRAME p
                                            pCfg->Video.Codec.VPX.uEncoderDeadline /* Quality setting */);
     if (rcv != VPX_CODEC_OK)
     {
-        LogFunc(("Failed to encode video frame: %s\n", vpx_codec_err_to_string(rcv)));
-        return VERR_GENERAL_FAILURE;
+        if (pStream->Video.cFailedEncodingFrames++ < 64)
+        {
+            LogRel(("VideoRec: Failed to encode video frame: %s\n", vpx_codec_err_to_string(rcv)));
+            return VERR_GENERAL_FAILURE;
+        }
     }
 
+    pStream->Video.cFailedEncodingFrames = 0;
+
     vpx_codec_iter_t iter = NULL;
     rc = VERR_NO_DATA;
     for (;;)
diff --git a/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp b/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp
index 024865e..63c87d6 100644
--- a/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp
+++ b/src/VBox/Main/src-client/VirtualBoxClientImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -66,179 +66,6 @@ void VirtualBoxClient::FinalRelease()
 // public initializer/uninitializer for internal purposes only
 /////////////////////////////////////////////////////////////////////////////
 
-#if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_SDS)
-
-HRESULT CreateVirtualBoxThroughSDS(ComPtr<IVirtualBox> &aVirtualBox, ComPtr<IToken> &aToken)
-{
-    ComPtr<IVirtualBoxSDS> aVirtualBoxSDS;
-    HRESULT hrc = CoCreateInstance(CLSID_VirtualBoxSDS, /* the VirtualBoxSDS object */
-                                   NULL,                /* no aggregation */
-                                   CLSCTX_LOCAL_SERVER, /* the object lives in the current process */
-                                   IID_IVirtualBoxSDS,  /* IID of the interface */
-                                   (void **)aVirtualBoxSDS.asOutParam());
-    AssertComRCReturn(hrc, hrc);
-
-    hrc = aVirtualBoxSDS->GetVirtualBox(aVirtualBox.asOutParam(), aToken.asOutParam());
-    AssertComRC(hrc);
-
-    return hrc;
-}
-
-
-int VirtualBoxClient::getServiceAccount(const wchar_t *pwszServiceName, wchar_t *pwszAccountName, size_t cwcAccountName)
-{
-    AssertPtr(pwszServiceName);
-    AssertPtr(pwszAccountName);
-    Assert(cwcAccountName);
-    *pwszAccountName = '\0';
-
-    int vrc;
-
-    // Get a handle to the SCM database.
-    SC_HANDLE hSCManager = OpenSCManagerW(NULL /*pwszMachineName*/, NULL /*pwszDatabaseName*/, SC_MANAGER_ALL_ACCESS);
-    if (hSCManager != NULL)
-    {
-        SC_HANDLE hService = OpenServiceW(hSCManager, pwszServiceName, SERVICE_QUERY_CONFIG);
-        if (hService != NULL)
-        {
-            DWORD cbNeeded = sizeof(QUERY_SERVICE_CONFIGW) + 256;
-            if (!QueryServiceConfigW(hService, NULL, 0, &cbNeeded))
-            {
-                Assert(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
-                LPQUERY_SERVICE_CONFIGW pSc = (LPQUERY_SERVICE_CONFIGW)RTMemTmpAllocZ(cbNeeded);
-                if (pSc)
-                {
-                    DWORD cbNeeded2 = 0;
-                    if (QueryServiceConfigW(hService, pSc, cbNeeded, &cbNeeded2))
-                    {
-                        vrc = RTUtf16Copy(pwszAccountName, cwcAccountName, pSc->lpServiceStartName);
-                        if (RT_FAILURE(vrc))
-                            LogRel(("Error: SDS service name is too long (%Rrc): %ls\n", vrc, pSc->lpServiceStartName));
-                    }
-                    else
-                    {
-                        int dwError = GetLastError();
-                        vrc = RTErrConvertFromWin32(dwError);
-                        LogRel(("Error: Failed querying service config: %Rwc (%u) -> %Rrc; cbNeeded=%d cbNeeded2=%d\n",
-                                dwError, dwError, vrc, cbNeeded, cbNeeded2));
-                    }
-                    RTMemTmpFree(pSc);
-                }
-                else
-                {
-                    LogRel(("Error: Failed allocating %#x bytes of memory for service config!\n", cbNeeded));
-                    vrc = VERR_NO_TMP_MEMORY;
-                }
-            }
-            else
-            {
-                AssertLogRelMsgFailed(("Error: QueryServiceConfigW returns success with zero buffer!\n"));
-                vrc = VERR_IPE_UNEXPECTED_STATUS;
-            }
-            CloseServiceHandle(hService);
-        }
-        else
-        {
-            int dwError = GetLastError();
-            vrc = RTErrConvertFromWin32(dwError);
-            LogRel(("Error: Could not open service: %Rwc (%u) -> %Rrc\n", dwError, dwError, vrc));
-        }
-        CloseServiceHandle(hSCManager);
-    }
-    else
-    {
-        int dwError = GetLastError();
-        vrc = RTErrConvertFromWin32(dwError);
-        LogRel(("Error: Could not open SCM: %Rwc (%u) -> %Rrc\n", dwError, dwError, vrc));
-    }
-    return vrc;
-}
-
-
-HRESULT VirtualBoxClient::isServiceDisabled(const wchar_t *pwszServiceName, bool* pOutIsDisabled)
-{
-    Assert(pOutIsDisabled);
-    Assert(pwszServiceName);
-    ComPtr<IWbemLocator> aLocator;
-    ComPtr<IWbemServices> aService;
-
-    HRESULT hr = CoCreateInstance(CLSID_WbemLocator, 0,
-        CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)aLocator.asOutParam());
-    if (FAILED(hr))
-    {
-        LogRel(("Error: Cannot instantiate WbemLocator: %Rhrc", hr));
-        return hr;
-    }
-
-    hr = aLocator->ConnectServer(
-        com::Bstr(L"ROOT\\CIMV2").raw(), // Object path of WMI namespace
-        NULL,                    // User name. NULL = current user
-        NULL,                    // User password. NULL = current
-        0,                       // Locale. NULL indicates current
-        NULL,                    // Security flags.
-        0,                       // Authority (for example, Kerberos)
-        0,                       // Context object
-        aService.asOutParam()    // pointer to IWbemServices proxy
-    );
-    if (FAILED(hr))
-    {
-        LogRel(("Error: Cannot connect to Wbem Service: %Rhrc\n", hr));
-        return hr;
-    }
-
-    // query settings for VBoxSDS windows service
-    ComPtr<IEnumWbemClassObject> aEnumerator;
-    hr = aService->ExecQuery(
-        com::Bstr("WQL").raw(),
-        com::BstrFmt("SELECT * FROM Win32_Service WHERE Name='%ls'", pwszServiceName).raw(),
-        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
-        NULL,
-        aEnumerator.asOutParam());
-    if (FAILED(hr) || aEnumerator == NULL)
-    {
-        LogRel(("Error: querying service settings from WMI: %Rhrc\n", hr));
-        return hr;
-    }
-
-    ULONG uReturn = 0;
-    ComPtr<IWbemClassObject> aVBoxSDSObj;
-    hr = aEnumerator->Next(WBEM_INFINITE, 1, aVBoxSDSObj.asOutParam(), &uReturn);
-    if (FAILED(hr))
-    {
-        LogRel(("Error: Cannot get Service WMI record: %Rhrc\n", hr));
-        return hr;
-    }
-    if (aVBoxSDSObj == NULL || uReturn == 0)
-    {
-        LogRel(("Error: Service record didn't exist in WMI: %Rhrc\n", hr));
-        return hr;
-    }
-
-    VARIANT vtProp;
-    VariantInit(&vtProp);
-
-    // Get "StartMode" property
-    hr = aVBoxSDSObj->Get(L"StartMode", 0, &vtProp, 0, 0);
-    if (FAILED(hr) || (vtProp.vt & VT_NULL) == VT_NULL)
-    {
-        LogRel(("Error: Didn't found StartMode property: %Rhrc\n", hr));
-        return hr;
-    }
-
-    Assert((vtProp.vt & VT_BSTR) == VT_BSTR);
-
-    *pOutIsDisabled = RTUtf16Cmp((RTUTF16*)vtProp.bstrVal,
-                                 (RTUTF16*)L"Disabled") == 0;
-
-    LogRel(("Service start mode is '%ls' \n", vtProp.bstrVal));
-
-    VariantClear(&vtProp);
-
-    return S_OK;
-}
-
-#endif
-
 /**
  * Initializes the VirtualBoxClient object.
  *
@@ -249,7 +76,7 @@ HRESULT VirtualBoxClient::init()
 
 #if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_SDS)
     // setup COM Security to enable impersonation
-    // This works for console Virtual Box clients, GUI has own security settings
+    // This works for console VirtualBox clients, GUI has own security settings
     //  For GUI Virtual Box it will be second call so can return TOO_LATE error
     HRESULT hrGUICoInitializeSecurity = CoInitializeSecurity(NULL,
                                                              -1,
@@ -282,17 +109,12 @@ HRESULT VirtualBoxClient::init()
     try
     {
         if (ASMAtomicIncU32(&g_cInstances) != 1)
-            AssertFailedStmt(throw setError(E_FAIL,
-                                            tr("Attempted to create more than one VirtualBoxClient instance")));
+            AssertFailedStmt(throw setError(E_FAIL, tr("Attempted to create more than one VirtualBoxClient instance")));
 
         mData.m_ThreadWatcher = NIL_RTTHREAD;
         mData.m_SemEvWatcher = NIL_RTSEMEVENT;
 
-#if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_SDS)
-        rc = CreateVirtualBoxThroughSDS(mData.m_pVirtualBox, mData.m_pToken);
-#else
         rc = mData.m_pVirtualBox.createLocalObject(CLSID_VirtualBox);
-#endif
         if (FAILED(rc))
 #ifdef RT_OS_WINDOWS
             throw i_investigateVirtualBoxObjectCreationFailure(rc);
@@ -307,11 +129,9 @@ HRESULT VirtualBoxClient::init()
             throw rc;
 
         rc = unconst(mData.m_pEventSource).createObject();
-        AssertComRCThrow(rc, setError(rc,
-                                      tr("Could not create EventSource for VirtualBoxClient")));
+        AssertComRCThrow(rc, setError(rc, tr("Could not create EventSource for VirtualBoxClient")));
         rc = mData.m_pEventSource->init();
-        AssertComRCThrow(rc, setError(rc,
-                                      tr("Could not initialize EventSource for VirtualBoxClient")));
+        AssertComRCThrow(rc, setError(rc, tr("Could not initialize EventSource for VirtualBoxClient")));
 
         /* HACK ALERT! This is for DllCanUnloadNow(). */
         s_cUnnecessaryAtlModuleLocks++;
@@ -324,9 +144,7 @@ HRESULT VirtualBoxClient::init()
         if (RT_FAILURE(vrc))
         {
             mData.m_SemEvWatcher = NIL_RTSEMEVENT;
-            AssertRCStmt(vrc, throw setError(VBOX_E_IPRT_ERROR,
-                                             tr("Failed to create semaphore (rc=%Rrc)"),
-                                             vrc));
+            AssertRCStmt(vrc, throw setError(VBOX_E_IPRT_ERROR, tr("Failed to create semaphore (rc=%Rrc)"), vrc));
         }
 
         vrc = RTThreadCreate(&mData.m_ThreadWatcher, SVCWatcherThread, this, 0,
@@ -335,9 +153,7 @@ HRESULT VirtualBoxClient::init()
         {
             RTSemEventDestroy(mData.m_SemEvWatcher);
             mData.m_SemEvWatcher = NIL_RTSEMEVENT;
-            AssertRCStmt(vrc, throw setError(VBOX_E_IPRT_ERROR,
-                                             tr("Failed to create watcher thread (rc=%Rrc)"),
-                                             vrc));
+            AssertRCStmt(vrc, throw setError(VBOX_E_IPRT_ERROR,  tr("Failed to create watcher thread (rc=%Rrc)"), vrc));
         }
     }
     catch (HRESULT err)
@@ -365,6 +181,7 @@ HRESULT VirtualBoxClient::init()
 }
 
 #ifdef RT_OS_WINDOWS
+
 /**
  * Looks into why we failed to create the VirtualBox object.
  *
@@ -373,6 +190,33 @@ HRESULT VirtualBoxClient::init()
  */
 HRESULT VirtualBoxClient::i_investigateVirtualBoxObjectCreationFailure(HRESULT hrcCaller)
 {
+    HRESULT hrc;
+
+# ifdef VBOX_WITH_SDS
+    /*
+     * Check that the VBoxSDS service is configured to run as LocalSystem and is enabled.
+     */
+    WCHAR    wszBuffer[256];
+    uint32_t uStartType;
+    int vrc = i_getServiceAccountAndStartType(L"VBoxSDS", wszBuffer, RT_ELEMENTS(wszBuffer), &uStartType);
+    if (RT_SUCCESS(vrc))
+    {
+        LogRelFunc(("VBoxSDS service is running under the '%ls' account with start type %u.\n", wszBuffer, uStartType));
+        if (RTUtf16Cmp(wszBuffer, L"LocalSystem") != 0)
+            return setError(hrcCaller,
+                            tr("VBoxSDS is misconfigured to run under the '%ls' account instead of the SYSTEM one.\n"
+                               "You can fix this by using the Windows Service Control Manager or by running\n"
+                               "'qc config VBoxSDS obj=LocalSystem' on a command line."),  wszBuffer);
+        if (uStartType == SERVICE_DISABLED)
+            return setError(hrcCaller,
+                            tr("The VBoxSDS windows service is disabled.\n"
+                               "To reenable the service, set it to 'Manual' startup type in the Windows Service\n"
+                               "management console, or run 'sc config VBoxSDS start=demand' on a command line"));
+    }
+    else
+        LogRelFunc(("VirtualBoxClient::i_getServiceAccount failed: %Rrc\n", vrc));
+# endif
+
     /*
      * First step is to try get an IUnknown interface of the VirtualBox object.
      *
@@ -381,66 +225,13 @@ HRESULT VirtualBoxClient::i_investigateVirtualBoxObjectCreationFailure(HRESULT h
      * registration is partially broken (though that's unlikely to happen these days).
      */
     IUnknown *pUnknown = NULL;
-
-# ifdef VBOX_WITH_SDS
-    // Check the VBOXSDS service running account name is SYSTEM
-    wchar_t wszBuffer[256];
-    int vrc = getServiceAccount(L"VBoxSDS", wszBuffer, RT_ELEMENTS(wszBuffer));
-    if (RT_FAILURE(vrc))
-        return setError(hrcCaller,
-                        tr("Failed to instantiate CLSID_VirtualBox using VBoxSDS: The VBoxSDS is unavailable: %Rrc"), vrc);
-
-    LogRelFunc(("VBoxSDS service is running under the '%ls' account.\n", wszBuffer));
-
-    if (RTUtf16Cmp(wszBuffer, L"LocalSystem") != 0)
-        return setError(hrcCaller,
-                        tr("VBoxSDS should be run under SYSTEM account, but it started under '%ls' account:\n"
-                           "Change VBoxSDS Windows Service Logon parameters in Service Control Manager. \n%Rhrc"),
-                        wszBuffer, hrcCaller);
-
-    bool fIsVBoxSDSDisabled = false;
-    HRESULT hrc = isServiceDisabled(L"VBoxSDS", &fIsVBoxSDSDisabled);
-    if (FAILED(hrc))
-    {
-        LogRelFunc(("Warning: Failed to get information about VBoxSDS using WMI:: %Rhrc & %Rhrc", hrcCaller, hrc));
-        fIsVBoxSDSDisabled = false;
-        //return setError(hrcCaller, tr("Failed to get information about VBoxSDS using WMI:: %Rhrc & %Rhrc"), hrcCaller, hrc);
-    }
-    if (fIsVBoxSDSDisabled)
-    {
-        return setError(hrcCaller,
-                        tr("Completely failed to instantiate CLSID_VirtualBox using VBoxSDS: "
-                           "VBoxSDS windows service disabled.\n"
-                           "Enable VBoxSDS Windows Service using Windows Service Management Console.\n %Rhrc"), hrcCaller);
-    }
-
-    // Check the VBoxSDS windows service is enabled
-    ComPtr<IVirtualBox> aVirtualBox;
-    ComPtr<IToken> aToken;
-    hrc = CreateVirtualBoxThroughSDS(aVirtualBox, aToken);
-    if (FAILED(hrc))
-    {
-        if (hrc == hrcCaller)
-            return setError(hrcCaller, tr("Completely failed to instantiate CLSID_VirtualBox using VBoxSDS: %Rhrc"), hrcCaller);
-        return setError(hrcCaller, tr("Completely failed to instantiate CLSID_VirtualBox using VBoxSDS: %Rhrc & %Rhrc"), hrcCaller, hrc);
-    }
-
-    hrc = aVirtualBox.queryInterfaceTo<IUnknown>(&pUnknown);
-    if (FAILED(hrc))
-    {
-        if (hrc == hrcCaller)
-            return setError(hrcCaller, tr("Completely failed to instantiate CLSID_VirtualBox using VBoxSDS: %Rhrc"), hrcCaller);
-        return setError(hrcCaller, tr("Completely failed to instantiate CLSID_VirtualBox using VBoxSDS: %Rhrc & %Rhrc"), hrcCaller, hrc);
-    }
-# else
-    HRESULT hrc = CoCreateInstance(CLSID_VirtualBox, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void **)&pUnknown);
+    hrc = CoCreateInstance(CLSID_VirtualBox, NULL, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void **)&pUnknown);
     if (FAILED(hrc))
     {
         if (hrc == hrcCaller)
             return setError(hrcCaller, tr("Completely failed to instantiate CLSID_VirtualBox: %Rhrc"), hrcCaller);
         return setError(hrcCaller, tr("Completely failed to instantiate CLSID_VirtualBox: %Rhrc & %Rhrc"), hrcCaller, hrc);
     }
-# endif
 
     /*
      * Try query the IVirtualBox interface (should fail), if it succeed we return
@@ -583,6 +374,90 @@ HRESULT VirtualBoxClient::i_investigateVirtualBoxObjectCreationFailure(HRESULT h
     pUnknown->Release();
     return hrcCaller;
 }
+
+# ifdef VBOX_WITH_SDS
+/**
+ * Gets the service account name and start type for the given service.
+ *
+ * @returns IPRT status code (for some reason).
+ * @param   pwszServiceName The name of the service.
+ * @param   pwszAccountName Where to return the account name.
+ * @param   cwcAccountName  The length of the account name buffer (in WCHARs).
+ * @param   puStartType     Where to return the start type.
+ */
+int VirtualBoxClient::i_getServiceAccountAndStartType(const wchar_t *pwszServiceName,
+                                                      wchar_t *pwszAccountName, size_t cwcAccountName, uint32_t *puStartType)
+{
+    AssertPtr(pwszServiceName);
+    AssertPtr(pwszAccountName);
+    Assert(cwcAccountName);
+    *pwszAccountName = '\0';
+    *puStartType     = SERVICE_DEMAND_START;
+
+    int vrc;
+
+    // Get a handle to the SCM database.
+    SC_HANDLE hSCManager = OpenSCManagerW(NULL /*pwszMachineName*/, NULL /*pwszDatabaseName*/, SC_MANAGER_CONNECT);
+    if (hSCManager != NULL)
+    {
+        SC_HANDLE hService = OpenServiceW(hSCManager, pwszServiceName, SERVICE_QUERY_CONFIG);
+        if (hService != NULL)
+        {
+            DWORD cbNeeded = sizeof(QUERY_SERVICE_CONFIGW) + _1K;
+            if (!QueryServiceConfigW(hService, NULL, 0, &cbNeeded))
+            {
+                Assert(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
+                LPQUERY_SERVICE_CONFIGW pSc = (LPQUERY_SERVICE_CONFIGW)RTMemTmpAllocZ(cbNeeded + _1K);
+                if (pSc)
+                {
+                    DWORD cbNeeded2 = 0;
+                    if (QueryServiceConfigW(hService, pSc, cbNeeded + _1K, &cbNeeded2))
+                    {
+                        *puStartType = pSc->dwStartType;
+                        vrc = RTUtf16Copy(pwszAccountName, cwcAccountName, pSc->lpServiceStartName);
+                        if (RT_FAILURE(vrc))
+                            LogRel(("Error: SDS service name is too long (%Rrc): %ls\n", vrc, pSc->lpServiceStartName));
+                    }
+                    else
+                    {
+                        int dwError = GetLastError();
+                        vrc = RTErrConvertFromWin32(dwError);
+                        LogRel(("Error: Failed querying service config: %Rwc (%u) -> %Rrc; cbNeeded=%d cbNeeded2=%d\n",
+                                dwError, dwError, vrc, cbNeeded, cbNeeded2));
+                    }
+                    RTMemTmpFree(pSc);
+                }
+                else
+                {
+                    LogRel(("Error: Failed allocating %#x bytes of memory for service config!\n", cbNeeded + _1K));
+                    vrc = VERR_NO_TMP_MEMORY;
+                }
+            }
+            else
+            {
+                AssertLogRelMsgFailed(("Error: QueryServiceConfigW returns success with zero buffer!\n"));
+                vrc = VERR_IPE_UNEXPECTED_STATUS;
+            }
+            CloseServiceHandle(hService);
+        }
+        else
+        {
+            int dwError = GetLastError();
+            vrc = RTErrConvertFromWin32(dwError);
+            LogRel(("Error: Could not open service: %Rwc (%u) -> %Rrc\n", dwError, dwError, vrc));
+        }
+        CloseServiceHandle(hSCManager);
+    }
+    else
+    {
+        int dwError = GetLastError();
+        vrc = RTErrConvertFromWin32(dwError);
+        LogRel(("Error: Could not open SCM: %Rwc (%u) -> %Rrc\n", dwError, dwError, vrc));
+    }
+    return vrc;
+}
+# endif /* VBOX_WITH_SDS */
+
 #endif /* RT_OS_WINDOWS */
 
 /**
@@ -696,7 +571,7 @@ HRESULT VirtualBoxClient::checkMachineError(const ComPtr<IMachine> &aMachine)
 /////////////////////////////////////////////////////////////////////////////
 
 
-// TODO: AM Add pinging of VBoxSDS
+/// @todo AM Add pinging of VBoxSDS
 /*static*/
 DECLCALLBACK(int) VirtualBoxClient::SVCWatcherThread(RTTHREAD ThreadSelf,
                                                      void *pvUser)
@@ -745,11 +620,7 @@ DECLCALLBACK(int) VirtualBoxClient::SVCWatcherThread(RTTHREAD ThreadSelf,
                  * and disk load. */
                 ComPtr<IVirtualBox> pVirtualBox;
                 ComPtr<IToken> pToken;
-#if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_SDS)
-                rc = CreateVirtualBoxThroughSDS(pVirtualBox, pToken);
-#else
                 rc = pVirtualBox.createLocalObject(CLSID_VirtualBox);
-#endif
                 if (FAILED(rc))
                     cMillies = 3 * VBOXCLIENT_DEFAULT_INTERVAL;
                 else
diff --git a/src/VBox/Main/src-client/WebMWriter.cpp b/src/VBox/Main/src-client/WebMWriter.cpp
new file mode 100644
index 0000000..887c5b7
--- /dev/null
+++ b/src/VBox/Main/src-client/WebMWriter.cpp
@@ -0,0 +1,857 @@
+/* $Id: WebMWriter.cpp $ */
+/** @file
+ * WebMWriter.cpp - WebM container handling.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+/**
+ * For more information, see:
+ * - https://w3c.github.io/media-source/webm-byte-stream-format.html
+ * - https://www.webmproject.org/docs/container/#muxer-guidelines
+ */
+
+#define LOG_GROUP LOG_GROUP_MAIN_DISPLAY
+#include "LoggingNew.h"
+
+#include <list>
+#include <map>
+#include <queue>
+#include <stack>
+
+#include <math.h> /* For lround.h. */
+
+#include <iprt/asm.h>
+#include <iprt/buildconfig.h>
+#include <iprt/cdefs.h>
+#include <iprt/critsect.h>
+#include <iprt/err.h>
+#include <iprt/file.h>
+#include <iprt/rand.h>
+#include <iprt/string.h>
+
+#include <VBox/log.h>
+#include <VBox/version.h>
+
+#include "WebMWriter.h"
+#include "EBML_MKV.h"
+
+
+WebMWriter::WebMWriter(void)
+{
+    /* Size (in bytes) of time code to write. We use 2 bytes (16 bit) by default. */
+    m_cbTimecode   = 2;
+    m_uTimecodeMax = UINT16_MAX;
+
+    m_fInTracksSection = false;
+}
+
+WebMWriter::~WebMWriter(void)
+{
+    close();
+}
+
+/**
+ * Opens (creates) an output file using an already open file handle.
+ *
+ * @returns VBox status code.
+ * @param   a_pszFilename   Name of the file the file handle points at.
+ * @param   a_phFile        Pointer to open file handle to use.
+ * @param   a_enmAudioCodec Audio codec to use.
+ * @param   a_enmVideoCodec Video codec to use.
+ */
+int WebMWriter::OpenEx(const char *a_pszFilename, PRTFILE a_phFile,
+                       WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec)
+{
+    try
+    {
+        m_enmAudioCodec = a_enmAudioCodec;
+        m_enmVideoCodec = a_enmVideoCodec;
+
+        LogFunc(("Creating '%s'\n", a_pszFilename));
+
+        int rc = createEx(a_pszFilename, a_phFile);
+        if (RT_SUCCESS(rc))
+        {
+            rc = init();
+            if (RT_SUCCESS(rc))
+                rc = writeHeader();
+        }
+    }
+    catch(int rc)
+    {
+        return rc;
+    }
+    return VINF_SUCCESS;
+}
+
+/**
+ * Opens an output file.
+ *
+ * @returns VBox status code.
+ * @param   a_pszFilename   Name of the file to create.
+ * @param   a_fOpen         File open mode of type RTFILE_O_.
+ * @param   a_enmAudioCodec Audio codec to use.
+ * @param   a_enmVideoCodec Video codec to use.
+ */
+int WebMWriter::Open(const char *a_pszFilename, uint64_t a_fOpen,
+                     WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec)
+{
+    try
+    {
+        m_enmAudioCodec = a_enmAudioCodec;
+        m_enmVideoCodec = a_enmVideoCodec;
+
+        LogFunc(("Creating '%s'\n", a_pszFilename));
+
+        int rc = create(a_pszFilename, a_fOpen);
+        if (RT_SUCCESS(rc))
+        {
+            rc = init();
+            if (RT_SUCCESS(rc))
+                rc = writeHeader();
+        }
+    }
+    catch(int rc)
+    {
+        return rc;
+    }
+    return VINF_SUCCESS;
+}
+
+/**
+ * Closes the WebM file and drains all queues.
+ *
+ * @returns IPRT status code.
+ */
+int WebMWriter::Close(void)
+{
+    if (!isOpen())
+        return VINF_SUCCESS;
+
+    LogFunc(("\n"));
+
+    /* Make sure to drain all queues. */
+    processQueues(&CurSeg.queueBlocks, true /* fForce */);
+
+    writeFooter();
+
+    WebMTracks::iterator itTrack = CurSeg.mapTracks.begin();
+    for (; itTrack != CurSeg.mapTracks.end(); ++itTrack)
+    {
+        WebMTrack *pTrack = itTrack->second;
+
+        delete pTrack;
+        CurSeg.mapTracks.erase(itTrack);
+    }
+
+    Assert(CurSeg.queueBlocks.Map.size() == 0);
+    Assert(CurSeg.mapTracks.size() == 0);
+
+    close();
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Adds an audio track.
+ *
+ * @returns IPRT status code.
+ * @param   uHz             Input sampling rate.
+ *                          Must be supported by the selected audio codec.
+ * @param   cChannels       Number of input audio channels.
+ * @param   cBits           Number of input bits per channel.
+ * @param   puTrack         Track number on successful creation. Optional.
+ */
+int WebMWriter::AddAudioTrack(uint16_t uHz, uint8_t cChannels, uint8_t cBits, uint8_t *puTrack)
+{
+#ifdef VBOX_WITH_LIBOPUS
+    int rc;
+
+    /*
+     * Check if the requested codec rate is supported.
+     *
+     * Only the following values are supported by an Opus standard build
+     * -- every other rate only is supported by a custom build.
+     */
+    switch (uHz)
+    {
+        case 48000:
+        case 24000:
+        case 16000:
+        case 12000:
+        case  8000:
+            rc = VINF_SUCCESS;
+            break;
+
+        default:
+            rc = VERR_NOT_SUPPORTED;
+            break;
+    }
+
+    if (RT_FAILURE(rc))
+        return rc;
+
+    const uint8_t uTrack = (uint8_t)CurSeg.mapTracks.size();
+
+    subStart(MkvElem_TrackEntry);
+
+    serializeUnsignedInteger(MkvElem_TrackNumber, (uint8_t)uTrack);
+    serializeString         (MkvElem_Language,    "und" /* "Undefined"; see ISO-639-2. */);
+    serializeUnsignedInteger(MkvElem_FlagLacing,  (uint8_t)0);
+
+    WebMTrack *pTrack = new WebMTrack(WebMTrackType_Audio, uTrack, RTFileTell(getFile()));
+
+    pTrack->Audio.uHz            = uHz;
+    pTrack->Audio.msPerBlock     = 20; /** Opus uses 20ms by default. Make this configurable? */
+    pTrack->Audio.framesPerBlock = uHz / (1000 /* s in ms */ / pTrack->Audio.msPerBlock);
+
+    WEBMOPUSPRIVDATA opusPrivData(uHz, cChannels);
+
+    LogFunc(("Opus @ %RU16Hz (%RU16ms + %RU16 frames per block)\n",
+             pTrack->Audio.uHz, pTrack->Audio.msPerBlock, pTrack->Audio.framesPerBlock));
+
+    serializeUnsignedInteger(MkvElem_TrackUID,     pTrack->uUUID, 4)
+          .serializeUnsignedInteger(MkvElem_TrackType,    2 /* Audio */)
+          .serializeString(MkvElem_CodecID,               "A_OPUS")
+          .serializeData(MkvElem_CodecPrivate,            &opusPrivData, sizeof(opusPrivData))
+          .serializeUnsignedInteger(MkvElem_CodecDelay,   0)
+          .serializeUnsignedInteger(MkvElem_SeekPreRoll,  80 * 1000000) /* 80ms in ns. */
+          .subStart(MkvElem_Audio)
+              .serializeFloat(MkvElem_SamplingFrequency,  (float)uHz)
+              .serializeUnsignedInteger(MkvElem_Channels, cChannels)
+              .serializeUnsignedInteger(MkvElem_BitDepth, cBits)
+          .subEnd(MkvElem_Audio)
+          .subEnd(MkvElem_TrackEntry);
+
+    CurSeg.mapTracks[uTrack] = pTrack;
+
+    if (puTrack)
+        *puTrack = uTrack;
+
+    return VINF_SUCCESS;
+#else
+    RT_NOREF(uHz, cChannels, cBits, puTrack);
+    return VERR_NOT_SUPPORTED;
+#endif
+}
+
+/**
+ * Adds a video track.
+ *
+ * @returns IPRT status code.
+ * @param   uWidth              Width (in pixels) of the video track.
+ * @param   uHeight             Height (in pixels) of the video track.
+ * @param   dbFPS               FPS (Frames Per Second) of the video track.
+ * @param   puTrack             Track number of the added video track on success. Optional.
+ */
+int WebMWriter::AddVideoTrack(uint16_t uWidth, uint16_t uHeight, double dbFPS, uint8_t *puTrack)
+{
+#ifdef VBOX_WITH_LIBVPX
+    RT_NOREF(dbFPS);
+
+    const uint8_t uTrack = (uint8_t)CurSeg.mapTracks.size();
+
+    subStart(MkvElem_TrackEntry);
+
+    serializeUnsignedInteger(MkvElem_TrackNumber, (uint8_t)uTrack);
+    serializeString         (MkvElem_Language,    "und" /* "Undefined"; see ISO-639-2. */);
+    serializeUnsignedInteger(MkvElem_FlagLacing,  (uint8_t)0);
+
+    WebMTrack *pTrack = new WebMTrack(WebMTrackType_Video, uTrack, RTFileTell(getFile()));
+
+    /** @todo Resolve codec type. */
+    serializeUnsignedInteger(MkvElem_TrackUID,    pTrack->uUUID /* UID */, 4)
+          .serializeUnsignedInteger(MkvElem_TrackType,   1 /* Video */)
+          .serializeString(MkvElem_CodecID,              "V_VP8")
+          .subStart(MkvElem_Video)
+              .serializeUnsignedInteger(MkvElem_PixelWidth,  uWidth)
+              .serializeUnsignedInteger(MkvElem_PixelHeight, uHeight)
+          .subEnd(MkvElem_Video);
+
+    subEnd(MkvElem_TrackEntry);
+
+    CurSeg.mapTracks[uTrack] = pTrack;
+
+    if (puTrack)
+        *puTrack = uTrack;
+
+    return VINF_SUCCESS;
+#else
+    RT_NOREF(uWidth, uHeight, dbFPS, puTrack);
+    return VERR_NOT_SUPPORTED;
+#endif
+}
+
+/**
+ * Gets file name.
+ *
+ * @returns File name as UTF-8 string.
+ */
+const Utf8Str& WebMWriter::GetFileName(void)
+{
+    return getFileName();
+}
+
+/**
+ * Gets current output file size.
+ *
+ * @returns File size in bytes.
+ */
+uint64_t WebMWriter::GetFileSize(void)
+{
+    return getFileSize();
+}
+
+/**
+ * Gets current free storage space available for the file.
+ *
+ * @returns Available storage free space.
+ */
+uint64_t WebMWriter::GetAvailableSpace(void)
+{
+    return getAvailableSpace();
+}
+
+/**
+ * Takes care of the initialization of the instance.
+ *
+ * @returns IPRT status code.
+ */
+int WebMWriter::init(void)
+{
+    return CurSeg.init();
+}
+
+/**
+ * Takes care of the destruction of the instance.
+ */
+void WebMWriter::destroy(void)
+{
+    CurSeg.destroy();
+}
+
+/**
+ * Writes the WebM file header.
+ *
+ * @returns IPRT status code.
+ */
+int WebMWriter::writeHeader(void)
+{
+    LogFunc(("Header @ %RU64\n", RTFileTell(getFile())));
+
+    subStart(MkvElem_EBML)
+          .serializeUnsignedInteger(MkvElem_EBMLVersion, 1)
+          .serializeUnsignedInteger(MkvElem_EBMLReadVersion, 1)
+          .serializeUnsignedInteger(MkvElem_EBMLMaxIDLength, 4)
+          .serializeUnsignedInteger(MkvElem_EBMLMaxSizeLength, 8)
+          .serializeString(MkvElem_DocType, "webm")
+          .serializeUnsignedInteger(MkvElem_DocTypeVersion, 2)
+          .serializeUnsignedInteger(MkvElem_DocTypeReadVersion, 2)
+          .subEnd(MkvElem_EBML);
+
+    subStart(MkvElem_Segment);
+
+    /* Save offset of current segment. */
+    CurSeg.offStart = RTFileTell(getFile());
+
+    writeSegSeekInfo();
+
+    /* Save offset of upcoming tracks segment. */
+    CurSeg.offTracks = RTFileTell(getFile());
+
+    /* The tracks segment starts right after this header. */
+    subStart(MkvElem_Tracks);
+    m_fInTracksSection = true;
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Writes a simple block into the EBML structure.
+ *
+ * @returns IPRT status code.
+ * @param   a_pTrack        Track the simple block is assigned to.
+ * @param   a_pBlock        Simple block to write.
+ */
+int WebMWriter::writeSimpleBlockEBML(WebMTrack *a_pTrack, WebMSimpleBlock *a_pBlock)
+{
+#ifdef LOG_ENABLED
+    WebMCluster &Cluster = CurSeg.CurCluster;
+
+    Log3Func(("[T%RU8C%RU64] Off=%RU64, PTS=%RU16, RelToClusterMs=%RU16, %zu bytes\n",
+              a_pTrack->uTrack, Cluster.uID, RTFileTell(getFile()),
+              a_pBlock->Data.tcPTSMs, a_pBlock->Data.tcRelToClusterMs, a_pBlock->Data.cb));
+#endif
+    /*
+     * Write a "Simple Block".
+     */
+    writeClassId(MkvElem_SimpleBlock);
+    /* Block size. */
+    writeUnsignedInteger(0x10000000u | (  1                 /* Track number size. */
+                                               + m_cbTimecode      /* Timecode size .*/
+                                               + 1                 /* Flags size. */
+                                               + a_pBlock->Data.cb /* Actual frame data size. */),  4);
+    /* Track number. */
+    writeSize(a_pTrack->uTrack);
+    /* Timecode (relative to cluster opening timecode). */
+    writeUnsignedInteger(a_pBlock->Data.tcRelToClusterMs, m_cbTimecode);
+    /* Flags. */
+    writeUnsignedInteger(a_pBlock->Data.fFlags, 1);
+    /* Frame data. */
+    write(a_pBlock->Data.pv, a_pBlock->Data.cb);
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Writes a simple block and enqueues it into the segment's render queue.
+ *
+ * @returns IPRT status code.
+ * @param   a_pTrack        Track the simple block is assigned to.
+ * @param   a_pBlock        Simple block to write and enqueue.
+ */
+int WebMWriter::writeSimpleBlockQueued(WebMTrack *a_pTrack, WebMSimpleBlock *a_pBlock)
+{
+    RT_NOREF(a_pTrack);
+
+    int rc = VINF_SUCCESS;
+
+    try
+    {
+        const WebMTimecode tcMap = a_pBlock->Data.tcPTSMs;
+
+        /* See if we already have an entry for the specified timecode in our queue. */
+        WebMBlockMap::iterator itQueue = CurSeg.queueBlocks.Map.find(tcMap);
+        if (itQueue != CurSeg.queueBlocks.Map.end()) /* Use existing queue. */
+        {
+            WebMTimecodeBlocks &Blocks = itQueue->second;
+            Blocks.Enqueue(a_pBlock);
+        }
+        else /* Create a new timecode entry. */
+        {
+            WebMTimecodeBlocks Blocks;
+            Blocks.Enqueue(a_pBlock);
+
+            CurSeg.queueBlocks.Map[tcMap] = Blocks;
+        }
+
+        processQueues(&CurSeg.queueBlocks, false /* fForce */);
+    }
+    catch(...)
+    {
+        delete a_pBlock;
+        a_pBlock = NULL;
+
+        rc = VERR_NO_MEMORY;
+    }
+
+    return rc;
+}
+
+#ifdef VBOX_WITH_LIBVPX
+/**
+ * Writes VPX (VP8 video) simple data block.
+ *
+ * @returns IPRT status code.
+ * @param   a_pTrack        Track ID to write data to.
+ * @param   a_pCfg          VPX encoder configuration to use.
+ * @param   a_pPkt          VPX packet video data packet to write.
+ */
+int WebMWriter::writeSimpleBlockVP8(WebMTrack *a_pTrack, const vpx_codec_enc_cfg_t *a_pCfg, const vpx_codec_cx_pkt_t *a_pPkt)
+{
+    RT_NOREF(a_pTrack);
+
+    /* Calculate the PTS of this frame (in ms). */
+    WebMTimecode tcPTSMs = a_pPkt->data.frame.pts * 1000
+                         * (uint64_t) a_pCfg->g_timebase.num / a_pCfg->g_timebase.den;
+
+    if (   tcPTSMs
+        && tcPTSMs <= a_pTrack->tcLastWrittenMs)
+    {
+        tcPTSMs = a_pTrack->tcLastWrittenMs + 1;
+    }
+
+    const bool fKeyframe = RT_BOOL(a_pPkt->data.frame.flags & VPX_FRAME_IS_KEY);
+
+    uint8_t fFlags = VBOX_WEBM_BLOCK_FLAG_NONE;
+    if (fKeyframe)
+        fFlags |= VBOX_WEBM_BLOCK_FLAG_KEY_FRAME;
+    if (a_pPkt->data.frame.flags & VPX_FRAME_IS_INVISIBLE)
+        fFlags |= VBOX_WEBM_BLOCK_FLAG_INVISIBLE;
+
+    return writeSimpleBlockQueued(a_pTrack,
+                                  new WebMSimpleBlock(a_pTrack,
+                                                      tcPTSMs, a_pPkt->data.frame.buf, a_pPkt->data.frame.sz, fFlags));
+}
+#endif /* VBOX_WITH_LIBVPX */
+
+#ifdef VBOX_WITH_LIBOPUS
+/**
+ * Writes an Opus (audio) simple data block.
+ *
+ * @returns IPRT status code.
+ * @param   a_pTrack        Track ID to write data to.
+ * @param   pvData          Pointer to simple data block to write.
+ * @param   cbData          Size (in bytes) of simple data block to write.
+ * @param   uPTSMs          PTS of simple data block.
+ *
+ * @remarks Audio blocks that have same absolute timecode as video blocks SHOULD be written before the video blocks.
+ */
+int WebMWriter::writeSimpleBlockOpus(WebMTrack *a_pTrack, const void *pvData, size_t cbData, WebMTimecode uPTSMs)
+{
+    AssertPtrReturn(a_pTrack, VERR_INVALID_POINTER);
+    AssertPtrReturn(pvData,   VERR_INVALID_POINTER);
+    AssertReturn(cbData,      VERR_INVALID_PARAMETER);
+
+    /* Every Opus frame is a key frame. */
+    const uint8_t fFlags = VBOX_WEBM_BLOCK_FLAG_KEY_FRAME;
+
+    return writeSimpleBlockQueued(a_pTrack,
+                                  new WebMSimpleBlock(a_pTrack,
+                                                      uPTSMs, pvData, cbData, fFlags));
+}
+#endif /* VBOX_WITH_LIBOPUS */
+
+/**
+ * Writes a data block to the specified track.
+ *
+ * @returns IPRT status code.
+ * @param   uTrack          Track ID to write data to.
+ * @param   pvData          Pointer to data block to write.
+ * @param   cbData          Size (in bytes) of data block to write.
+ */
+int WebMWriter::WriteBlock(uint8_t uTrack, const void *pvData, size_t cbData)
+{
+    RT_NOREF(cbData); /* Only needed for assertions for now. */
+
+    int rc = RTCritSectEnter(&CurSeg.CritSect);
+    AssertRC(rc);
+
+    WebMTracks::iterator itTrack = CurSeg.mapTracks.find(uTrack);
+    if (itTrack == CurSeg.mapTracks.end())
+    {
+        RTCritSectLeave(&CurSeg.CritSect);
+        return VERR_NOT_FOUND;
+    }
+
+    WebMTrack *pTrack = itTrack->second;
+    AssertPtr(pTrack);
+
+    if (m_fInTracksSection)
+    {
+        subEnd(MkvElem_Tracks);
+        m_fInTracksSection = false;
+    }
+
+    switch (pTrack->enmType)
+    {
+
+        case WebMTrackType_Audio:
+        {
+#ifdef VBOX_WITH_LIBOPUS
+            if (m_enmAudioCodec == WebMWriter::AudioCodec_Opus)
+            {
+                Assert(cbData == sizeof(WebMWriter::BlockData_Opus));
+                WebMWriter::BlockData_Opus *pData = (WebMWriter::BlockData_Opus *)pvData;
+                rc = writeSimpleBlockOpus(pTrack, pData->pvData, pData->cbData, pData->uPTSMs);
+            }
+            else
+#endif /* VBOX_WITH_LIBOPUS */
+                rc = VERR_NOT_SUPPORTED;
+            break;
+        }
+
+        case WebMTrackType_Video:
+        {
+#ifdef VBOX_WITH_LIBVPX
+            if (m_enmVideoCodec == WebMWriter::VideoCodec_VP8)
+            {
+                Assert(cbData == sizeof(WebMWriter::BlockData_VP8));
+                WebMWriter::BlockData_VP8 *pData = (WebMWriter::BlockData_VP8 *)pvData;
+                rc = writeSimpleBlockVP8(pTrack, pData->pCfg, pData->pPkt);
+            }
+            else
+#endif /* VBOX_WITH_LIBVPX */
+                rc = VERR_NOT_SUPPORTED;
+            break;
+        }
+
+        default:
+            rc = VERR_NOT_SUPPORTED;
+            break;
+    }
+
+    int rc2 = RTCritSectLeave(&CurSeg.CritSect);
+    AssertRC(rc2);
+
+    return rc;
+}
+
+/**
+ * Processes a render queue.
+ *
+ * @returns IPRT status code.
+ * @param   pQueue          Queue to process.
+ * @param   fForce          Whether forcing to process the render queue or not.
+ *                          Needed to drain the queues when terminating.
+ */
+int WebMWriter::processQueues(WebMQueue *pQueue, bool fForce)
+{
+    if (pQueue->tslastProcessedMs == 0)
+        pQueue->tslastProcessedMs = RTTimeMilliTS();
+
+    if (!fForce)
+    {
+        /* Only process when we reached a certain threshold. */
+        if (RTTimeMilliTS() - pQueue->tslastProcessedMs < 5000 /* ms */ /** @todo Make this configurable */)
+            return VINF_SUCCESS;
+    }
+
+    WebMCluster &Cluster = CurSeg.CurCluster;
+
+    /* Iterate through the block map. */
+    WebMBlockMap::iterator it = pQueue->Map.begin();
+    while (it != CurSeg.queueBlocks.Map.end())
+    {
+        WebMTimecode       mapTC     = it->first;
+        RT_NOREF(mapTC);
+        WebMTimecodeBlocks mapBlocks = it->second;
+
+        /* Whether to start a new cluster or not. */
+        bool fClusterStart = false;
+
+        /* No blocks written yet? Start a new cluster. */
+        if (Cluster.cBlocks == 0)
+            fClusterStart = true;
+
+        /* Did we reach the maximum a cluster can hold? Use a new cluster then. */
+        if (mapTC - Cluster.tcStartMs > VBOX_WEBM_CLUSTER_MAX_LEN_MS)
+            fClusterStart = true;
+
+        /* If the block map indicates that a cluster is needed for this timecode, create one. */
+        if (mapBlocks.fClusterNeeded)
+            fClusterStart = true;
+
+        if (   fClusterStart
+            && !mapBlocks.fClusterStarted)
+        {
+            if (Cluster.fOpen) /* Close current cluster first. */
+            {
+                /* Make sure that the current cluster contained some data.  */
+                Assert(Cluster.offStart);
+                Assert(Cluster.cBlocks);
+
+                subEnd(MkvElem_Cluster);
+                Cluster.fOpen = false;
+            }
+
+            Cluster.fOpen     = true;
+            Cluster.uID       = CurSeg.cClusters;
+            Cluster.tcStartMs = mapTC;
+            Cluster.offStart  = RTFileTell(getFile());
+            Cluster.cBlocks   = 0;
+
+            if (CurSeg.cClusters)
+                AssertMsg(Cluster.tcStartMs, ("[C%RU64] @ %RU64 starting timecode is 0 which is invalid\n",
+                                              Cluster.uID, Cluster.offStart));
+
+            Log2Func(("[C%RU64] Start @ %RU64ms (map TC is %RU64) / %RU64 bytes\n",
+                      Cluster.uID, Cluster.tcStartMs, mapTC, Cluster.offStart));
+
+            subStart(MkvElem_Cluster)
+                  .serializeUnsignedInteger(MkvElem_Timecode, Cluster.tcStartMs);
+
+            CurSeg.cClusters++;
+
+            mapBlocks.fClusterStarted = true;
+        }
+
+        /* Iterate through all blocks related to the current timecode. */
+        while (!mapBlocks.Queue.empty())
+        {
+            WebMSimpleBlock *pBlock = mapBlocks.Queue.front();
+            AssertPtr(pBlock);
+
+            WebMTrack       *pTrack = pBlock->pTrack;
+            AssertPtr(pTrack);
+
+            /* Calculate the block's relative time code to the current cluster's starting time code. */
+            Assert(pBlock->Data.tcPTSMs >= Cluster.tcStartMs);
+            pBlock->Data.tcRelToClusterMs = pBlock->Data.tcPTSMs - Cluster.tcStartMs;
+
+            int rc2 = writeSimpleBlockEBML(pTrack, pBlock);
+            AssertRC(rc2);
+
+            Cluster.cBlocks++;
+
+            pTrack->cTotalBlocks++;
+            pTrack->tcLastWrittenMs = pBlock->Data.tcPTSMs;
+
+            if (CurSeg.tcLastWrittenMs < pTrack->tcLastWrittenMs)
+                CurSeg.tcLastWrittenMs = pTrack->tcLastWrittenMs;
+
+            /* Save a cue point if this is a keyframe. */
+            if (pBlock->Data.fFlags & VBOX_WEBM_BLOCK_FLAG_KEY_FRAME)
+            {
+                WebMCuePoint cue(pBlock->pTrack, Cluster.offStart, pBlock->Data.tcPTSMs);
+                CurSeg.lstCues.push_back(cue);
+            }
+
+            delete pBlock;
+            pBlock = NULL;
+
+            mapBlocks.Queue.pop();
+        }
+
+        Assert(mapBlocks.Queue.empty());
+
+        CurSeg.queueBlocks.Map.erase(it);
+
+        it = CurSeg.queueBlocks.Map.begin();
+    }
+
+    Assert(CurSeg.queueBlocks.Map.empty());
+
+    pQueue->tslastProcessedMs = RTTimeMilliTS();
+
+    return VINF_SUCCESS;
+}
+
+/**
+ * Writes the WebM footer.
+ *
+ * @returns IPRT status code.
+ */
+int WebMWriter::writeFooter(void)
+{
+    AssertReturn(isOpen(), VERR_WRONG_ORDER);
+
+    if (m_fInTracksSection)
+    {
+        subEnd(MkvElem_Tracks);
+        m_fInTracksSection = false;
+    }
+
+    if (CurSeg.CurCluster.fOpen)
+    {
+        subEnd(MkvElem_Cluster);
+        CurSeg.CurCluster.fOpen = false;
+    }
+
+    /*
+     * Write Cues element.
+     */
+    LogFunc(("Cues @ %RU64\n", RTFileTell(getFile())));
+
+    CurSeg.offCues = RTFileTell(getFile());
+
+    subStart(MkvElem_Cues);
+
+    std::list<WebMCuePoint>::iterator itCuePoint = CurSeg.lstCues.begin();
+    while (itCuePoint != CurSeg.lstCues.end())
+    {
+        /* Sanity. */
+        AssertPtr(itCuePoint->pTrack);
+
+        LogFunc(("CuePoint @ %RU64: Track #%RU8 (Cluster @ %RU64, TC %RU64)\n",
+                 RTFileTell(getFile()), itCuePoint->pTrack->uTrack,
+                 itCuePoint->offCluster, itCuePoint->tcAbs));
+
+        subStart(MkvElem_CuePoint)
+                  .serializeUnsignedInteger(MkvElem_CueTime,                itCuePoint->tcAbs)
+                  .subStart(MkvElem_CueTrackPositions)
+                      .serializeUnsignedInteger(MkvElem_CueTrack,           itCuePoint->pTrack->uTrack)
+                      .serializeUnsignedInteger(MkvElem_CueClusterPosition, itCuePoint->offCluster, 8)
+              .subEnd(MkvElem_CueTrackPositions)
+              .subEnd(MkvElem_CuePoint);
+
+        itCuePoint++;
+    }
+
+    subEnd(MkvElem_Cues);
+    subEnd(MkvElem_Segment);
+
+    /*
+     * Re-Update SeekHead / Info elements.
+     */
+
+    writeSegSeekInfo();
+
+    return RTFileSeek(getFile(), 0, RTFILE_SEEK_END, NULL);
+}
+
+/**
+ * Writes the segment's seek information and cue points.
+ */
+void WebMWriter::writeSegSeekInfo(void)
+{
+    if (CurSeg.offSeekInfo)
+        RTFileSeek(getFile(), CurSeg.offSeekInfo, RTFILE_SEEK_BEGIN, NULL);
+    else
+        CurSeg.offSeekInfo = RTFileTell(getFile());
+
+    LogFunc(("SeekHead @ %RU64\n", CurSeg.offSeekInfo));
+
+    subStart(MkvElem_SeekHead);
+
+    subStart(MkvElem_Seek)
+          .serializeUnsignedInteger(MkvElem_SeekID, MkvElem_Tracks)
+          .serializeUnsignedInteger(MkvElem_SeekPosition, CurSeg.offTracks - CurSeg.offStart, 8)
+          .subEnd(MkvElem_Seek);
+
+    Assert(CurSeg.offCues - CurSeg.offStart > 0); /* Sanity. */
+
+    subStart(MkvElem_Seek)
+          .serializeUnsignedInteger(MkvElem_SeekID, MkvElem_Cues)
+          .serializeUnsignedInteger(MkvElem_SeekPosition, CurSeg.offCues - CurSeg.offStart, 8)
+          .subEnd(MkvElem_Seek);
+
+    subStart(MkvElem_Seek)
+          .serializeUnsignedInteger(MkvElem_SeekID, MkvElem_Info)
+          .serializeUnsignedInteger(MkvElem_SeekPosition, CurSeg.offInfo - CurSeg.offStart, 8)
+          .subEnd(MkvElem_Seek);
+
+    subEnd(MkvElem_SeekHead);
+
+    //int64_t iFrameTime = (int64_t)1000 * 1 / 25; //m_Framerate.den / m_Framerate.num; /** @todo Fix this! */
+    CurSeg.offInfo = RTFileTell(getFile());
+
+    LogFunc(("Info @ %RU64\n", CurSeg.offInfo));
+
+    char szMux[64];
+    RTStrPrintf(szMux, sizeof(szMux),
+#ifdef VBOX_WITH_LIBVPX
+                 "vpxenc%s", vpx_codec_version_str());
+#else
+                 "unknown");
+#endif
+    char szApp[64];
+    RTStrPrintf(szApp, sizeof(szApp), VBOX_PRODUCT " %sr%u", VBOX_VERSION_STRING, RTBldCfgRevision());
+
+    const WebMTimecode tcDuration = CurSeg.tcLastWrittenMs - CurSeg.tcStartMs;
+
+    if (!CurSeg.lstCues.empty())
+    {
+        LogFunc(("tcDuration=%RU64\n", tcDuration));
+        AssertMsg(tcDuration, ("Segment seems to be empty\n"));
+    }
+
+    subStart(MkvElem_Info)
+          .serializeUnsignedInteger(MkvElem_TimecodeScale, CurSeg.uTimecodeScaleFactor)
+          .serializeFloat(MkvElem_Segment_Duration, tcDuration)
+          .serializeString(MkvElem_MuxingApp, szMux)
+          .serializeString(MkvElem_WritingApp, szApp)
+          .subEnd(MkvElem_Info);
+}
+
diff --git a/src/VBox/Main/src-client/WebMWriter.h b/src/VBox/Main/src-client/WebMWriter.h
new file mode 100644
index 0000000..3bc2c10
--- /dev/null
+++ b/src/VBox/Main/src-client/WebMWriter.h
@@ -0,0 +1,499 @@
+/* $Id: WebMWriter.h $ */
+/** @file
+ * WebMWriter.h - WebM container handling.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ____WEBMWRITER
+#define ____WEBMWRITER
+
+#include "EBMLWriter.h"
+
+#ifdef VBOX_WITH_LIBVPX
+# ifdef _MSC_VER
+#  pragma warning(push)
+#  pragma warning(disable: 4668) /* vpx_codec.h(64) : warning C4668: '__GNUC__' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' */
+#  include <vpx/vpx_encoder.h>
+#  pragma warning(pop)
+# else
+#  include <vpx/vpx_encoder.h>
+# endif
+#endif /* VBOX_WITH_LIBVPX */
+
+/** No flags specified. */
+#define VBOX_WEBM_BLOCK_FLAG_NONE           0
+/** Invisible block which can be skipped. */
+#define VBOX_WEBM_BLOCK_FLAG_INVISIBLE      0x08
+/** The block marks a key frame. */
+#define VBOX_WEBM_BLOCK_FLAG_KEY_FRAME      0x80
+
+/** The default timecode scale factor for WebM -- all timecodes in the segments are expressed in ms.
+ *  This allows every cluster to have blocks with positive values up to 32.767 seconds. */
+#define VBOX_WEBM_TIMECODESCALE_FACTOR_MS   1000000
+
+/** Maximum time (in ms) a cluster can store. */
+#define VBOX_WEBM_CLUSTER_MAX_LEN_MS        INT16_MAX
+
+/** Maximum time a block can store.
+ *  With signed 16-bit timecodes and a default timecode scale of 1ms per unit this makes 65536ms. */
+#define VBOX_WEBM_BLOCK_MAX_LEN_MS          UINT16_MAX
+
+#ifdef VBOX_WITH_LIBOPUS
+# pragma pack(push)
+# pragma pack(1)
+    /** Opus codec private data within the MKV (WEBM) container.
+     *  Taken from: https://wiki.xiph.org/MatroskaOpus */
+    typedef struct WEBMOPUSPRIVDATA
+    {
+        WEBMOPUSPRIVDATA(uint32_t a_u32SampleRate, uint8_t a_u8Channels)
+        {
+            au64Head        = RT_MAKE_U64_FROM_U8('O', 'p', 'u', 's', 'H', 'e', 'a', 'd');
+            u8Version       = 1;
+            u8Channels      = a_u8Channels;
+            u16PreSkip      = 0;
+            u32SampleRate   = a_u32SampleRate;
+            u16Gain         = 0;
+            u8MappingFamily = 0;
+        }
+
+        uint64_t au64Head;          /**< Defaults to "OpusHead". */
+        uint8_t  u8Version;         /**< Must be set to 1. */
+        uint8_t  u8Channels;
+        uint16_t u16PreSkip;
+        /** Sample rate *before* encoding to Opus.
+         *  Note: This rate has nothing to do with the playback rate later! */
+        uint32_t u32SampleRate;
+        uint16_t u16Gain;
+        /** Must stay 0 -- otherwise a mapping table must be appended
+         *  right after this header. */
+        uint8_t  u8MappingFamily;
+    } WEBMOPUSPRIVDATA, *PWEBMOPUSPRIVDATA;
+    AssertCompileSize(WEBMOPUSPRIVDATA, 19);
+# pragma pack(pop)
+#endif /* VBOX_WITH_LIBOPUS */
+
+using namespace com;
+
+class WebMWriter : public EBMLWriter
+{
+
+public:
+
+    /** Defines a WebM timecode. */
+    typedef uint16_t WebMTimecode;
+
+    /** Defines the WebM block flags data type. */
+    typedef uint8_t  WebMBlockFlags;
+
+    /**
+     * Supported audio codecs.
+     */
+    enum AudioCodec
+    {
+        /** No audio codec specified. */
+        AudioCodec_None = 0,
+        /** Opus. */
+        AudioCodec_Opus = 1
+    };
+
+    /**
+     * Supported video codecs.
+     */
+    enum VideoCodec
+    {
+        /** No video codec specified. */
+        VideoCodec_None = 0,
+        /** VP8. */
+        VideoCodec_VP8  = 1
+    };
+
+    /**
+     * Track type enumeration.
+     */
+    enum WebMTrackType
+    {
+        /** Unknown / invalid type. */
+        WebMTrackType_Invalid     = 0,
+        /** Only writes audio. */
+        WebMTrackType_Audio       = 1,
+        /** Only writes video. */
+        WebMTrackType_Video       = 2
+    };
+
+    struct WebMTrack;
+
+    /**
+     * Structure for defining a WebM simple block.
+     */
+    struct WebMSimpleBlock
+    {
+        WebMSimpleBlock(WebMTrack *a_pTrack,
+                        WebMTimecode a_tcPTSMs, const void *a_pvData, size_t a_cbData, WebMBlockFlags a_fFlags)
+            : pTrack(a_pTrack)
+        {
+            Data.tcPTSMs = a_tcPTSMs;
+            Data.cb      = a_cbData;
+            Data.fFlags  = a_fFlags;
+
+            if (Data.cb)
+            {
+                Data.pv = RTMemDup(a_pvData, a_cbData);
+                if (!Data.pv)
+                    throw;
+            }
+        }
+
+        virtual ~WebMSimpleBlock()
+        {
+            if (Data.pv)
+            {
+                Assert(Data.cb);
+                RTMemFree(Data.pv);
+            }
+        }
+
+        WebMTrack    *pTrack;
+
+        /** Actual simple block data. */
+        struct
+        {
+            WebMTimecode   tcPTSMs;
+            WebMTimecode   tcRelToClusterMs;
+            void          *pv;
+            size_t         cb;
+            WebMBlockFlags fFlags;
+        } Data;
+    };
+
+    /** A simple block queue.*/
+    typedef std::queue<WebMSimpleBlock *> WebMSimpleBlockQueue;
+
+    /** Structure for queuing all simple blocks bound to a single timecode.
+     *  This can happen if multiple tracks are being involved. */
+    struct WebMTimecodeBlocks
+    {
+        WebMTimecodeBlocks(void)
+            : fClusterNeeded(false)
+            , fClusterStarted(false) { }
+
+        /** The actual block queue for this timecode. */
+        WebMSimpleBlockQueue Queue;
+        /** Whether a new cluster is needed for this timecode or not. */
+        bool                 fClusterNeeded;
+        /** Whether a new cluster already has been started for this timecode or not. */
+        bool                 fClusterStarted;
+
+        /**
+         * Enqueues a simple block into the internal queue.
+         *
+         * @param   a_pBlock    Block to enqueue and take ownership of.
+         */
+        void Enqueue(WebMSimpleBlock *a_pBlock)
+        {
+            Queue.push(a_pBlock);
+
+            if (a_pBlock->Data.fFlags & VBOX_WEBM_BLOCK_FLAG_KEY_FRAME)
+                fClusterNeeded = true;
+        }
+    };
+
+    /** A block map containing all currently queued blocks.
+     *  The key specifies a unique timecode, whereas the value
+     *  is a queue of blocks which all correlate to the key (timecode). */
+    typedef std::map<WebMTimecode, WebMTimecodeBlocks> WebMBlockMap;
+
+    /**
+     * Structure for defining a WebM (encoding) queue.
+     */
+    struct WebMQueue
+    {
+        WebMQueue(void)
+            : tcLastBlockWrittenMs(0)
+            , tslastProcessedMs(0) { }
+
+        /** Blocks as FIFO (queue). */
+        WebMBlockMap Map;
+        /** Timecode (in ms) of last written block to queue. */
+        WebMTimecode tcLastBlockWrittenMs;
+        /** Time stamp (in ms) of when the queue was processed last. */
+        uint64_t     tslastProcessedMs;
+    };
+
+    /**
+     * Structure for keeping a WebM track entry.
+     */
+    struct WebMTrack
+    {
+        WebMTrack(WebMTrackType a_enmType, uint8_t a_uTrack, uint64_t a_offID)
+            : enmType(a_enmType)
+            , uTrack(a_uTrack)
+            , offUUID(a_offID)
+            , cTotalBlocks(0)
+            , tcLastWrittenMs(0)
+        {
+            uUUID = RTRandU32();
+        }
+
+        /** The type of this track. */
+        WebMTrackType enmType;
+        /** Track parameters. */
+        union
+        {
+            struct
+            {
+                /** Sample rate of input data. */
+                uint32_t uHz;
+                /** Duration of the frame in samples (per channel).
+                 *  Valid frame size are:
+                 *
+                 *  ms           Frame size
+                 *  2.5          120
+                 *  5            240
+                 *  10           480
+                 *  20 (Default) 960
+                 *  40           1920
+                 *  60           2880
+                 */
+                uint16_t framesPerBlock;
+                /** How many milliseconds (ms) one written (simple) block represents. */
+                uint16_t msPerBlock;
+            } Audio;
+        };
+        /** This track's track number. Also used as key in track map. */
+        uint8_t             uTrack;
+        /** The track's "UUID".
+         *  Needed in case this track gets mux'ed with tracks from other files. Not really unique though. */
+        uint32_t            uUUID;
+        /** Absolute offset in file of track UUID.
+         *  Needed to write the hash sum within the footer. */
+        uint64_t            offUUID;
+        /** Total number of blocks. */
+        uint64_t            cTotalBlocks;
+        /** Timecode (in ms) of last write. */
+        WebMTimecode        tcLastWrittenMs;
+    };
+
+    /**
+     * Structure for keeping a cue point.
+     */
+    struct WebMCuePoint
+    {
+        WebMCuePoint(WebMTrack *a_pTrack, uint64_t a_offCluster, WebMTimecode a_tcAbs)
+            : pTrack(a_pTrack)
+            , offCluster(a_offCluster), tcAbs(a_tcAbs) { }
+
+        /** Associated track. */
+        WebMTrack   *pTrack;
+        /** Offset (in bytes) of the related cluster containing the given position. */
+        uint64_t     offCluster;
+        /** Time code (absolute) of this cue point. */
+        WebMTimecode tcAbs;
+    };
+
+    /**
+     * Structure for keeping a WebM cluster entry.
+     */
+    struct WebMCluster
+    {
+        WebMCluster(void)
+            : uID(0)
+            , offStart(0)
+            , fOpen(false)
+            , tcStartMs(0)
+            , cBlocks(0) { }
+
+        /** This cluster's ID. */
+        uint64_t      uID;
+        /** Absolute offset (in bytes) of this cluster.
+         *  Needed for seeking info table. */
+        uint64_t      offStart;
+        /** Whether this cluster element is opened currently. */
+        bool          fOpen;
+        /** Timecode (in ms) when this cluster starts. */
+        WebMTimecode  tcStartMs;
+        /** Number of (simple) blocks in this cluster. */
+        uint64_t      cBlocks;
+    };
+
+    /**
+     * Structure for keeping a WebM segment entry.
+     *
+     * Current we're only using one segment.
+     */
+    struct WebMSegment
+    {
+        WebMSegment(void)
+            : tcStartMs(0)
+            , tcLastWrittenMs(0)
+            , offStart(0)
+            , offInfo(0)
+            , offSeekInfo(0)
+            , offTracks(0)
+            , offCues(0)
+        {
+            uTimecodeScaleFactor = VBOX_WEBM_TIMECODESCALE_FACTOR_MS;
+
+            LogFunc(("Default timecode scale is: %RU64ns\n", uTimecodeScaleFactor));
+        }
+
+        int init(void)
+        {
+            return RTCritSectInit(&CritSect);
+        }
+
+        void destroy(void)
+        {
+            RTCritSectDelete(&CritSect);
+        }
+
+        /** Critical section for serializing access to this segment. */
+        RTCRITSECT                      CritSect;
+
+        /** The timecode scale factor of this segment. */
+        uint64_t                        uTimecodeScaleFactor;
+
+        /** Timecode (in ms) when starting this segment. */
+        WebMTimecode                    tcStartMs;
+        /** Timecode (in ms) of last write. */
+        WebMTimecode                    tcLastWrittenMs;
+
+        /** Absolute offset (in bytes) of CurSeg. */
+        uint64_t                        offStart;
+        /** Absolute offset (in bytes) of general info. */
+        uint64_t                        offInfo;
+        /** Absolute offset (in bytes) of seeking info. */
+        uint64_t                        offSeekInfo;
+        /** Absolute offset (in bytes) of tracks. */
+        uint64_t                        offTracks;
+        /** Absolute offset (in bytes) of cues table. */
+        uint64_t                        offCues;
+        /** List of cue points. Needed for seeking table. */
+        std::list<WebMCuePoint>         lstCues;
+
+        /** Total number of clusters. */
+        uint64_t                        cClusters;
+
+        /** Map of tracks.
+         *  The key marks the track number (*not* the UUID!). */
+        std::map <uint8_t, WebMTrack *> mapTracks;
+
+        /** Current cluster which is being handled.
+         *
+         *  Note that we don't need (and shouldn't need, as this can be a *lot* of data!) a
+         *  list of all clusters. */
+        WebMCluster                     CurCluster;
+
+        WebMQueue                       queueBlocks;
+
+    } CurSeg;
+
+    /** Audio codec to use. */
+    WebMWriter::AudioCodec      m_enmAudioCodec;
+    /** Video codec to use. */
+    WebMWriter::VideoCodec      m_enmVideoCodec;
+
+    /** Whether we're currently in the tracks section. */
+    bool                        m_fInTracksSection;
+
+    /** Size of timecodes in bytes. */
+    size_t                      m_cbTimecode;
+    /** Maximum value a timecode can have. */
+    uint32_t                    m_uTimecodeMax;
+
+#ifdef VBOX_WITH_LIBVPX
+    /**
+     * Block data for VP8-encoded video data.
+     */
+    struct BlockData_VP8
+    {
+        const vpx_codec_enc_cfg_t *pCfg;
+        const vpx_codec_cx_pkt_t  *pPkt;
+    };
+#endif /* VBOX_WITH_LIBVPX */
+
+#ifdef VBOX_WITH_LIBOPUS
+    /**
+     * Block data for Opus-encoded audio data.
+     */
+    struct BlockData_Opus
+    {
+        /** Pointer to encoded Opus audio data. */
+        const void *pvData;
+        /** Size (in bytes) of encoded Opus audio data. */
+        size_t      cbData;
+        /** PTS (in ms) of encoded Opus audio data. */
+        uint64_t    uPTSMs;
+    };
+#endif /* VBOX_WITH_LIBOPUS */
+
+public:
+
+    WebMWriter();
+
+    virtual ~WebMWriter();
+
+public:
+
+    int OpenEx(const char *a_pszFilename, PRTFILE a_phFile,
+               WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec);
+
+    int Open(const char *a_pszFilename, uint64_t a_fOpen,
+             WebMWriter::AudioCodec a_enmAudioCodec, WebMWriter::VideoCodec a_enmVideoCodec);
+
+    int Close(void);
+
+    int AddAudioTrack(uint16_t uHz, uint8_t cChannels, uint8_t cBits, uint8_t *puTrack);
+
+    int AddVideoTrack(uint16_t uWidth, uint16_t uHeight, double dbFPS, uint8_t *puTrack);
+
+    int WriteBlock(uint8_t uTrack, const void *pvData, size_t cbData);
+
+    const Utf8Str& GetFileName(void);
+
+    uint64_t GetFileSize(void);
+
+    uint64_t GetAvailableSpace(void);
+
+protected:
+
+    int init(void);
+
+    void destroy(void);
+
+    int writeHeader(void);
+
+    void writeSegSeekInfo(void);
+
+    int writeFooter(void);
+
+    int writeSimpleBlockEBML(WebMTrack *a_pTrack, WebMSimpleBlock *a_pBlock);
+
+    int writeSimpleBlockQueued(WebMTrack *a_pTrack, WebMSimpleBlock *a_pBlock);
+
+#ifdef VBOX_WITH_LIBVPX
+    int writeSimpleBlockVP8(WebMTrack *a_pTrack, const vpx_codec_enc_cfg_t *a_pCfg, const vpx_codec_cx_pkt_t *a_pPkt);
+#endif
+
+#ifdef VBOX_WITH_LIBOPUS
+    int writeSimpleBlockOpus(WebMTrack *a_pTrack, const void *pvData, size_t cbData, WebMTimecode uPTSMs);
+#endif
+
+    int processQueues(WebMQueue *pQueue, bool fForce);
+
+protected:
+
+    typedef std::map <uint8_t, WebMTrack *> WebMTracks;
+};
+
+#endif /* !____WEBMWRITER */
diff --git a/src/VBox/Main/src-client/win/VBoxC.def b/src/VBox/Main/src-client/win/VBoxC.def
index f53aeeb..a8c6606 100644
--- a/src/VBox/Main/src-client/win/VBoxC.def
+++ b/src/VBox/Main/src-client/win/VBoxC.def
@@ -3,7 +3,8 @@
 ; VBoxC DLL Definition File.
 ;
 
-; Copyright (C) 2006-2016 Oracle Corporation
+;
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/win/VBoxC.rc b/src/VBox/Main/src-client/win/VBoxC.rc
index c20e233..9f973a4 100644
--- a/src/VBox/Main/src-client/win/VBoxC.rc
+++ b/src/VBox/Main/src-client/win/VBoxC.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/win/VBoxClient-x86.def b/src/VBox/Main/src-client/win/VBoxClient-x86.def
index dff7ca9..ef4b420 100644
--- a/src/VBox/Main/src-client/win/VBoxClient-x86.def
+++ b/src/VBox/Main/src-client/win/VBoxClient-x86.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/win/VBoxClient-x86.rc b/src/VBox/Main/src-client/win/VBoxClient-x86.rc
index 42b443a..e3ff5bd 100644
--- a/src/VBox/Main/src-client/win/VBoxClient-x86.rc
+++ b/src/VBox/Main/src-client/win/VBoxClient-x86.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/win/dllmain.cpp b/src/VBox/Main/src-client/win/dllmain.cpp
index ddf8792..b4c3eb8 100644
--- a/src/VBox/Main/src-client/win/dllmain.cpp
+++ b/src/VBox/Main/src-client/win/dllmain.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/win/precomp_vcc.h b/src/VBox/Main/src-client/win/precomp_vcc.h
index c8593ed..cadc47e 100644
--- a/src/VBox/Main/src-client/win/precomp_vcc.h
+++ b/src/VBox/Main/src-client/win/precomp_vcc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-client/xpcom/module.cpp b/src/VBox/Main/src-client/xpcom/module.cpp
index 1e778a5..00179eb 100644
--- a/src/VBox/Main/src-client/xpcom/module.cpp
+++ b/src/VBox/Main/src-client/xpcom/module.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.cpp b/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.cpp
index cbac1fa..46c45f4 100644
--- a/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.cpp
+++ b/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1073,8 +1073,8 @@ static RTEXITCODE DoCleanup(int argc, char **argv)
     /*
      * Ok, down to business.
      */
-    PRTDIR pDir;
-    rc = RTDirOpen(&pDir, pszBaseDir);
+    RTDIR hDir;
+    rc = RTDirOpen(&hDir, pszBaseDir);
     if (RT_FAILURE(rc))
         return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed open the base directory: %Rrc ('%s')", rc, pszBaseDir);
 
@@ -1083,7 +1083,7 @@ static RTEXITCODE DoCleanup(int argc, char **argv)
     for (;;)
     {
         RTDIRENTRYEX Entry;
-        rc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+        rc = RTDirReadEx(hDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
         if (RT_FAILURE(rc))
         {
             if (rc != VERR_NO_MORE_FILES)
@@ -1126,7 +1126,7 @@ static RTEXITCODE DoCleanup(int argc, char **argv)
             }
         }
     }
-    RTDirClose(pDir);
+    RTDirClose(hDir);
     if (!cCleaned)
         RTMsgInfo("Nothing to clean.");
     return rcExit;
diff --git a/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.rc b/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.rc
index 06a2b3b..08098b8 100644
--- a/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.rc
+++ b/src/VBox/Main/src-helper-apps/VBoxExtPackHelperApp.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-helper-apps/VBoxVolInfo.cpp b/src/VBox/Main/src-helper-apps/VBoxVolInfo.cpp
index 338ff98..a7e493c 100644
--- a/src/VBox/Main/src-helper-apps/VBoxVolInfo.cpp
+++ b/src/VBox/Main/src-helper-apps/VBoxVolInfo.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/ApplianceImpl.cpp b/src/VBox/Main/src-server/ApplianceImpl.cpp
index 2f66dc8..b5ef16d 100644
--- a/src/VBox/Main/src-server/ApplianceImpl.cpp
+++ b/src/VBox/Main/src-server/ApplianceImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/ApplianceImplImport.cpp b/src/VBox/Main/src-server/ApplianceImplImport.cpp
index 3c57363..f410460 100644
--- a/src/VBox/Main/src-server/ApplianceImplImport.cpp
+++ b/src/VBox/Main/src-server/ApplianceImplImport.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/AudioAdapterImpl.cpp b/src/VBox/Main/src-server/AudioAdapterImpl.cpp
index 224410a..25903b7 100644
--- a/src/VBox/Main/src-server/AudioAdapterImpl.cpp
+++ b/src/VBox/Main/src-server/AudioAdapterImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/BIOSSettingsImpl.cpp b/src/VBox/Main/src-server/BIOSSettingsImpl.cpp
index 1980efa..dd2e880 100644
--- a/src/VBox/Main/src-server/BIOSSettingsImpl.cpp
+++ b/src/VBox/Main/src-server/BIOSSettingsImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/BandwidthControlImpl.cpp b/src/VBox/Main/src-server/BandwidthControlImpl.cpp
index 2c5937f..a7f89c1 100644
--- a/src/VBox/Main/src-server/BandwidthControlImpl.cpp
+++ b/src/VBox/Main/src-server/BandwidthControlImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/BandwidthGroupImpl.cpp b/src/VBox/Main/src-server/BandwidthGroupImpl.cpp
index 96e7e4e..ce75a4d 100644
--- a/src/VBox/Main/src-server/BandwidthGroupImpl.cpp
+++ b/src/VBox/Main/src-server/BandwidthGroupImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/CertificateImpl.cpp b/src/VBox/Main/src-server/CertificateImpl.cpp
index b2a8d70..49d8f62 100644
--- a/src/VBox/Main/src-server/CertificateImpl.cpp
+++ b/src/VBox/Main/src-server/CertificateImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/ClientToken.cpp b/src/VBox/Main/src-server/ClientToken.cpp
index 8fd5299..e8ba7f7 100644
--- a/src/VBox/Main/src-server/ClientToken.cpp
+++ b/src/VBox/Main/src-server/ClientToken.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/ClientWatcher.cpp b/src/VBox/Main/src-server/ClientWatcher.cpp
index 644f64b..7976013 100644
--- a/src/VBox/Main/src-server/ClientWatcher.cpp
+++ b/src/VBox/Main/src-server/ClientWatcher.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/DHCPServerImpl.cpp b/src/VBox/Main/src-server/DHCPServerImpl.cpp
index 06cb2ea..4dc39ef 100644
--- a/src/VBox/Main/src-server/DHCPServerImpl.cpp
+++ b/src/VBox/Main/src-server/DHCPServerImpl.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/GuestOSTypeImpl.cpp b/src/VBox/Main/src-server/GuestOSTypeImpl.cpp
index 9406925..15df47d 100644
--- a/src/VBox/Main/src-server/GuestOSTypeImpl.cpp
+++ b/src/VBox/Main/src-server/GuestOSTypeImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostDnsService.cpp b/src/VBox/Main/src-server/HostDnsService.cpp
index e989d08..1dbc99e 100644
--- a/src/VBox/Main/src-server/HostDnsService.cpp
+++ b/src/VBox/Main/src-server/HostDnsService.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostDnsService.h b/src/VBox/Main/src-server/HostDnsService.h
index 2e22174..ca14ab9 100644
--- a/src/VBox/Main/src-server/HostDnsService.h
+++ b/src/VBox/Main/src-server/HostDnsService.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp b/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp
index b593d0b..e19401f 100644
--- a/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp
+++ b/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostImpl.cpp b/src/VBox/Main/src-server/HostImpl.cpp
index 245756a..94cf860 100644
--- a/src/VBox/Main/src-server/HostImpl.cpp
+++ b/src/VBox/Main/src-server/HostImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
index fa6e6f0..2e38f3c 100644
--- a/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
+++ b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -553,7 +553,7 @@ HRESULT HostNetworkInterface::enableStaticIPConfigV6(const com::Utf8Str &aIPV6Ad
     {
         fAddrChanged = true;
     }
-   
+
     if (   fAddrChanged
         || m.realIPV6PrefixLength != aIPV6NetworkMaskPrefixLength)
     {
diff --git a/src/VBox/Main/src-server/HostPower.cpp b/src/VBox/Main/src-server/HostPower.cpp
index 589f168..e6bd091 100644
--- a/src/VBox/Main/src-server/HostPower.cpp
+++ b/src/VBox/Main/src-server/HostPower.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp b/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
index 694b15f..090aa45 100644
--- a/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
+++ b/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/HostVideoInputDeviceImpl.cpp b/src/VBox/Main/src-server/HostVideoInputDeviceImpl.cpp
index ef87c76..6bc4a42 100644
--- a/src/VBox/Main/src-server/HostVideoInputDeviceImpl.cpp
+++ b/src/VBox/Main/src-server/HostVideoInputDeviceImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/MachineImplCloneVM.cpp b/src/VBox/Main/src-server/MachineImplCloneVM.cpp
index d67ac02..e7f3aad 100644
--- a/src/VBox/Main/src-server/MachineImplCloneVM.cpp
+++ b/src/VBox/Main/src-server/MachineImplCloneVM.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/Matching.cpp b/src/VBox/Main/src-server/Matching.cpp
index eb3d26a..f39415f 100644
--- a/src/VBox/Main/src-server/Matching.cpp
+++ b/src/VBox/Main/src-server/Matching.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/MediumAttachmentImpl.cpp b/src/VBox/Main/src-server/MediumAttachmentImpl.cpp
index 3b74e9b..5b5d548 100644
--- a/src/VBox/Main/src-server/MediumAttachmentImpl.cpp
+++ b/src/VBox/Main/src-server/MediumAttachmentImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/MediumFormatImpl.cpp b/src/VBox/Main/src-server/MediumFormatImpl.cpp
index bcb610a..e055d0f 100644
--- a/src/VBox/Main/src-server/MediumFormatImpl.cpp
+++ b/src/VBox/Main/src-server/MediumFormatImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/MediumImpl.cpp b/src/VBox/Main/src-server/MediumImpl.cpp
index e405d74..27eea2f 100644
--- a/src/VBox/Main/src-server/MediumImpl.cpp
+++ b/src/VBox/Main/src-server/MediumImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -241,16 +241,19 @@ public:
 
         /* Set up a per-operation progress interface, can be used freely (for
          * binary operations you can use it either on the source or target). */
-        mVDIfProgress.pfnProgress = vdProgressCall;
-        int vrc = VDInterfaceAdd(&mVDIfProgress.Core,
-                                "Medium::Task::vdInterfaceProgress",
-                                VDINTERFACETYPE_PROGRESS,
-                                mProgress,
-                                sizeof(VDINTERFACEPROGRESS),
-                                &mVDOperationIfaces);
-        AssertRC(vrc);
-        if (RT_FAILURE(vrc))
-            mRC = E_FAIL;
+        if (mProgress)
+        {
+            mVDIfProgress.pfnProgress = aProgress->i_vdProgressCallback;
+            int vrc = VDInterfaceAdd(&mVDIfProgress.Core,
+                                     "Medium::Task::vdInterfaceProgress",
+                                     VDINTERFACETYPE_PROGRESS,
+                                     mProgress,
+                                     sizeof(mVDIfProgress),
+                                     &mVDOperationIfaces);
+            AssertRC(vrc);
+            if (RT_FAILURE(vrc))
+                mRC = E_FAIL;
+        }
     }
 
     // Make all destructors virtual. Just in case.
@@ -315,8 +318,6 @@ private:
 
     const ComObjPtr<Progress> mProgress;
 
-    static DECLCALLBACK(int) vdProgressCall(void *pvUser, unsigned uPercent);
-
     VDINTERFACEPROGRESS mVDIfProgress;
 
     /* Must have a strong VirtualBox reference during a task otherwise the
@@ -801,34 +802,6 @@ struct Medium::CryptoFilterSettings
 };
 
 /**
- * PFNVDPROGRESS callback handler for Task operations.
- *
- * @param pvUser      Pointer to the Progress instance.
- * @param uPercent    Completion percentage (0-100).
- */
-/*static*/
-DECLCALLBACK(int) Medium::Task::vdProgressCall(void *pvUser, unsigned uPercent)
-{
-    Progress *that = static_cast<Progress *>(pvUser);
-
-    if (that != NULL)
-    {
-        /* update the progress object, capping it at 99% as the final percent
-         * is used for additional operations like setting the UUIDs and similar. */
-        HRESULT rc = that->SetCurrentOperationProgress(uPercent * 99 / 100);
-        if (FAILED(rc))
-        {
-            if (rc == E_FAIL)
-                return VERR_CANCELLED;
-            else
-                return VERR_INVALID_STATE;
-        }
-    }
-
-    return VINF_SUCCESS;
-}
-
-/**
  * Implementation code for the "create base" task.
  */
 HRESULT Medium::CreateBaseTask::executeTask()
diff --git a/src/VBox/Main/src-server/MediumLock.cpp b/src/VBox/Main/src-server/MediumLock.cpp
index eff607d..0a54d77 100644
--- a/src/VBox/Main/src-server/MediumLock.cpp
+++ b/src/VBox/Main/src-server/MediumLock.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/NATEngineImpl.cpp b/src/VBox/Main/src-server/NATEngineImpl.cpp
index a1c7281..e921f9d 100644
--- a/src/VBox/Main/src-server/NATEngineImpl.cpp
+++ b/src/VBox/Main/src-server/NATEngineImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -416,7 +416,7 @@ HRESULT NATEngine::setHostIP(const com::Utf8Str &aHostIP)
             return setError(E_INVALIDARG, "Cannot bind to a multicast address %s", aHostIP.c_str());
     }
 
-    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);    
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     if (mData->m->strBindIP != aHostIP)
     {
         mData->m.backup();
diff --git a/src/VBox/Main/src-server/NATNetworkImpl.cpp b/src/VBox/Main/src-server/NATNetworkImpl.cpp
index bdf90c7..fb9bfbe 100644
--- a/src/VBox/Main/src-server/NATNetworkImpl.cpp
+++ b/src/VBox/Main/src-server/NATNetworkImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/NetworkAdapterImpl.cpp b/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
index 8061982..359e9f0 100644
--- a/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
+++ b/src/VBox/Main/src-server/NetworkAdapterImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/NetworkServiceRunner.cpp b/src/VBox/Main/src-server/NetworkServiceRunner.cpp
index 1e38d99..2362897 100644
--- a/src/VBox/Main/src-server/NetworkServiceRunner.cpp
+++ b/src/VBox/Main/src-server/NetworkServiceRunner.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/ParallelPortImpl.cpp b/src/VBox/Main/src-server/ParallelPortImpl.cpp
index 735e2cb..9af7eea 100644
--- a/src/VBox/Main/src-server/ParallelPortImpl.cpp
+++ b/src/VBox/Main/src-server/ParallelPortImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/Performance.cpp b/src/VBox/Main/src-server/Performance.cpp
index 6392065..a3d7a40 100644
--- a/src/VBox/Main/src-server/Performance.cpp
+++ b/src/VBox/Main/src-server/Performance.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/PerformanceImpl.cpp b/src/VBox/Main/src-server/PerformanceImpl.cpp
index 5a9392e..86e6408 100644
--- a/src/VBox/Main/src-server/PerformanceImpl.cpp
+++ b/src/VBox/Main/src-server/PerformanceImpl.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/ProgressProxyImpl.cpp b/src/VBox/Main/src-server/ProgressProxyImpl.cpp
index f1c5350..29593bd 100644
--- a/src/VBox/Main/src-server/ProgressProxyImpl.cpp
+++ b/src/VBox/Main/src-server/ProgressProxyImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/SerialPortImpl.cpp b/src/VBox/Main/src-server/SerialPortImpl.cpp
index 4ab7c96..405887c 100644
--- a/src/VBox/Main/src-server/SerialPortImpl.cpp
+++ b/src/VBox/Main/src-server/SerialPortImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/SystemPropertiesImpl.cpp b/src/VBox/Main/src-server/SystemPropertiesImpl.cpp
index ab38943..acc5720 100644
--- a/src/VBox/Main/src-server/SystemPropertiesImpl.cpp
+++ b/src/VBox/Main/src-server/SystemPropertiesImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/TokenImpl.cpp b/src/VBox/Main/src-server/TokenImpl.cpp
index b126ab2..005d72f 100644
--- a/src/VBox/Main/src-server/TokenImpl.cpp
+++ b/src/VBox/Main/src-server/TokenImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBControllerImpl.cpp b/src/VBox/Main/src-server/USBControllerImpl.cpp
index 3ef94ef..01da535 100644
--- a/src/VBox/Main/src-server/USBControllerImpl.cpp
+++ b/src/VBox/Main/src-server/USBControllerImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp b/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
index 18659f6..02c69f2 100644
--- a/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
+++ b/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp b/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp
index a2ad0ab..adc25fb 100644
--- a/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp
+++ b/src/VBox/Main/src-server/USBDeviceFiltersImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp b/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp
index 1767beb..7ebdacc 100644
--- a/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp
+++ b/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp
@@ -1,10 +1,10 @@
-/* $Id: USBIdDatabaseGenerator.cpp 105633 2016-02-20 16:51:52Z fmehnert $ */
+/* $Id: USBIdDatabaseGenerator.cpp $ */
 /** @file
  * USB device vendor and product ID database - generator.
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBIdDatabaseStub.cpp b/src/VBox/Main/src-server/USBIdDatabaseStub.cpp
index 7aa495a..7a2f766 100644
--- a/src/VBox/Main/src-server/USBIdDatabaseStub.cpp
+++ b/src/VBox/Main/src-server/USBIdDatabaseStub.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBProxyBackend.cpp b/src/VBox/Main/src-server/USBProxyBackend.cpp
index f00b44b..f08d011 100644
--- a/src/VBox/Main/src-server/USBProxyBackend.cpp
+++ b/src/VBox/Main/src-server/USBProxyBackend.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/USBProxyService.cpp b/src/VBox/Main/src-server/USBProxyService.cpp
index 6d2bcd8..d243cf8 100644
--- a/src/VBox/Main/src-server/USBProxyService.cpp
+++ b/src/VBox/Main/src-server/USBProxyService.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/UnattendedImpl.cpp b/src/VBox/Main/src-server/UnattendedImpl.cpp
index 1d5a389..1156f30 100644
--- a/src/VBox/Main/src-server/UnattendedImpl.cpp
+++ b/src/VBox/Main/src-server/UnattendedImpl.cpp
@@ -15,6 +15,7 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Main/src-server/UnattendedInstaller.cpp b/src/VBox/Main/src-server/UnattendedInstaller.cpp
index 4695203..6b0b3c4 100644
--- a/src/VBox/Main/src-server/UnattendedInstaller.cpp
+++ b/src/VBox/Main/src-server/UnattendedInstaller.cpp
@@ -15,6 +15,7 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Main/src-server/UnattendedScript.cpp b/src/VBox/Main/src-server/UnattendedScript.cpp
index cc6888d..d2dd875 100644
--- a/src/VBox/Main/src-server/UnattendedScript.cpp
+++ b/src/VBox/Main/src-server/UnattendedScript.cpp
@@ -15,6 +15,7 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Main/src-server/VFSExplorerImpl.cpp b/src/VBox/Main/src-server/VFSExplorerImpl.cpp
index f0670ea..48925eb 100644
--- a/src/VBox/Main/src-server/VFSExplorerImpl.cpp
+++ b/src/VBox/Main/src-server/VFSExplorerImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -284,43 +284,41 @@ HRESULT VFSExplorer::i_updateFS(TaskVFSExplorer *aTask)
     HRESULT rc = S_OK;
 
     std::list<VFSExplorer::Data::DirEntry> fileList;
-    char *pszPath = NULL;
-    PRTDIR pDir = NULL;
-    try
+    RTDIR hDir;
+    int vrc = RTDirOpen(&hDir, m->strPath.c_str());
+    if (RT_SUCCESS(vrc))
     {
-        int vrc = RTDirOpen(&pDir, m->strPath.c_str());
-        if (RT_FAILURE(vrc))
-            throw setError(VBOX_E_FILE_ERROR, tr ("Can't open directory '%s' (%Rrc)"), pszPath, vrc);
-
-        if (aTask->m_ptrProgress)
-            aTask->m_ptrProgress->SetCurrentOperationProgress(33);
-        RTDIRENTRYEX entry;
-        while (RT_SUCCESS(vrc))
+        try
         {
-            vrc = RTDirReadEx(pDir, &entry, NULL, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
-            if (RT_SUCCESS(vrc))
+            if (aTask->m_ptrProgress)
+                aTask->m_ptrProgress->SetCurrentOperationProgress(33);
+            RTDIRENTRYEX entry;
+            while (RT_SUCCESS(vrc))
             {
-                Utf8Str name(entry.szName);
-                if (   name != "."
-                    && name != "..")
-                    fileList.push_back(VFSExplorer::Data::DirEntry(name, i_iprtToVfsObjType(entry.Info.Attr.fMode),
-                                       entry.Info.cbObject,
-                                       entry.Info.Attr.fMode & (RTFS_UNIX_IRWXU | RTFS_UNIX_IRWXG | RTFS_UNIX_IRWXO)));
+                vrc = RTDirReadEx(hDir, &entry, NULL, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+                if (RT_SUCCESS(vrc))
+                {
+                    Utf8Str name(entry.szName);
+                    if (   name != "."
+                        && name != "..")
+                        fileList.push_back(VFSExplorer::Data::DirEntry(name, i_iprtToVfsObjType(entry.Info.Attr.fMode),
+                                           entry.Info.cbObject,
+                                           entry.Info.Attr.fMode & (RTFS_UNIX_IRWXU | RTFS_UNIX_IRWXG | RTFS_UNIX_IRWXO)));
+                }
             }
+            if (aTask->m_ptrProgress)
+                aTask->m_ptrProgress->SetCurrentOperationProgress(66);
+        }
+        catch (HRESULT aRC)
+        {
+            rc = aRC;
         }
-        if (aTask->m_ptrProgress)
-            aTask->m_ptrProgress->SetCurrentOperationProgress(66);
-    }
-    catch(HRESULT aRC)
-    {
-        rc = aRC;
-    }
 
-    /* Clean up */
-    if (pszPath)
-        RTStrFree(pszPath);
-    if (pDir)
-        RTDirClose(pDir);
+        /* Clean up */
+        RTDirClose(hDir);
+    }
+    else
+        rc = setError(VBOX_E_FILE_ERROR, tr ("Can't open directory '%s' (%Rrc)"), m->strPath.c_str(), vrc);
 
     if (aTask->m_ptrProgress)
         aTask->m_ptrProgress->SetCurrentOperationProgress(99);
diff --git a/src/VBox/Main/src-server/VRDEServerImpl.cpp b/src/VBox/Main/src-server/VRDEServerImpl.cpp
index 85744ed..69991fa 100644
--- a/src/VBox/Main/src-server/VRDEServerImpl.cpp
+++ b/src/VBox/Main/src-server/VRDEServerImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/VirtualBoxImpl.cpp b/src/VBox/Main/src-server/VirtualBoxImpl.cpp
index 318e0f6..949cc27 100644
--- a/src/VBox/Main/src-server/VirtualBoxImpl.cpp
+++ b/src/VBox/Main/src-server/VirtualBoxImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/HostDnsServiceDarwin.cpp b/src/VBox/Main/src-server/darwin/HostDnsServiceDarwin.cpp
index a0c0c5f..d6ef285 100644
--- a/src/VBox/Main/src-server/darwin/HostDnsServiceDarwin.cpp
+++ b/src/VBox/Main/src-server/darwin/HostDnsServiceDarwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/HostPowerDarwin.cpp b/src/VBox/Main/src-server/darwin/HostPowerDarwin.cpp
index bb3f686..1cb0a38 100644
--- a/src/VBox/Main/src-server/darwin/HostPowerDarwin.cpp
+++ b/src/VBox/Main/src-server/darwin/HostPowerDarwin.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp b/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp
index 97c3f59..c6a20b6 100644
--- a/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp
+++ b/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/PerformanceDarwin.cpp b/src/VBox/Main/src-server/darwin/PerformanceDarwin.cpp
index 61e4735..71102a4 100644
--- a/src/VBox/Main/src-server/darwin/PerformanceDarwin.cpp
+++ b/src/VBox/Main/src-server/darwin/PerformanceDarwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/USBProxyBackendDarwin.cpp b/src/VBox/Main/src-server/darwin/USBProxyBackendDarwin.cpp
index 71a1104..56a2be5 100644
--- a/src/VBox/Main/src-server/darwin/USBProxyBackendDarwin.cpp
+++ b/src/VBox/Main/src-server/darwin/USBProxyBackendDarwin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/iokit.cpp b/src/VBox/Main/src-server/darwin/iokit.cpp
index c122ac8..557b6ea 100644
--- a/src/VBox/Main/src-server/darwin/iokit.cpp
+++ b/src/VBox/Main/src-server/darwin/iokit.cpp
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/darwin/iokit.h b/src/VBox/Main/src-server/darwin/iokit.h
index b94c87e..f912dbc 100644
--- a/src/VBox/Main/src-server/darwin/iokit.h
+++ b/src/VBox/Main/src-server/darwin/iokit.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp
index ea5848f..8223599 100644
--- a/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp
+++ b/src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp b/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp
index d71dca3..2964f64 100644
--- a/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp
+++ b/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -196,7 +196,7 @@ static bool isWireless(const char *pszName)
     }
 
     return fWireless;
-}    
+}
 
 int NetIfList(std::list <ComObjPtr<HostNetworkInterface> > &list)
 {
diff --git a/src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp
index b0fc8e3..56c4a14 100644
--- a/src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp
+++ b/src/VBox/Main/src-server/freebsd/PerformanceFreeBSD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/freebsd/USBProxyBackendFreeBSD.cpp b/src/VBox/Main/src-server/freebsd/USBProxyBackendFreeBSD.cpp
index ec30829..20bb619 100644
--- a/src/VBox/Main/src-server/freebsd/USBProxyBackendFreeBSD.cpp
+++ b/src/VBox/Main/src-server/freebsd/USBProxyBackendFreeBSD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/generic/AutostartDb-generic.cpp b/src/VBox/Main/src-server/generic/AutostartDb-generic.cpp
index d384208..cadb3a9 100644
--- a/src/VBox/Main/src-server/generic/AutostartDb-generic.cpp
+++ b/src/VBox/Main/src-server/generic/AutostartDb-generic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/generic/NetIf-generic.cpp b/src/VBox/Main/src-server/generic/NetIf-generic.cpp
index 98dc91a..15fd150 100644
--- a/src/VBox/Main/src-server/generic/NetIf-generic.cpp
+++ b/src/VBox/Main/src-server/generic/NetIf-generic.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/HostDnsServiceLinux.cpp b/src/VBox/Main/src-server/linux/HostDnsServiceLinux.cpp
index 5ae5fda..c187470 100644
--- a/src/VBox/Main/src-server/linux/HostDnsServiceLinux.cpp
+++ b/src/VBox/Main/src-server/linux/HostDnsServiceLinux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/HostHardwareLinux.cpp b/src/VBox/Main/src-server/linux/HostHardwareLinux.cpp
index 930e1b5..3b07cdc 100644
--- a/src/VBox/Main/src-server/linux/HostHardwareLinux.cpp
+++ b/src/VBox/Main/src-server/linux/HostHardwareLinux.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -751,22 +751,23 @@ int getDriveInfoFromSysfs(DriveInfoList *pList, bool isDVD, bool *pfSuccess)
     AssertPtrNullReturn(pfSuccess, VERR_INVALID_POINTER); /* Valid or Null */
     LogFlowFunc (("pList=%p, isDVD=%u, pfSuccess=%p\n",
                   pList, (unsigned) isDVD, pfSuccess));
-    PRTDIR pDir = NULL;
+    RTDIR hDir;
     int rc;
     bool fSuccess = false;
     unsigned cFound = 0;
 
     if (!RTPathExists("/sys"))
         return VINF_SUCCESS;
-    rc = RTDirOpen(&pDir, "/sys/block");
+    rc = RTDirOpen(&hDir, "/sys/block");
     /* This might mean that sysfs semantics have changed */
     AssertReturn(rc != VERR_FILE_NOT_FOUND, VINF_SUCCESS);
     fSuccess = true;
     if (RT_SUCCESS(rc))
+    {
         for (;;)
         {
             RTDIRENTRY entry;
-            rc = RTDirRead(pDir, &entry, NULL);
+            rc = RTDirRead(hDir, &entry, NULL);
             Assert(rc != VERR_BUFFER_OVERFLOW);  /* Should never happen... */
             if (RT_FAILURE(rc))  /* Including overflow and no more files */
                 break;
@@ -779,8 +780,7 @@ int getDriveInfoFromSysfs(DriveInfoList *pList, bool isDVD, bool *pfSuccess)
                 continue;
             try
             {
-                pList->push_back(DriveInfo(dev.getNode(), dev.getUdi(),
-                                           dev.getDesc()));
+                pList->push_back(DriveInfo(dev.getNode(), dev.getUdi(), dev.getDesc()));
             }
             catch(std::bad_alloc &e)
             {
@@ -789,7 +789,8 @@ int getDriveInfoFromSysfs(DriveInfoList *pList, bool isDVD, bool *pfSuccess)
             }
             ++cFound;
         }
-    RTDirClose(pDir);
+        RTDirClose(hDir);
+    }
     if (rc == VERR_NO_MORE_FILES)
         rc = VINF_SUCCESS;
     if (RT_FAILURE(rc))
diff --git a/src/VBox/Main/src-server/linux/HostPowerLinux.cpp b/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
index 9425807..9761b96 100644
--- a/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
+++ b/src/VBox/Main/src-server/linux/HostPowerLinux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/NetIf-linux.cpp b/src/VBox/Main/src-server/linux/NetIf-linux.cpp
index 9451c61..24d43ea 100644
--- a/src/VBox/Main/src-server/linux/NetIf-linux.cpp
+++ b/src/VBox/Main/src-server/linux/NetIf-linux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/PerformanceLinux.cpp b/src/VBox/Main/src-server/linux/PerformanceLinux.cpp
index 68490ed..a3250aa 100644
--- a/src/VBox/Main/src-server/linux/PerformanceLinux.cpp
+++ b/src/VBox/Main/src-server/linux/PerformanceLinux.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/USBGetDevices.cpp b/src/VBox/Main/src-server/linux/USBGetDevices.cpp
index ea68889..2cea0d2 100644
--- a/src/VBox/Main/src-server/linux/USBGetDevices.cpp
+++ b/src/VBox/Main/src-server/linux/USBGetDevices.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/USBProxyBackendLinux.cpp b/src/VBox/Main/src-server/linux/USBProxyBackendLinux.cpp
index 6cb1d2d..86a05b9 100644
--- a/src/VBox/Main/src-server/linux/USBProxyBackendLinux.cpp
+++ b/src/VBox/Main/src-server/linux/USBProxyBackendLinux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/linux/vbox-libhal.cpp b/src/VBox/Main/src-server/linux/vbox-libhal.cpp
index 9cac23c..1a0fc19 100644
--- a/src/VBox/Main/src-server/linux/vbox-libhal.cpp
+++ b/src/VBox/Main/src-server/linux/vbox-libhal.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/os2/NetIf-os2.cpp b/src/VBox/Main/src-server/os2/NetIf-os2.cpp
index e8d7b12..e5f2cd8 100644
--- a/src/VBox/Main/src-server/os2/NetIf-os2.cpp
+++ b/src/VBox/Main/src-server/os2/NetIf-os2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/os2/PerformanceOs2.cpp b/src/VBox/Main/src-server/os2/PerformanceOs2.cpp
index f8f0316..25171b1 100644
--- a/src/VBox/Main/src-server/os2/PerformanceOs2.cpp
+++ b/src/VBox/Main/src-server/os2/PerformanceOs2.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/os2/USBProxyBackendOs2.cpp b/src/VBox/Main/src-server/os2/USBProxyBackendOs2.cpp
index 5fb8496..f13ca28 100644
--- a/src/VBox/Main/src-server/os2/USBProxyBackendOs2.cpp
+++ b/src/VBox/Main/src-server/os2/USBProxyBackendOs2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.cpp b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.cpp
index 323719b..d73db1d 100644
--- a/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.cpp
+++ b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.h b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.h
index f824f18..c423af2 100644
--- a/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.h
+++ b/src/VBox/Main/src-server/solaris/DynLoadLibSolaris.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/solaris/NetIf-solaris.cpp b/src/VBox/Main/src-server/solaris/NetIf-solaris.cpp
index 965e5c3..16a9afb 100644
--- a/src/VBox/Main/src-server/solaris/NetIf-solaris.cpp
+++ b/src/VBox/Main/src-server/solaris/NetIf-solaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/solaris/PerformanceSolaris.cpp b/src/VBox/Main/src-server/solaris/PerformanceSolaris.cpp
index e3e2431..0a61485 100644
--- a/src/VBox/Main/src-server/solaris/PerformanceSolaris.cpp
+++ b/src/VBox/Main/src-server/solaris/PerformanceSolaris.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/solaris/USBProxyBackendSolaris.cpp b/src/VBox/Main/src-server/solaris/USBProxyBackendSolaris.cpp
index cf7e7fa..189a873 100644
--- a/src/VBox/Main/src-server/solaris/USBProxyBackendSolaris.cpp
+++ b/src/VBox/Main/src-server/solaris/USBProxyBackendSolaris.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/HostDnsServiceWin.cpp b/src/VBox/Main/src-server/win/HostDnsServiceWin.cpp
index aff0f9f..9631988 100644
--- a/src/VBox/Main/src-server/win/HostDnsServiceWin.cpp
+++ b/src/VBox/Main/src-server/win/HostDnsServiceWin.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/HostPowerWin.cpp b/src/VBox/Main/src-server/win/HostPowerWin.cpp
index a817031..7b38f64 100644
--- a/src/VBox/Main/src-server/win/HostPowerWin.cpp
+++ b/src/VBox/Main/src-server/win/HostPowerWin.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/NetIf-win.cpp b/src/VBox/Main/src-server/win/NetIf-win.cpp
index 259c85f..389836d 100644
--- a/src/VBox/Main/src-server/win/NetIf-win.cpp
+++ b/src/VBox/Main/src-server/win/NetIf-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1951,6 +1951,7 @@ int NetIfList(std::list<ComObjPtr<HostNetworkInterface> > &list)
                     info.enmStatus = pAdapter->OperStatus == IfOperStatusUp ? NETIF_S_UP : NETIF_S_DOWN;
                     info.fIsDefault = (pAdapter->IfIndex == (DWORD)iDefault);
                     info.fDhcpEnabled = pAdapter->Flags & IP_ADAPTER_DHCP_ENABLED;
+                    info.fWireless = (*it).fWireless;
                     OSVERSIONINFOEX OSInfoEx;
                     RT_ZERO(OSInfoEx);
                     OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
diff --git a/src/VBox/Main/src-server/win/PerformanceWin.cpp b/src/VBox/Main/src-server/win/PerformanceWin.cpp
index 6def983..ba37ef0 100644
--- a/src/VBox/Main/src-server/win/PerformanceWin.cpp
+++ b/src/VBox/Main/src-server/win/PerformanceWin.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/USBProxyBackendWindows.cpp b/src/VBox/Main/src-server/win/USBProxyBackendWindows.cpp
index 60048bb..edced4c 100644
--- a/src/VBox/Main/src-server/win/USBProxyBackendWindows.cpp
+++ b/src/VBox/Main/src-server/win/USBProxyBackendWindows.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2005-2016 Oracle Corporation
+ * Copyright (C) 2005-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/VBoxSVC.rc b/src/VBox/Main/src-server/win/VBoxSVC.rc
index 3bdb790..79c8600 100644
--- a/src/VBox/Main/src-server/win/VBoxSVC.rc
+++ b/src/VBox/Main/src-server/win/VBoxSVC.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/precomp_vcc.h b/src/VBox/Main/src-server/win/precomp_vcc.h
index 0e5bcba..00d004e 100644
--- a/src/VBox/Main/src-server/win/precomp_vcc.h
+++ b/src/VBox/Main/src-server/win/precomp_vcc.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/svchlp.cpp b/src/VBox/Main/src-server/win/svchlp.cpp
index 28b5c4a..e9bd481 100644
--- a/src/VBox/Main/src-server/win/svchlp.cpp
+++ b/src/VBox/Main/src-server/win/svchlp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/svchlp.h b/src/VBox/Main/src-server/win/svchlp.h
index 446321e..36f644d 100644
--- a/src/VBox/Main/src-server/win/svchlp.h
+++ b/src/VBox/Main/src-server/win/svchlp.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/win/svcmain.cpp b/src/VBox/Main/src-server/win/svcmain.cpp
index 5e5ca35..f37af12 100644
--- a/src/VBox/Main/src-server/win/svcmain.cpp
+++ b/src/VBox/Main/src-server/win/svcmain.cpp
@@ -1,11 +1,10 @@
 /* $Id: svcmain.cpp $ */
 /** @file
- *
  * SVCMAIN - COM out-of-proc server main entry
  */
 
 /*
- * Copyright (C) 2004-2016 Oracle Corporation
+ * Copyright (C) 2004-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -16,6 +15,10 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/win/windows.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,6 +43,16 @@
 #include <iprt/message.h>
 #include <iprt/asm.h>
 
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+#define MAIN_WND_CLASS L"VirtualBox Interface"
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 class CExeModule : public ATL::CComModule
 {
 public:
@@ -50,12 +63,38 @@ public:
     bool StartMonitor();
     bool HasActiveConnection();
     bool bActivity;
+    static bool isIdleLockCount(LONG cLocks);
 };
 
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+BEGIN_OBJECT_MAP(ObjectMap)
+    OBJECT_ENTRY(CLSID_VirtualBox, VirtualBox)
+END_OBJECT_MAP()
+
+CExeModule *g_pModule     = NULL;
+HWND        g_hMainWindow = NULL;
+HINSTANCE   g_hInstance   = NULL;
+#ifdef VBOX_WITH_SDS
+/** This is set if we're connected to SDS.
+ *
+ * It means that we should discount a server lock that it is holding when
+ * deciding whether we're idle or not.
+ *
+ * Also, when set we deregister with SDS during class factory destruction.  We
+ * exploit this to prevent attempts to deregister during or after COM shutdown.
+ */
+bool        g_fRegisteredWithVBoxSDS = false;
+#endif
+
 /* Normal timeout usually used in Shutdown Monitor */
 const DWORD dwNormalTimeout = 5000;
 volatile uint32_t dwTimeOut = dwNormalTimeout; /* time for EXE to be idle before shutting down. Can be decreased at system shutdown phase. */
 
+
+
 /* Passed to CreateThread to monitor the shutdown event */
 static DWORD WINAPI MonitorProc(void* pv)
 {
@@ -66,18 +105,32 @@ static DWORD WINAPI MonitorProc(void* pv)
 
 LONG CExeModule::Unlock()
 {
-    LONG l = ATL::CComModule::Unlock();
-    if (l == 0)
+    LONG cLocks = ATL::CComModule::Unlock();
+    if (isIdleLockCount(cLocks))
     {
         bActivity = true;
         SetEvent(hEventShutdown); /* tell monitor that we transitioned to zero */
     }
-    return l;
+    return cLocks;
 }
 
 bool CExeModule::HasActiveConnection()
 {
-    return bActivity || GetLockCount() > 0;
+    return bActivity || !isIdleLockCount(GetLockCount());
+}
+
+/**
+ * Checks if @a cLocks signifies an IDLE server lock load.
+ *
+ * This takes VBoxSDS into account (i.e. ignores it).
+ */
+/*static*/ bool CExeModule::isIdleLockCount(LONG cLocks)
+{
+#ifdef VBOX_WITH_SDS
+    if (g_fRegisteredWithVBoxSDS)
+        return cLocks <= 1;
+#endif
+    return cLocks <= 0;
 }
 
 /* Monitors the shutdown event */
@@ -86,7 +139,7 @@ void CExeModule::MonitorShutdown()
     while (1)
     {
         WaitForSingleObject(hEventShutdown, INFINITE);
-        DWORD dwWait=0;
+        DWORD dwWait;
         do
         {
             bActivity = false;
@@ -137,14 +190,298 @@ bool CExeModule::StartMonitor()
 }
 
 
-BEGIN_OBJECT_MAP(ObjectMap)
-    OBJECT_ENTRY(CLSID_VirtualBox, VirtualBox)
-END_OBJECT_MAP()
+#ifdef VBOX_WITH_SDS
+class VBoxSVCRegistration;
+
+/**
+ * Custom class factory for the VirtualBox singleton.
+ *
+ * The implementation of CreateInstance is found in win/svcmain.cpp.
+ */
+class VirtualBoxClassFactory : public ATL::CComClassFactory
+{
+private:
+    /** Tri state: 0=uninitialized or initializing; 1=success; -1=failure.
+     * This will be updated after both m_hrcCreate and m_pObj have been set. */
+    volatile int32_t       m_iState;
+    /** The result of the instantiation attempt. */
+    HRESULT                m_hrcCreate;
+    /** The IUnknown of the VirtualBox object/interface we're working with. */
+    IUnknown              *m_pObj;
+    /** Pointer to the IVBoxSVCRegistration implementation that VBoxSDS works with. */
+    VBoxSVCRegistration   *m_pVBoxSVC;
+    /** The VBoxSDS interface. */
+    ComPtr<IVirtualBoxSDS> m_ptrVirtualBoxSDS;
+
+public:
+    VirtualBoxClassFactory() : m_iState(0), m_hrcCreate(S_OK), m_pObj(NULL), m_pVBoxSVC(NULL)
+    { }
+
+    virtual ~VirtualBoxClassFactory()
+    {
+        if (m_pObj)
+        {
+            m_pObj->Release();
+            m_pObj = NULL;
+        }
+
+        /* We usually get here during g_pModule->Term() via CoRevokeClassObjec, so COM
+           probably working well enough to talk to SDS when we get here. */
+        if (g_fRegisteredWithVBoxSDS)
+            i_deregisterWithSds();
+    }
+
+    // IClassFactory
+    STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void **ppvObj);
+
+    /** Worker for VBoxSVCRegistration::getVirtualBox. */
+    HRESULT i_getVirtualBox(IUnknown **ppResult);
+
+private:
+    HRESULT VirtualBoxClassFactory::i_registerWithSds(IUnknown **ppOtherVirtualBox);
+    void    VirtualBoxClassFactory::i_deregisterWithSds(void);
+
+    friend VBoxSVCRegistration;
+};
+
+
+/**
+ * The VBoxSVC class is handed to VBoxSDS so it can call us back and ask for the
+ * VirtualBox object when the next VBoxSVC for this user registers itself.
+ */
+class VBoxSVCRegistration : public IVBoxSVCRegistration
+{
+private:
+    /** Number of references. */
+    uint32_t volatile m_cRefs;
+
+public:
+    /** Pointer to the factory. */
+    VirtualBoxClassFactory *m_pFactory;
+
+public:
+    VBoxSVCRegistration(VirtualBoxClassFactory *pFactory)
+        : m_cRefs(1), m_pFactory(pFactory)
+    { }
+    virtual ~VBoxSVCRegistration()
+    {
+        if (m_pFactory)
+        {
+            if (m_pFactory->m_pVBoxSVC)
+                m_pFactory->m_pVBoxSVC = NULL;
+            m_pFactory = NULL;
+        }
+    }
+    RTMEMEF_NEW_AND_DELETE_OPERATORS();
+
+    // IUnknown
+    STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject)
+    {
+        if (riid == __uuidof(IUnknown))
+            *ppvObject = (void *)(IUnknown *)this;
+        else if (riid == __uuidof(IVBoxSVCRegistration))
+            *ppvObject = (void *)(IVBoxSVCRegistration *)this;
+        else
+        {
+            return E_NOINTERFACE;
+        }
+        AddRef();
+        return S_OK;
+
+    }
+
+    STDMETHOD_(ULONG,AddRef)(void)
+    {
+        uint32_t cRefs = ASMAtomicIncU32(&m_cRefs);
+        return cRefs;
+    }
+
+    STDMETHOD_(ULONG,Release)(void)
+    {
+        uint32_t cRefs = ASMAtomicDecU32(&m_cRefs);
+        if (cRefs == 0)
+            delete this;
+        return cRefs;
+    }
+
+    // IVBoxSVCRegistration
+    STDMETHOD(GetVirtualBox)(IUnknown **ppResult)
+    {
+        if (m_pFactory)
+            return m_pFactory->i_getVirtualBox(ppResult);
+        return E_FAIL;
+    }
+};
+
+
+HRESULT VirtualBoxClassFactory::i_registerWithSds(IUnknown **ppOtherVirtualBox)
+{
+    /*
+     * Connect to VBoxSDS.
+     */
+    HRESULT hrc = CoCreateInstance(CLSID_VirtualBoxSDS, NULL, CLSCTX_LOCAL_SERVER, IID_IVirtualBoxSDS,
+                                   (void **)m_ptrVirtualBoxSDS.asOutParam());
+    if (SUCCEEDED(hrc))
+    {
+        /*
+         * Create VBoxSVCRegistration object and hand that to VBoxSDS.
+         */
+        m_pVBoxSVC = new VBoxSVCRegistration(this);
+        hrc = m_ptrVirtualBoxSDS->RegisterVBoxSVC(m_pVBoxSVC, GetCurrentProcessId(), ppOtherVirtualBox);
+        if (SUCCEEDED(hrc))
+        {
+            g_fRegisteredWithVBoxSDS = !*ppOtherVirtualBox;
+            return hrc;
+        }
+        m_pVBoxSVC->Release();
+    }
+    m_ptrVirtualBoxSDS.setNull();
+    m_pVBoxSVC = NULL;
+    *ppOtherVirtualBox = NULL;
+    return hrc;
+}
+
+
+void VirtualBoxClassFactory::i_deregisterWithSds(void)
+{
+    Log(("VirtualBoxClassFactory::i_deregisterWithSds\n"));
+
+    if (m_ptrVirtualBoxSDS.isNotNull())
+    {
+        if (m_pVBoxSVC)
+        {
+            HRESULT hrc = m_ptrVirtualBoxSDS->DeregisterVBoxSVC(m_pVBoxSVC, GetCurrentProcessId());
+            NOREF(hrc);
+        }
+        m_ptrVirtualBoxSDS.setNull();
+        g_fRegisteredWithVBoxSDS = false;
+    }
+    if (m_pVBoxSVC)
+    {
+        m_pVBoxSVC->m_pFactory = NULL;
+        m_pVBoxSVC->Release();
+        m_pVBoxSVC = NULL;
+    }
+}
+
+
+HRESULT VirtualBoxClassFactory::i_getVirtualBox(IUnknown **ppResult)
+{
+    IUnknown *pObj = m_pObj;
+    if (pObj)
+    {
+        /** @todo Do we need to do something regarding server locking?  Hopefully COM
+         *        deals with that........... */
+        pObj->AddRef();
+        *ppResult = pObj;
+        Log(("VirtualBoxClassFactory::GetVirtualBox: S_OK - %p\n", pObj));
+        return S_OK;
+    }
+    *ppResult = NULL;
+    Log(("VirtualBoxClassFactory::GetVirtualBox: E_FAIL\n"));
+    return E_FAIL;
+}
+
+
+/**
+ * Custom class factory impl for the VirtualBox singleton.
+ *
+ * This will consult with VBoxSDS on whether this VBoxSVC instance should
+ * provide the actual VirtualBox instance or just forward the instance from
+ * some other SVC instance.
+ *
+ * @param   pUnkOuter       This must be NULL.
+ * @param   riid            Reference to the interface ID to provide.
+ * @param   ppvObj          Where to return the pointer to the riid instance.
+ *
+ * @return  COM status code.
+ */
+STDMETHODIMP VirtualBoxClassFactory::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, void **ppvObj)
+{
+    HRESULT hrc = E_POINTER;
+    if (ppvObj != NULL)
+    {
+        *ppvObj = NULL;
+        // no aggregation for singletons
+        AssertReturn(pUnkOuter == NULL, CLASS_E_NOAGGREGATION);
+
+        /*
+         * We must make sure there is only one instance around.
+         * So, we check without locking and then again after locking.
+         */
+        if (ASMAtomicReadS32(&m_iState) == 0)
+        {
+            Lock();
+            __try
+            {
+                if (ASMAtomicReadS32(&m_iState) == 0)
+                {
+                    /*
+                     * lock the module to indicate activity
+                     * (necessary for the monitor shutdown thread to correctly
+                     * terminate the module in case when CreateInstance() fails)
+                     */
+                    ATL::_pAtlModule->Lock();
+                    __try
+                    {
+                        /*
+                         * Now we need to connect to VBoxSDS to register ourselves.
+                         */
+                        IUnknown *pOtherVirtualBox = NULL;
+                        m_hrcCreate = hrc = i_registerWithSds(&pOtherVirtualBox);
+                        if (SUCCEEDED(hrc) && pOtherVirtualBox)
+                            m_pObj = pOtherVirtualBox;
+                        else if (SUCCEEDED(hrc))
+                        {
+                            ATL::_pAtlModule->Lock();
+                            ATL::CComObjectCached<VirtualBox> *p;
+                            m_hrcCreate = hrc = ATL::CComObjectCached<VirtualBox>::CreateInstance(&p);
+                            if (SUCCEEDED(hrc))
+                            {
+                                m_hrcCreate = hrc = p->QueryInterface(IID_IUnknown, (void **)&m_pObj);
+                                if (SUCCEEDED(hrc))
+                                    RTLogClearFileDelayFlag(RTLogRelGetDefaultInstance(),  NULL);
+                                else
+                                {
+                                    delete p;
+                                    i_deregisterWithSds();
+                                    m_pObj = NULL;
+                                }
+                            }
+                        }
+                        ASMAtomicWriteS32(&m_iState, SUCCEEDED(hrc) ? 1 : -1);
+                    }
+                    __finally
+                    {
+                        ATL::_pAtlModule->Unlock();
+                    }
+                }
+            }
+            __finally
+            {
+                if (ASMAtomicReadS32(&m_iState) == 0)
+                {
+                    ASMAtomicWriteS32(&m_iState, -1);
+                    if (SUCCEEDED(m_hrcCreate))
+                        m_hrcCreate = E_FAIL;
+                }
+                Unlock();
+            }
+        }
+
+        /*
+         * Query the requested interface from the IUnknown one we're keeping around.
+         */
+        if (m_hrcCreate == S_OK)
+            hrc = m_pObj->QueryInterface(riid, ppvObj);
+        else
+            hrc = m_hrcCreate;
+    }
+    return hrc;
+}
+
+#endif /* VBOX_WITH_SDS */
 
-CExeModule* g_pModule = NULL;
-HWND g_hMainWindow = NULL;
-HINSTANCE g_hInstance = NULL;
-#define MAIN_WND_CLASS L"VirtualBox Interface"
 
 /*
 * Wrapper for Win API function ShutdownBlockReasonCreate
@@ -463,29 +800,29 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpC
     {
         /** @todo Merge this code with server.cpp (use Logging.cpp?). */
         char szLogFile[RTPATH_MAX];
-        if (!pszLogFile)
+        if (!pszLogFile || !*pszLogFile)
         {
             vrc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile));
             if (RT_SUCCESS(vrc))
                 vrc = RTPathAppend(szLogFile, sizeof(szLogFile), "VBoxSVC.log");
+            if (RT_FAILURE(vrc))
+                return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to construct release log filename, rc=%Rrc", vrc);
+            pszLogFile = szLogFile;
         }
-        else
-        {
-            if (!RTStrPrintf(szLogFile, sizeof(szLogFile), "%s", pszLogFile))
-                vrc = VERR_NO_MEMORY;
-        }
-        if (RT_FAILURE(vrc))
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to create logging file name, rc=%Rrc", vrc);
 
-        char szError[RTPATH_MAX + 128];
-        vrc = com::VBoxLogRelCreate("COM Server", szLogFile,
+        RTERRINFOSTATIC ErrInfo;
+        vrc = com::VBoxLogRelCreate("COM Server", pszLogFile,
                                     RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
                                     VBOXSVC_LOG_DEFAULT, "VBOXSVC_RELEASE_LOG",
-                                    RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
-                                    cHistory, uHistoryFileTime, uHistoryFileSize,
-                                    szError, sizeof(szError));
+#ifdef VBOX_WITH_SDS
+                                    RTLOGDEST_FILE | RTLOGDEST_F_DELAY_FILE,
+#else
+                                    RTLOGDEST_FILE,
+#endif
+                                    UINT32_MAX /* cMaxEntriesPerGroup */, cHistory, uHistoryFileTime, uHistoryFileSize,
+                                    RTErrInfoInitStatic(&ErrInfo));
         if (RT_FAILURE(vrc))
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, vrc);
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, vrc);
     }
 
     /* Set up a build identifier so that it can be seen from core dumps what
@@ -571,6 +908,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpC
 
     g_pModule->Term();
 
+#ifdef VBOX_WITH_SDS
+    g_fRegisteredWithVBoxSDS = false; /* Don't trust COM LPC to work right from now on.  */
+#endif
     com::Shutdown();
 
     if(g_pModule)
diff --git a/src/VBox/Main/src-server/xpcom/server.cpp b/src/VBox/Main/src-server/xpcom/server.cpp
index 74314f4..0e75127 100644
--- a/src/VBox/Main/src-server/xpcom/server.cpp
+++ b/src/VBox/Main/src-server/xpcom/server.cpp
@@ -743,15 +743,15 @@ int main(int argc, char **argv)
     if (RT_FAILURE(vrc))
         return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to create logging file name, rc=%Rrc", vrc);
 
-    char szError[RTPATH_MAX + 128];
+    RTERRINFOSTATIC ErrInfo;
     vrc = com::VBoxLogRelCreate("XPCOM Server", szLogFile,
                                 RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
                                 VBOXSVC_LOG_DEFAULT, "VBOXSVC_RELEASE_LOG",
                                 RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
                                 cHistory, uHistoryFileTime, uHistoryFileSize,
-                                szError, sizeof(szError));
+                                RTErrInfoInitStatic(&ErrInfo));
     if (RT_FAILURE(vrc))
-        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, vrc);
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, vrc);
 
     /* Set up a build identifier so that it can be seen from core dumps what
      * exact build was used to produce the core. Same as in Console::i_powerUpThread(). */
diff --git a/src/VBox/Main/src-server/xpcom/server.h b/src/VBox/Main/src-server/xpcom/server.h
index 867ad0b..187988e 100644
--- a/src/VBox/Main/src-server/xpcom/server.h
+++ b/src/VBox/Main/src-server/xpcom/server.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/src-server/xpcom/server_module.cpp b/src/VBox/Main/src-server/xpcom/server_module.cpp
index 0cf98a5..e46f6c7 100644
--- a/src/VBox/Main/src-server/xpcom/server_module.cpp
+++ b/src/VBox/Main/src-server/xpcom/server_module.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/makefile.tstVBoxAPIWin b/src/VBox/Main/testcase/makefile.tstVBoxAPIWin
index 65cf890..3d13715 100644
--- a/src/VBox/Main/testcase/makefile.tstVBoxAPIWin
+++ b/src/VBox/Main/testcase/makefile.tstVBoxAPIWin
@@ -1,8 +1,10 @@
-#
+# $Id: makefile.tstVBoxAPIWin $
+## @file
 # tstVBoxAPILinux makefile
 #
+
 #
-# Copyright (C) 2006-2016 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -12,6 +14,8 @@
 # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
+
+#
 # Several assumptions and propositions:
 # - Visual Studio has already installed on machine or you already have nmake.exe, cl.exe, link.exe
 # - Windows SDK has already installed on machine or you already have Uuid.Lib Ole32.Lib OleAut32.Lib OleDlg.Lib
@@ -19,14 +23,14 @@
 # - nmake is a default tool that builds projects based on commands contained in this description file
 # - cl is cl.exe - Windows compiler
 # - link is link.exe - Windows linker
-# - all needed paths have been set in working environment. It means that when you type "cl" from the console, 
+# - all needed paths have been set in working environment. It means that when you type "cl" from the console,
 #   Windows shall find cl.exe by using enviroment variable PATH or something similar.
 #
-# The best way to accomplish it is to run a script vcvars32.bat located in the Visual studio "bin" directory. 
+# The best way to accomplish it is to run a script vcvars32.bat located in the Visual studio "bin" directory.
 # This script installs needed paths in your working environment.
 # Important!!!
 # Script vcvars32.bat sets up needed paths only for local console session.
-# For permanent using, needed paths must be added globally. 
+# For permanent using, needed paths must be added globally.
 #
 # Several possible examples of paths:
 # VS_INSTALL_PATH = "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\"
@@ -40,7 +44,7 @@
 CXX = cl
 LINK = link
 PATH_MSCOM     = ../../../bindings/mscom
-INCS_MSCOM     = $(PATH_MSCOM)/include 
+INCS_MSCOM     = $(PATH_MSCOM)/include
 LIBS_MSCOM     = $(PATH_MSCOM)/lib
 
 LIBS_DEPS = "Uuid.Lib" "Ole32.Lib" "OleAut32.Lib" "OleDlg.Lib"
@@ -48,7 +52,7 @@ LIBS_DEPS = "Uuid.Lib" "Ole32.Lib" "OleAut32.Lib" "OleDlg.Lib"
 tstVBoxAPIWin_SOURCES  = $(LIBS_MSCOM)/VirtualBox_i.c
 tstVBoxAPIWin_DEPS     = $(INCS_MSCOM)
 
-COMPILER_CMDLINE = /Zi /nologo /W3 /WX- /Od /Oy- /Gm /EHsc /RTC1 /GS /fp:precise /Gd /analyze- /errorReport:queue 
+COMPILER_CMDLINE = /Zi /nologo /W3 /WX- /Od /Oy- /Gm /EHsc /RTC1 /GS /fp:precise /Gd /analyze- /errorReport:queue
 
 LINKER_CMDLINE = /INCREMENTAL /DEBUG /SUBSYSTEM:CONSOLE
 
@@ -56,7 +60,7 @@ LINKER_CMDLINE = /INCREMENTAL /DEBUG /SUBSYSTEM:CONSOLE
 tstVBoxAPIWin.exe: tstVBoxAPIWin.obj VirtualBox_i.obj
 	$(LINK) /out:tstVBoxAPIWin.exe $** $(LIBS_DEPS)
 
-#   default compilation	
+#   default compilation
 tstVBoxAPIWin.obj:
 	$(CXX) /c /I$(INCS_MSCOM) tstVBoxAPIWin.cpp
 
@@ -84,4 +88,3 @@ VirtualBox_i.obj:
 #VirtualBox_i.obj:
 #	$(CXX) /c /I$(INCS_MSCOM) /I$(WIN_SDK_INCLUDE_PATH) /I$(VS_INCLUDE_PATH) $(tstVBoxAPIWin_SOURCES)
 
-
diff --git a/src/VBox/Main/testcase/makefile.tstVBoxAPIXPCOM b/src/VBox/Main/testcase/makefile.tstVBoxAPIXPCOM
index 8e3c829..d8b889b 100644
--- a/src/VBox/Main/testcase/makefile.tstVBoxAPIXPCOM
+++ b/src/VBox/Main/testcase/makefile.tstVBoxAPIXPCOM
@@ -1,8 +1,10 @@
-#
+# $Id: makefile.tstVBoxAPIXPCOM $
+## @file
 # tstVBoxAPIXPCOM makefile
 #
+
 #
-# Copyright (C) 2006-2014 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -50,3 +52,4 @@ tstVBoxAPIXPCOM.o: tstVBoxAPIXPCOM.cpp
 
 clean:
 	rm -f tstVBoxAPIXPCOM tstVBoxAPIXPCOM.o
+
diff --git a/src/VBox/Main/testcase/msiDarwinDescriptorDecoder.cpp b/src/VBox/Main/testcase/msiDarwinDescriptorDecoder.cpp
index e7c5f40..e6f5115 100644
--- a/src/VBox/Main/testcase/msiDarwinDescriptorDecoder.cpp
+++ b/src/VBox/Main/testcase/msiDarwinDescriptorDecoder.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -69,4 +69,3 @@ int wmain(int cArgs, wchar_t **papwszArgs)
     return rcExit;
 }
 
-
diff --git a/src/VBox/Main/testcase/tstAPI.cpp b/src/VBox/Main/testcase/tstAPI.cpp
index 2443fec..8fd25ea 100644
--- a/src/VBox/Main/testcase/tstAPI.cpp
+++ b/src/VBox/Main/testcase/tstAPI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstCollector.cpp b/src/VBox/Main/testcase/tstCollector.cpp
index 23d56c8..f4a1485 100644
--- a/src/VBox/Main/testcase/tstCollector.cpp
+++ b/src/VBox/Main/testcase/tstCollector.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstGuestCtrlContextID.cpp b/src/VBox/Main/testcase/tstGuestCtrlContextID.cpp
index 73920f6..78afc96 100644
--- a/src/VBox/Main/testcase/tstGuestCtrlContextID.cpp
+++ b/src/VBox/Main/testcase/tstGuestCtrlContextID.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstGuestCtrlParseBuffer.cpp b/src/VBox/Main/testcase/tstGuestCtrlParseBuffer.cpp
index b9ff0a2..723315b 100644
--- a/src/VBox/Main/testcase/tstGuestCtrlParseBuffer.cpp
+++ b/src/VBox/Main/testcase/tstGuestCtrlParseBuffer.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstGuid.cpp b/src/VBox/Main/testcase/tstGuid.cpp
index 8d5f8f4..7681024 100644
--- a/src/VBox/Main/testcase/tstGuid.cpp
+++ b/src/VBox/Main/testcase/tstGuid.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstMediumLock.cpp b/src/VBox/Main/testcase/tstMediumLock.cpp
index ba4776c..d5a4460 100644
--- a/src/VBox/Main/testcase/tstMediumLock.cpp
+++ b/src/VBox/Main/testcase/tstMediumLock.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstOVF.cpp b/src/VBox/Main/testcase/tstOVF.cpp
index 8362af6..230f90f 100644
--- a/src/VBox/Main/testcase/tstOVF.cpp
+++ b/src/VBox/Main/testcase/tstOVF.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstUSBLinux.h b/src/VBox/Main/testcase/tstUSBLinux.h
index 389be24..b1a76f7 100644
--- a/src/VBox/Main/testcase/tstUSBLinux.h
+++ b/src/VBox/Main/testcase/tstUSBLinux.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstUSBProxyLinux.cpp b/src/VBox/Main/testcase/tstUSBProxyLinux.cpp
index bc20989..7c76ce3 100644
--- a/src/VBox/Main/testcase/tstUSBProxyLinux.cpp
+++ b/src/VBox/Main/testcase/tstUSBProxyLinux.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstVBoxAPI.cpp b/src/VBox/Main/testcase/tstVBoxAPI.cpp
index 02fac81..8a7a009 100644
--- a/src/VBox/Main/testcase/tstVBoxAPI.cpp
+++ b/src/VBox/Main/testcase/tstVBoxAPI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstVBoxAPIPerf.cpp b/src/VBox/Main/testcase/tstVBoxAPIPerf.cpp
index 49ca718..f6a2c7a 100644
--- a/src/VBox/Main/testcase/tstVBoxAPIPerf.cpp
+++ b/src/VBox/Main/testcase/tstVBoxAPIPerf.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstVBoxAPIWin.cpp b/src/VBox/Main/testcase/tstVBoxAPIWin.cpp
index db8fdea..5da80db 100644
--- a/src/VBox/Main/testcase/tstVBoxAPIWin.cpp
+++ b/src/VBox/Main/testcase/tstVBoxAPIWin.cpp
@@ -12,7 +12,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstVBoxAPIXPCOM.cpp b/src/VBox/Main/testcase/tstVBoxAPIXPCOM.cpp
index 356a40a..c13216f 100644
--- a/src/VBox/Main/testcase/tstVBoxAPIXPCOM.cpp
+++ b/src/VBox/Main/testcase/tstVBoxAPIXPCOM.cpp
@@ -8,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/testcase/tstVBoxMultipleVM.cpp b/src/VBox/Main/testcase/tstVBoxMultipleVM.cpp
index 9d3e36f..73dc7322 100644
--- a/src/VBox/Main/testcase/tstVBoxMultipleVM.cpp
+++ b/src/VBox/Main/testcase/tstVBoxMultipleVM.cpp
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/webservice/Makefile.kmk b/src/VBox/Main/webservice/Makefile.kmk
index f5fdedc..cd99edf 100644
--- a/src/VBox/Main/webservice/Makefile.kmk
+++ b/src/VBox/Main/webservice/Makefile.kmk
@@ -265,14 +265,23 @@ ifdef VBOX_GSOAP_INSTALLED
 	$(VBOXWEB_OUT_DIR)/soapC-17.cpp \
 	$(VBOXWEB_OUT_DIR)/soapC-18.cpp \
 	$(VBOXWEB_OUT_DIR)/soapC-19.cpp \
-	$(VBOXWEB_OUT_DIR)/soapC-20.cpp
+	$(VBOXWEB_OUT_DIR)/soapC-20.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-21.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-22.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-23.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-24.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-25.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-26.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-27.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-28.cpp \
+	$(VBOXWEB_OUT_DIR)/soapC-29.cpp
   vboxsoap_CXXFLAGS += \
   	$(VBOX_GCC_Wno-vla) \
 	$(if-expr $(KBUILD_TARGET) == "win",,-Wno-format) \
   	$(if-expr $(KBUILD_TARGET) == "win",,-Wno-deprecated-declarations)
   endif
   vboxsoap_CLEAN := $(vboxsoap_SOURCES) # lazy bird
-  vboxsoap_SOURCES += \
+  vboxsoap_SOURCES <= \
   	$(VBOX_GSOAP_CXX_SOURCES)
   vboxsoap_ORDERDEPS = \
   	$(VBOXWEB_IDL_SRC) \
@@ -816,9 +825,18 @@ $(VBOXWEB_OUT_DIR)/soapC-1.cpp \
 + $(VBOXWEB_OUT_DIR)/soapC-18.cpp \
 + $(VBOXWEB_OUT_DIR)/soapC-19.cpp \
 + $(VBOXWEB_OUT_DIR)/soapC-20.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-21.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-22.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-23.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-24.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-25.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-26.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-27.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-28.cpp \
++ $(VBOXWEB_OUT_DIR)/soapC-29.cpp \
 : $(VBOXWEB_OUT_DIR)/soapC.cpp $$(split-soapC_1_TARGET) | $$(dir $$@)
 	$(RM) -f -- $(wildcard $(VBOXWEB_OUT_DIR)/soapC-?.cpp $(VBOXWEB_OUT_DIR)/soapC-??.cpp)
-	$(split-soapC_1_TARGET) $(VBOXWEB_OUT_DIR)/soapC.cpp $(VBOXWEB_OUT_DIR) 20
+	$(split-soapC_1_TARGET) $(VBOXWEB_OUT_DIR)/soapC.cpp $(VBOXWEB_OUT_DIR) 29
 endif # !VBOX_WITHOUT_SPLIT_SOAPC
 
 endif # VBOX_GSOAP_INSTALLED
diff --git a/src/VBox/Main/webservice/Makefile.webtest b/src/VBox/Main/webservice/Makefile.webtest
index 84ffd17..65a274a 100644
--- a/src/VBox/Main/webservice/Makefile.webtest
+++ b/src/VBox/Main/webservice/Makefile.webtest
@@ -1,5 +1,10 @@
+# $Id: Makefile.webtest $
+## @files
+# ???
 #
-# Copyright (C) 2016 Oracle Corporation
+
+#
+# Copyright (C) 2016-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -55,7 +60,7 @@ stdsoap2.o: $(PATH_GSOAP)/stdsoap2.cpp
 gsoapH_from_xslt.h:
 	$(XSLTPROC) -o $@ $(WEBSRVWSDL2GSOAPH) $(VBOXWEBWSDL)
 
-vboxwebsrv.nsmap: 
+vboxwebsrv.nsmap:
 	$(XSLTPROC) -o $@ $(WEBSRVNSMAPXSL) $(VBOXWEBIDLSRC)
 
 $(subst soapC,%,$(SOAPCCPP)): split-soapC %.cpp
@@ -76,3 +81,4 @@ clean:
 	rm -f soapClient.o stdsoap2.o
 	rm -f webtest.o webtest
 	rm -f soapC-split-done
+
diff --git a/src/VBox/Main/webservice/VBoxWebSrv.rc b/src/VBox/Main/webservice/VBoxWebSrv.rc
index 0bd0bc2..95154ce 100644
--- a/src/VBox/Main/webservice/VBoxWebSrv.rc
+++ b/src/VBox/Main/webservice/VBoxWebSrv.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/webservice/samples/java/axis/clienttest.java b/src/VBox/Main/webservice/samples/java/axis/clienttest.java
index f89c1ea..3111e8b 100644
--- a/src/VBox/Main/webservice/samples/java/axis/clienttest.java
+++ b/src/VBox/Main/webservice/samples/java/axis/clienttest.java
@@ -1,22 +1,24 @@
-
-/*
- * Sample client for the VirtualBox web service, written in Java
- * (raw web service variant).
+/* $Id: clienttest.java $ */
+/*!file
+ * Sample client for the VirtualBox web service, written in Java (raw web service variant).
  *
  * Run the VirtualBox web service server first; see the VirtualBox
  * SDK reference for details.
  *
- * Copyright (C) 2008-2010 Oracle Corporation
- *
  * The following license applies to this file only:
+ */
+
+/*
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
  * files (the "Software"), to deal in the Software without
  * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
@@ -24,7 +26,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/Main/webservice/samples/java/jax-ws/Makefile b/src/VBox/Main/webservice/samples/java/jax-ws/Makefile
index 97cbb6e..4635e78 100644
--- a/src/VBox/Main/webservice/samples/java/jax-ws/Makefile
+++ b/src/VBox/Main/webservice/samples/java/jax-ws/Makefile
@@ -1,13 +1,32 @@
+# $Id: Makefile $
+## @file
+# Makefile for java samples.
 #
-# Copyright (C) 2008-2010 Oracle Corporation
+
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
 #
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
 #
 
 JAVA16=java
@@ -60,4 +79,5 @@ metric15: $(DEST15)/metrictest.class
 	-$(JAVA15) -cp $(VBOXWS15):$(JAXWSLIBS):$(DEST15) metrictest
 
 clean:
-	$(RM) -rf $(DEST15)  $(DEST16) 
+	$(RM) -rf $(DEST15)  $(DEST16)
+
diff --git a/src/VBox/Main/webservice/samples/java/jax-ws/Makefile.glue b/src/VBox/Main/webservice/samples/java/jax-ws/Makefile.glue
index 2a9f95b..5109f20 100644
--- a/src/VBox/Main/webservice/samples/java/jax-ws/Makefile.glue
+++ b/src/VBox/Main/webservice/samples/java/jax-ws/Makefile.glue
@@ -1,13 +1,31 @@
+# $Id: Makefile.glue $
+## @file
+# Makefile for java samples.
 #
-# Copyright (C) 2008-2010 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
 #
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
 #
 
 JAXWS=./jaxws-ri
@@ -51,3 +69,4 @@ $(VBOXWS16): ../../../vboxwebService.wsdl ../../../vboxweb.wsdl *.java
 
 clean:
 	$(RM) -rf $(DEST)
+
diff --git a/src/VBox/Main/webservice/samples/java/jax-ws/clienttest.java b/src/VBox/Main/webservice/samples/java/jax-ws/clienttest.java
index 0cb0e78..ce6c3c4 100644
--- a/src/VBox/Main/webservice/samples/java/jax-ws/clienttest.java
+++ b/src/VBox/Main/webservice/samples/java/jax-ws/clienttest.java
@@ -1,21 +1,24 @@
-/*
- * Sample client for the VirtualBox web service, written in Java
- * (object-oriented bindings).
+/* $Id: clienttest.java $ */
+/*!file
+ * Sample client for the VirtualBox web service, written in Java (object-oriented bindings).
  *
  * Run the VirtualBox web service server first; see the VirtualBox
  * SDK reference for details.
  *
- * Copyright (C) 2008-2010 Oracle Corporation
- *
  * The following license applies to this file only:
+ */
+
+/*
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
  * files (the "Software"), to deal in the Software without
  * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
@@ -23,12 +26,13 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
+
 /* Somewhat ugly way to support versioning */
 import com.sun.xml.ws.commons.virtualbox{VBOX_API_SUFFIX}.*;
 
diff --git a/src/VBox/Main/webservice/samples/java/jax-ws/metrictest.java b/src/VBox/Main/webservice/samples/java/jax-ws/metrictest.java
index 1384ef3..5e53b1e 100644
--- a/src/VBox/Main/webservice/samples/java/jax-ws/metrictest.java
+++ b/src/VBox/Main/webservice/samples/java/jax-ws/metrictest.java
@@ -1,20 +1,24 @@
-/*
+/* $Id: metrictest.java $ */
+/*!file
  * Sample of performance API usage, written in Java.
  *
  * Don't forget to run VBOX webserver
  * with 'vboxwebsrv -t 1000' command, to calm down watchdog thread.
  *
- * Copyright (C) 2008-2010 Oracle Corporation
- *
  * The following license applies to this file only:
+ */
+
+/*
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
  * files (the "Software"), to deal in the Software without
  * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
@@ -22,12 +26,13 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
  */
+
 import com.sun.xml.ws.commons.virtualbox{VBOX_API_SUFFIX}.*;
 
 import java.util.*;
diff --git a/src/VBox/Main/webservice/samples/perl/clienttest.pl b/src/VBox/Main/webservice/samples/perl/clienttest.pl
index 72c69e4..e372b2f 100755
--- a/src/VBox/Main/webservice/samples/perl/clienttest.pl
+++ b/src/VBox/Main/webservice/samples/perl/clienttest.pl
@@ -1,21 +1,24 @@
 #!/usr/bin/perl
-
-#
+# $Id: clienttest.pl $
+## @file
 # This little perl program attempts to connect to a running VirtualBox
 # webservice and calls various methods on it. Please refer to the SDK
 # programming reference (SDKRef.pdf) for how to use this sample.
 #
-# Copyright (C) 2008-2012 Oracle Corporation
+# Note! The following license applies to this file only
+#
+
 #
-# The following license applies to this file only:
+# Copyright (C) 2008-2017 Oracle Corporation
 #
 # Permission is hereby granted, free of charge, to any person
 # obtaining a copy of this software and associated documentation
 # files (the "Software"), to deal in the Software without
 # restriction, including without limitation the rights to use,
-# copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
 #
 # The above copyright notice and this permission notice shall be
 # included in all copies or substantial portions of the Software.
@@ -23,7 +26,7 @@
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
diff --git a/src/VBox/Main/webservice/samples/php/clienttest.php b/src/VBox/Main/webservice/samples/php/clienttest.php
index b27896a..fab08da 100644
--- a/src/VBox/Main/webservice/samples/php/clienttest.php
+++ b/src/VBox/Main/webservice/samples/php/clienttest.php
@@ -1,23 +1,27 @@
 <?php
-
-/*
+/* $Id: clienttest.php $ */
+/*!file
  * Sample client for the VirtualBox webservice, written in PHP.
  *
  * Run the VirtualBox web service server first; see the VirtualBox
  * SDK reference for details.
  *
- * Copyright (C) 2009-2010 Oracle Corporation
+ * The following license applies to this file only:
+ */
+
+/*
  * Contributed by James Lucas (mjlucas at eng.uts.edu.au).
  *
- * The following license applies to this file only:
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
  * files (the "Software"), to deal in the Software without
  * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
  *
  * The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
@@ -25,7 +29,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
@@ -88,12 +92,12 @@ foreach ($machines as $machine)
         {
             echo $ex->getMessage();
         }
-        
+
         $session->unlockMachine();
-        
+
         $machine->releaseRemote();
         $session->releaseRemote();
-        
+
         break;
     }
 }
diff --git a/src/VBox/Main/webservice/samples/python/Makefile b/src/VBox/Main/webservice/samples/python/Makefile
index 5e8a15b..2795faf 100644
--- a/src/VBox/Main/webservice/samples/python/Makefile
+++ b/src/VBox/Main/webservice/samples/python/Makefile
@@ -1,20 +1,39 @@
+# $Id: Makefile $
+## @file
+# Makefile for java samples.
 #
-# Copyright (C) 2008-2010 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
 #
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
 #
 
 all: run
 
-run: 
+run:
 	@echo !!!! Don\'t forget to start webserver with \"vboxwebsrv -t 10000\" !!!
-	PYTHONPATH=../lib python ../../../glue/python/sample/vboxshell.py -w 
+	PYTHONPATH=../lib python ../../../glue/python/sample/vboxshell.py -w
 
 server:
 	nohup vboxwebsrv -t 10000 &
+
diff --git a/src/VBox/Main/webservice/samples/python/Makefile.glue b/src/VBox/Main/webservice/samples/python/Makefile.glue
index 102d5fb..ad0c2b2 100644
--- a/src/VBox/Main/webservice/samples/python/Makefile.glue
+++ b/src/VBox/Main/webservice/samples/python/Makefile.glue
@@ -1,16 +1,35 @@
+# $Id: Makefile.glue $
+## @file
+# Makefile for java samples.
 #
-# Copyright (C) 2008-2010 Oracle Corporation
+
+#
+# Copyright (C) 2008-2017 Oracle Corporation
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
 #
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
 #
 
 all: wrappers
 
 wrappers: ../../vboxwebService.wsdl ../../vboxweb.wsdl
 	wsdl2py  -b --file $<
+
diff --git a/src/VBox/Main/webservice/samples/python/clienttest.py b/src/VBox/Main/webservice/samples/python/clienttest.py
index 619d4dd..240b0da 100755
--- a/src/VBox/Main/webservice/samples/python/clienttest.py
+++ b/src/VBox/Main/webservice/samples/python/clienttest.py
@@ -1,15 +1,32 @@
 #!/usr/bin/python
-#
-# Copyright (C) 2012-2016 Oracle Corporation
-#
-# This file is part of VirtualBox Open Source Edition (OSE), as
-# available from http://www.virtualbox.org. This file is free software;
-# you can redistribute it and/or modify it under the terms of the GNU
-# General Public License (GPL) as published by the Free Software
-# Foundation, in version 2 as it comes in the "COPYING" file of the
-# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-#
+
+__copyright__ = \
+"""
+Copyright (C) 2012-2017 Oracle Corporation
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+"""
+
+
 # Things needed to be set up before running this sample:
 # - Install Python and verify it works (2.7.2 will do, 3.x is untested yet)
 # - On Windows: Install the PyWin32 extensions for your Python version
diff --git a/src/VBox/Main/webservice/split-soapC.cpp b/src/VBox/Main/webservice/split-soapC.cpp
index f2f4273..30dd8ac 100644
--- a/src/VBox/Main/webservice/split-soapC.cpp
+++ b/src/VBox/Main/webservice/split-soapC.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -104,6 +104,7 @@ int main(int argc, char *argv[])
     size_t        cbLimit = 0;
     size_t        cbWritten = 0;
     unsigned long cIfNesting = 0;
+    unsigned long cWarningNesting = 0;
     unsigned long cBraceNesting = 0;
     unsigned long cLinesSinceStaticMap = ~0UL / 2;
     bool          fJustZero = false;
@@ -165,6 +166,10 @@ int main(int argc, char *argv[])
             if (!cBraceNesting && !cIfNesting)
                 fJustZero = true;
         }
+        else if (!strncmp(pszLine, RT_STR_TUPLE("#pragma warning(push)")))
+            cWarningNesting++;
+        else if (!strncmp(pszLine, RT_STR_TUPLE("#pragma warning(pop)")))
+            cWarningNesting--;
         else
         {
             for (const char *p = pszLine; p < pszLine + cbLine; p++)
@@ -189,6 +194,7 @@ int main(int argc, char *argv[])
         /* start a new output file if necessary and possible */
         if (   cbWritten >= cbLimit
             && cIfNesting == 0
+            && cWarningNesting == 0
             && fJustZero
             && cFiles < cChunks
             && cLinesSinceStaticMap > 150 /*hack!*/)
diff --git a/src/VBox/Main/webservice/stdsoap2.sed b/src/VBox/Main/webservice/stdsoap2.sed
index 6750c6f..3b16126 100644
--- a/src/VBox/Main/webservice/stdsoap2.sed
+++ b/src/VBox/Main/webservice/stdsoap2.sed
@@ -6,7 +6,7 @@
 #
 
 #
-# Copyright (C) 2016 Oracle Corporation
+# Copyright (C) 2016-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/webservice/vboxweb.cpp b/src/VBox/Main/webservice/vboxweb.cpp
index c19d105..b9b30bb 100644
--- a/src/VBox/Main/webservice/vboxweb.cpp
+++ b/src/VBox/Main/webservice/vboxweb.cpp
@@ -1,11 +1,14 @@
-/**
+/* $Id: vboxweb.cpp $ */
+/** @file
  * vboxweb.cpp:
  *      hand-coded parts of the webservice server. This is linked with the
  *      generated code in out/.../src/VBox/Main/webservice/methodmaps.cpp
  *      (plus static gSOAP server code) to implement the actual webservice
  *      server, to which clients can connect.
- *
- * Copyright (C) 2007-2016 Oracle Corporation
+ */
+
+/*
+ * Copyright (C) 2007-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1205,15 +1208,15 @@ int main(int argc, char *argv[])
     }
 
     /* create release logger, to stdout */
-    char szError[RTPATH_MAX + 128];
+    RTERRINFOSTATIC ErrInfo;
     rc = com::VBoxLogRelCreate("web service", g_fDaemonize ? NULL : pszLogFile,
                                RTLOGFLAGS_PREFIX_THREAD | RTLOGFLAGS_PREFIX_TIME_PROG,
                                "all", "VBOXWEBSRV_RELEASE_LOG",
                                RTLOGDEST_STDOUT, UINT32_MAX /* cMaxEntriesPerGroup */,
                                g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
-                               szError, sizeof(szError));
+                               RTErrInfoInitStatic(&ErrInfo));
     if (RT_FAILURE(rc))
-        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, rc);
 
 #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined (RT_OS_SOLARIS) || defined(RT_OS_FREEBSD)
     if (g_fDaemonize)
@@ -1242,9 +1245,9 @@ int main(int argc, char *argv[])
                                    "all", "VBOXWEBSRV_RELEASE_LOG",
                                    RTLOGDEST_FILE, UINT32_MAX /* cMaxEntriesPerGroup */,
                                    g_cHistory, g_uHistoryFileTime, g_uHistoryFileSize,
-                                   szError, sizeof(szError));
+                                   RTErrInfoInitStatic(&ErrInfo));
         if (RT_FAILURE(rc))
-            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", szError, rc);
+            return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open release log (%s, %Rrc)", ErrInfo.Core.pszMsg, rc);
     }
 #endif
 
diff --git a/src/VBox/Main/webservice/vboxweb.h b/src/VBox/Main/webservice/vboxweb.h
index 4c13590..0571f54 100644
--- a/src/VBox/Main/webservice/vboxweb.h
+++ b/src/VBox/Main/webservice/vboxweb.h
@@ -1,11 +1,10 @@
-/* $Id:  $ */
+/* $Id: vboxweb.h $ */
 /** @file
  * vboxweb.h - header file for "real" web server code.
  */
 
 /*
- *
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/webservice/websrv-python.xsl b/src/VBox/Main/webservice/websrv-python.xsl
index 86a3002..cf5e600 100644
--- a/src/VBox/Main/webservice/websrv-python.xsl
+++ b/src/VBox/Main/webservice/websrv-python.xsl
@@ -363,7 +363,7 @@ class <xsl:value-of select="$ifname"/>:
   <xsl:param name="type" />
   <xsl:param name="safearray" />
   <xsl:param name="arg" />
-  
+
    <xsl:choose>
      <xsl:when test="$type='octet' and $safearray">
         <xsl:value-of select="concat('self.mgr.encodebase64(',$arg,')')" />
diff --git a/src/VBox/Main/webservice/webtest.cpp b/src/VBox/Main/webservice/webtest.cpp
index 813816c..4a0d69d 100644
--- a/src/VBox/Main/webservice/webtest.cpp
+++ b/src/VBox/Main/webservice/webtest.cpp
@@ -1,9 +1,11 @@
-/*
+/* $Id: webtest.cpp $ */
+/** @file
  * webtest.cpp:
  *      demo webservice client in C++. This mimics some of the
  *      functionality of VBoxManage for testing purposes.
- *
- * Copyright (C) 2006-2016 Oracle Corporation
+ */
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Main/xml/ovfreader.cpp b/src/VBox/Main/xml/ovfreader.cpp
index 949e49b..255336a 100644
--- a/src/VBox/Main/xml/ovfreader.cpp
+++ b/src/VBox/Main/xml/ovfreader.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2008-2016 Oracle Corporation
+ * Copyright (C) 2008-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/ClientDataInt.h b/src/VBox/NetworkServices/DHCP/ClientDataInt.h
index a1c039a..c144188 100644
--- a/src/VBox/NetworkServices/DHCP/ClientDataInt.h
+++ b/src/VBox/NetworkServices/DHCP/ClientDataInt.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/Config.cpp b/src/VBox/NetworkServices/DHCP/Config.cpp
index 4c0b50c..fdab182 100644
--- a/src/VBox/NetworkServices/DHCP/Config.cpp
+++ b/src/VBox/NetworkServices/DHCP/Config.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/Config.h b/src/VBox/NetworkServices/DHCP/Config.h
index e927a86..9ccd22d 100644
--- a/src/VBox/NetworkServices/DHCP/Config.h
+++ b/src/VBox/NetworkServices/DHCP/Config.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/NetworkManagerDhcp.cpp b/src/VBox/NetworkServices/DHCP/NetworkManagerDhcp.cpp
index 1dcc9e3..2a9233c 100644
--- a/src/VBox/NetworkServices/DHCP/NetworkManagerDhcp.cpp
+++ b/src/VBox/NetworkServices/DHCP/NetworkManagerDhcp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp b/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp
index 4c5a1db..0a632b8 100644
--- a/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp
+++ b/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.rc b/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.rc
index 8beff36..e6f32d6 100644
--- a/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.rc
+++ b/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/DHCP/VBoxNetDHCPHardened.cpp b/src/VBox/NetworkServices/DHCP/VBoxNetDHCPHardened.cpp
index a89a62f..8202f22 100644
--- a/src/VBox/NetworkServices/DHCP/VBoxNetDHCPHardened.cpp
+++ b/src/VBox/NetworkServices/DHCP/VBoxNetDHCPHardened.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/RTWinPoll.cpp b/src/VBox/NetworkServices/NAT/RTWinPoll.cpp
index f754b57..6f9abef 100644
--- a/src/VBox/NetworkServices/NAT/RTWinPoll.cpp
+++ b/src/VBox/NetworkServices/NAT/RTWinPoll.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/RTWinSocketPair.cpp b/src/VBox/NetworkServices/NAT/RTWinSocketPair.cpp
index 3384d33..7e24ed4 100644
--- a/src/VBox/NetworkServices/NAT/RTWinSocketPair.cpp
+++ b/src/VBox/NetworkServices/NAT/RTWinSocketPair.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp b/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp
index 2ef4486..b16a207 100644
--- a/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp
+++ b/src/VBox/NetworkServices/NAT/VBoxNetLwipNAT.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1324,7 +1324,6 @@ static int vboxNetNATLogInit(int argc, char **argv)
     if (cch >= sizeof(szEnvVarBase))
         return VERR_BUFFER_OVERFLOW;
 
-    char szError[RTPATH_MAX + 128];
     rc = com::VBoxLogRelCreate("NAT Network",
                                szLogFile,
                                RTLOGFLAGS_PREFIX_TIME_PROG,
@@ -1335,7 +1334,7 @@ static int vboxNetNATLogInit(int argc, char **argv)
                                0 /* cHistory */,
                                0 /* uHistoryFileTime */,
                                0 /* uHistoryFileSize */,
-                               szError, sizeof(szError));
+                               NULL /*pErrInfo*/);
 
     /*
      * Provide immediate feedback if corresponding LogRel level is
diff --git a/src/VBox/NetworkServices/NAT/VBoxNetNAT.rc b/src/VBox/NetworkServices/NAT/VBoxNetNAT.rc
index 3771835..6cd67ef 100644
--- a/src/VBox/NetworkServices/NAT/VBoxNetNAT.rc
+++ b/src/VBox/NetworkServices/NAT/VBoxNetNAT.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/VBoxNetNATHardened.cpp b/src/VBox/NetworkServices/NAT/VBoxNetNATHardened.cpp
index e3a84fb..1f91670 100644
--- a/src/VBox/NetworkServices/NAT/VBoxNetNATHardened.cpp
+++ b/src/VBox/NetworkServices/NAT/VBoxNetNATHardened.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/dhcp6.h b/src/VBox/NetworkServices/NAT/dhcp6.h
index 05f8770..3838a84 100644
--- a/src/VBox/NetworkServices/NAT/dhcp6.h
+++ b/src/VBox/NetworkServices/NAT/dhcp6.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/fwtcp.c b/src/VBox/NetworkServices/NAT/fwtcp.c
index 10a7877..07c0c6b 100644
--- a/src/VBox/NetworkServices/NAT/fwtcp.c
+++ b/src/VBox/NetworkServices/NAT/fwtcp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/fwudp.c b/src/VBox/NetworkServices/NAT/fwudp.c
index 7c5307e..32266a6 100644
--- a/src/VBox/NetworkServices/NAT/fwudp.c
+++ b/src/VBox/NetworkServices/NAT/fwudp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/getrawsock.c b/src/VBox/NetworkServices/NAT/getrawsock.c
new file mode 100644
index 0000000..9ac1a72
--- /dev/null
+++ b/src/VBox/NetworkServices/NAT/getrawsock.c
@@ -0,0 +1,155 @@
+/* $Id: getrawsock.c $ */
+/** @file
+ * Obtain raw-sockets from a server when debugging unprivileged.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <errno.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+/* XXX: this should be in a header, but isn't.  naughty me. :( */
+int getrawsock(int type);
+
+
+int
+getrawsock(int type)
+{
+    struct sockaddr_un sux;     /* because solaris */
+    struct passwd *pw;
+    size_t pathlen;
+    int rawsock, server;
+    struct msghdr mh;
+    struct iovec iov[1];
+    char buf[1];
+    struct cmsghdr *cmh;
+    char cmsg[CMSG_SPACE(sizeof(int))];
+    ssize_t nread, nsent;
+    int status;
+
+    server = -1;
+    rawsock = -1;
+
+    memset(&sux, 0, sizeof(sux));
+    sux.sun_family = AF_UNIX;
+
+    if (geteuid() == 0) {
+        return -1;
+    }
+
+    if (type == AF_INET) {
+        buf[0] = '4';
+    }
+    else if (type == AF_INET6) {
+        buf[0] = '6';
+    }
+    else {
+        return -1;
+    }
+
+    errno = 0;
+    pw = getpwuid(getuid());
+    if (pw == NULL) {
+        perror("getpwuid");
+        return -1;
+    }
+
+    pathlen = snprintf(sux.sun_path, sizeof(sux.sun_path),
+                       "/tmp/.vbox-%s-aux/mkrawsock", pw->pw_name);
+    if (pathlen > sizeof(sux.sun_path)) {
+        fprintf(stderr, "socket pathname truncated\n");
+        return -1;
+    }
+
+    server = socket(PF_UNIX, SOCK_STREAM, 0);
+    if (server < 0) {
+        perror("socket");
+        return -1;
+    }
+
+    status = connect(server, (struct sockaddr *)&sux,
+                     (sizeof(sux) - sizeof(sux.sun_path)
+                      + strlen(sux.sun_path) + 1));
+    if (status < 0) {
+        perror(sux.sun_path);
+        goto out;
+    }
+
+    nsent = send(server, buf, 1, 0);
+    if (nsent != 1) {
+        if (nsent < 0) {
+            perror("send");
+        }
+        else {
+            fprintf(stderr, "failed to contact mkrawsock\n");
+        }
+        goto out;
+    }
+
+    buf[0] = '\0';
+
+    iov[0].iov_base = buf;
+    iov[0].iov_len = 1;
+
+    memset(&mh, 0, sizeof(mh));
+    mh.msg_iov = iov;
+    mh.msg_iovlen = 1;
+    mh.msg_control = cmsg;
+    mh.msg_controllen = sizeof(cmsg);
+
+    nread = recvmsg(server, &mh, 0);
+    if (nread != 1) {
+        if (nread < 0) {
+            perror("recvmsg");
+        }
+        else {
+            fprintf(stderr, "EOF from mkrawsock\n");
+        }
+        goto out;
+    }
+
+    if ((type == AF_INET && buf[0] != '4')
+        || (type == AF_INET6 && buf[0] != '6')
+        || mh.msg_controllen == 0)
+    {
+        goto out;
+    }
+
+    for (cmh = CMSG_FIRSTHDR(&mh); cmh != NULL; cmh = CMSG_NXTHDR(&mh, cmh)) {
+        if ((cmh->cmsg_level == SOL_SOCKET)
+            && (cmh->cmsg_type == SCM_RIGHTS)
+            && (cmh->cmsg_len == CMSG_LEN(sizeof(rawsock))))
+        {
+            rawsock = *((int *)CMSG_DATA(cmh));
+            break;
+        }
+    }
+
+  out:
+    if (server != -1) {
+        close(server);
+    }
+    if (rawsock != -1) {
+        printf("%s: got ICMPv%c socket %d\n",
+               __func__, type == AF_INET ? '4' : '6', rawsock);
+    }
+    return rawsock;
+}
diff --git a/src/VBox/NetworkServices/NAT/lwipopts.h b/src/VBox/NetworkServices/NAT/lwipopts.h
index 81161a7..1c7b62e 100644
--- a/src/VBox/NetworkServices/NAT/lwipopts.h
+++ b/src/VBox/NetworkServices/NAT/lwipopts.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/mkrawsock.c b/src/VBox/NetworkServices/NAT/mkrawsock.c
new file mode 100644
index 0000000..08f16c6
--- /dev/null
+++ b/src/VBox/NetworkServices/NAT/mkrawsock.c
@@ -0,0 +1,339 @@
+/* $Id: mkrawsock.c $ */
+/** @file
+ * Auxiliary server to create raw-sockets when debugging unprivileged.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef __linux__
+#define _GNU_SOURCE
+#endif
+
+#ifdef __sun__
+#if __STDC_VERSION__ - 0 >= 199901L
+#define _XOPEN_SOURCE 600
+#else
+#define _XOPEN_SOURCE 500
+#endif
+#define __EXTENSIONS__ 1
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#ifdef __linux__
+#include <linux/icmp.h>         /* for ICMP_FILTER */
+#endif
+#include <errno.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+static void handler(int sig);
+static void serve(int s);
+static int mkrawsock(int family);
+
+volatile sig_atomic_t signaled = 0;
+
+int
+main(int argc, char **argv)
+{
+    struct sigaction sa;
+    struct sockaddr_un sux; /* because solaris */
+    struct passwd *pw;
+    size_t pathlen;
+    char *slash;
+    int s, client;
+    int status;
+
+    memset(&sux, 0, sizeof(sux));
+    sux.sun_family = AF_UNIX;
+
+    if (getuid() == 0) {
+        if (argc != 2) {
+            fprintf(stderr, "username required when run as root\n");
+            return EXIT_FAILURE;
+        }
+
+        errno = 0;
+        pw = getpwnam(argv[1]);
+        if (pw == NULL) {
+            perror("getpwnam");
+            return EXIT_FAILURE;
+        }
+        if (pw->pw_uid == 0) {
+            fprintf(stderr, "%s is superuser\n", pw->pw_name);
+            return EXIT_FAILURE;
+        }
+    }
+    else {
+        errno = 0;
+        pw = getpwuid(getuid());
+        if (pw == NULL) {
+            perror("getpwuid");
+            return EXIT_FAILURE;
+        }
+    }
+
+    pathlen = snprintf(sux.sun_path, sizeof(sux.sun_path),
+                       "/tmp/.vbox-%s-aux/mkrawsock", pw->pw_name);
+    if (pathlen > sizeof(sux.sun_path)) {
+        fprintf(stderr, "socket pathname truncated\n");
+        return EXIT_FAILURE;
+    }
+
+    slash = strrchr(sux.sun_path, '/');
+    if (slash == NULL) {
+        fprintf(stderr, "%s: no directory separator\n", sux.sun_path);
+        return EXIT_FAILURE;
+    }
+
+    *slash = '\0';
+
+    status = mkdir(sux.sun_path, 0700);
+    if (status == 0) {
+        status = chown(sux.sun_path, pw->pw_uid, pw->pw_gid);
+        if (status < 0) {
+            perror("chown");
+            return EXIT_FAILURE;
+        }
+    }
+    else if (errno != EEXIST) {
+        perror("mkdir");
+        return EXIT_FAILURE;
+    }
+    else {
+        int dirfd;
+        struct stat st;
+
+        dirfd = open(sux.sun_path, O_RDONLY, O_DIRECTORY);
+        if (dirfd < 0) {
+            perror(sux.sun_path);
+            return EXIT_FAILURE;
+        }
+
+        status = fstat(dirfd, &st);
+        close(dirfd);
+
+        if (status < 0) {
+            perror(sux.sun_path);
+            return EXIT_FAILURE;
+        }
+
+        if (st.st_uid != pw->pw_uid) {
+            fprintf(stderr, "%s: exists but not owned by %s\n",
+                    sux.sun_path, pw->pw_name);
+            return EXIT_FAILURE;
+        }
+
+        if ((st.st_mode & 0777) != 0700) {
+            fprintf(stderr, "%s: bad mode %04o\n",
+                    sux.sun_path, (unsigned int)(st.st_mode & 0777));
+            return EXIT_FAILURE;
+        }
+    }
+
+    *slash = '/';
+
+#if 0
+    status = unlink(sux.sun_path);
+    if (status < 0 && errno != ENOENT) {
+        perror("unlink");
+    }
+#endif
+
+    s = socket(PF_UNIX, SOCK_STREAM, 0);
+    if (s < 0) {
+        perror("socket");
+        return EXIT_FAILURE;
+    }
+
+    status = bind(s, (struct sockaddr *)&sux,
+                  (sizeof(sux) - sizeof(sux.sun_path)
+                   + strlen(sux.sun_path) + 1));
+    if (status < 0) {
+        perror(sux.sun_path);
+        close(s);
+        return EXIT_FAILURE;
+    }
+
+    status = chown(sux.sun_path, pw->pw_uid, pw->pw_gid);
+    if (status < 0) {
+        perror("chown");
+        close(s);
+        return EXIT_FAILURE;
+    }
+
+    status = chmod(sux.sun_path, 0600);
+    if (status < 0) {
+        perror("chmod");
+        close(s);
+        return EXIT_FAILURE;
+    }
+
+    status = listen(s, 1);
+    if (status < 0) {
+        perror("listen");
+        close(s);
+        return EXIT_FAILURE;
+    }
+
+    memset(&sa, 0, sizeof(sa));
+    sa.sa_handler = handler;
+    sigemptyset(&sa.sa_mask);
+
+    sigaction(SIGINT,  &sa, NULL);
+    sigaction(SIGTERM, &sa, NULL);
+
+    while (!signaled) {
+        client = accept(s, NULL, 0);
+        if (client < 0) {
+            perror("accept");
+            continue;
+        }
+
+        serve(client);
+        close(client);
+    }
+
+    close(s);
+    status = unlink(sux.sun_path);
+    if (status < 0) {
+        perror("unlink");
+    }
+
+    return EXIT_SUCCESS;
+}
+
+
+static void
+handler(int sig)
+{
+    signaled = 1;
+}
+
+
+static void
+serve(int client)
+{
+#ifdef SO_PEERCRED
+    struct ucred cr;
+    socklen_t crlen;
+#endif
+    ssize_t nread, nsent;
+    struct msghdr mh;
+    struct iovec iov[1];
+    char buf[1];
+    struct cmsghdr *cmh;
+    char cmsg[CMSG_SPACE(sizeof(int))];
+    int fd;
+    int status;
+
+#ifdef SO_PEERCRED
+    crlen = sizeof(cr);
+    status = getsockopt(client, SOL_SOCKET, SO_PEERCRED, &cr, &crlen);
+    if (status < 0) {
+        perror("SO_PEERCRED");
+        return;
+    }
+
+    fprintf(stderr, "request from pid %lu uid %lu ",
+            (unsigned long)cr.pid, (unsigned long)cr.uid);
+#endif
+
+    nread = read(client, buf, 1);
+    if (nread < 0) {
+        perror("recv");
+        return;
+    }
+
+    fd = -1;
+    switch (buf[0]) {
+
+    case '4':
+        fprintf(stderr, "for ICMPv4 socket\n");
+        fd = mkrawsock(PF_INET);
+        break;
+
+    case '6':
+        fprintf(stderr, "for ICMPv6 socket\n");
+        fd = mkrawsock(PF_INET6);
+        break;
+
+    default:
+        fprintf(stderr, "bad request 0x%02x\n", (unsigned int)buf[0]);
+        return;
+    }
+
+    if (fd < 0) {
+        buf[0] = '\0';  /* NAK */
+        nsent = write(client, buf, 1);
+        (void)nsent;
+        return;
+    }
+
+    memset(&mh, 0, sizeof(mh));
+    memset(cmsg, 0, sizeof(cmsg));
+
+    iov[0].iov_base = buf;
+    iov[0].iov_len = 1;
+
+    mh.msg_iov = iov;
+    mh.msg_iovlen = 1;
+    mh.msg_control = cmsg;
+    mh.msg_controllen = sizeof(cmsg);
+
+    cmh = CMSG_FIRSTHDR(&mh);
+    cmh->cmsg_level = SOL_SOCKET;
+    cmh->cmsg_type = SCM_RIGHTS;
+    cmh->cmsg_len = CMSG_LEN(sizeof(fd));
+    *((int *) CMSG_DATA(cmh)) = fd;
+
+    nsent = sendmsg(client, &mh, 0);
+    if (nsent < 0) {
+        perror("sendmsg");
+    }
+
+    close(fd);
+}
+
+
+static int
+mkrawsock(int family)
+{
+    int fd;
+
+    if (family == PF_INET) {
+        fd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
+        if (fd < 0) {
+            perror("IPPROTO_ICMP");
+            return -1;
+        }
+    }
+    else {
+        fd = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
+        if (fd < 0) {
+            perror("IPPROTO_ICMPV6");
+            return -1;
+        }
+    }
+
+    return fd;
+}
diff --git a/src/VBox/NetworkServices/NAT/portfwd.c b/src/VBox/NetworkServices/NAT/portfwd.c
index c9386a8..61a8007 100644
--- a/src/VBox/NetworkServices/NAT/portfwd.c
+++ b/src/VBox/NetworkServices/NAT/portfwd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/portfwd.h b/src/VBox/NetworkServices/NAT/portfwd.h
index 7d859d9..b36b598 100644
--- a/src/VBox/NetworkServices/NAT/portfwd.h
+++ b/src/VBox/NetworkServices/NAT/portfwd.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/proxy.c b/src/VBox/NetworkServices/NAT/proxy.c
index 848fc7a..d864489 100644
--- a/src/VBox/NetworkServices/NAT/proxy.c
+++ b/src/VBox/NetworkServices/NAT/proxy.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/proxy.h b/src/VBox/NetworkServices/NAT/proxy.h
index 4d52868..bd9efcc 100644
--- a/src/VBox/NetworkServices/NAT/proxy.h
+++ b/src/VBox/NetworkServices/NAT/proxy.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/proxy_dhcp6ds.c b/src/VBox/NetworkServices/NAT/proxy_dhcp6ds.c
index 66920f0..d9e9226 100644
--- a/src/VBox/NetworkServices/NAT/proxy_dhcp6ds.c
+++ b/src/VBox/NetworkServices/NAT/proxy_dhcp6ds.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/proxy_pollmgr.c b/src/VBox/NetworkServices/NAT/proxy_pollmgr.c
index f8bc7e8..8a40d46 100644
--- a/src/VBox/NetworkServices/NAT/proxy_pollmgr.c
+++ b/src/VBox/NetworkServices/NAT/proxy_pollmgr.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -252,7 +252,7 @@ pollmgr_chan_send(int slot, void *buf, size_t nbytes)
 
     AssertReturn(0 <= slot && slot < POLLMGR_CHAN_COUNT, -1);
 
-    /* 
+    /*
      * XXX: Hack alert.  We only ever "sent" single pointer which was
      * simultaneously both the wakeup event for the poll and the
      * argument for the channel handler that it read from the channel.
diff --git a/src/VBox/NetworkServices/NAT/proxy_pollmgr.h b/src/VBox/NetworkServices/NAT/proxy_pollmgr.h
index 5a7112d..221111b 100644
--- a/src/VBox/NetworkServices/NAT/proxy_pollmgr.h
+++ b/src/VBox/NetworkServices/NAT/proxy_pollmgr.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/proxy_rtadvd.c b/src/VBox/NetworkServices/NAT/proxy_rtadvd.c
index 2a27744..281bdbe 100644
--- a/src/VBox/NetworkServices/NAT/proxy_rtadvd.c
+++ b/src/VBox/NetworkServices/NAT/proxy_rtadvd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/proxy_tftpd.c b/src/VBox/NetworkServices/NAT/proxy_tftpd.c
index b124fe5..c1a0cf5 100644
--- a/src/VBox/NetworkServices/NAT/proxy_tftpd.c
+++ b/src/VBox/NetworkServices/NAT/proxy_tftpd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxdns.c b/src/VBox/NetworkServices/NAT/pxdns.c
index 4850fbf..7bacdf5 100644
--- a/src/VBox/NetworkServices/NAT/pxdns.c
+++ b/src/VBox/NetworkServices/NAT/pxdns.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxping.c b/src/VBox/NetworkServices/NAT/pxping.c
index 1781bc7..c391f0e 100644
--- a/src/VBox/NetworkServices/NAT/pxping.c
+++ b/src/VBox/NetworkServices/NAT/pxping.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxping_win.c b/src/VBox/NetworkServices/NAT/pxping_win.c
index bc69969..c14fdbf 100644
--- a/src/VBox/NetworkServices/NAT/pxping_win.c
+++ b/src/VBox/NetworkServices/NAT/pxping_win.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxremap.c b/src/VBox/NetworkServices/NAT/pxremap.c
index 11c0b40..30f8e56 100644
--- a/src/VBox/NetworkServices/NAT/pxremap.c
+++ b/src/VBox/NetworkServices/NAT/pxremap.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxremap.h b/src/VBox/NetworkServices/NAT/pxremap.h
index e024b28..96fd724 100644
--- a/src/VBox/NetworkServices/NAT/pxremap.h
+++ b/src/VBox/NetworkServices/NAT/pxremap.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxtcp.c b/src/VBox/NetworkServices/NAT/pxtcp.c
index cd2482f..4dc0aaa 100644
--- a/src/VBox/NetworkServices/NAT/pxtcp.c
+++ b/src/VBox/NetworkServices/NAT/pxtcp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxtcp.h b/src/VBox/NetworkServices/NAT/pxtcp.h
index 333b4c1..c185411 100644
--- a/src/VBox/NetworkServices/NAT/pxtcp.h
+++ b/src/VBox/NetworkServices/NAT/pxtcp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/pxudp.c b/src/VBox/NetworkServices/NAT/pxudp.c
index e5acb41..0847d73 100644
--- a/src/VBox/NetworkServices/NAT/pxudp.c
+++ b/src/VBox/NetworkServices/NAT/pxudp.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/rtmon_bsd.c b/src/VBox/NetworkServices/NAT/rtmon_bsd.c
index 1fc6cb8..2403055 100644
--- a/src/VBox/NetworkServices/NAT/rtmon_bsd.c
+++ b/src/VBox/NetworkServices/NAT/rtmon_bsd.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/rtmon_linux.c b/src/VBox/NetworkServices/NAT/rtmon_linux.c
index c97ea28..1368c36 100644
--- a/src/VBox/NetworkServices/NAT/rtmon_linux.c
+++ b/src/VBox/NetworkServices/NAT/rtmon_linux.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/rtmon_win.c b/src/VBox/NetworkServices/NAT/rtmon_win.c
index 5119ab5..ed2d6ee 100644
--- a/src/VBox/NetworkServices/NAT/rtmon_win.c
+++ b/src/VBox/NetworkServices/NAT/rtmon_win.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/tftp.h b/src/VBox/NetworkServices/NAT/tftp.h
index 8fb72bd..b5c4a8c 100644
--- a/src/VBox/NetworkServices/NAT/tftp.h
+++ b/src/VBox/NetworkServices/NAT/tftp.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/winpoll.h b/src/VBox/NetworkServices/NAT/winpoll.h
index 6e83f81..ed6a432 100644
--- a/src/VBox/NetworkServices/NAT/winpoll.h
+++ b/src/VBox/NetworkServices/NAT/winpoll.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NAT/winutils.h b/src/VBox/NetworkServices/NAT/winutils.h
index beef7ba..8c3f8f0 100644
--- a/src/VBox/NetworkServices/NAT/winutils.h
+++ b/src/VBox/NetworkServices/NAT/winutils.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/ComHostUtils.cpp b/src/VBox/NetworkServices/NetLib/ComHostUtils.cpp
index c9a8e06..338da60 100644
--- a/src/VBox/NetworkServices/NetLib/ComHostUtils.cpp
+++ b/src/VBox/NetworkServices/NetLib/ComHostUtils.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetARP.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetARP.cpp
index 2ac61be..a301e98 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetARP.cpp
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetARP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp
index d3848c5..20fa41c 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.h b/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.h
index 69963a0..219db44 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.h
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp
index b496280..130fda6 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetLib.h b/src/VBox/NetworkServices/NetLib/VBoxNetLib.h
index 43af321..20277b6 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetLib.h
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetLib.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetPortForwardString.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetPortForwardString.cpp
index fe1e29f..9d39607 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetPortForwardString.cpp
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetPortForwardString.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp b/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp
index 3238a12..5052f3d 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp
+++ b/src/VBox/NetworkServices/NetLib/VBoxNetUDP.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/VBoxPortForwardString.h b/src/VBox/NetworkServices/NetLib/VBoxPortForwardString.h
index a1b9676..2981f87 100644
--- a/src/VBox/NetworkServices/NetLib/VBoxPortForwardString.h
+++ b/src/VBox/NetworkServices/NetLib/VBoxPortForwardString.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2016 Oracle Corporation
+ * Copyright (C) 2009-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/cpp/utils.h b/src/VBox/NetworkServices/NetLib/cpp/utils.h
index f8ce98c..78e0dcc 100644
--- a/src/VBox/NetworkServices/NetLib/cpp/utils.h
+++ b/src/VBox/NetworkServices/NetLib/cpp/utils.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/shared_ptr.h b/src/VBox/NetworkServices/NetLib/shared_ptr.h
index d539b51..2d2fc97 100644
--- a/src/VBox/NetworkServices/NetLib/shared_ptr.h
+++ b/src/VBox/NetworkServices/NetLib/shared_ptr.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/NetworkServices/NetLib/utils.h b/src/VBox/NetworkServices/NetLib/utils.h
index 25f5c89..58228a4 100644
--- a/src/VBox/NetworkServices/NetLib/utils.h
+++ b/src/VBox/NetworkServices/NetLib/utils.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/RDP/.scm-settings b/src/VBox/RDP/.scm-settings
new file mode 100644
index 0000000..3694157
--- /dev/null
+++ b/src/VBox/RDP/.scm-settings
@@ -0,0 +1,35 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for RDP.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+--filter-out-dirs  /client-*/keymaps/.
+--filter-out-dirs  /client-*/doc/.
+
+--filter-out-files /client-*/bootstrap
+--filter-out-files /client-*/config.*
+--filter-out-files /client-*/configure.ac
+--filter-out-files /client-*/install-sh
+--filter-out-files /client-*/Makefile.in
+--filter-out-files /client-*/proto.head
+--filter-out-files /client-*/proto.tail
+--filter-out-files /client-*/rdesktop.spec
+--filter-out-files /client-*/README
+
+/client-*/*.c: --external-copyright --lgpl-disclaimer --no-convert-tabs --no-fix-todos --no-strip-trailing-blanks
+/client-*/*.h: --external-copyright --lgpl-disclaimer --no-convert-tabs --no-fix-todos --no-strip-trailing-blanks
+/client-*/configure: --external-copyright --lgpl-disclaimer --no-convert-tabs --no-fix-todos --no-strip-trailing-blanks
+/client-*/vrdp/*: --no-external-copyright --no-lgpl-disclaimer --fix-todos --strip-trailing-blanks
+
diff --git a/src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c b/src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c
index 577e0c1..3081c86 100644
--- a/src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c
+++ b/src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c
@@ -1,12 +1,10 @@
+/* $Id: rdpusb.c $ */
 /** @file
- *
- * Remote Desktop Protocol client:
- * USB Channel Process Functions
- *
+ * Remote Desktop Protocol client - USB Channel Process Functions
  */
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -370,7 +368,7 @@ vrdp_usb_status (int rc, VUSBDEV *pdev)
 
 static PUSBPROXYDEV g_proxies = NULL;
 
-static PUSBPROXYDEV 
+static PUSBPROXYDEV
 devid2proxy (uint32_t devid)
 {
 	PUSBPROXYDEV proxy = g_proxies;
diff --git a/src/VBox/RDP/client-1.8.3/vrdp/vrdpusb.h b/src/VBox/RDP/client-1.8.3/vrdp/vrdpusb.h
index f846970..7d86b88 100644
--- a/src/VBox/RDP/client-1.8.3/vrdp/vrdpusb.h
+++ b/src/VBox/RDP/client-1.8.3/vrdp/vrdpusb.h
@@ -1,9 +1,10 @@
+/* $Id: vrdpusb.h $ */
 /** @file
- *
+ * Remote Desktop Protocol client - USB Channel
  */
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -27,4 +28,5 @@
 #define VRDP_USB_CAPS_FLAG_ASYNC    (0)
 #define VRDP_USB_CAPS_FLAG_POLL     (1)
 
-#endif /* __VRDPUSB__H  */
+#endif /* !__VRDPUSB__H  */
+
diff --git a/src/VBox/Runtime/.scm-settings b/src/VBox/Runtime/.scm-settings
index 36d2a02..cd9ec8e 100644
--- a/src/VBox/Runtime/.scm-settings
+++ b/src/VBox/Runtime/.scm-settings
@@ -24,12 +24,77 @@
 # terms and conditions of either the GPL or the CDDL or both.
 #
 
+--license-ose-dual
 
---filter-out-dirs  "*/r0drv/solaris/vbi/*/."
---filter-out-dirs  "*/common/math/gcc/."
 
---filter-out-files "*/testcase/soundcard.h"
---filter-out-files "*/include/internal/ldrELF*.h"
---filter-out-files "*/common/math/x86/fenv-x86.c"
---filter-out-files "*/common/checksum/md5.cpp"
+/common/asn1/oiddb.cfg: --treat-as Makefile
+
+# Skip test certificates.
+--filter-out-files /testcase/tstRTCrX509*.pem
+--filter-out-files /testcase/tstRTCrX509*.der
+
+# Skip test binaries and other output/input files.
+--filter-out-files /testcase/*.bin
+--filter-out-files /testcase/*.o
+--filter-out-files /testcase/tstRTLdrMachORelocs-1.o
+--filter-out-files /testcase/tstRTLdrMachORelocs-1.S
+--filter-out-files /testcase/tstRTLdrMachORelocs-1.disas
+
+# external code
+/r0drv/freebsd/alloc-r0drv-freebsd.c           : --external-copyright
+/r0drv/freebsd/assert-r0drv-freebsd.c          : --external-copyright
+/r0drv/freebsd/initterm-r0drv-freebsd.c        : --external-copyright
+/r0drv/freebsd/memobj-r0drv-freebsd.c          : --external-copyright
+/r0drv/freebsd/process-r0drv-freebsd.c         : --external-copyright
+/r0drv/freebsd/semevent-r0drv-freebsd.c        : --external-copyright
+/r0drv/freebsd/semeventmulti-r0drv-freebsd.c   : --external-copyright
+/r0drv/freebsd/semfastmutex-r0drv-freebsd.c    : --external-copyright
+/r0drv/freebsd/spinlock-r0drv-freebsd.c        : --external-copyright
+/r0drv/freebsd/the-freebsd-kernel.h            : --external-copyright
+/r0drv/freebsd/thread2-r0drv-freebsd.c         : --external-copyright
+/r0drv/freebsd/time-r0drv-freebsd.c            : --external-copyright
+/r0drv/freebsd/timer-r0drv-freebsd.c           : --external-copyright
+
+/r0drv/netbsd/assert-r0drv-netbsd.c            : --external-copyright
+/r0drv/netbsd/initterm-r0drv-netbsd.c          : --external-copyright
+/r0drv/netbsd/memobj-r0drv-netbsd.c            : --external-copyright
+/r0drv/netbsd/process-r0drv-netbsd.c           : --external-copyright
+/r0drv/netbsd/semevent-r0drv-netbsd.c          : --external-copyright
+/r0drv/netbsd/semeventmulti-r0drv-netbsd.c     : --external-copyright
+/r0drv/netbsd/semfastmutex-r0drv-netbsd.c      : --external-copyright
+/r0drv/netbsd/spinlock-r0drv-netbsd.c          : --external-copyright
+/r0drv/netbsd/the-netbsd-kernel.h              : --external-copyright
+/r0drv/netbsd/thread2-r0drv-netbsd.c           : --external-copyright
+/r0drv/netbsd/time-r0drv-netbsd.c              : --external-copyright
+
+/r0drv/os2/alloc-r0drv-os2.cpp                 : --external-copyright
+/r0drv/os2/assert-r0drv-os2.cpp                : --external-copyright
+/r0drv/os2/assertA-r0drv-os2.asm               : --external-copyright
+/r0drv/os2/initterm-r0drv-os2.cpp              : --external-copyright
+/r0drv/os2/memobj-r0drv-os2.cpp                : --external-copyright
+/r0drv/os2/process-r0drv-os2.cpp               : --external-copyright
+/r0drv/os2/RTR0AssertPanicSystem-r0drv-os2.asm : --external-copyright
+/r0drv/os2/RTR0Os2DHQueryDOSVar.asm            : --external-copyright
+/r0drv/os2/RTR0Os2DHVMGlobalToProcess.asm      : --external-copyright
+/r0drv/os2/semevent-r0drv-os2.cpp              : --external-copyright
+/r0drv/os2/semeventmulti-r0drv-os2.cpp         : --external-copyright
+/r0drv/os2/semfastmutex-r0drv-os2.cpp          : --external-copyright
+/r0drv/os2/spinlock-r0drv-os2.cpp              : --external-copyright
+/r0drv/os2/the-os2-kernel.h                    : --external-copyright
+/r0drv/os2/thread-r0drv-os2.cpp                : --external-copyright
+/r0drv/os2/thread2-r0drv-os2.cpp               : --external-copyright
+/r0drv/os2/time-r0drv-os2.cpp                  : --external-copyright
+/r0drv/os2/timer-r0drv-os2.cpp                 : --external-copyright
+/r0drv/os2/timerA-r0drv-os2.asm                : --external-copyright
+
+/r3/os2/time-os2.cpp                           : --external-copyright
+/r0drv/os2/os2imports.imp                      : --external-copyright --treat-as .def
+
+/r3/win/VBoxRT-msvcp100-win32.def              : --external-copyright
+/r3/win/VBoxRT-msvcr100-win32.def              : --external-copyright
+
+/common/math/x86/fenv-x86.c                    : --external-copyright --no-convert-tabs
+
+/common/math/gcc/*                             : --external-copyright --no-convert-tabs --dont-set-svn-keywords
+/common/math/gcc/udivmoddi4.c                  : --no-external-copyright --convert-tabs --set-svn-keywords
 
diff --git a/src/VBox/Runtime/Makefile.kmk b/src/VBox/Runtime/Makefile.kmk
index 6b1e6c3..88a0dbf 100644
--- a/src/VBox/Runtime/Makefile.kmk
+++ b/src/VBox/Runtime/Makefile.kmk
@@ -623,6 +623,7 @@ RuntimeR3_SOURCES       = \
 	common/vfs/vfsmsg.cpp \
 	common/vfs/vfsprogress.cpp \
 	common/vfs/vfsreadahead.cpp \
+	common/vfs/vfsstddir.cpp \
 	common/vfs/vfsstdfile.cpp \
 	common/vfs/vfsstdpipe.cpp \
 	common/zip/tar.cpp \
@@ -791,7 +792,6 @@ RuntimeR3_SOURCES.win = \
 	common/dbg/dbgmoddbghelp.cpp \
 	generic/cdrom-generic.cpp \
 	generic/RTDirExists-generic.cpp \
-	generic/RTDirQueryInfo-generic.cpp \
 	generic/RTDirSetTimes-generic.cpp \
 	generic/RTFileExists-generic.cpp \
 	generic/RTFileSetAllocationSize-generic.cpp \
@@ -815,11 +815,15 @@ RuntimeR3_SOURCES.win = \
 	nt/RTErrConvertFromNtStatus.cpp \
  	nt/RTNtPathExpand8dot3Path.cpp \
  	nt/RTNtPathFindPossible8dot3Name.cpp \
+ 	nt/fileioutils-nt.cpp \
  	r3/generic/RTLocaleQueryLocaleName-r3-generic.cpp \
+	r3/nt/dirrel-r3-nt.cpp \
  	r3/nt/fs-nt.cpp \
  	r3/nt/pathint-nt.cpp \
  	r3/nt/RTFileQueryFsSizes-nt.cpp \
+ 	r3/nt/RTFileSetMode-r3-nt.cpp \
  	r3/nt/RTPathQueryInfo-nt.cpp \
+ 	r3/nt/RTPathSetMode-r3-nt.cpp \
  	r3/nt/RTProcQueryParent-r3-nt.cpp \
 	r3/win/env-win.cpp \
 	r3/win/RTCrStoreCreateSnapshotById-win.cpp \
@@ -834,7 +838,7 @@ RuntimeR3_SOURCES.win = \
 	r3/win/alloc-win.cpp \
 	r3/win/allocex-win.cpp \
 	r3/win/dir-win.cpp \
-	$(if-expr defined(VBOX_WITH_NT_DIRENUM),r3/nt/direnum-r3-nt.cpp,r3/win/direnum-win.cpp) \
+	$(if-expr defined(VBOX_WITH_NT_DIRENUM),r3/nt/direnum-r3-nt.cpp,r3/win/direnum-win.cpp generic/RTDirQueryInfo-generic.cpp) \
 	r3/win/errvars-win.cpp \
 	r3/win/fileio-win.cpp \
 	r3/win/init-win.cpp \
@@ -852,7 +856,6 @@ RuntimeR3_SOURCES.win = \
 	r3/win/semeventmulti-win.cpp \
 	r3/win/semmutex-win.cpp \
 	r3/win/symlink-win.cpp \
-	r3/win/rtFileNativeSetAttributes-win.cpp \
 	r3/win/thread-win.cpp \
 	r3/win/thread2-win.cpp \
 	$(if-expr 1,r3/win/time-win.cpp,r3/nt/time-nt.cpp) \
@@ -896,6 +899,7 @@ RuntimeR3_SOURCES.linux = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/posix/allocex-r3-posix.cpp \
 	r3/linux/RTThreadGetNativeState-linux.cpp \
 	r3/linux/krnlmod-linux.cpp \
@@ -1008,6 +1012,7 @@ RuntimeR3_SOURCES.os2   = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/os2/filelock-os2.cpp \
 	r3/os2/mp-os2.cpp \
 	r3/os2/pipe-os2.cpp \
@@ -1091,6 +1096,7 @@ RuntimeR3_SOURCES.darwin = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/posix/RTFileQueryFsSizes-posix.cpp \
 	r3/posix/RTHandleGetStandard-posix.cpp \
 	r3/posix/RTMemProtect-posix.cpp \
@@ -1165,6 +1171,7 @@ RuntimeR3_SOURCES.freebsd = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/posix/RTFileQueryFsSizes-posix.cpp \
 	r3/posix/RTHandleGetStandard-posix.cpp \
 	r3/posix/RTMemProtect-posix.cpp \
@@ -1238,6 +1245,7 @@ RuntimeR3_SOURCES.netbsd = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/posix/RTFileQueryFsSizes-posix.cpp \
 	r3/posix/RTHandleGetStandard-posix.cpp \
 	r3/posix/RTMemProtect-posix.cpp \
@@ -1304,6 +1312,7 @@ RuntimeR3_SOURCES.solaris = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/posix/RTFileQueryFsSizes-posix.cpp \
 	r3/posix/RTFileSetAllocationSize-posix.cpp \
 	r3/posix/RTHandleGetStandard-posix.cpp \
@@ -1395,6 +1404,7 @@ RuntimeR3_SOURCES.haiku = \
  	r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp \
 	r3/generic/RTLocaleQueryUserCountryCode-r3-generic.cpp \
  	r3/generic/RTTimeZoneGetCurrent-generic.cpp \
+	r3/generic/dirrel-r3-generic.cpp \
 	r3/posix/RTFileQueryFsSizes-posix.cpp \
 	r3/posix/RTHandleGetStandard-posix.cpp \
 	r3/posix/RTMemProtect-posix.cpp \
@@ -2110,6 +2120,7 @@ RuntimeR0Drv_SOURCES    = \
 	common/checksum/ipv6.cpp \
 	common/err/RTErrConvertToErrno.cpp \
 	common/err/RTErrConvertFromErrno.cpp \
+	common/err/errinfo.cpp \
 	common/log/log.cpp \
 	common/log/logellipsis.cpp \
 	common/log/logrel.cpp \
@@ -2328,7 +2339,6 @@ RuntimeR0Drv_SOURCES.win = \
 	common/checksum/sha512str.cpp \
 	common/checksum/sha512t224str.cpp \
 	common/checksum/sha512t256str.cpp \
-	common/err/errinfo.cpp \
 	common/err/errinfolog.cpp \
 	common/path/RTPathChangeToUnixSlashes.cpp \
 	common/math/bignum.cpp \
diff --git a/src/VBox/Runtime/VBox/LoadVBoxDDU.cpp b/src/VBox/Runtime/VBox/LoadVBoxDDU.cpp
new file mode 100644
index 0000000..f14be75
--- /dev/null
+++ b/src/VBox/Runtime/VBox/LoadVBoxDDU.cpp
@@ -0,0 +1,125 @@
+/* $Id: LoadVBoxDDU.cpp $ */
+/** @file
+ * VirtualBox Runtime - Try Load VBoxDDU to get VFS chain providers from storage.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/initterm.h>
+#include <iprt/ldr.h>
+#include <iprt/err.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+
+
+/**
+ * Class used for registering a VFS chain element provider.
+ */
+class LoadVBoxDDU
+{
+private:
+    /** The VBoxDDU handle. */
+    RTLDRMOD g_hLdrMod;
+
+public:
+    LoadVBoxDDU(void) : g_hLdrMod(NIL_RTLDRMOD)
+    {
+        int rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
+        if (RT_SUCCESS(rc))
+        {
+            char szPath[RTPATH_MAX];
+
+            /* Try private arch dir first. */
+            rc = RTPathAppPrivateArch(szPath, sizeof(szPath));
+            if (RT_SUCCESS(rc))
+                rc = RTPathAppend(szPath, sizeof(szPath), "VBoxDDU");
+            if (RT_SUCCESS(rc))
+                rc = RTStrCat(szPath, sizeof(szPath), RTLdrGetSuff());
+            if (RT_SUCCESS(rc))
+            {
+                rc = RTLdrLoad(szPath, &g_hLdrMod);
+                if (RT_SUCCESS(rc))
+                    return;
+            }
+
+            /* Try shared libs dir next. */
+            rc = RTPathSharedLibs(szPath, sizeof(szPath));
+            if (RT_SUCCESS(rc))
+                rc = RTPathAppend(szPath, sizeof(szPath), "VBoxDDU");
+            if (RT_SUCCESS(rc))
+                rc = RTStrCat(szPath, sizeof(szPath), RTLdrGetSuff());
+            if (RT_SUCCESS(rc))
+            {
+                rc = RTLdrLoad(szPath, &g_hLdrMod);
+                if (RT_SUCCESS(rc))
+                    return;
+            }
+
+            /* Try exec dir after that. */
+            rc = RTPathExecDir(szPath, sizeof(szPath));
+            if (RT_SUCCESS(rc))
+                rc = RTPathAppend(szPath, sizeof(szPath), "VBoxDDU");
+            if (RT_SUCCESS(rc))
+                rc = RTStrCat(szPath, sizeof(szPath), RTLdrGetSuff());
+            if (RT_SUCCESS(rc))
+            {
+                rc = RTLdrLoad(szPath, &g_hLdrMod);
+                if (RT_SUCCESS(rc))
+                    return;
+            }
+
+            /* Try exec dir parent after that. */
+            rc = RTPathExecDir(szPath, sizeof(szPath));
+            if (RT_SUCCESS(rc))
+                rc = RTPathAppend(szPath, sizeof(szPath), ".." RTPATH_SLASH_STR "VBoxDDU");
+            if (RT_SUCCESS(rc))
+                rc = RTStrCat(szPath, sizeof(szPath), RTLdrGetSuff());
+            if (RT_SUCCESS(rc))
+            {
+                rc = RTLdrLoad(szPath, &g_hLdrMod);
+                if (RT_SUCCESS(rc))
+                    return;
+            }
+
+            /* Didn't work out, don't sweat it. */
+            g_hLdrMod = NIL_RTLDRMOD;
+        }
+    }
+
+    ~LoadVBoxDDU()
+    {
+        if (g_hLdrMod != NIL_RTLDRMOD)
+        {
+            RTLdrClose(g_hLdrMod);
+            g_hLdrMod = NIL_RTLDRMOD;
+        }
+    }
+
+    static LoadVBoxDDU s_LoadVBoxDDU;
+};
+
+/* static*/ LoadVBoxDDU LoadVBoxDDU::s_LoadVBoxDDU;
+
diff --git a/src/VBox/Runtime/common/asm/ASMBitFirstSetU64.asm b/src/VBox/Runtime/common/asm/ASMBitFirstSetU64.asm
index b3537c0..e09449a 100644
--- a/src/VBox/Runtime/common/asm/ASMBitFirstSetU64.asm
+++ b/src/VBox/Runtime/common/asm/ASMBitFirstSetU64.asm
@@ -114,4 +114,3 @@ BEGINPROC_EXPORTED ASMBitFirstSetU64
 %endif
 ENDPROC ASMBitFirstSetU64
 
-
diff --git a/src/VBox/Runtime/common/asm/ASMBitNextClear.asm b/src/VBox/Runtime/common/asm/ASMBitNextClear.asm
index d23beba..6971e39 100644
--- a/src/VBox/Runtime/common/asm/ASMBitNextClear.asm
+++ b/src/VBox/Runtime/common/asm/ASMBitNextClear.asm
@@ -171,4 +171,3 @@ BEGINPROC_EXPORTED ASMBitNextClear
         jmp     .return
 ENDPROC ASMBitNextClear
 
-
diff --git a/src/VBox/Runtime/common/asm/ASMBitNextSet.asm b/src/VBox/Runtime/common/asm/ASMBitNextSet.asm
index 2ee14b0..2cd9979 100644
--- a/src/VBox/Runtime/common/asm/ASMBitNextSet.asm
+++ b/src/VBox/Runtime/common/asm/ASMBitNextSet.asm
@@ -171,4 +171,3 @@ BEGINPROC_EXPORTED ASMBitNextSet
         jmp     .return
 ENDPROC ASMBitNextSet
 
-
diff --git a/src/VBox/Runtime/common/asm/ASMGetLDTR.asm b/src/VBox/Runtime/common/asm/ASMGetLDTR.asm
index d5c6126..65f5d9c 100644
--- a/src/VBox/Runtime/common/asm/ASMGetLDTR.asm
+++ b/src/VBox/Runtime/common/asm/ASMGetLDTR.asm
@@ -34,7 +34,7 @@ BEGINCODE
 ;;
 ; Get the LDTR register.
 ; @returns LDTR.
-; 
+;
 BEGINPROC_EXPORTED ASMGetLDTR
         sldt    ax
         movzx   eax, ax
diff --git a/src/VBox/Runtime/common/asm/ASMGetTR.asm b/src/VBox/Runtime/common/asm/ASMGetTR.asm
index bae3c1d..2c0ed0c 100644
--- a/src/VBox/Runtime/common/asm/ASMGetTR.asm
+++ b/src/VBox/Runtime/common/asm/ASMGetTR.asm
@@ -34,7 +34,7 @@ BEGINCODE
 ;;
 ; Get the TR register.
 ; @returns TR.
-; 
+;
 BEGINPROC_EXPORTED ASMGetTR
         str     ax
         movzx   eax, ax
diff --git a/src/VBox/Runtime/common/asm/ASMMultU64ByU32DivByU32.asm b/src/VBox/Runtime/common/asm/ASMMultU64ByU32DivByU32.asm
index 731eabc..7fa5469 100644
--- a/src/VBox/Runtime/common/asm/ASMMultU64ByU32DivByU32.asm
+++ b/src/VBox/Runtime/common/asm/ASMMultU64ByU32DivByU32.asm
@@ -100,4 +100,3 @@ BEGINPROC_EXPORTED ASMMultU64ByU32DivByU32
     ret
 ENDPROC ASMMultU64ByU32DivByU32
 
-
diff --git a/src/VBox/Runtime/common/asn1/oiddb.cfg b/src/VBox/Runtime/common/asn1/oiddb.cfg
index c55140e..119b81b 100644
--- a/src/VBox/Runtime/common/asn1/oiddb.cfg
+++ b/src/VBox/Runtime/common/asn1/oiddb.cfg
@@ -2,17 +2,17 @@
 ## @file
 # OID names.
 #
-# This is processed by oid2c.cpp and turned into a database which 
+# This is processed by oid2c.cpp and turned into a database which
 # the ASN.1 dumper code is using.
 #
 # Two formats here:
-#       1. Simple:              
+#       1. Simple:
 #               <ODI> = <name>
 #       2. The dumpasn1.cfg one:
 #               ODI = <ODI>
 #               <other stuff> = <ignored>
 #               Description = <Description>
-#          
+#
 # The file doesn't need to be sorted, but we keep it sorted to make it
 # simpler to insert new OIDs and spot bugs.
 #
@@ -39,40 +39,40 @@
 #
 
 
-1.2.840                         = usa                                       
-1.2.840.113549                  = rsadsi                                    
-1.2.840.113549.1                = pkcs                                      
-1.2.840.113549.1.1              = pkcs1                                     
-1.2.840.113549.1.1.1            = pkcs1-RsaEncryption                       
-1.2.840.113549.1.1.2            = pkcs1-Md2WithRsaEncryption                
-1.2.840.113549.1.1.3            = pkcs1-Md4WithRsaEncryption                
-1.2.840.113549.1.1.4            = pkcs1-Md5WithRsaEncryption                
-1.2.840.113549.1.1.5            = pkcs1-Sha1WithRsaEncryption               
-1.2.840.113549.1.1.10           = pkcs1-RsaPss                              
-1.2.840.113549.1.1.11           = pkcs1-Sha256WithRsaEncryption             
-1.2.840.113549.1.1.12           = pkcs1-Sha384WithRsaEncryption             
-1.2.840.113549.1.1.13           = pkcs1-Sha512WithRsaEncryption             
-1.2.840.113549.1.1.14           = pkcs1-Sha224WithRsaEncryption             
-1.2.840.113549.1.7              = pkcs7                                     
-1.2.840.113549.1.7.1            = pkcs7-data                                
-1.2.840.113549.1.7.2            = pkcs7-signedData                          
-1.2.840.113549.1.7.3            = pkcs7-envelopedData                       
-1.2.840.113549.1.7.4            = pkcs7-signedAndEnvelopedData              
-1.2.840.113549.1.7.5            = pkcs7-digestedData                        
-1.2.840.113549.1.7.6            = pkcs7-encryptedData                       
-1.2.840.113549.1.9              = pkcs9                                     
-1.2.840.113549.1.9.1            = pkcs9-EMailAddress                        
-1.2.840.113549.1.9.2            = pkcs9-UntrustedName                       
-1.2.840.113549.1.9.3            = pkcs9-ContentType                         
-1.2.840.113549.1.9.4            = pkcs9-MessageDigest                       
-1.2.840.113549.1.9.5            = pkcs9-SigningTime                         
-1.2.840.113549.1.9.6            = pkcs9-CounterSignature                    
-1.2.840.113549.1.9.7            = pkcs9-challengePassword                   
-1.2.840.113549.1.9.8            = pkcs9-UnstructuredAddress                 
-1.2.840.113549.1.9.9            = pkcs9-ExtendedCertificateAttributes       
-1.2.840.113549.1.9.13           = pkcs9-SigningDescription                  
-1.2.840.113549.1.9.14           = pkcs9-ExtensionRequest                    
-1.2.840.113549.1.9.15           = pkcs9-SMimeCapabilities                   
+1.2.840                         = usa
+1.2.840.113549                  = rsadsi
+1.2.840.113549.1                = pkcs
+1.2.840.113549.1.1              = pkcs1
+1.2.840.113549.1.1.1            = pkcs1-RsaEncryption
+1.2.840.113549.1.1.2            = pkcs1-Md2WithRsaEncryption
+1.2.840.113549.1.1.3            = pkcs1-Md4WithRsaEncryption
+1.2.840.113549.1.1.4            = pkcs1-Md5WithRsaEncryption
+1.2.840.113549.1.1.5            = pkcs1-Sha1WithRsaEncryption
+1.2.840.113549.1.1.10           = pkcs1-RsaPss
+1.2.840.113549.1.1.11           = pkcs1-Sha256WithRsaEncryption
+1.2.840.113549.1.1.12           = pkcs1-Sha384WithRsaEncryption
+1.2.840.113549.1.1.13           = pkcs1-Sha512WithRsaEncryption
+1.2.840.113549.1.1.14           = pkcs1-Sha224WithRsaEncryption
+1.2.840.113549.1.7              = pkcs7
+1.2.840.113549.1.7.1            = pkcs7-data
+1.2.840.113549.1.7.2            = pkcs7-signedData
+1.2.840.113549.1.7.3            = pkcs7-envelopedData
+1.2.840.113549.1.7.4            = pkcs7-signedAndEnvelopedData
+1.2.840.113549.1.7.5            = pkcs7-digestedData
+1.2.840.113549.1.7.6            = pkcs7-encryptedData
+1.2.840.113549.1.9              = pkcs9
+1.2.840.113549.1.9.1            = pkcs9-EMailAddress
+1.2.840.113549.1.9.2            = pkcs9-UntrustedName
+1.2.840.113549.1.9.3            = pkcs9-ContentType
+1.2.840.113549.1.9.4            = pkcs9-MessageDigest
+1.2.840.113549.1.9.5            = pkcs9-SigningTime
+1.2.840.113549.1.9.6            = pkcs9-CounterSignature
+1.2.840.113549.1.9.7            = pkcs9-challengePassword
+1.2.840.113549.1.9.8            = pkcs9-UnstructuredAddress
+1.2.840.113549.1.9.9            = pkcs9-ExtendedCertificateAttributes
+1.2.840.113549.1.9.13           = pkcs9-SigningDescription
+1.2.840.113549.1.9.14           = pkcs9-ExtensionRequest
+1.2.840.113549.1.9.15           = pkcs9-SMimeCapabilities
 1.2.840.113549.1.9.16           = pkcs9-SMime
 1.2.840.113549.1.9.16.1         = pkcs9-SMime-ct
 1.2.840.113549.1.9.16.1.2       = pkcs9-ct-AuthData
diff --git a/src/VBox/Runtime/common/checksum/crc16ccitt.cpp b/src/VBox/Runtime/common/checksum/crc16ccitt.cpp
index 82b0fbb..c706365 100644
--- a/src/VBox/Runtime/common/checksum/crc16ccitt.cpp
+++ b/src/VBox/Runtime/common/checksum/crc16ccitt.cpp
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -105,4 +106,3 @@ RTDECL(uint16_t)    RTCrc16CcittFinish(uint16_t uCrc)
     return uCrc;
 }
 
-
diff --git a/src/VBox/Runtime/common/crypto/pemfile.cpp b/src/VBox/Runtime/common/crypto/pemfile.cpp
index 8a36df2..058b0ce 100644
--- a/src/VBox/Runtime/common/crypto/pemfile.cpp
+++ b/src/VBox/Runtime/common/crypto/pemfile.cpp
@@ -414,28 +414,31 @@ RTDECL(int) RTCrPemParseContent(void const *pvContent, size_t cbContent, uint32_
 
             RTCrPemFreeSections(*ppSectionHead);
         }
-        else if (!(fFlags & RTCRPEMREADFILE_F_ONLY_PEM))
+        else
         {
-            /*
-             * No PEM section found.  Return the whole file as one binary section.
-             */
-            //pSection->pNext       = NULL;
-            //pSection->pMarker     = NULL;
-            pSection->pbData        = (uint8_t *)RTMemDup(pbContent, cbContent);
-            pSection->cbData        = cbContent;
-            //pSection->pszPreamble = NULL;
-            //pSection->cchPreamble = 0;
-            if (pSection->pbData)
+            if (!(fFlags & RTCRPEMREADFILE_F_ONLY_PEM))
             {
-                *ppSectionHead = pSection;
-                return VINF_SUCCESS;
-            }
+                /*
+                 * No PEM section found.  Return the whole file as one binary section.
+                 */
+                //pSection->pNext       = NULL;
+                //pSection->pMarker     = NULL;
+                pSection->pbData        = (uint8_t *)RTMemDup(pbContent, cbContent);
+                pSection->cbData        = cbContent;
+                //pSection->pszPreamble = NULL;
+                //pSection->cchPreamble = 0;
+                if (pSection->pbData)
+                {
+                    *ppSectionHead = pSection;
+                    return VINF_SUCCESS;
+                }
 
-            rc = VERR_NO_MEMORY;
+                rc = VERR_NO_MEMORY;
+            }
+            else
+                rc = VWRN_NOT_FOUND;
             RTMemFree(pSection);
         }
-        else
-            rc = VWRN_NOT_FOUND;
     }
     else
         rc = VERR_NO_MEMORY;
diff --git a/src/VBox/Runtime/common/crypto/store-cert-add-basic.cpp b/src/VBox/Runtime/common/crypto/store-cert-add-basic.cpp
index d267139..c4bbafd 100644
--- a/src/VBox/Runtime/common/crypto/store-cert-add-basic.cpp
+++ b/src/VBox/Runtime/common/crypto/store-cert-add-basic.cpp
@@ -658,7 +658,7 @@ RTDECL(int) RTCrStoreCertAddFromDir(RTCRSTORE hStore, uint32_t fFlags, const cha
             /*
              * Enumerate the directory.
              */
-            PRTDIR hDir;
+            RTDIR hDir;
             rc = RTDirOpen(&hDir, pszDir);
             if (RT_SUCCESS(rc))
             {
@@ -766,7 +766,7 @@ RTDECL(int) RTCrStoreCertAddWantedFromDir(RTCRSTORE hStore, uint32_t fFlags,
             /*
              * Enumerate the directory.
              */
-            PRTDIR hDir;
+            RTDIR hDir;
             rc = RTDirOpen(&hDir, pszDir);
             if (RT_SUCCESS(rc))
             {
diff --git a/src/VBox/Runtime/common/dbg/dbgcfg.cpp b/src/VBox/Runtime/common/dbg/dbgcfg.cpp
index 2b558b5..2f33acd 100644
--- a/src/VBox/Runtime/common/dbg/dbgcfg.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgcfg.cpp
@@ -356,8 +356,8 @@ static bool rtDbgCfgIsXxxxAndFixCaseWorker(char *pszPath, size_t offLastComp, RT
     char chSaved = *pszName;
     *pszName = '\0';
 
-    PRTDIR pDir;
-    int rc = RTDirOpen(&pDir, pszPath);
+    RTDIR hDir;
+    int rc = RTDirOpen(&hDir, pszPath);
     if (RT_FAILURE(rc))
         return false;
 
@@ -372,7 +372,7 @@ static bool rtDbgCfgIsXxxxAndFixCaseWorker(char *pszPath, size_t offLastComp, RT
             uint8_t     ab[_4K];
         } u;
         size_t cbBuf = sizeof(u);
-        rc = RTDirRead(pDir, &u.Entry, &cbBuf);
+        rc = RTDirRead(hDir, &u.Entry, &cbBuf);
         if (RT_FAILURE(rc))
             break;
 
@@ -386,13 +386,13 @@ static bool rtDbgCfgIsXxxxAndFixCaseWorker(char *pszPath, size_t offLastComp, RT
                 RTDirQueryUnknownType(pszPath, true /*fFollowSymlinks*/, &u.Entry.enmType);
             if (u.Entry.enmType == enmType)
             {
-                RTDirClose(pDir);
+                RTDirClose(hDir);
                 return true;
             }
         }
     }
 
-    RTDirClose(pDir);
+    RTDirClose(hDir);
     *pszName = '\0';
 
     return false;
diff --git a/src/VBox/Runtime/common/dvm/dvm.cpp b/src/VBox/Runtime/common/dvm/dvm.cpp
index 272d52a..5990877 100644
--- a/src/VBox/Runtime/common/dvm/dvm.cpp
+++ b/src/VBox/Runtime/common/dvm/dvm.cpp
@@ -100,7 +100,7 @@ extern RTDVMFMTOPS g_rtDvmFmtBsdLbl;
 /**
  * Supported volume formats.
  */
-static PCRTDVMFMTOPS g_aDvmFmts[] =
+static PCRTDVMFMTOPS const g_aDvmFmts[] =
 {
     &g_rtDvmFmtMbr,
     &g_rtDvmFmtGpt,
@@ -112,11 +112,12 @@ static PCRTDVMFMTOPS g_aDvmFmts[] =
  *
  * This is indexed by RTDVMVOLTYPE.
  */
-static const char * g_apcszDvmVolTypes[] =
+static const char * const g_apszDvmVolTypes[] =
 {
     "Invalid",
     "Unknown",
     "NTFS",
+    "FAT12",
     "FAT16",
     "FAT32",
     "Linux swap",
@@ -129,6 +130,8 @@ static const char * g_apcszDvmVolTypes[] =
     "Mac OS X HFS or HFS+",
     "Solaris"
 };
+AssertCompile(RT_ELEMENTS(g_apszDvmVolTypes) == RTDVMVOLTYPE_END);
+
 
 /**
  * Creates a new volume.
@@ -138,13 +141,9 @@ static const char * g_apcszDvmVolTypes[] =
  * @param   hVolFmt  The format specific volume handle.
  * @param   phVol    Where to store the generic volume handle on success.
  */
-static int rtDvmVolumeCreate(PRTDVMINTERNAL pThis, RTDVMVOLUMEFMT hVolFmt,
-                             PRTDVMVOLUME phVol)
+static int rtDvmVolumeCreate(PRTDVMINTERNAL pThis, RTDVMVOLUMEFMT hVolFmt, PRTDVMVOLUME phVol)
 {
-    int rc = VINF_SUCCESS;
-    PRTDVMVOLUMEINTERNAL pVol = NULL;
-
-    pVol = (PRTDVMVOLUMEINTERNAL)RTMemAllocZ(sizeof(RTDVMVOLUMEINTERNAL));
+    PRTDVMVOLUMEINTERNAL pVol = (PRTDVMVOLUMEINTERNAL)RTMemAllocZ(sizeof(RTDVMVOLUMEINTERNAL));
     if (pVol)
     {
         pVol->u32Magic = RTDVMVOLUME_MAGIC;
@@ -153,11 +152,9 @@ static int rtDvmVolumeCreate(PRTDVMINTERNAL pThis, RTDVMVOLUMEFMT hVolFmt,
         pVol->hVolFmt  = hVolFmt;
 
         *phVol = pVol;
+        return VINF_SUCCESS;
     }
-    else
-        rc = VERR_NO_MEMORY;
-
-    return rc;
+    return VERR_NO_MEMORY;
 }
 
 /**
@@ -183,39 +180,41 @@ static void rtDvmVolumeDestroy(PRTDVMVOLUMEINTERNAL pThis)
     RTDvmRelease(pVolMgr);
 }
 
-RTDECL(int) RTDvmCreate(PRTDVM phVolMgr, PFNDVMREAD pfnRead,
-                        PFNDVMWRITE pfnWrite, uint64_t cbDisk,
-                        uint64_t cbSector, uint32_t fFlags, void *pvUser)
-{
-    int rc = VINF_SUCCESS;
-    PRTDVMINTERNAL pThis;
 
-    AssertMsgReturn(!(fFlags & ~DVM_FLAGS_MASK),
-                    ("Invalid flags given %#x\n", fFlags),
-                    VERR_INVALID_PARAMETER);
+RTDECL(int) RTDvmCreate(PRTDVM phVolMgr, RTVFSFILE hVfsFile, uint32_t cbSector, uint32_t fFlags)
+{
+    AssertMsgReturn(!(fFlags & ~DVM_FLAGS_VALID_MASK), ("Invalid flags given %#x\n", fFlags), VERR_INVALID_FLAGS);
+    uint32_t cRefs = RTVfsFileRetain(hVfsFile);
+    AssertReturn(cRefs != UINT32_MAX, VERR_INVALID_HANDLE);
 
-    pThis = (PRTDVMINTERNAL)RTMemAllocZ(sizeof(RTDVMINTERNAL));
-    if (pThis)
+    uint64_t cbDisk;
+    int rc = RTVfsFileGetSize(hVfsFile, &cbDisk);
+    if (RT_SUCCESS(rc))
     {
-        pThis->u32Magic         = RTDVM_MAGIC;
-        pThis->DvmDisk.cbDisk   = cbDisk;
-        pThis->DvmDisk.cbSector = cbSector;
-        pThis->DvmDisk.pvUser   = pvUser;
-        pThis->DvmDisk.pfnRead  = pfnRead;
-        pThis->DvmDisk.pfnWrite = pfnWrite;
-        pThis->pDvmFmtOps       = NULL;
-        pThis->hVolMgrFmt       = NIL_RTDVMFMT;
-        pThis->fFlags           = fFlags;
-        pThis->cRefs            = 1;
-        RTListInit(&pThis->VolumeList);
-        *phVolMgr = pThis;
-    }
-    else
+        PRTDVMINTERNAL pThis = (PRTDVMINTERNAL)RTMemAllocZ(sizeof(RTDVMINTERNAL));
+        if (pThis)
+        {
+            pThis->u32Magic         = RTDVM_MAGIC;
+            pThis->DvmDisk.cbDisk   = cbDisk;
+            pThis->DvmDisk.cbSector = cbSector;
+            pThis->DvmDisk.hVfsFile = hVfsFile;
+
+            pThis->pDvmFmtOps       = NULL;
+            pThis->hVolMgrFmt       = NIL_RTDVMFMT;
+            pThis->fFlags           = fFlags;
+            pThis->cRefs            = 1;
+            RTListInit(&pThis->VolumeList);
+
+            *phVolMgr = pThis;
+            return VINF_SUCCESS;
+        }
         rc = VERR_NO_MEMORY;
-
+    }
+    RTVfsFileRelease(hVfsFile);
     return rc;
 }
 
+
 RTDECL(uint32_t) RTDvmRetain(RTDVM hVolMgr)
 {
     PRTDVMINTERNAL pThis = hVolMgr;
@@ -234,6 +233,8 @@ RTDECL(uint32_t) RTDvmRetain(RTDVM hVolMgr)
  */
 static void rtDvmDestroy(PRTDVMINTERNAL pThis)
 {
+    pThis->u32Magic = RTDVM_MAGIC_DEAD;
+
     if (pThis->hVolMgrFmt != NIL_RTDVMFMT)
     {
         AssertPtr(pThis->pDvmFmtOps);
@@ -241,13 +242,16 @@ static void rtDvmDestroy(PRTDVMINTERNAL pThis)
         /* Let the backend do it's own cleanup first. */
         pThis->pDvmFmtOps->pfnClose(pThis->hVolMgrFmt);
         pThis->hVolMgrFmt = NIL_RTDVMFMT;
+        pThis->pDvmFmtOps = NULL;
     }
 
-    pThis->DvmDisk.cbDisk   = 0;
-    pThis->DvmDisk.pvUser   = NULL;
-    pThis->DvmDisk.pfnRead  = NULL;
-    pThis->DvmDisk.pfnWrite = NULL;
-    pThis->u32Magic         = RTDVM_MAGIC_DEAD;
+    pThis->DvmDisk.cbDisk = 0;
+    pThis->DvmDisk.cbSector = 0;
+    if (pThis->DvmDisk.hVfsFile != NIL_RTVFSFILE)
+    {
+        RTVfsFileRelease(pThis->DvmDisk.hVfsFile);
+        pThis->DvmDisk.hVfsFile = NIL_RTVFSFILE;
+    }
     RTMemFree(pThis);
 }
 
@@ -268,137 +272,139 @@ RTDECL(uint32_t) RTDvmRelease(RTDVM hVolMgr)
 
 RTDECL(int) RTDvmMapOpen(RTDVM hVolMgr)
 {
-    int            rc = VINF_SUCCESS;
-    uint32_t       uScoreMax = RTDVM_MATCH_SCORE_UNSUPPORTED;
-    PCRTDVMFMTOPS  pDvmFmtOpsMatch = NULL;
     PRTDVMINTERNAL pThis = hVolMgr;
     AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     AssertReturn(pThis->u32Magic == RTDVM_MAGIC, VERR_INVALID_HANDLE);
-    AssertReturn(pThis->hVolMgrFmt == NIL_RTDVMFMT, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->hVolMgrFmt == NIL_RTDVMFMT, VERR_WRONG_ORDER);
 
     Assert(!pThis->pDvmFmtOps);
 
+    /*
+     * Let each format backend have a go at the disk, pick the one which scores the highest.
+     */
+    int            rc              = VINF_SUCCESS;
+    uint32_t       uScoreMax       = RTDVM_MATCH_SCORE_UNSUPPORTED;
+    PCRTDVMFMTOPS  pDvmFmtOpsMatch = NULL;
     for (unsigned i = 0; i < RT_ELEMENTS(g_aDvmFmts); i++)
     {
-        uint32_t uScore;
+        uint32_t uScore = 0;
         PCRTDVMFMTOPS pDvmFmtOps = g_aDvmFmts[i];
 
         rc = pDvmFmtOps->pfnProbe(&pThis->DvmDisk, &uScore);
-        if (   RT_SUCCESS(rc)
-            && uScore > uScoreMax)
+        if (RT_SUCCESS(rc))
         {
-            pDvmFmtOpsMatch = pDvmFmtOps;
-            uScoreMax       = uScore;
+            if (uScore > uScoreMax)
+            {
+                pDvmFmtOpsMatch = pDvmFmtOps;
+                uScoreMax       = uScore;
+            }
         }
-        else if (RT_FAILURE(rc))
-            break;
+        else
+            return rc;
     }
-
-    if (RT_SUCCESS(rc))
+    if (uScoreMax > RTDVM_MATCH_SCORE_UNSUPPORTED)
     {
-        if (uScoreMax > RTDVM_MATCH_SCORE_UNSUPPORTED)
+        AssertPtr(pDvmFmtOpsMatch);
+
+        /*
+         * Open the format.
+         */
+        rc = pDvmFmtOpsMatch->pfnOpen(&pThis->DvmDisk, &pThis->hVolMgrFmt);
+        if (RT_SUCCESS(rc))
         {
-            AssertPtr(pDvmFmtOpsMatch);
+            pThis->pDvmFmtOps = pDvmFmtOpsMatch;
 
-            /* Open the format. */
-            rc = pDvmFmtOpsMatch->pfnOpen(&pThis->DvmDisk, &pThis->hVolMgrFmt);
+            /*
+             * Construct volume list (we're done if none).
+             */
+            uint32_t cVols = pThis->pDvmFmtOps->pfnGetValidVolumes(pThis->hVolMgrFmt);
+            if (cVols == 0)
+                return VINF_SUCCESS;
+
+            /* First volume. */
+            RTDVMVOLUMEFMT hVolFmt = NIL_RTDVMVOLUMEFMT;
+            rc = pThis->pDvmFmtOps->pfnQueryFirstVolume(pThis->hVolMgrFmt, &hVolFmt);
             if (RT_SUCCESS(rc))
             {
-                uint32_t cVols;
-
-                pThis->pDvmFmtOps = pDvmFmtOpsMatch;
-
-                cVols = pThis->pDvmFmtOps->pfnGetValidVolumes(pThis->hVolMgrFmt);
-
-                /* Construct volume list. */
-                if (cVols)
+                for (;;)
                 {
                     PRTDVMVOLUMEINTERNAL pVol = NULL;
-                    RTDVMVOLUMEFMT hVolFmt = NIL_RTDVMVOLUMEFMT;
-
-                    rc = pThis->pDvmFmtOps->pfnQueryFirstVolume(pThis->hVolMgrFmt, &hVolFmt);
-                    if (RT_SUCCESS(rc))
+                    rc = rtDvmVolumeCreate(pThis, hVolFmt, &pVol);
+                    if (RT_FAILURE(rc))
                     {
-                        rc = rtDvmVolumeCreate(pThis, hVolFmt, &pVol);
-                        if (RT_FAILURE(rc))
-                            pThis->pDvmFmtOps->pfnVolumeClose(hVolFmt);
+                        pThis->pDvmFmtOps->pfnVolumeClose(hVolFmt);
+                        break;
                     }
+                    RTListAppend(&pThis->VolumeList, &pVol->VolumeNode);
 
-                    if (RT_SUCCESS(rc))
-                    {
-                        cVols--;
-                        RTListAppend(&pThis->VolumeList, &pVol->VolumeNode);
-
-                        while (   cVols > 0
-                               && RT_SUCCESS(rc))
-                        {
-                            rc = pThis->pDvmFmtOps->pfnQueryNextVolume(pThis->hVolMgrFmt, pVol->hVolFmt, &hVolFmt);
-                            if (RT_SUCCESS(rc))
-                            {
-                                rc = rtDvmVolumeCreate(pThis, hVolFmt, &pVol);
-                                if (RT_FAILURE(rc))
-                                    pThis->pDvmFmtOps->pfnVolumeClose(hVolFmt);
-                                else
-                                    RTListAppend(&pThis->VolumeList, &pVol->VolumeNode);
-                                cVols--;
-                            }
-                        }
-                    }
+                    /* Done?*/
+                    cVols--;
+                    if (cVols < 1)
+                        return VINF_SUCCESS;
 
+                    /* Next volume. */
+                    rc = pThis->pDvmFmtOps->pfnQueryNextVolume(pThis->hVolMgrFmt, pVol->hVolFmt, &hVolFmt);
                     if (RT_FAILURE(rc))
-                    {
-                        /* Remove all entries. */
-                        PRTDVMVOLUMEINTERNAL pItNext, pIt;
-                        RTListForEachSafe(&pThis->VolumeList, pIt, pItNext, RTDVMVOLUMEINTERNAL, VolumeNode)
-                        {
-                            RTListNodeRemove(&pIt->VolumeNode);
-                            rtDvmVolumeDestroy(pIt);
-                        }
-                    }
+                        break;
+                }
+
+                /* Bail out. */
+                PRTDVMVOLUMEINTERNAL pItNext, pIt;
+                RTListForEachSafe(&pThis->VolumeList, pIt, pItNext, RTDVMVOLUMEINTERNAL, VolumeNode)
+                {
+                    RTListNodeRemove(&pIt->VolumeNode);
+                    rtDvmVolumeDestroy(pIt);
                 }
             }
+
+            /** @todo shouldn't we close the format too here?  */
         }
-        else
-            rc = VERR_NOT_SUPPORTED;
     }
-
+    else
+        rc = VERR_NOT_SUPPORTED;
     return rc;
 }
 
 RTDECL(int) RTDvmMapInitialize(RTDVM hVolMgr, const char *pszFmt)
 {
-    int rc = VERR_NOT_SUPPORTED;
     PRTDVMINTERNAL pThis = hVolMgr;
     AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     AssertPtrReturn(pszFmt, VERR_INVALID_POINTER);
     AssertReturn(pThis->u32Magic == RTDVM_MAGIC, VERR_INVALID_HANDLE);
-    AssertReturn(pThis->hVolMgrFmt == NIL_RTDVMFMT, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->hVolMgrFmt == NIL_RTDVMFMT, VERR_WRONG_ORDER);
 
     for (unsigned i = 0; i < RT_ELEMENTS(g_aDvmFmts); i++)
     {
         PCRTDVMFMTOPS pDvmFmtOps = g_aDvmFmts[i];
-
-        if (!RTStrCmp(pDvmFmtOps->pcszFmt, pszFmt))
+        if (!RTStrCmp(pDvmFmtOps->pszFmt, pszFmt))
         {
-            rc = pDvmFmtOps->pfnInitialize(&pThis->DvmDisk, &pThis->hVolMgrFmt);
+            int rc = pDvmFmtOps->pfnInitialize(&pThis->DvmDisk, &pThis->hVolMgrFmt);
             if (RT_SUCCESS(rc))
                 pThis->pDvmFmtOps = pDvmFmtOps;
-
-            break;
+            return rc;
         }
     }
-
-    return rc;
+    return VERR_NOT_SUPPORTED;
 }
 
-RTDECL(const char *) RTDvmMapGetFormat(RTDVM hVolMgr)
+RTDECL(const char *) RTDvmMapGetFormatName(RTDVM hVolMgr)
 {
     PRTDVMINTERNAL pThis = hVolMgr;
     AssertPtrReturn(pThis, NULL);
     AssertReturn(pThis->u32Magic == RTDVM_MAGIC, NULL);
     AssertReturn(pThis->hVolMgrFmt != NIL_RTDVMFMT, NULL);
 
-    return pThis->pDvmFmtOps->pcszFmt;
+    return pThis->pDvmFmtOps->pszFmt;
+}
+
+RTDECL(RTDVMFORMATTYPE) RTDvmMapGetFormatType(RTDVM hVolMgr)
+{
+    PRTDVMINTERNAL pThis = hVolMgr;
+    AssertPtrReturn(pThis, RTDVMFORMATTYPE_INVALID);
+    AssertReturn(pThis->u32Magic == RTDVM_MAGIC, RTDVMFORMATTYPE_INVALID);
+    AssertReturn(pThis->hVolMgrFmt != NIL_RTDVMFMT, RTDVMFORMATTYPE_INVALID);
+
+    return pThis->pDvmFmtOps->enmFormat;
 }
 
 RTDECL(uint32_t) RTDvmMapGetValidVolumes(RTDVM hVolMgr)
@@ -423,13 +429,13 @@ RTDECL(uint32_t) RTDvmMapGetMaxVolumes(RTDVM hVolMgr)
 
 RTDECL(int) RTDvmMapQueryFirstVolume(RTDVM hVolMgr, PRTDVMVOLUME phVol)
 {
-    int rc = VERR_DVM_MAP_EMPTY;
     PRTDVMINTERNAL pThis = hVolMgr;
     AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     AssertReturn(pThis->u32Magic == RTDVM_MAGIC, VERR_INVALID_HANDLE);
     AssertReturn(pThis->hVolMgrFmt != NIL_RTDVMFMT, VERR_INVALID_HANDLE);
     AssertPtrReturn(phVol, VERR_INVALID_POINTER);
 
+    int rc = VERR_DVM_MAP_EMPTY;
     PRTDVMVOLUMEINTERNAL pVol = RTListGetFirst(&pThis->VolumeList, RTDVMVOLUMEINTERNAL, VolumeNode);
     if (pVol)
     {
@@ -443,7 +449,6 @@ RTDECL(int) RTDvmMapQueryFirstVolume(RTDVM hVolMgr, PRTDVMVOLUME phVol)
 
 RTDECL(int) RTDvmMapQueryNextVolume(RTDVM hVolMgr, RTDVMVOLUME hVol, PRTDVMVOLUME phVolNext)
 {
-    int rc = VERR_DVM_MAP_NO_VOLUME;
     PRTDVMINTERNAL       pThis = hVolMgr;
     PRTDVMVOLUMEINTERNAL pVol = hVol;
     AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
@@ -453,8 +458,8 @@ RTDECL(int) RTDvmMapQueryNextVolume(RTDVM hVolMgr, RTDVMVOLUME hVol, PRTDVMVOLUM
     AssertReturn(pVol->u32Magic == RTDVMVOLUME_MAGIC, VERR_INVALID_HANDLE);
     AssertPtrReturn(phVolNext, VERR_INVALID_POINTER);
 
-    PRTDVMVOLUMEINTERNAL pVolNext = RTListGetNext(&pThis->VolumeList, pVol,
-                                                  RTDVMVOLUMEINTERNAL, VolumeNode);
+    int rc = VERR_DVM_MAP_NO_VOLUME;
+    PRTDVMVOLUMEINTERNAL pVolNext = RTListGetNext(&pThis->VolumeList, pVol, RTDVMVOLUMEINTERNAL, VolumeNode);
     if (pVolNext)
     {
         rc = VINF_SUCCESS;
@@ -465,20 +470,21 @@ RTDECL(int) RTDvmMapQueryNextVolume(RTDVM hVolMgr, RTDVMVOLUME hVol, PRTDVMVOLUM
     return rc;
 }
 
-RTDECL(int) RTDvmMapQueryBlockStatus(RTDVM hVolMgr, uint64_t off, uint64_t cb,
-                                     bool *pfAllocated)
+RTDECL(int) RTDvmMapQueryBlockStatus(RTDVM hVolMgr, uint64_t off, uint64_t cb, bool *pfAllocated)
 {
-    int rc = VINF_SUCCESS;
-    PRTDVMINTERNAL       pThis = hVolMgr;
+    PRTDVMINTERNAL pThis = hVolMgr;
     AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     AssertPtrReturn(pfAllocated, VERR_INVALID_POINTER);
     AssertReturn(pThis->u32Magic == RTDVM_MAGIC, VERR_INVALID_HANDLE);
-    AssertReturn(pThis->hVolMgrFmt != NIL_RTDVMFMT, VERR_INVALID_HANDLE);
-    AssertReturn(off + cb <= pThis->DvmDisk.cbDisk * pThis->DvmDisk.cbSector,
-                 VERR_INVALID_PARAMETER);
+    AssertReturn(pThis->hVolMgrFmt != NIL_RTDVMFMT, VERR_WRONG_ORDER);
+    AssertMsgReturn(   off      <= pThis->DvmDisk.cbDisk
+                    || cb       <= pThis->DvmDisk.cbDisk
+                    || off + cb <= pThis->DvmDisk.cbDisk,
+                    ("off=%#RX64 cb=%#RX64 cbDisk=%#RX64\n", off, cb, pThis->DvmDisk.cbDisk),
+                    VERR_OUT_OF_RANGE);
 
     /* Check whether the range is inuse by the volume manager metadata first. */
-    rc = pThis->pDvmFmtOps->pfnQueryRangeUse(pThis->hVolMgrFmt, off, cb, pfAllocated);
+    int rc = pThis->pDvmFmtOps->pfnQueryRangeUse(pThis->hVolMgrFmt, off, cb, pfAllocated);
     if (RT_FAILURE(rc))
         return rc;
 
@@ -512,12 +518,10 @@ RTDECL(int) RTDvmMapQueryBlockStatus(RTDVM hVolMgr, uint64_t off, uint64_t cb,
                     if (pVol->pfnQueryBlockStatus)
                     {
                         bool fVolAllocated = true;
-
-                        rc = pVol->pfnQueryBlockStatus(pVol->pvUser, offVol, cbIntersect,
-                                                       &fVolAllocated);
+                        rc = pVol->pfnQueryBlockStatus(pVol->pvUser, offVol, cbIntersect, &fVolAllocated);
                         if (RT_FAILURE(rc))
                             break;
-                        else if (fVolAllocated)
+                        if (fVolAllocated)
                         {
                             fAllocated = true;
                             break;
@@ -656,5 +660,6 @@ RTDECL(const char *) RTDvmVolumeTypeGetDescr(RTDVMVOLTYPE enmVolType)
 {
     AssertReturn(enmVolType >= RTDVMVOLTYPE_INVALID && enmVolType < RTDVMVOLTYPE_END, NULL);
 
-    return g_apcszDvmVolTypes[enmVolType];
+    return g_apszDvmVolTypes[enmVolType];
 }
+
diff --git a/src/VBox/Runtime/common/dvm/dvmbsdlabel.cpp b/src/VBox/Runtime/common/dvm/dvmbsdlabel.cpp
index 262dcb5..5b408b1 100644
--- a/src/VBox/Runtime/common/dvm/dvmbsdlabel.cpp
+++ b/src/VBox/Runtime/common/dvm/dvmbsdlabel.cpp
@@ -414,8 +414,7 @@ static DECLCALLBACK(int) rtDvmFmtBsdLblQueryFirstVolume(RTDVMFMT hVolMgrFmt, PRT
         {
             if (pThis->DiskLabel.aPartitions[i].cSectors)
             {
-                rc = rtDvmFmtBsdLblVolumeCreate(pThis, &pThis->DiskLabel.aPartitions[i],
-                                              i, phVolFmt);
+                rc = rtDvmFmtBsdLblVolumeCreate(pThis, &pThis->DiskLabel.aPartitions[i], i, phVolFmt);
                 break;
             }
         }
@@ -521,6 +520,8 @@ DECLHIDDEN(RTDVMFMTOPS) g_rtDvmFmtBsdLbl =
 {
     /* pcszFmt */
     "BsdLabel",
+    /* enmFormat, */
+    RTDVMFORMATTYPE_BSD_LABLE,
     /* pfnProbe */
     rtDvmFmtBsdLblProbe,
     /* pfnOpen */
diff --git a/src/VBox/Runtime/common/dvm/dvmgpt.cpp b/src/VBox/Runtime/common/dvm/dvmgpt.cpp
index 6b916ef..ee6998c 100644
--- a/src/VBox/Runtime/common/dvm/dvmgpt.cpp
+++ b/src/VBox/Runtime/common/dvm/dvmgpt.cpp
@@ -47,80 +47,76 @@
 /**
  * GPT on disk header.
  */
-#pragma pack(1)
-typedef struct GptHdr
+typedef struct GPTHDR
 {
-    /** Signature ("EFI PART"). */
+    /** 0x00: Signature ("EFI PART"). */
     char     abSignature[8];
-    /** Revision. */
+    /** 0x08: Revision. */
     uint32_t u32Revision;
-    /** Header size. */
+    /** 0x0c: Header size. */
     uint32_t cbHeader;
-    /** CRC of header. */
+    /** 0x10: CRC of header. */
     uint32_t u32Crc;
-} GptHdr;
+} GPTHDR;
 /** Pointer to a GPT header. */
-typedef struct GptHdr *PGptHdr;
-#pragma pack()
-AssertCompileSize(GptHdr, 20);
+typedef struct GPTHDR *PGPTHDR;
+AssertCompileSize(GPTHDR, 20);
 
 /**
  * Complete GPT table header for revision 1.0.
  */
 #pragma pack(1)
-typedef struct GptHdrRev1
+typedef struct GPTHDRREV1
 {
-    /** Header. */
-    GptHdr   Hdr;
-    /** Reserved. */
+    /** 0x00: Header. */
+    GPTHDR   Hdr;
+    /** 0x14: Reserved. */
     uint32_t u32Reserved;
-    /** Current LBA. */
+    /** 0x18: Current LBA. */
     uint64_t u64LbaCurrent;
-    /** Backup LBA. */
+    /** 0x20: Backup LBA. */
     uint64_t u64LbaBackup;
-    /** First usable LBA for partitions. */
+    /** 0x28:First usable LBA for partitions. */
     uint64_t u64LbaFirstPartition;
-    /** Last usable LBA for partitions. */
+    /** 0x30: Last usable LBA for partitions. */
     uint64_t u64LbaLastPartition;
-    /** Disk UUID. */
+    /** 0x38: Disk UUID. */
     RTUUID   DiskUuid;
-    /** LBA of first partition entry. */
+    /** 0x48: LBA of first partition entry. */
     uint64_t u64LbaPartitionEntries;
-    /** Number of partition entries. */
+    /** 0x50: Number of partition entries. */
     uint32_t cPartitionEntries;
-    /** Partition entry size. */
+    /** 0x54: Partition entry size. */
     uint32_t cbPartitionEntry;
-    /** CRC of partition entries. */
+    /** 0x58: CRC of partition entries. */
     uint32_t u32CrcPartitionEntries;
-} GptHdrRev1;
+} GPTHDRREV1;
 /** Pointer to a revision 1.0 GPT header. */
-typedef GptHdrRev1 *PGptHdrRev1;
+typedef GPTHDRREV1 *PGPTHDRREV1;
 #pragma pack()
-AssertCompileSize(GptHdrRev1, 92);
+AssertCompileSize(GPTHDRREV1, 92);
 
 /**
  * GPT partition table entry.
  */
-#pragma pack(1)
-typedef struct GptEntry
+typedef struct GPTENTRY
 {
-    /** Partition type UUID. */
+    /** 0x00: Partition type UUID. */
     RTUUID   UuidType;
-    /** Partition UUID. */
+    /** 0x10: Partition UUID. */
     RTUUID   UuidPartition;
-    /** First LBA. */
+    /** 0x20: First LBA. */
     uint64_t u64LbaFirst;
-    /** Last LBA. */
+    /** 0x28: Last LBA. */
     uint64_t u64LbaLast;
-    /** Attribute flags. */
+    /** 0x30: Attribute flags. */
     uint64_t u64Flags;
-    /** Partition name (UTF-16LE code units). */
+    /** 0x38: Partition name (UTF-16LE code units). */
     RTUTF16  aPartitionName[36];
-} GptEntry;
+} GPTENTRY;
 /** Pointer to a GPT entry. */
-typedef struct GptEntry *PGptEntry;
-#pragma pack()
-AssertCompileSize(GptEntry, 128);
+typedef struct GPTENTRY *PGPTENTRY;
+AssertCompileSize(GPTENTRY, 128);
 
 /** Partition flags - System partition. */
 #define RTDVM_GPT_ENTRY_SYSTEM          RT_BIT_64(0)
@@ -139,9 +135,9 @@ typedef struct RTDVMFMTINTERNAL
     /** Pointer to the underlying disk. */
     PCRTDVMDISK     pDisk;
     /** GPT header. */
-    GptHdrRev1      HdrRev1;
+    GPTHDRREV1      HdrRev1;
     /** GPT array. */
-    PGptEntry       paGptEntries;
+    PGPTENTRY       paGptEntries;
     /** Number of occupied partition entries. */
     uint32_t        cPartitions;
 } RTDVMFMTINTERNAL;
@@ -162,7 +158,7 @@ typedef struct RTDVMVOLUMEFMTINTERNAL
     /** Size of the volume. */
     uint64_t          cbVolume;
     /** Pointer to the GPT entry in the array. */
-    PGptEntry         pGptEntry;
+    PGPTENTRY         pGptEntry;
 } RTDVMVOLUMEFMTINTERNAL;
 /** Pointer to an MBR volume. */
 typedef RTDVMVOLUMEFMTINTERNAL *PRTDVMVOLUMEFMTINTERNAL;
@@ -231,18 +227,18 @@ static const RTDVMGPTPARTTYPE2VOLTYPE g_aPartType2DvmVolTypes[] =
 static DECLCALLBACK(int) rtDvmFmtGptProbe(PCRTDVMDISK pDisk, uint32_t *puScore)
 {
     int rc = VINF_SUCCESS;
-    GptHdr Hdr;
+    GPTHDR Hdr;
 
     *puScore = RTDVM_MATCH_SCORE_UNSUPPORTED;
 
     if (rtDvmDiskGetSectors(pDisk) >= 2)
     {
         /* Read from the disk and check for the signature. */
-        rc = rtDvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(1, pDisk), &Hdr, sizeof(GptHdr));
+        rc = rtDvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(1, pDisk), &Hdr, sizeof(GPTHDR));
         if (   RT_SUCCESS(rc)
             && !strncmp(&Hdr.abSignature[0], RTDVM_GPT_SIGNATURE, RT_ELEMENTS(Hdr.abSignature))
             && RT_LE2H_U32(Hdr.u32Revision) == 0x00010000
-            && RT_LE2H_U32(Hdr.cbHeader)    == sizeof(GptHdrRev1))
+            && RT_LE2H_U32(Hdr.cbHeader)    == sizeof(GPTHDRREV1))
             *puScore = RTDVM_MATCH_SCORE_PERFECT;
     }
 
@@ -277,9 +273,9 @@ static DECLCALLBACK(int) rtDvmFmtGptOpen(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFm
             pThis->HdrRev1.cbPartitionEntry       = RT_LE2H_U32(pThis->HdrRev1.cbPartitionEntry);
             pThis->HdrRev1.u32CrcPartitionEntries = RT_LE2H_U32(pThis->HdrRev1.u32CrcPartitionEntries);
 
-            if (pThis->HdrRev1.cbPartitionEntry == sizeof(GptEntry))
+            if (pThis->HdrRev1.cbPartitionEntry == sizeof(GPTENTRY))
             {
-                pThis->paGptEntries = (PGptEntry)RTMemAllocZ(pThis->HdrRev1.cPartitionEntries * pThis->HdrRev1.cbPartitionEntry);
+                pThis->paGptEntries = (PGPTENTRY)RTMemAllocZ(pThis->HdrRev1.cPartitionEntries * pThis->HdrRev1.cbPartitionEntry);
                 if (pThis->paGptEntries)
                 {
                     rc = rtDvmDiskRead(pDisk, RTDVM_GPT_LBA2BYTE(pThis->HdrRev1.u64LbaPartitionEntries, pDisk),
@@ -380,7 +376,7 @@ static DECLCALLBACK(uint32_t) rtDvmFmtGptGetMaxVolumes(RTDVMFMT hVolMgrFmt)
  * @param   idx           The index in the partition array.
  * @param   phVolFmt      Where to store the volume data on success.
  */
-static int rtDvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, PGptEntry pGptEntry,
+static int rtDvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, PGPTENTRY pGptEntry,
                                  uint32_t idx, PRTDVMVOLUMEFMT phVolFmt)
 {
     int rc = VINF_SUCCESS;
@@ -404,48 +400,38 @@ static int rtDvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, PGptEntry pGptEntry,
 
 static DECLCALLBACK(int) rtDvmFmtGptQueryFirstVolume(RTDVMFMT hVolMgrFmt, PRTDVMVOLUMEFMT phVolFmt)
 {
-    int rc = VINF_SUCCESS;
     PRTDVMFMTINTERNAL pThis = hVolMgrFmt;
 
     if (pThis->cPartitions != 0)
     {
-        PGptEntry pGptEntry = &pThis->paGptEntries[0];
+        PGPTENTRY pGptEntry = &pThis->paGptEntries[0];
 
         /* Search for the first non empty entry. */
         for (unsigned i = 0; i < pThis->HdrRev1.cPartitionEntries; i++)
         {
             if (!RTUuidIsNull(&pGptEntry->UuidType))
-            {
-                rc = rtDvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmt);
-                break;
-            }
+                return rtDvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmt);
             pGptEntry++;
         }
+        AssertFailed();
     }
-    else
-        rc = VERR_DVM_MAP_EMPTY;
-
-    return rc;
+    return VERR_DVM_MAP_EMPTY;
 }
 
 static DECLCALLBACK(int) rtDvmFmtGptQueryNextVolume(RTDVMFMT hVolMgrFmt, RTDVMVOLUMEFMT hVolFmt, PRTDVMVOLUMEFMT phVolFmtNext)
 {
-    int rc = VERR_DVM_MAP_NO_VOLUME;
     PRTDVMFMTINTERNAL pThis = hVolMgrFmt;
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
-    PGptEntry pGptEntry = pVol->pGptEntry + 1;
+    PGPTENTRY pGptEntry = pVol->pGptEntry + 1;
 
     for (unsigned i = pVol->idxEntry + 1; i < pThis->HdrRev1.cPartitionEntries; i++)
     {
         if (!RTUuidIsNull(&pGptEntry->UuidType))
-        {
-            rc = rtDvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmtNext);
-            break;
-        }
+            return rtDvmFmtMbrVolumeCreate(pThis, pGptEntry, i, phVolFmtNext);
         pGptEntry++;
     }
 
-    return rc;
+    return VERR_DVM_MAP_NO_VOLUME;
 }
 
 static DECLCALLBACK(void) rtDvmFmtGptVolumeClose(RTDVMVOLUMEFMT hVolFmt)
@@ -470,28 +456,21 @@ static DECLCALLBACK(uint64_t) rtDvmFmtGptVolumeGetSize(RTDVMVOLUMEFMT hVolFmt)
 static DECLCALLBACK(int) rtDvmFmtGptVolumeQueryName(RTDVMVOLUMEFMT hVolFmt, char **ppszVolName)
 {
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
-    int rc = VINF_SUCCESS;
 
     *ppszVolName = NULL;
-    rc = RTUtf16ToUtf8Ex(&pVol->pGptEntry->aPartitionName[0], RT_ELEMENTS(pVol->pGptEntry->aPartitionName),
-                         ppszVolName, 0, NULL);
-
-    return rc;
+    return RTUtf16ToUtf8Ex(&pVol->pGptEntry->aPartitionName[0], RT_ELEMENTS(pVol->pGptEntry->aPartitionName),
+                           ppszVolName, 0, NULL);
 }
 
 static DECLCALLBACK(RTDVMVOLTYPE) rtDvmFmtGptVolumeGetType(RTDVMVOLUMEFMT hVolFmt)
 {
-    RTDVMVOLTYPE enmVolType = RTDVMVOLTYPE_UNKNOWN;
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
     for (unsigned i = 0; i < RT_ELEMENTS(g_aPartType2DvmVolTypes); i++)
         if (!RTUuidCompareStr(&pVol->pGptEntry->UuidType, g_aPartType2DvmVolTypes[i].pcszUuid))
-        {
-            enmVolType = g_aPartType2DvmVolTypes[i].enmVolType;
-            break;
-        }
+            return g_aPartType2DvmVolTypes[i].enmVolType;
 
-    return enmVolType;
+    return RTDVMVOLTYPE_UNKNOWN;
 }
 
 static DECLCALLBACK(uint64_t) rtDvmFmtGptVolumeGetFlags(RTDVMVOLUMEFMT hVolFmt)
@@ -505,17 +484,15 @@ static DECLCALLBACK(bool) rtDvmFmtGptVolumeIsRangeIntersecting(RTDVMVOLUMEFMT hV
                                                                uint64_t *poffVol,
                                                                uint64_t *pcbIntersect)
 {
-    bool fIntersect = false;
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
     if (RTDVM_RANGE_IS_INTERSECTING(pVol->offStart, pVol->cbVolume, offStart))
     {
-        fIntersect    = true;
         *poffVol      = offStart - pVol->offStart;
         *pcbIntersect = RT_MIN(cbRange, pVol->offStart + pVol->cbVolume - offStart);
+        return true;
     }
-
-    return fIntersect;
+    return false;
 }
 
 static DECLCALLBACK(int) rtDvmFmtGptVolumeRead(RTDVMVOLUMEFMT hVolFmt, uint64_t off, void *pvBuf, size_t cbRead)
@@ -536,8 +513,10 @@ static DECLCALLBACK(int) rtDvmFmtGptVolumeWrite(RTDVMVOLUMEFMT hVolFmt, uint64_t
 
 RTDVMFMTOPS g_rtDvmFmtGpt =
 {
-    /* pcszFmt */
+    /* pszFmt */
     "GPT",
+    /* enmFormat, */
+    RTDVMFORMATTYPE_GPT,
     /* pfnProbe */
     rtDvmFmtGptProbe,
     /* pfnOpen */
diff --git a/src/VBox/Runtime/common/dvm/dvmmbr.cpp b/src/VBox/Runtime/common/dvm/dvmmbr.cpp
index 0cfede6..0b3c529 100644
--- a/src/VBox/Runtime/common/dvm/dvmmbr.cpp
+++ b/src/VBox/Runtime/common/dvm/dvmmbr.cpp
@@ -28,17 +28,80 @@
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_FS
 #include <iprt/types.h>
 #include <iprt/assert.h>
 #include <iprt/mem.h>
 #include <iprt/dvm.h>
+#include <iprt/list.h>
+#include <iprt/log.h>
 #include <iprt/string.h>
 #include "internal/dvm.h"
 
 
 /*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+/** Checks if the partition type is an extended partition container. */
+#define RTDVMMBR_IS_EXTENDED(a_bType) ((a_bType) == 0x05 || (a_bType) == 0x0f)
+
+
+/*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
+/** Pointer to a MBR sector. */
+typedef struct RTDVMMBRSECTOR *PRTDVMMBRSECTOR;
+
+/**
+ * MBR entry.
+ */
+typedef struct RTDVMMBRENTRY
+{
+    /** Our entry in the in-use partition entry list (RTDVMMBRENTRY). */
+    RTLISTNODE          ListEntry;
+    /** Pointer to the MBR sector containing this entry. */
+    PRTDVMMBRSECTOR     pSector;
+    /** Pointer to the next sector in the extended partition table chain. */
+    PRTDVMMBRSECTOR     pChain;
+    /** The byte offset of the start of the partition (relative to disk). */
+    uint64_t            offPart;
+    /** Number of bytes for this partition. */
+    uint64_t            cbPart;
+    /** The partition/filesystem type. */
+    uint8_t             bType;
+    /** The partition flags. */
+    uint8_t             fFlags;
+    /** Bad entry. */
+    bool                fBad;
+} RTDVMMBRENTRY;
+/** Pointer to an MBR entry. */
+typedef RTDVMMBRENTRY *PRTDVMMBRENTRY;
+
+/**
+ * A MBR sector.
+ */
+typedef struct RTDVMMBRSECTOR
+{
+    /** Internal representation of the entries. */
+    RTDVMMBRENTRY       aEntries[4];
+    /** The byte offset of this MBR sector (relative to disk).
+     * We keep this for detecting cycles now, but it will be needed if we start
+     * updating the partition table at some point. */
+    uint64_t            offOnDisk;
+    /** Pointer to the previous sector if this isn't a primary one. */
+    PRTDVMMBRENTRY      pPrevSector;
+    /** Set if this is the primary MBR, cleared if an extended. */
+    bool                fIsPrimary;
+    /** Number of used entries. */
+    uint8_t             cUsed;
+    /** Number of extended entries. */
+    uint8_t             cExtended;
+    /** The extended entry we're following (we only follow one, except when
+     *  fIsPrimary is @c true). UINT8_MAX if none. */
+    uint8_t             idxExtended;
+    /** The raw data. */
+    uint8_t             abData[512];
+} RTDVMMBRSECTOR;
 
 /**
  * MBR volume manager data.
@@ -46,11 +109,14 @@
 typedef struct RTDVMFMTINTERNAL
 {
     /** Pointer to the underlying disk. */
-    PCRTDVMDISK     pDisk;
-    /** Number of initialized partitions. */
-    uint32_t        cPartitions;
-    /** The raw MBR data. */
-    uint8_t         abMbr[512];
+    PCRTDVMDISK         pDisk;
+    /** Head of the list of in-use RTDVMMBRENTRY structures.  This excludes
+     *  extended partition table entries. */
+    RTLISTANCHOR        PartitionHead;
+    /** The total number of partitions, not counting extended ones. */
+    uint32_t            cPartitions;
+    /** The actual primary MBR sector. */
+    RTDVMMBRSECTOR      Primary;
 } RTDVMFMTINTERNAL;
 /** Pointer to the MBR volume manager. */
 typedef RTDVMFMTINTERNAL *PRTDVMFMTINTERNAL;
@@ -61,33 +127,13 @@ typedef RTDVMFMTINTERNAL *PRTDVMFMTINTERNAL;
 typedef struct RTDVMVOLUMEFMTINTERNAL
 {
     /** Pointer to the volume manager. */
-    PRTDVMFMTINTERNAL pVolMgr;
-    /** Partition table entry index. */
-    uint32_t          idxEntry;
-    /** Start offset of the volume. */
-    uint64_t          offStart;
-    /** Size of the volume. */
-    uint64_t          cbVolume;
-    /** Pointer to the raw partition table entry. */
-    uint8_t          *pbMbrEntry;
+    PRTDVMFMTINTERNAL   pVolMgr;
+    /** The MBR entry.    */
+    PRTDVMMBRENTRY      pEntry;
 } RTDVMVOLUMEFMTINTERNAL;
 /** Pointer to an MBR volume. */
 typedef RTDVMVOLUMEFMTINTERNAL *PRTDVMVOLUMEFMTINTERNAL;
 
-/**
- * MBR FS type to DVM volume type mapping entry.
- */
-
-typedef struct RTDVMMBRFS2VOLTYPE
-{
-    /** MBR FS Id. */
-    uint8_t           bFsId;
-    /** DVM volume type. */
-    RTDVMVOLTYPE      enmVolType;
-} RTDVMMBRFS2VOLTYPE;
-/** Pointer to a MBR FS Type to volume type mapping entry. */
-typedef RTDVMMBRFS2VOLTYPE *PRTDVMMBRFS2VOLTYPE;
-
 
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
@@ -95,14 +141,34 @@ typedef RTDVMMBRFS2VOLTYPE *PRTDVMMBRFS2VOLTYPE;
 /**
  * Mapping of FS types to DVM volume types.
  *
- * From http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
+ * @see https://en.wikipedia.org/wiki/Partition_type
+ * @see http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
  */
-static const RTDVMMBRFS2VOLTYPE g_aFs2DvmVolTypes[] =
+static const struct RTDVMMBRFS2VOLTYPE
+{
+    /** MBR FS Id. */
+    uint8_t             bFsId;
+    /** DVM volume type. */
+    RTDVMVOLTYPE        enmVolType;
+} g_aFs2DvmVolTypes[] =
 {
-    { 0x06, RTDVMVOLTYPE_FAT16 },
+    { 0x01, RTDVMVOLTYPE_FAT12 },
+    { 0x04, RTDVMVOLTYPE_FAT16 },
+    { 0x06, RTDVMVOLTYPE_FAT16 }, /* big FAT16 */
     { 0x07, RTDVMVOLTYPE_NTFS }, /* Simplification: Used for HPFS, exFAT, ++, too but NTFS is the more common one. */
     { 0x0b, RTDVMVOLTYPE_FAT32 },
     { 0x0c, RTDVMVOLTYPE_FAT32 },
+    { 0x0e, RTDVMVOLTYPE_FAT16 },
+
+    /* Hidden variants of the above: */
+    { 0x11, RTDVMVOLTYPE_FAT12 },
+    { 0x14, RTDVMVOLTYPE_FAT16 },
+    { 0x16, RTDVMVOLTYPE_FAT16 },
+    { 0x17, RTDVMVOLTYPE_NTFS },
+    { 0x1b, RTDVMVOLTYPE_FAT32 },
+    { 0x1c, RTDVMVOLTYPE_FAT32 },
+    { 0x1e, RTDVMVOLTYPE_FAT16 },
+
     { 0x82, RTDVMVOLTYPE_LINUX_SWAP },
     { 0x83, RTDVMVOLTYPE_LINUX_NATIVE },
     { 0x8e, RTDVMVOLTYPE_LINUX_LVM },
@@ -117,13 +183,11 @@ static const RTDVMMBRFS2VOLTYPE g_aFs2DvmVolTypes[] =
 static DECLCALLBACK(int) rtDvmFmtMbrProbe(PCRTDVMDISK pDisk, uint32_t *puScore)
 {
     int rc = VINF_SUCCESS;
-    uint8_t abMbr[512];
-
     *puScore = RTDVM_MATCH_SCORE_UNSUPPORTED;
-
     if (pDisk->cbDisk >= 512)
     {
         /* Read from the disk and check for the 0x55aa signature at the end. */
+        uint8_t abMbr[512];
         rc = rtDvmDiskRead(pDisk, 0, &abMbr[0], sizeof(abMbr));
         if (   RT_SUCCESS(rc)
             && abMbr[510] == 0x55
@@ -134,35 +198,261 @@ static DECLCALLBACK(int) rtDvmFmtMbrProbe(PCRTDVMDISK pDisk, uint32_t *puScore)
     return rc;
 }
 
-static DECLCALLBACK(int) rtDvmFmtMbrOpen(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt)
+
+static void rtDvmFmtMbrDestroy(PRTDVMFMTINTERNAL pThis)
 {
-    int rc = VINF_SUCCESS;
-    PRTDVMFMTINTERNAL pThis = NULL;
+    /*
+     * Delete chains of extended partitions.
+     */
+    for (unsigned i = 0; i < 4; i++)
+    {
+        PRTDVMMBRSECTOR pCur = pThis->Primary.aEntries[i].pChain;
+        while (pCur)
+        {
+            PRTDVMMBRSECTOR pNext = pCur->idxExtended != UINT8_MAX ? pCur->aEntries[pCur->idxExtended].pChain : NULL;
 
-    pThis = (PRTDVMFMTINTERNAL)RTMemAllocZ(sizeof(RTDVMFMTINTERNAL));
-    if (pThis)
+            RT_ZERO(pCur->aEntries);
+            pCur->pPrevSector = NULL;
+            RTMemFree(pCur);
+
+            pCur = pNext;
+        }
+    }
+
+    /*
+     * Now kill this.
+     */
+    pThis->pDisk = NULL;
+    RT_ZERO(pThis->Primary.aEntries);
+    RTMemFree(pThis);
+}
+
+
+static int rtDvmFmtMbrReadExtended(PRTDVMFMTINTERNAL pThis, PRTDVMMBRENTRY pPrimaryEntry)
+{
+    uint32_t const  cbExt       = pPrimaryEntry->cbPart;
+    uint64_t const  offExtBegin = pPrimaryEntry->offPart;
+
+    uint64_t        offCurBegin = offExtBegin;
+    PRTDVMMBRENTRY  pCurEntry   = pPrimaryEntry;
+    for (unsigned cTables = 1; ; cTables++)
     {
-        pThis->pDisk       = pDisk;
-        pThis->cPartitions = 0;
+        /*
+         * Do some sanity checking.
+         */
+        /* Check the address of the partition table. */
+        if (offCurBegin - offExtBegin >= cbExt)
+        {
+            LogRel(("rtDvmFmtMbrReadExtended: offCurBegin=%#RX64 is outside the extended partition: %#RX64..%#RX64 (LB %#RX64)\n",
+                    offCurBegin, offExtBegin, offExtBegin + cbExt - 1, cbExt));
+            pCurEntry->fBad = true;
+            return -VERR_OUT_OF_RANGE;
+        }
 
-        /* Read the MBR and count the valid partition entries. */
-        rc = rtDvmDiskRead(pDisk, 0, &pThis->abMbr[0], sizeof(pThis->abMbr));
-        if (RT_SUCCESS(rc))
+        /* Limit the chain length. */
+        if (cTables > 64)
         {
-            uint8_t *pbMbrEntry = &pThis->abMbr[446];
+            LogRel(("rtDvmFmtMbrReadExtended: offCurBegin=%#RX64 is the %uth table, we stop here.\n", offCurBegin, cTables));
+            pCurEntry->fBad = true;
+            return -VERR_TOO_MANY_SYMLINKS;
+        }
 
-            Assert(pThis->abMbr[510] == 0x55 && pThis->abMbr[511] == 0xaa);
+        /* Check for obvious cycles. */
+        for (PRTDVMMBRENTRY pPrev = pCurEntry->pSector->pPrevSector; pPrev != NULL; pPrev = pPrev->pSector->pPrevSector)
+            if (pPrev->offPart == offCurBegin)
+            {
+                LogRel(("rtDvmFmtMbrReadExtended: Cycle! We've seen offCurBegin=%#RX64 before\n", offCurBegin));
+                pCurEntry->fBad = true;
+                return -VERR_TOO_MANY_SYMLINKS;
+            }
 
-            for (unsigned i = 0; i < 4; i++)
+        /*
+         * Allocate a new sector entry and read the sector with the table.
+         */
+        PRTDVMMBRSECTOR pNext = (PRTDVMMBRSECTOR)RTMemAllocZ(sizeof(*pNext));
+        if (!pNext)
+            return VERR_NO_MEMORY;
+        pNext->offOnDisk    = offCurBegin;
+        pNext->pPrevSector  = pCurEntry;
+        //pNext->fIsPrimary = false;
+        //pNext->cUsed      = 0;
+        //pNext->cExtended  = 0;
+        pNext->idxExtended  = UINT8_MAX;
+
+        int rc = rtDvmDiskRead(pThis->pDisk, pNext->offOnDisk, &pNext->abData[0], sizeof(pNext->abData));
+        if (   RT_FAILURE(rc)
+            || pNext->abData[510] != 0x55
+            || pNext->abData[511] != 0xaa)
+        {
+            if (RT_FAILURE(rc))
+                LogRel(("rtDvmFmtMbrReadExtended: Error reading extended partition table at sector %#RX64: %Rrc\n", offCurBegin, rc));
+            else
+                LogRel(("rtDvmFmtMbrReadExtended: Extended partition table at sector %#RX64 does not have a valid DOS signature: %#x %#x\n",
+                        offCurBegin, pNext->abData[510], pNext->abData[511]));
+            RTMemFree(pNext);
+            pCurEntry->fBad = true;
+            return rc;
+        }
+        pCurEntry->pChain = pNext;
+
+        /*
+         * Process the table, taking down the first forward entry.
+         *
+         * As noted in the caller of this function, we only deal with one extended
+         * partition entry at this level since noone really ever put more than one
+         * here anyway.
+         */
+        PRTDVMMBRENTRY pEntry     = &pNext->aEntries[0];
+        uint8_t       *pbMbrEntry = &pNext->abData[446];
+        for (unsigned i = 0; i < 4; i++, pEntry++, pbMbrEntry += 16)
+        {
+            uint8_t const bType  = pbMbrEntry[4];
+            pEntry->pSector = pNext;
+            RTListInit(&pEntry->ListEntry);
+            if (bType != 0)
             {
-                /* The entry is unused if the type contains 0x00. */
-                if (pbMbrEntry[4] != 0x00)
+                pEntry->bType    = bType;
+                pEntry->fFlags   = pbMbrEntry[0];
+                pEntry->offPart  = RT_MAKE_U32_FROM_U8(pbMbrEntry[0x08],
+                                                       pbMbrEntry[0x08 + 1],
+                                                       pbMbrEntry[0x08 + 2],
+                                                       pbMbrEntry[0x08 + 3]);
+                pEntry->offPart *= 512;
+                pEntry->cbPart   = RT_MAKE_U32_FROM_U8(pbMbrEntry[0x0c],
+                                                       pbMbrEntry[0x0c + 1],
+                                                       pbMbrEntry[0x0c + 2],
+                                                       pbMbrEntry[0x0c + 3]);
+                pEntry->cbPart  *= 512;
+                if (!RTDVMMBR_IS_EXTENDED(bType))
+                {
+                    pEntry->offPart += offCurBegin;
                     pThis->cPartitions++;
+                    RTListAppend(&pThis->PartitionHead, &pEntry->ListEntry);
+                    Log2(("rtDvmFmtMbrReadExtended: %#012RX64::%u: vol%u bType=%#04x fFlags=%#04x offPart=%#012RX64 cbPart=%#012RX64\n",
+                          offCurBegin, i, pThis->cPartitions - 1, pEntry->bType, pEntry->fFlags, pEntry->offPart, pEntry->cbPart));
+                }
+                else
+                {
+                    pEntry->offPart += offExtBegin;
+                    pNext->cExtended++;
+                    if (pNext->idxExtended == UINT8_MAX)
+                        pNext->idxExtended = (uint8_t)i;
+                    else
+                    {
+                        pEntry->fBad = true;
+                        LogRel(("rtDvmFmtMbrReadExtended: Warning! Both #%u and #%u are extended partition table entries! Only following the former\n",
+                                i, pNext->idxExtended));
+                    }
+                    Log2(("rtDvmFmtMbrReadExtended: %#012RX64::%u: ext%u bType=%#04x fFlags=%#04x offPart=%#012RX64 cbPart=%#012RX64\n",
+                          offCurBegin, i, pNext->cExtended - 1, pEntry->bType, pEntry->fFlags, pEntry->offPart, pEntry->cbPart));
+                }
+                pNext->cUsed++;
 
-                pbMbrEntry += 16;
+            }
+            /* else: unused */
+        }
+
+        /*
+         * We're done if we didn't find any extended partition table entry.
+         * Otherwise, advance to the next one.
+         */
+        if (!pNext->cExtended)
+            return VINF_SUCCESS;
+        pCurEntry   = &pNext->aEntries[pNext->idxExtended];
+        offCurBegin = pCurEntry->offPart;
+    }
+}
+
+
+static DECLCALLBACK(int) rtDvmFmtMbrOpen(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt)
+{
+    int rc;
+    PRTDVMFMTINTERNAL pThis = (PRTDVMFMTINTERNAL)RTMemAllocZ(sizeof(RTDVMFMTINTERNAL));
+    if (pThis)
+    {
+        pThis->pDisk            = pDisk;
+        //pThis->cPartitions    = 0;
+        RTListInit(&pThis->PartitionHead);
+        //pThis->Primary.offOnDisk   = 0;
+        //pThis->Primary.pPrevSector = NULL;
+        pThis->Primary.fIsPrimary    = true;
+        //pThis->Primary.cUsed       = 0;
+        //pThis->Primary.cExtended   = 0;
+        pThis->Primary.idxExtended   = UINT8_MAX;
+
+        /*
+         * Read the primary MBR.
+         */
+        rc = rtDvmDiskRead(pDisk, 0, &pThis->Primary.abData[0], sizeof(pThis->Primary.abData));
+        if (RT_SUCCESS(rc))
+        {
+            Assert(pThis->Primary.abData[510] == 0x55 && pThis->Primary.abData[511] == 0xaa);
+
+            /*
+             * Setup basic data for the 4 entries.
+             */
+            PRTDVMMBRENTRY pEntry     = &pThis->Primary.aEntries[0];
+            uint8_t       *pbMbrEntry = &pThis->Primary.abData[446];
+            for (unsigned i = 0; i < 4; i++, pEntry++, pbMbrEntry += 16)
+            {
+                pEntry->pSector = &pThis->Primary;
+                RTListInit(&pEntry->ListEntry);
+
+                uint8_t const bType = pbMbrEntry[4];
+                if (bType != 0)
+                {
+                    pEntry->offPart  = RT_MAKE_U32_FROM_U8(pbMbrEntry[0x08 + 0],
+                                                           pbMbrEntry[0x08 + 1],
+                                                           pbMbrEntry[0x08 + 2],
+                                                           pbMbrEntry[0x08 + 3]);
+                    pEntry->offPart *= 512;
+                    pEntry->cbPart   = RT_MAKE_U32_FROM_U8(pbMbrEntry[0x0c + 0],
+                                                           pbMbrEntry[0x0c + 1],
+                                                           pbMbrEntry[0x0c + 2],
+                                                           pbMbrEntry[0x0c + 3]);
+                    pEntry->cbPart  *= 512;
+                    pEntry->bType    = bType;
+                    pEntry->fFlags   = pbMbrEntry[0];
+                    if (!RTDVMMBR_IS_EXTENDED(bType))
+                    {
+                        pThis->cPartitions++;
+                        RTListAppend(&pThis->PartitionHead, &pEntry->ListEntry);
+                        Log2(("rtDvmFmtMbrOpen: %u: vol%u bType=%#04x fFlags=%#04x offPart=%#012RX64 cbPart=%#012RX64\n",
+                              i, pThis->cPartitions - 1, pEntry->bType, pEntry->fFlags, pEntry->offPart, pEntry->cbPart));
+                    }
+                    else
+                    {
+                        pThis->Primary.cExtended++;
+                        Log2(("rtDvmFmtMbrOpen: %u: ext%u bType=%#04x fFlags=%#04x offPart=%#012RX64 cbPart=%#012RX64\n",
+                              i, pThis->Primary.cExtended - 1, pEntry->bType, pEntry->fFlags, pEntry->offPart, pEntry->cbPart));
+                    }
+                    pThis->Primary.cUsed++;
+                }
+                /* else: unused */
+            }
+
+            /*
+             * Now read any extended partitions.  Since it's no big deal for us, we allow
+             * the primary partition table to have more than one extended partition.  However
+             * in the extended tables we only allow a single forward link to avoid having to
+             * deal with recursion.
+             */
+            if (pThis->Primary.cExtended > 0)
+                for (unsigned i = 0; i < 4; i++)
+                    if (RTDVMMBR_IS_EXTENDED(pThis->Primary.aEntries[i].bType))
+                    {
+                        if (pThis->Primary.idxExtended == UINT8_MAX)
+                            pThis->Primary.idxExtended = (uint8_t)i;
+                        rc = rtDvmFmtMbrReadExtended(pThis, &pThis->Primary.aEntries[i]);
+                        if (RT_FAILURE(rc))
+                            break;
+                    }
+            if (RT_SUCCESS(rc))
+            {
+                *phVolMgrFmt = pThis;
+                return rc;
             }
 
-            *phVolMgrFmt = pThis;
         }
     }
     else
@@ -173,23 +463,27 @@ static DECLCALLBACK(int) rtDvmFmtMbrOpen(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFm
 
 static DECLCALLBACK(int) rtDvmFmtMbrInitialize(PCRTDVMDISK pDisk, PRTDVMFMT phVolMgrFmt)
 {
-    int rc = VINF_SUCCESS;
-    PRTDVMFMTINTERNAL pThis = NULL;
-
-    pThis = (PRTDVMFMTINTERNAL)RTMemAllocZ(sizeof(RTDVMFMTINTERNAL));
+    int rc;
+    PRTDVMFMTINTERNAL pThis = (PRTDVMFMTINTERNAL)RTMemAllocZ(sizeof(RTDVMFMTINTERNAL));
     if (pThis)
     {
-        /* Setup a new MBR and write it to the disk. */
-        memset(&pThis->abMbr[0], 0, sizeof(pThis->abMbr));
-        pThis->abMbr[510] = 0x55;
-        pThis->abMbr[511] = 0xaa;
-
-        rc = rtDvmDiskWrite(pDisk, 0, &pThis->abMbr[0], sizeof(pThis->abMbr));
+        pThis->pDisk            = pDisk;
+        //pThis->cPartitions    = 0;
+        RTListInit(&pThis->PartitionHead);
+        //pThis->Primary.offOnDisk   = 0
+        //pThis->Primary.pPrevSector = NULL;
+        pThis->Primary.fIsPrimary    = true;
+        //pThis->Primary.cUsed       = 0;
+        //pThis->Primary.cExtended   = 0;
+        pThis->Primary.idxExtended   = UINT8_MAX;
 
+        /* Setup a new MBR and write it to the disk. */
+        pThis->Primary.abData[510] = 0x55;
+        pThis->Primary.abData[511] = 0xaa;
+        rc = rtDvmDiskWrite(pDisk, 0, &pThis->Primary.abData[0], sizeof(pThis->Primary.abData));
         if (RT_SUCCESS(rc))
         {
-            pThis->pDisk       = pDisk;
-            pThis->cPartitions = 0;
+            pThis->pDisk = pDisk;
             *phVolMgrFmt = pThis;
         }
         else
@@ -203,12 +497,7 @@ static DECLCALLBACK(int) rtDvmFmtMbrInitialize(PCRTDVMDISK pDisk, PRTDVMFMT phVo
 
 static DECLCALLBACK(void) rtDvmFmtMbrClose(RTDVMFMT hVolMgrFmt)
 {
-    PRTDVMFMTINTERNAL pThis = hVolMgrFmt;
-
-    pThis->pDisk       = NULL;
-    pThis->cPartitions = 0;
-    memset(&pThis->abMbr[0], 0, sizeof(pThis->abMbr));
-    RTMemFree(pThis);
+    rtDvmFmtMbrDestroy(hVolMgrFmt);
 }
 
 static DECLCALLBACK(int) rtDvmFmtMbrQueryRangeUse(RTDVMFMT hVolMgrFmt,
@@ -240,77 +529,45 @@ static DECLCALLBACK(uint32_t) rtDvmFmtMbrGetMaxVolumes(RTDVMFMT hVolMgrFmt)
  * Creates a new volume.
  *
  * @returns IPRT status code.
- * @param   pThis         The MBR volume manager data.
- * @param   pbMbrEntry    The raw MBR entry data.
- * @param   idx           The index in the partition table.
- * @param   phVolFmt      Where to store the volume data on success.
+ * @param   pThis       The MBR volume manager data.
+ * @param   pEntry      The MBR entry to create a volume handle for.
+ * @param   phVolFmt    Where to store the volume data on success.
  */
-static int rtDvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, uint8_t *pbMbrEntry,
-                                 uint32_t idx, PRTDVMVOLUMEFMT phVolFmt)
+static int rtDvmFmtMbrVolumeCreate(PRTDVMFMTINTERNAL pThis, PRTDVMMBRENTRY pEntry, PRTDVMVOLUMEFMT phVolFmt)
 {
-    int rc = VINF_SUCCESS;
     PRTDVMVOLUMEFMTINTERNAL pVol = (PRTDVMVOLUMEFMTINTERNAL)RTMemAllocZ(sizeof(RTDVMVOLUMEFMTINTERNAL));
-
     if (pVol)
     {
         pVol->pVolMgr    = pThis;
-        pVol->idxEntry   = idx;
-        pVol->pbMbrEntry = pbMbrEntry;
-        pVol->offStart   = *(uint32_t *)&pbMbrEntry[0x08] * pThis->pDisk->cbSector;
-        pVol->cbVolume   = *(uint32_t *)&pbMbrEntry[0x0c] * pThis->pDisk->cbSector;
-
+        pVol->pEntry     = pEntry;
         *phVolFmt = pVol;
+        return VINF_SUCCESS;
     }
-    else
-        rc = VERR_NO_MEMORY;
-
-    return rc;
+    return VERR_NO_MEMORY;
 }
 
 static DECLCALLBACK(int) rtDvmFmtMbrQueryFirstVolume(RTDVMFMT hVolMgrFmt, PRTDVMVOLUMEFMT phVolFmt)
 {
-    int rc = VINF_SUCCESS;
     PRTDVMFMTINTERNAL pThis = hVolMgrFmt;
-
     if (pThis->cPartitions != 0)
-    {
-        uint8_t *pbMbrEntry = &pThis->abMbr[446];
-
-        /* Search for the first non empty entry. */
-        for (unsigned i = 0; i < 4; i++)
-        {
-            if (pbMbrEntry[0x04] != 0x00)
-            {
-                rc = rtDvmFmtMbrVolumeCreate(pThis, pbMbrEntry, i, phVolFmt);
-                break;
-            }
-            pbMbrEntry += 16;
-        }
-    }
-    else
-        rc = VERR_DVM_MAP_EMPTY;
-
-    return rc;
+        return rtDvmFmtMbrVolumeCreate(pThis, RTListGetFirst(&pThis->PartitionHead, RTDVMMBRENTRY, ListEntry), phVolFmt);
+    return VERR_DVM_MAP_EMPTY;
 }
 
 static DECLCALLBACK(int) rtDvmFmtMbrQueryNextVolume(RTDVMFMT hVolMgrFmt, RTDVMVOLUMEFMT hVolFmt, PRTDVMVOLUMEFMT phVolFmtNext)
 {
-    int rc = VERR_DVM_MAP_NO_VOLUME;
-    PRTDVMFMTINTERNAL pThis = hVolMgrFmt;
-    PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
-    uint8_t *pbMbrEntry = pVol->pbMbrEntry + 16;
-
-    for (unsigned i = pVol->idxEntry + 1; i < 4; i++)
+    PRTDVMFMTINTERNAL       pThis   = hVolMgrFmt;
+    PRTDVMVOLUMEFMTINTERNAL pCurVol = hVolFmt;
+    if (pCurVol)
     {
-        if (pbMbrEntry[0x04] != 0x00)
-        {
-            rc = rtDvmFmtMbrVolumeCreate(pThis, pbMbrEntry, i, phVolFmtNext);
-            break;
-        }
-        pbMbrEntry += 16;
+        PRTDVMMBRENTRY pNextEntry = RTListGetNext(&pThis->PartitionHead, pCurVol->pEntry, RTDVMMBRENTRY, ListEntry);
+        if (pNextEntry)
+            return rtDvmFmtMbrVolumeCreate(pThis, pNextEntry, phVolFmtNext);
+        return VERR_DVM_MAP_NO_VOLUME;
     }
-
-    return rc;
+    if (pThis->cPartitions != 0)
+        return rtDvmFmtMbrVolumeCreate(pThis, RTListGetFirst(&pThis->PartitionHead, RTDVMMBRENTRY, ListEntry), phVolFmtNext);
+    return VERR_DVM_MAP_EMPTY;
 }
 
 static DECLCALLBACK(void) rtDvmFmtMbrVolumeClose(RTDVMVOLUMEFMT hVolFmt)
@@ -318,9 +575,7 @@ static DECLCALLBACK(void) rtDvmFmtMbrVolumeClose(RTDVMVOLUMEFMT hVolFmt)
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
     pVol->pVolMgr    = NULL;
-    pVol->offStart   = 0;
-    pVol->cbVolume   = 0;
-    pVol->pbMbrEntry = NULL;
+    pVol->pEntry     = NULL;
 
     RTMemFree(pVol);
 }
@@ -329,7 +584,7 @@ static DECLCALLBACK(uint64_t) rtDvmFmtMbrVolumeGetSize(RTDVMVOLUMEFMT hVolFmt)
 {
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
-    return pVol->cbVolume;
+    return pVol->pEntry->cbPart;
 }
 
 static DECLCALLBACK(int) rtDvmFmtMbrVolumeQueryName(RTDVMVOLUMEFMT hVolFmt, char **ppszVolName)
@@ -340,25 +595,22 @@ static DECLCALLBACK(int) rtDvmFmtMbrVolumeQueryName(RTDVMVOLUMEFMT hVolFmt, char
 
 static DECLCALLBACK(RTDVMVOLTYPE) rtDvmFmtMbrVolumeGetType(RTDVMVOLUMEFMT hVolFmt)
 {
-    RTDVMVOLTYPE enmVolType = RTDVMVOLTYPE_UNKNOWN;
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
+    uint8_t const bType = pVol->pEntry->bType;
     for (unsigned i = 0; i < RT_ELEMENTS(g_aFs2DvmVolTypes); i++)
-        if (pVol->pbMbrEntry[0x04] == g_aFs2DvmVolTypes[i].bFsId)
-        {
-            enmVolType = g_aFs2DvmVolTypes[i].enmVolType;
-            break;
-        }
+        if (g_aFs2DvmVolTypes[i].bFsId == bType)
+            return g_aFs2DvmVolTypes[i].enmVolType;
 
-    return enmVolType;
+    return RTDVMVOLTYPE_UNKNOWN;
 }
 
 static DECLCALLBACK(uint64_t) rtDvmFmtMbrVolumeGetFlags(RTDVMVOLUMEFMT hVolFmt)
 {
-    uint64_t fFlags = 0;
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
-    if (pVol->pbMbrEntry[0x00] & 0x80)
+    uint64_t fFlags = 0;
+    if (pVol->pEntry->bType & 0x80)
         fFlags |= DVMVOLUME_FLAGS_BOOTABLE | DVMVOLUME_FLAGS_ACTIVE;
 
     return fFlags;
@@ -369,39 +621,39 @@ static DECLCALLBACK(bool) rtDvmFmtMbrVolumeIsRangeIntersecting(RTDVMVOLUMEFMT hV
                                                                uint64_t *poffVol,
                                                                uint64_t *pcbIntersect)
 {
-    bool fIntersect = false;
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
 
-    if (RTDVM_RANGE_IS_INTERSECTING(pVol->offStart, pVol->cbVolume, offStart))
+    if (RTDVM_RANGE_IS_INTERSECTING(pVol->pEntry->offPart, pVol->pEntry->cbPart, offStart))
     {
-        fIntersect    = true;
-        *poffVol      = offStart - pVol->offStart;
-        *pcbIntersect = RT_MIN(cbRange, pVol->offStart + pVol->cbVolume - offStart);
+        *poffVol      = offStart - pVol->pEntry->offPart;
+        *pcbIntersect = RT_MIN(cbRange, pVol->pEntry->offPart + pVol->pEntry->cbPart - offStart);
+        return true;
     }
-
-    return fIntersect;
+    return false;
 }
 
 static DECLCALLBACK(int) rtDvmFmtMbrVolumeRead(RTDVMVOLUMEFMT hVolFmt, uint64_t off, void *pvBuf, size_t cbRead)
 {
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
-    AssertReturn(off + cbRead <= pVol->cbVolume, VERR_INVALID_PARAMETER);
+    AssertReturn(off + cbRead <= pVol->pEntry->cbPart, VERR_INVALID_PARAMETER);
 
-    return rtDvmDiskRead(pVol->pVolMgr->pDisk, pVol->offStart + off, pvBuf, cbRead);
+    return rtDvmDiskRead(pVol->pVolMgr->pDisk, pVol->pEntry->offPart + off, pvBuf, cbRead);
 }
 
 static DECLCALLBACK(int) rtDvmFmtMbrVolumeWrite(RTDVMVOLUMEFMT hVolFmt, uint64_t off, const void *pvBuf, size_t cbWrite)
 {
     PRTDVMVOLUMEFMTINTERNAL pVol = hVolFmt;
-    AssertReturn(off + cbWrite <= pVol->cbVolume, VERR_INVALID_PARAMETER);
+    AssertReturn(off + cbWrite <= pVol->pEntry->cbPart, VERR_INVALID_PARAMETER);
 
-    return rtDvmDiskWrite(pVol->pVolMgr->pDisk, pVol->offStart + off, pvBuf, cbWrite);
+    return rtDvmDiskWrite(pVol->pVolMgr->pDisk, pVol->pEntry->offPart + off, pvBuf, cbWrite);
 }
 
 RTDVMFMTOPS g_rtDvmFmtMbr =
 {
-    /* pcszFmt */
+    /* pszFmt */
     "MBR",
+    /* enmFormat */
+    RTDVMFORMATTYPE_MBR,
     /* pfnProbe */
     rtDvmFmtMbrProbe,
     /* pfnOpen */
diff --git a/src/VBox/Runtime/common/dvm/dvmvfs.cpp b/src/VBox/Runtime/common/dvm/dvmvfs.cpp
index 818eb16..8f36b33 100644
--- a/src/VBox/Runtime/common/dvm/dvmvfs.cpp
+++ b/src/VBox/Runtime/common/dvm/dvmvfs.cpp
@@ -28,6 +28,7 @@
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_FS /** @todo fix log group  */
 #include <iprt/types.h>
 #include <iprt/assert.h>
 #include <iprt/mem.h>
@@ -39,12 +40,48 @@
 #include <iprt/sg.h>
 #include <iprt/vfslowlevel.h>
 #include <iprt/poll.h>
+#include <iprt/log.h>
 #include "internal/dvm.h"
 
 
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
+/**
+ * A volume manager VFS for use in chains (thing pseudo/devfs).
+ */
+typedef struct RTDVMVFSVOL
+{
+    /** The volume manager. */
+    RTDVM           hVolMgr;
+    /** Whether to close it on success. */
+    bool            fCloseDvm;
+    /** Whether the access is read-only. */
+    bool            fReadOnly;
+    /** Number of volumes. */
+    uint32_t        cVolumes;
+    /** Self reference. */
+    RTVFS           hVfsSelf;
+} RTDVMVFSVOL;
+/** Poitner to a volume manager VFS. */
+typedef RTDVMVFSVOL *PRTDVMVFSVOL;
+
+/**
+ * The volume manager VFS (root) dir data.
+ */
+typedef struct RTDVMVFSDIR
+{
+    /** Pointer to the VFS volume. */
+    PRTDVMVFSVOL    pVfsVol;
+    /** The current directory offset. */
+    uint32_t        offDir;
+    /** Set if we need to try return hCurVolume again because of buffer overflow. */
+    bool            fReturnCurrent;
+    /** The current DVM volume. */
+    RTDVMVOLUME     hCurVolume;
+} RTDVMVFSDIR;
+/** Poitner to a volume manager VFS (root) dir. */
+typedef RTDVMVFSDIR *PRTDVMVFSDIR;
 
 /**
  * The internal data of a DVM volume I/O stream.
@@ -52,9 +89,15 @@
 typedef struct RTVFSDVMFILE
 {
     /** The volume the VFS file belongs to. */
-    RTDVMVOLUME    hVol;
+    RTDVMVOLUME     hVol;
+    /** Pointer to the VFS volume.  Can be NULL. */
+    PRTDVMVFSVOL    pVfsVol;
     /** Current position. */
-    uint64_t       offCurPos;
+    uint64_t        offCurPos;
+    /** Set if readable. */
+    bool            fCanRead;
+    /** Set if writable. */
+    bool            fCanWrite;
 } RTVFSDVMFILE;
 /** Pointer to a the internal data of a DVM volume file. */
 typedef RTVFSDVMFILE *PRTVFSDVMFILE;
@@ -73,14 +116,83 @@ static DECLCALLBACK(int) rtDvmVfsFile_Close(void *pvThis)
 
 
 /**
+ * Worker for rtDvmVfsFile_QueryInfo, rtDvmVfsDir_QueryEntryInfo, and
+ * rtDvmVfsDir_ReadDir.
+ */
+static int rtDvmVfsFile_QueryInfoWorker(RTDVMVOLUME hVolume, RTDVM hVolMgr, bool fReadOnly,
+                                        PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+
+    pObjInfo->cbObject    = RTDvmVolumeGetSize(hVolume);
+    pObjInfo->cbAllocated = pObjInfo->cbObject;
+    RTTimeSpecSetNano(&pObjInfo->AccessTime, 0);
+    RTTimeSpecSetNano(&pObjInfo->ModificationTime, 0);
+    RTTimeSpecSetNano(&pObjInfo->ChangeTime, 0);
+    RTTimeSpecSetNano(&pObjInfo->BirthTime, 0);
+    pObjInfo->Attr.fMode = RTFS_TYPE_FILE | RTFS_DOS_NT_NORMAL;
+    if (fReadOnly)
+        pObjInfo->Attr.fMode |= RTFS_DOS_READONLY | 0444;
+    else
+        pObjInfo->Attr.fMode |= 0666;
+
+    switch (enmAddAttr)
+    {
+        case RTFSOBJATTRADD_NOTHING:
+        case RTFSOBJATTRADD_UNIX:
+            pObjInfo->Attr.u.Unix.uid           = (RTUID)RTDvmVolumeGetType(hVolume);
+            pObjInfo->Attr.u.Unix.gid           = hVolMgr != NIL_RTDVM ? (RTGID)RTDvmMapGetFormatType(hVolMgr) : NIL_RTGID;
+            pObjInfo->Attr.u.Unix.cHardlinks    = 1;
+            pObjInfo->Attr.u.Unix.INodeIdDevice = 0;
+            pObjInfo->Attr.u.Unix.INodeId       = 0;
+            pObjInfo->Attr.u.Unix.fFlags        = 0;
+            pObjInfo->Attr.u.Unix.GenerationId  = 0;
+            pObjInfo->Attr.u.Unix.Device        = 0;
+            break;
+
+        case RTFSOBJATTRADD_UNIX_OWNER:
+        {
+            RTDVMVOLTYPE enmType = RTDvmVolumeGetType(hVolume);
+            pObjInfo->Attr.u.UnixOwner.uid = (RTUID)enmType;
+            RTStrCopy(pObjInfo->Attr.u.UnixOwner.szName, sizeof(pObjInfo->Attr.u.UnixOwner.szName),
+                      RTDvmVolumeTypeGetDescr(enmType));
+            break;
+        }
+
+        case RTFSOBJATTRADD_UNIX_GROUP:
+            if (hVolMgr != NIL_RTDVM)
+            {
+                pObjInfo->Attr.u.UnixGroup.gid  = (RTGID)RTDvmMapGetFormatType(hVolMgr);
+                RTStrCopy(pObjInfo->Attr.u.UnixGroup.szName, sizeof(pObjInfo->Attr.u.UnixGroup.szName),
+                          RTDvmMapGetFormatName(hVolMgr));
+            }
+            else
+            {
+                pObjInfo->Attr.u.UnixGroup.gid  = NIL_RTGID;
+                pObjInfo->Attr.u.UnixGroup.szName[0] = '\0';
+            }
+            break;
+
+        case RTFSOBJATTRADD_EASIZE:
+            pObjInfo->Attr.u.EASize.cb = 0;
+            break;
+
+        default:
+            return VERR_INVALID_PARAMETER;
+    }
+    return VINF_SUCCESS;
+}
+
+
+/**
  * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
  */
 static DECLCALLBACK(int) rtDvmVfsFile_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
 {
-    NOREF(pvThis);
-    NOREF(pObjInfo);
-    NOREF(enmAddAttr);
-    return VERR_NOT_SUPPORTED;
+    PRTVFSDVMFILE pThis = (PRTVFSDVMFILE)pvThis;
+    return rtDvmVfsFile_QueryInfoWorker(pThis->hVol,
+                                        pThis->pVfsVol ? pThis->pVfsVol->hVolMgr   : NIL_RTDVM,
+                                        pThis->pVfsVol ? pThis->pVfsVol->fReadOnly : !pThis->fCanWrite,
+                                        pObjInfo, enmAddAttr);
 }
 
 
@@ -384,11 +496,17 @@ DECL_HIDDEN_CONST(const RTVFSFILEOPS) g_rtDvmVfsStdFileOps =
 };
 
 
-RTDECL(int) RTDvmVolumeCreateVfsFile(RTDVMVOLUME hVol, PRTVFSFILE phVfsFileOut)
+/**
+ * Internal worker for RTDvmVolumeCreateVfsFile and rtDvmVfsDir_OpenFile.
+ *
+ * @returns IPRT status code.
+ * @param   pVfsVol         The VFS volume, optional.
+ * @param   hVol            The volume handle. (Reference not consumed.)
+ * @param   fOpen           RTFILE_O_XXX (valid).
+ * @param   phVfsFileOut    Where to return the handle to the file.
+ */
+static int rtDvmVfsCreateFileForVolume(PRTDVMVFSVOL pVfsVol, RTDVMVOLUME hVol, uint64_t fOpen, PRTVFSFILE phVfsFileOut)
 {
-    AssertPtrReturn(hVol, VERR_INVALID_HANDLE);
-    AssertPtrReturn(phVfsFileOut, VERR_INVALID_POINTER);
-
     uint32_t cRefs = RTDvmVolumeRetain(hVol);
     AssertReturn(cRefs != UINT32_MAX, VERR_INVALID_HANDLE);
 
@@ -397,18 +515,692 @@ RTDECL(int) RTDvmVolumeCreateVfsFile(RTDVMVOLUME hVol, PRTVFSFILE phVfsFileOut)
      */
     RTVFSFILE       hVfsFile;
     PRTVFSDVMFILE   pThis;
-    int rc = RTVfsNewFile(&g_rtDvmVfsStdFileOps, sizeof(*pThis), RTFILE_O_OPEN | RTFILE_O_READ | RTFILE_O_WRITE,
-                          NIL_RTVFS, NIL_RTVFSLOCK, &hVfsFile, (void **)&pThis);
+    int rc = RTVfsNewFile(&g_rtDvmVfsStdFileOps, sizeof(*pThis), fOpen, NIL_RTVFS, NIL_RTVFSLOCK, &hVfsFile, (void **)&pThis);
     if (RT_SUCCESS(rc))
     {
         pThis->offCurPos = 0;
         pThis->hVol      = hVol;
+        pThis->fCanRead  = RT_BOOL(fOpen & RTFILE_O_READ);
+        pThis->fCanWrite = RT_BOOL(fOpen & RTFILE_O_WRITE);
+        pThis->pVfsVol   = pVfsVol;
 
         *phVfsFileOut = hVfsFile;
         return VINF_SUCCESS;
     }
+
+    RTDvmVolumeRelease(hVol);
+    return rc;
+}
+
+
+RTDECL(int) RTDvmVolumeCreateVfsFile(RTDVMVOLUME hVol, uint64_t fOpen, PRTVFSFILE phVfsFileOut)
+{
+    AssertPtrReturn(hVol, VERR_INVALID_HANDLE);
+    AssertPtrReturn(phVfsFileOut, VERR_INVALID_POINTER);
+    AssertReturn(fOpen & RTFILE_O_ACCESS_MASK, VERR_INVALID_FLAGS);
+    AssertReturn(!(fOpen & ~RTFILE_O_VALID_MASK), VERR_INVALID_FLAGS);
+    return rtDvmVfsCreateFileForVolume(NULL, hVol, fOpen, phVfsFileOut);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnClose}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_Close(void *pvThis)
+{
+    PRTDVMVFSDIR pThis = (PRTDVMVFSDIR)pvThis;
+
+    if (pThis->hCurVolume != NIL_RTDVMVOLUME)
+    {
+        RTDvmVolumeRelease(pThis->hCurVolume);
+        pThis->hCurVolume = NIL_RTDVMVOLUME;
+    }
+
+    pThis->pVfsVol = NULL;
+
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTDVMVFSDIR pThis = (PRTDVMVFSDIR)pvThis;
+    pObjInfo->cbObject    = pThis->pVfsVol->cVolumes;
+    pObjInfo->cbAllocated = pThis->pVfsVol->cVolumes;
+    RTTimeSpecSetNano(&pObjInfo->AccessTime, 0);
+    RTTimeSpecSetNano(&pObjInfo->ModificationTime, 0);
+    RTTimeSpecSetNano(&pObjInfo->ChangeTime, 0);
+    RTTimeSpecSetNano(&pObjInfo->BirthTime, 0);
+    pObjInfo->Attr.fMode = RTFS_TYPE_DIRECTORY | RTFS_DOS_DIRECTORY;
+    if (pThis->pVfsVol->fReadOnly)
+        pObjInfo->Attr.fMode |= RTFS_DOS_READONLY | 0555;
+    else
+        pObjInfo->Attr.fMode |= 0777;
+
+    switch (enmAddAttr)
+    {
+        case RTFSOBJATTRADD_NOTHING:
+        case RTFSOBJATTRADD_UNIX:
+            pObjInfo->Attr.u.Unix.uid           = NIL_RTUID;
+            pObjInfo->Attr.u.Unix.gid           = (RTGID)RTDvmMapGetFormatType(pThis->pVfsVol->hVolMgr);
+            pObjInfo->Attr.u.Unix.cHardlinks    = pThis->pVfsVol->cVolumes;
+            pObjInfo->Attr.u.Unix.INodeIdDevice = 0;
+            pObjInfo->Attr.u.Unix.INodeId       = 0;
+            pObjInfo->Attr.u.Unix.fFlags        = 0;
+            pObjInfo->Attr.u.Unix.GenerationId  = 0;
+            pObjInfo->Attr.u.Unix.Device        = 0;
+            break;
+
+        case RTFSOBJATTRADD_UNIX_OWNER:
+            pObjInfo->Attr.u.UnixOwner.uid      = NIL_RTUID;
+            pObjInfo->Attr.u.UnixOwner.szName[0] = '\0';
+            break;
+
+        case RTFSOBJATTRADD_UNIX_GROUP:
+            pObjInfo->Attr.u.UnixGroup.gid      = (RTGID)RTDvmMapGetFormatType(pThis->pVfsVol->hVolMgr);
+            RTStrCopy(pObjInfo->Attr.u.UnixGroup.szName, sizeof(pObjInfo->Attr.u.UnixGroup.szName),
+                      RTDvmMapGetFormatName(pThis->pVfsVol->hVolMgr));
+            break;
+
+        case RTFSOBJATTRADD_EASIZE:
+            pObjInfo->Attr.u.EASize.cb = 0;
+            break;
+
+        default:
+            return VERR_INVALID_PARAMETER;
+    }
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
+{
+    NOREF(pvThis); NOREF(fMode); NOREF(fMask);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                             PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
+{
+    NOREF(pvThis); NOREF(pAccessTime); NOREF(pModificationTime); NOREF(pChangeTime); NOREF(pBirthTime);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_SetOwner(void *pvThis, RTUID uid, RTGID gid)
+{
+    RT_NOREF(pvThis, uid, gid);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnTraversalOpen}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_TraversalOpen(void *pvThis, const char *pszEntry, PRTVFSDIR phVfsDir,
+                                                  PRTVFSSYMLINK phVfsSymlink, PRTVFS phVfsMounted)
+{
+    RT_NOREF(pvThis, pszEntry);
+
+    /* We don't do any subdirs. */
+    if (phVfsSymlink)
+        *phVfsSymlink = NIL_RTVFSSYMLINK;
+    if (phVfsMounted)
+        *phVfsMounted = NIL_RTVFS;
+    if (phVfsDir)
+        *phVfsDir = NIL_RTVFSDIR;
+    return VERR_PATH_NOT_FOUND;
+}
+
+
+static int rtDvmVfsDir_FindEntry(PRTDVMVFSDIR pThis, const char *pszEntry, PRTDVMVOLUME phVolume)
+{
+    /*
+     * Enumerate the volumes and try match the volume name.
+     */
+    int rc;
+    PRTDVMVFSVOL pVfsVol = pThis->pVfsVol;
+    if (pVfsVol->cVolumes > 0)
+    {
+        /* The first volume. */
+        uint32_t iVol = 0;
+        RTDVMVOLUME hVol;
+        rc = RTDvmMapQueryFirstVolume(pThis->pVfsVol->hVolMgr, &hVol);
+        while (RT_SUCCESS(rc))
+        {
+            /* Match the name. */
+            bool  fMatch;
+            char *pszVolName;
+            rc = RTDvmVolumeQueryName(hVol, &pszVolName);
+            if (RT_SUCCESS(rc))
+            {
+                fMatch = RTStrCmp(pszEntry, pszVolName) == 0 && *pszVolName != '\0';
+                RTStrFree(pszVolName);
+            }
+            else if (rc == VERR_NOT_SUPPORTED)
+                fMatch = false;
+            else
+            {
+                RTDvmVolumeRelease(hVol);
+                break;
+            }
+
+            /* Match the sequential volume number. */
+            if (!fMatch)
+            {
+                char szTmp[16];
+                RTStrPrintf(szTmp, sizeof(szTmp), "vol%u", iVol);
+                fMatch = RTStrCmp(pszEntry, szTmp) == 0;
+            }
+
+            if (fMatch)
+            {
+                *phVolume = hVol;
+                return VINF_SUCCESS;
+            }
+
+            /* More volumes? */
+            iVol++;
+            if (iVol >= pVfsVol->cVolumes)
+            {
+                RTDvmVolumeRelease(hVol);
+                rc = VERR_FILE_NOT_FOUND;
+                break;
+            }
+
+            /* Get the next volume. */
+            RTDVMVOLUME hVolNext;
+            rc = RTDvmMapQueryNextVolume(pThis->pVfsVol->hVolMgr, hVol, &hVolNext);
+            RTDvmVolumeRelease(hVol);
+            hVol = hVolNext;
+        }
+    }
     else
-        RTDvmVolumeRelease(hVol);
+        rc = VERR_FILE_NOT_FOUND;
     return rc;
 }
 
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnOpenFile}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_OpenFile(void *pvThis, const char *pszFilename, uint32_t fOpen, PRTVFSFILE phVfsFile)
+{
+    PRTDVMVFSDIR pThis = (PRTDVMVFSDIR)pvThis;
+    RTDVMVOLUME  hVolume;
+    int rc = rtDvmVfsDir_FindEntry(pThis, pszFilename, &hVolume);
+    if (RT_SUCCESS(rc))
+    {
+        if (   (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_OPEN
+            || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_OPEN_CREATE
+            || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE_REPLACE)
+        {
+            if (   !(fOpen & RTFILE_O_WRITE)
+                || !pThis->pVfsVol->fReadOnly)
+                rc = rtDvmVfsCreateFileForVolume(pThis->pVfsVol, hVolume, fOpen, phVfsFile);
+            else
+                rc = VERR_WRITE_PROTECT;
+        }
+        else
+            rc = VERR_ALREADY_EXISTS;
+        RTDvmVolumeRelease(hVolume);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnOpenDir}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_OpenDir(void *pvThis, const char *pszSubDir, uint32_t fFlags, PRTVFSDIR phVfsDir)
+{
+    NOREF(pvThis); NOREF(pszSubDir); NOREF(fFlags); NOREF(phVfsDir);
+    return VERR_FILE_NOT_FOUND;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnCreateDir}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_CreateDir(void *pvThis, const char *pszSubDir, RTFMODE fMode, PRTVFSDIR phVfsDir)
+{
+    RT_NOREF(pvThis, pszSubDir, fMode, phVfsDir);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnOpenSymlink}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_OpenSymlink(void *pvThis, const char *pszSymlink, PRTVFSSYMLINK phVfsSymlink)
+{
+    RT_NOREF(pvThis, pszSymlink, phVfsSymlink);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnCreateSymlink}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_CreateSymlink(void *pvThis, const char *pszSymlink, const char *pszTarget,
+                                                  RTSYMLINKTYPE enmType, PRTVFSSYMLINK phVfsSymlink)
+{
+    RT_NOREF(pvThis, pszSymlink, pszTarget, enmType, phVfsSymlink);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnQueryEntryInfo}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_QueryEntryInfo(void *pvThis, const char *pszEntry,
+                                                    PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTDVMVFSDIR pThis = (PRTDVMVFSDIR)pvThis;
+    RTDVMVOLUME  hVolume;
+    int rc = rtDvmVfsDir_FindEntry(pThis, pszEntry, &hVolume);
+    if (RT_SUCCESS(rc))
+    {
+        rc = rtDvmVfsFile_QueryInfoWorker(hVolume, pThis->pVfsVol->hVolMgr, pThis->pVfsVol->fReadOnly, pObjInfo, enmAddAttr);
+        RTDvmVolumeRelease(hVolume);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnUnlinkEntry}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_UnlinkEntry(void *pvThis, const char *pszEntry, RTFMODE fType)
+{
+    RT_NOREF(pvThis, pszEntry, fType);
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnRenameEntry}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_RenameEntry(void *pvThis, const char *pszEntry, RTFMODE fType, const char *pszNewName)
+{
+    RT_NOREF(pvThis, pszEntry, fType, pszNewName);
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnRewindDir}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_RewindDir(void *pvThis)
+{
+    PRTDVMVFSDIR pThis = (PRTDVMVFSDIR)pvThis;
+
+    if (pThis->hCurVolume != NIL_RTDVMVOLUME)
+    {
+        RTDvmVolumeRelease(pThis->hCurVolume);
+        pThis->hCurVolume = NIL_RTDVMVOLUME;
+    }
+    pThis->fReturnCurrent = false;
+    pThis->offDir         = 0;
+
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnReadDir}
+ */
+static DECLCALLBACK(int) rtDvmVfsDir_ReadDir(void *pvThis, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
+                                            RTFSOBJATTRADD enmAddAttr)
+{
+    PRTDVMVFSDIR pThis   = (PRTDVMVFSDIR)pvThis;
+    PRTDVMVFSVOL pVfsVol = pThis->pVfsVol;
+    int          rc;
+
+    /*
+     * Get the volume to return info about.
+     */
+    if (!pThis->fReturnCurrent)
+    {
+        if (pThis->offDir < pVfsVol->cVolumes)
+        {
+            RTDVMVOLUME hNextVolume;
+            if (pThis->offDir == 0)
+                rc = RTDvmMapQueryFirstVolume(pVfsVol->hVolMgr, &hNextVolume);
+            else
+                rc = RTDvmMapQueryNextVolume(pVfsVol->hVolMgr, pThis->hCurVolume, &hNextVolume);
+            if (RT_FAILURE(rc))
+                return rc;
+            RTDvmVolumeRelease(pThis->hCurVolume);
+            pThis->hCurVolume = hNextVolume;
+        }
+        else
+        {
+            RTDvmVolumeRelease(pThis->hCurVolume);
+            pThis->hCurVolume = NIL_RTDVMVOLUME;
+            return VERR_NO_MORE_FILES;
+        }
+    }
+
+    /*
+     * Figure out the name length.
+     */
+    char szVolNo[16];
+    RTStrPrintf(szVolNo, sizeof(szVolNo), "vol%u", pThis->offDir);
+
+    char *pszVolName;
+    rc = RTDvmVolumeQueryName(pThis->hCurVolume, &pszVolName);
+    if (   RT_SUCCESS(rc)
+        || rc == VERR_NOT_SUPPORTED)
+    {
+        if (rc == VERR_NOT_SUPPORTED)
+            pszVolName = szVolNo;
+        else if (*pszVolName == '\0')
+        {
+            RTStrFree(pszVolName);
+            pszVolName = szVolNo;
+        }
+
+        size_t cchVolName = strlen(pszVolName);
+        size_t cbNeeded   = RT_OFFSETOF(RTDIRENTRYEX,  szName[cchVolName + 1]);
+        if (cbNeeded <= *pcbDirEntry)
+        {
+            *pcbDirEntry = cbNeeded;
+
+            /* Do the names. */
+            pDirEntry->cbName = (uint16_t)cchVolName;
+            memcpy(pDirEntry->szName, pszVolName, cchVolName + 1);
+            if (pszVolName != szVolNo)
+            {
+                RTStrFree(pszVolName);
+
+                PRTUTF16 pwszShortName = pDirEntry->wszShortName;
+                size_t   cwcShortName = 0;
+                rc = RTStrToUtf16Ex(szVolNo, RTSTR_MAX, &pwszShortName, RT_ELEMENTS(pDirEntry->wszShortName), &cwcShortName);
+                AssertRC(rc);
+                pDirEntry->cwcShortName = (uint16_t)cwcShortName;
+            }
+            else
+            {
+                pDirEntry->cwcShortName = 0;
+                pDirEntry->wszShortName[0] = '\0';
+            }
+
+            /* Do the rest. */
+            rc = rtDvmVfsFile_QueryInfoWorker(pThis->hCurVolume, pVfsVol->hVolMgr, pVfsVol->fReadOnly,
+                                              &pDirEntry->Info, enmAddAttr);
+            pThis->fReturnCurrent = !RT_SUCCESS(rc);
+            pThis->offDir        += RT_SUCCESS(rc);
+            return rc;
+        }
+
+        *pcbDirEntry = cbNeeded;
+        rc = VERR_BUFFER_OVERFLOW;
+
+        if (pszVolName != szVolNo)
+            RTStrFree(pszVolName);
+    }
+
+    pThis->fReturnCurrent = true;
+    return rc;
+}
+
+
+/**
+ * DVM (root) directory operations.
+ */
+static const RTVFSDIROPS g_rtDvmVfsDirOps =
+{
+    { /* Obj */
+        RTVFSOBJOPS_VERSION,
+        RTVFSOBJTYPE_DIR,
+        "DvmDir",
+        rtDvmVfsDir_Close,
+        rtDvmVfsDir_QueryInfo,
+        RTVFSOBJOPS_VERSION
+    },
+    RTVFSDIROPS_VERSION,
+    0,
+    { /* ObjSet */
+        RTVFSOBJSETOPS_VERSION,
+        RT_OFFSETOF(RTVFSDIROPS, Obj) - RT_OFFSETOF(RTVFSDIROPS, ObjSet),
+        rtDvmVfsDir_SetMode,
+        rtDvmVfsDir_SetTimes,
+        rtDvmVfsDir_SetOwner,
+        RTVFSOBJSETOPS_VERSION
+    },
+    rtDvmVfsDir_TraversalOpen,
+    rtDvmVfsDir_OpenFile,
+    rtDvmVfsDir_OpenDir,
+    rtDvmVfsDir_CreateDir,
+    rtDvmVfsDir_OpenSymlink,
+    rtDvmVfsDir_CreateSymlink,
+    rtDvmVfsDir_QueryEntryInfo,
+    rtDvmVfsDir_UnlinkEntry,
+    rtDvmVfsDir_RenameEntry,
+    rtDvmVfsDir_RewindDir,
+    rtDvmVfsDir_ReadDir,
+    RTVFSDIROPS_VERSION,
+};
+
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS::Obj,pfnClose}
+ */
+static DECLCALLBACK(int) rtDvmVfsVol_Close(void *pvThis)
+{
+    PRTDVMVFSVOL pThis = (PRTDVMVFSVOL)pvThis;
+    LogFlow(("rtDvmVfsVol_Close(%p)\n", pThis));
+
+    if (   pThis->fCloseDvm
+        && pThis->hVolMgr != NIL_RTDVM )
+        RTDvmRelease(pThis->hVolMgr);
+    pThis->hVolMgr = NIL_RTDVM;
+
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS::Obj,pfnQueryInfo}
+ */
+static DECLCALLBACK(int) rtDvmVfsVol_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    RT_NOREF(pvThis, pObjInfo, enmAddAttr);
+    return VERR_WRONG_TYPE;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOPS,pfnOpenRoot}
+ */
+static DECLCALLBACK(int) rtDvmVfsVol_OpenRoot(void *pvThis, PRTVFSDIR phVfsDir)
+{
+    PRTDVMVFSVOL pThis = (PRTDVMVFSVOL)pvThis;
+
+    PRTDVMVFSDIR pNewDir;
+    int rc = RTVfsNewDir(&g_rtDvmVfsDirOps, sizeof(*pNewDir), 0 /*fFlags*/, pThis->hVfsSelf,
+                         NIL_RTVFSLOCK /*use volume lock*/, phVfsDir, (void **)&pNewDir);
+    if (RT_SUCCESS(rc))
+    {
+        pNewDir->offDir         = 0;
+        pNewDir->pVfsVol        = pThis;
+        pNewDir->fReturnCurrent = false;
+        pNewDir->hCurVolume     = NIL_RTDVMVOLUME;
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOPS,pfnIsRangeInUse}
+ */
+static DECLCALLBACK(int) rtDvmVfsVol_IsRangeInUse(void *pvThis, RTFOFF off, size_t cb, bool *pfUsed)
+{
+    RT_NOREF(pvThis, off, cb, pfUsed);
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+DECL_HIDDEN_CONST(const RTVFSOPS) g_rtDvmVfsVolOps =
+{
+    { /* Obj */
+        RTVFSOBJOPS_VERSION,
+        RTVFSOBJTYPE_VFS,
+        "DvmVol",
+        rtDvmVfsVol_Close,
+        rtDvmVfsVol_QueryInfo,
+        RTVFSOBJOPS_VERSION
+    },
+    RTVFSOPS_VERSION,
+    0 /* fFeatures */,
+    rtDvmVfsVol_OpenRoot,
+    rtDvmVfsVol_IsRangeInUse,
+    RTVFSOPS_VERSION
+};
+
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnValidate}
+ */
+static DECLCALLBACK(int) rtDvmVfsChain_Validate(PCRTVFSCHAINELEMENTREG pProviderReg, PRTVFSCHAINSPEC pSpec,
+                                                PRTVFSCHAINELEMSPEC pElement, uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(pProviderReg, pSpec);
+
+    /*
+     * Basic checks.
+     */
+    if (pElement->enmTypeIn != RTVFSOBJTYPE_FILE)
+        return pElement->enmTypeIn == RTVFSOBJTYPE_INVALID ? VERR_VFS_CHAIN_CANNOT_BE_FIRST_ELEMENT : VERR_VFS_CHAIN_TAKES_FILE;
+    if (pElement->enmType != RTVFSOBJTYPE_VFS)
+        return VERR_VFS_CHAIN_ONLY_VFS;
+
+    if (pElement->cArgs > 1)
+        return VERR_VFS_CHAIN_AT_MOST_ONE_ARG;
+
+    /*
+     * Parse the flag if present, save in pElement->uProvider.
+     */
+    /** @todo allow specifying sector size   */
+    bool fReadOnly = (pSpec->fOpenFile & RTFILE_O_ACCESS_MASK) == RTFILE_O_READ;
+    if (pElement->cArgs > 0)
+    {
+        const char *psz = pElement->paArgs[0].psz;
+        if (*psz)
+        {
+            if (   !strcmp(psz, "ro")
+                || !strcmp(psz, "r"))
+                fReadOnly = true;
+            else if (!strcmp(psz, "rw"))
+                fReadOnly = false;
+            else
+            {
+                *poffError = pElement->paArgs[0].offSpec;
+                return RTErrInfoSet(pErrInfo, VERR_VFS_CHAIN_INVALID_ARGUMENT, "Expected 'ro' or 'rw' as argument");
+            }
+        }
+    }
+
+    pElement->uProvider = fReadOnly;
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnInstantiate}
+ */
+static DECLCALLBACK(int) rtDvmVfsChain_Instantiate(PCRTVFSCHAINELEMENTREG pProviderReg, PCRTVFSCHAINSPEC pSpec,
+                                                   PCRTVFSCHAINELEMSPEC pElement, RTVFSOBJ hPrevVfsObj,
+                                                   PRTVFSOBJ phVfsObj, uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(pProviderReg, pSpec, poffError, pErrInfo);
+    AssertReturn(hPrevVfsObj != NIL_RTVFSOBJ, VERR_VFS_CHAIN_IPE);
+
+    /*
+     * Instantiate the volume manager and open the map stuff.
+     */
+    RTVFSFILE hPrevVfsFile = RTVfsObjToFile(hPrevVfsObj);
+    AssertReturn(hPrevVfsFile != NIL_RTVFSFILE, VERR_VFS_CHAIN_CAST_FAILED);
+
+    RTDVM hVolMgr;
+    int rc = RTDvmCreate(&hVolMgr, hPrevVfsFile, 512, 0 /*fFlags*/);
+    RTVfsFileRelease(hPrevVfsFile);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTDvmMapOpen(hVolMgr);
+        if (RT_SUCCESS(rc))
+        {
+            /*
+             * Create a VFS instance for the volume manager.
+             */
+            RTVFS        hVfs  = NIL_RTVFS;
+            PRTDVMVFSVOL pThis = NULL;
+            rc = RTVfsNew(&g_rtDvmVfsVolOps, sizeof(RTDVMVFSVOL), NIL_RTVFS, RTVFSLOCK_CREATE_RW, &hVfs, (void **)&pThis);
+            if (RT_SUCCESS(rc))
+            {
+                pThis->hVolMgr   = hVolMgr;
+                pThis->fCloseDvm = true;
+                pThis->fReadOnly = pElement->uProvider == (uint64_t)true;
+                pThis->cVolumes  = RTDvmMapGetValidVolumes(hVolMgr);
+                pThis->hVfsSelf  = hVfs;
+
+                *phVfsObj = RTVfsObjFromVfs(hVfs);
+                RTVfsRelease(hVfs);
+                return *phVfsObj != NIL_RTVFSOBJ ? VINF_SUCCESS : VERR_VFS_CHAIN_CAST_FAILED;
+            }
+        }
+        else
+            rc = RTErrInfoSetF(pErrInfo, rc, "RTDvmMapOpen failed: %Rrc", rc);
+        RTDvmRelease(hVolMgr);
+    }
+    else
+        rc = RTErrInfoSetF(pErrInfo, rc, "RTDvmCreate failed: %Rrc", rc);
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnCanReuseElement}
+ */
+static DECLCALLBACK(bool) rtDvmVfsChain_CanReuseElement(PCRTVFSCHAINELEMENTREG pProviderReg,
+                                                        PCRTVFSCHAINSPEC pSpec, PCRTVFSCHAINELEMSPEC pElement,
+                                                        PCRTVFSCHAINSPEC pReuseSpec, PCRTVFSCHAINELEMSPEC pReuseElement)
+{
+    RT_NOREF(pProviderReg, pSpec, pElement, pReuseSpec, pReuseElement);
+    return false;
+}
+
+
+/** VFS chain element 'file'. */
+static RTVFSCHAINELEMENTREG g_rtVfsChainIsoFsVolReg =
+{
+    /* uVersion = */            RTVFSCHAINELEMENTREG_VERSION,
+    /* fReserved = */           0,
+    /* pszName = */             "dvm",
+    /* ListEntry = */           { NULL, NULL },
+    /* pszHelp = */             "Opens a container image using the VD API.\n"
+                                "Optionally takes one parameter 'ro' (read only) or 'rw' (read write).\n",
+    /* pfnValidate = */         rtDvmVfsChain_Validate,
+    /* pfnInstantiate = */      rtDvmVfsChain_Instantiate,
+    /* pfnCanReuseElement = */  rtDvmVfsChain_CanReuseElement,
+    /* uEndMarker = */          RTVFSCHAINELEMENTREG_VERSION
+};
+
+RTVFSCHAIN_AUTO_REGISTER_ELEMENT_PROVIDER(&g_rtVfsChainIsoFsVolReg, rtVfsChainIsoFsVolReg);
+
diff --git a/src/VBox/Runtime/common/err/errmsgcom.sed b/src/VBox/Runtime/common/err/errmsgcom.sed
index e73cac8..190da5c 100644
--- a/src/VBox/Runtime/common/err/errmsgcom.sed
+++ b/src/VBox/Runtime/common/err/errmsgcom.sed
@@ -3,6 +3,7 @@
 # IPRT - SED script for converting COM errors
 #
 
+#
 # Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/Runtime/common/fs/fatvfs.cpp b/src/VBox/Runtime/common/fs/fatvfs.cpp
index 224ad1a..dc6e6b4 100644
--- a/src/VBox/Runtime/common/fs/fatvfs.cpp
+++ b/src/VBox/Runtime/common/fs/fatvfs.cpp
@@ -85,7 +85,9 @@
 *   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
 /** Pointer to a FAT directory instance. */
-typedef struct RTFSFATDIR *PRTFSFATDIR;
+typedef struct RTFSFATDIRSHRD *PRTFSFATDIRSHRD;
+/** Pointer to a FAT volume (VFS instance data). */
+typedef struct RTFSFATVOL *PRTFSFATVOL;
 
 
 /** The number of entire in a chain part. */
@@ -122,19 +124,23 @@ typedef struct RTFSFATCHAIN
     /** List of chain parts (RTFSFATCHAINPART). */
     RTLISTANCHOR    ListParts;
 } RTFSFATCHAIN;
+/** Pointer to a FAT chain. */
 typedef RTFSFATCHAIN *PRTFSFATCHAIN;
+/** Pointer to a const FAT chain. */
 typedef RTFSFATCHAIN const *PCRTFSFATCHAIN;
 
 
 /**
- * FAT file system object (common part to files and dirs).
+ * FAT file system object (common part to files and dirs (shared)).
  */
 typedef struct RTFSFATOBJ
 {
     /** The parent directory keeps a list of open objects (RTFSFATOBJ). */
     RTLISTNODE          Entry;
+    /** Reference counter.   */
+    uint32_t volatile   cRefs;
     /** The parent directory (not released till all children are close). */
-    PRTFSFATDIR         pParentDir;
+    PRTFSFATDIRSHRD     pParentDir;
     /** The byte offset of the directory entry in the parent dir.
      * This is set to UINT32_MAX for the root directory. */
     uint32_t            offEntryInDir;
@@ -157,20 +163,37 @@ typedef struct RTFSFATOBJ
     /** Set if we've maybe dirtied the directory entry. */
     bool                fMaybeDirtyDirEnt;
 } RTFSFATOBJ;
+/** Poitner to a FAT file system object. */
 typedef RTFSFATOBJ *PRTFSFATOBJ;
 
-typedef struct RTFSFATFILE
+/**
+ * Shared FAT file data.
+ */
+typedef struct RTFSFATFILESHRD
 {
     /** Core FAT object info.  */
     RTFSFATOBJ          Core;
+} RTFSFATFILESHRD;
+/** Pointer to shared FAT file data. */
+typedef RTFSFATFILESHRD *PRTFSFATFILESHRD;
+
+
+/**
+ * Per handle data for a FAT file.
+ */
+typedef struct RTFSFATFILE
+{
+    /** Pointer to the shared data. */
+    PRTFSFATFILESHRD    pShared;
     /** The current file offset. */
     uint32_t            offFile;
 } RTFSFATFILE;
+/** Pointer to the per handle data of a FAT file. */
 typedef RTFSFATFILE *PRTFSFATFILE;
 
 
 /**
- * FAT directory.
+ * FAT shared directory structure.
  *
  * We work directories in one of two buffering modes.  If there are few entries
  * or if it's the FAT12/16 root directory, we map the whole thing into memory.
@@ -180,12 +203,10 @@ typedef RTFSFATFILE *PRTFSFATFILE;
  * files or subdirs have a parent reference for doing that.  The parent OTOH,
  * keeps a list of open children.
  */
-typedef struct RTFSFATDIR
+typedef struct RTFSFATDIRSHRD
 {
     /** Core FAT object info.  */
     RTFSFATOBJ          Core;
-    /** The VFS handle for this directory (for reference counting). */
-    RTVFSDIR            hVfsSelf;
     /** Open child objects (RTFSFATOBJ). */
     RTLISTNODE          OpenChildren;
 
@@ -219,7 +240,7 @@ typedef struct RTFSFATDIR
             uint32_t            cSectors;
             /** Number of dirty sectors. */
             uint32_t            cDirtySectors;
-            /** Dirty sector map. */
+            /** Dirty sector bitmap (one bit per sector). */
             uint8_t            *pbDirtySectors;
         } Full;
         /** The simple sector buffering.
@@ -232,8 +253,22 @@ typedef struct RTFSFATDIR
             bool                fDirty;
         } Simple;
     } u;
+} RTFSFATDIRSHRD;
+/** Pointer to a shared FAT directory instance. */
+typedef RTFSFATDIRSHRD *PRTFSFATDIRSHRD;
+
+
+/**
+ * The per handle FAT directory data.
+ */
+typedef struct RTFSFATDIR
+{
+    /** Core FAT object info.  */
+    PRTFSFATDIRSHRD     pShared;
+    /** The current directory offset. */
+    uint32_t            offDir;
 } RTFSFATDIR;
-/** Pointer to a FAT directory instance. */
+/** Pointer to a per handle FAT directory data. */
 typedef RTFSFATDIR *PRTFSFATDIR;
 
 
@@ -258,14 +293,28 @@ typedef RTFSFATCLUSTERMAPENTRY *PRTFSFATCLUSTERMAPENTRY;
  */
 typedef struct RTFSFATCLUSTERMAPCACHE
 {
-    /** Number of cache entries. */
+    /** Number of cache entries (power of two). */
     uint32_t                cEntries;
-    /** The max size of data in a cache entry. */
+    /** This shift count to use in the first step of the index calculation. */
+    uint32_t                cEntryIndexShift;
+    /** The AND mask to use in the second step of the index calculation. */
+    uint32_t                fEntryIndexMask;
+    /** The max size of data in a cache entry (power of two). */
     uint32_t                cbEntry;
+    /** The AND mask to use to get the entry offset. */
+    uint32_t                fEntryOffsetMask;
     /** Dirty bitmap shift count. */
     uint32_t                cDirtyShift;
     /** The dirty cache line size (multiple of two). */
     uint32_t                cbDirtyLine;
+    /** The FAT size. */
+    uint32_t                cbFat;
+    /** The Number of clusters in the FAT. */
+    uint32_t                cClusters;
+    /** Cluster allocation search hint. */
+    uint32_t                idxAllocHint;
+    /** Pointer to the volume (for disk access). */
+    PRTFSFATVOL             pVol;
     /** The cache name. */
     const char             *pszName;
     /** Cache entries. */
@@ -364,10 +413,8 @@ typedef struct RTFSFATVOL
     uint32_t        cRootDirEntries;
     /** The size of the root directory, rounded up to the nearest sector size. */
     uint32_t        cbRootDir;
-    /** The root directory handle. */
-    RTVFSDIR        hVfsRootDir;
-    /** The root directory instance data. */
-    PRTFSFATDIR     pRootDir;
+    /** The root directory data (shared). */
+    PRTFSFATDIRSHRD pRootDir;
 
     /** Serial number. */
     uint32_t        uSerialNo;
@@ -387,8 +434,6 @@ typedef struct RTFSFATVOL
     /** The FAT32 info sector if offFat32InfoSector isn't UINT64_MAX. */
     FAT32INFOSECTOR Fat32InfoSector;
 } RTFSFATVOL;
-/** Pointer to a FAT volume (VFS instance data). */
-typedef RTFSFATVOL *PRTFSFATVOL;
 /** Pointer to a const FAT volume (VFS instance data). */
 typedef RTFSFATVOL const *PCRTFSFATVOL;
 
@@ -405,7 +450,7 @@ typedef RTFSFATVOL const *PCRTFSFATVOL;
  * @remarks The valid first 128 entries are 1:1 with unicode.
  * @remarks Lower case characters are all marked invalid.
  */
-static RTUTF16 g_awchFatCp437Chars[] =
+static RTUTF16 g_awchFatCp437ValidChars[] =
 { /*     0,      1,      2,      3,      4,      5,      6,      7,      8,      9,      a,      b,      c,      d,      e,      f */
     0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
     0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -424,19 +469,45 @@ static RTUTF16 g_awchFatCp437Chars[] =
     0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
     0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
 };
+AssertCompileSize(g_awchFatCp437ValidChars, 256*2);
+
+/**
+ * Codepage 437 translation table without invalid 8.3. character markings.
+ */
+static RTUTF16 g_awchFatCp437Chars[] =
+{ /*     0,      1,      2,      3,      4,      5,      6,      7,      8,      9,      a,      b,      c,      d,      e,      f */
+    0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+    0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8, 0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+    0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
+    0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
+    0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+    0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+    0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+    0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+    0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+    0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
+};
 AssertCompileSize(g_awchFatCp437Chars, 256*2);
 
 
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static void rtFsFatDir_AddOpenChild(PRTFSFATDIR pDir, PRTFSFATOBJ pChild);
-static void rtFsFatDir_RemoveOpenChild(PRTFSFATDIR pDir, PRTFSFATOBJ pChild);
-static int  rtFsFatDir_GetEntryForUpdate(PRTFSFATDIR pThis, uint32_t offEntryInDir, PFATDIRENTRY *ppDirEntry, uint32_t *puWriteLock);
-static int  rtFsFatDir_PutEntryAfterUpdate(PRTFSFATDIR pThis, PFATDIRENTRY pDirEntry, uint32_t uWriteLock);
-static int  rtFsFatDir_Flush(PRTFSFATDIR pThis);
-static int  rtFsFatDir_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
-                           uint32_t idxCluster, uint64_t offDisk, uint32_t cbDir, PRTVFSDIR phVfsDir, PRTFSFATDIR *ppDir);
+static PRTFSFATOBJ rtFsFatDirShrd_LookupShared(PRTFSFATDIRSHRD pThis, uint32_t offEntryInDir);
+static void rtFsFatDirShrd_AddOpenChild(PRTFSFATDIRSHRD pDir, PRTFSFATOBJ pChild);
+static void rtFsFatDirShrd_RemoveOpenChild(PRTFSFATDIRSHRD pDir, PRTFSFATOBJ pChild);
+static int  rtFsFatDirShrd_GetEntryForUpdate(PRTFSFATDIRSHRD pThis, uint32_t offEntryInDir,
+                                             PFATDIRENTRY *ppDirEntry, uint32_t *puWriteLock);
+static int  rtFsFatDirShrd_PutEntryAfterUpdate(PRTFSFATDIRSHRD pThis, PFATDIRENTRY pDirEntry, uint32_t uWriteLock);
+static int  rtFsFatDirShrd_Flush(PRTFSFATDIRSHRD pThis);
+static int  rtFsFatDir_New(PRTFSFATVOL pThis, PRTFSFATDIRSHRD pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
+                           uint32_t idxCluster, uint64_t offDisk, uint32_t cbDir, PRTVFSDIR phVfsDir);
 
 
 /**
@@ -718,43 +789,69 @@ static int rtFsFatClusterMap_Create(PRTFSFATVOL pThis, uint8_t const *pbFirst512
     /*
      * Figure the cache size.  Keeping it _very_ simple for now as we just need
      * something that works, not anything the performs like crazy.
+     *
+     * Note! Lowering the max cache size below 128KB will break ASSUMPTIONS in the FAT16
+     *       and eventually FAT12 code.
      */
     uint32_t cEntries;
+    uint32_t cEntryIndexShift;
+    uint32_t fEntryIndexMask;
     uint32_t cbEntry = pThis->cbFat;
+    uint32_t fEntryOffsetMask;
     if (cbEntry <= _512K)
-        cEntries = 1;
+    {
+        cEntries         = 1;
+        cEntryIndexShift = 0;
+        fEntryIndexMask  = 0;
+        fEntryOffsetMask = UINT32_MAX;
+    }
     else
     {
         Assert(pThis->cbSector < _512K / 8);
-        cEntries = 8;
-        cbEntry  = pThis->cbSector;
+        cEntries         = 8;
+        cEntryIndexShift = 9;
+        fEntryIndexMask  = cEntries - 1;
+        AssertReturn(RT_IS_POWER_OF_TWO(cEntries), VERR_INTERNAL_ERROR_4);
+
+        cbEntry          = pThis->cbSector;
+        fEntryOffsetMask = pThis->cbSector - 1;
+        AssertReturn(RT_IS_POWER_OF_TWO(cbEntry), VERR_INTERNAL_ERROR_5);
     }
 
     /*
      * Allocate and initialize it all.
      */
-    PRTFSFATCLUSTERMAPCACHE pCache;
-    pThis->pFatCache = pCache = (PRTFSFATCLUSTERMAPCACHE)RTMemAllocZ(RT_OFFSETOF(RTFSFATCLUSTERMAPCACHE, aEntries[cEntries]));
-    if (!pCache)
+    PRTFSFATCLUSTERMAPCACHE pFatCache;
+    pThis->pFatCache = pFatCache = (PRTFSFATCLUSTERMAPCACHE)RTMemAllocZ(RT_OFFSETOF(RTFSFATCLUSTERMAPCACHE, aEntries[cEntries]));
+    if (!pFatCache)
         return RTErrInfoSet(pErrInfo, VERR_NO_MEMORY, "Failed to allocate FAT cache");
-    pCache->cEntries  = cEntries;
-    pCache->cbEntry   = cbEntry;
+    pFatCache->cEntries            = cEntries;
+    pFatCache->fEntryIndexMask     = fEntryIndexMask;
+    pFatCache->cEntryIndexShift    = cEntryIndexShift;
+    pFatCache->cbEntry             = cbEntry;
+    pFatCache->fEntryOffsetMask    = fEntryOffsetMask;
+    pFatCache->pVol                = pThis;
+    pFatCache->cbFat               = pThis->cbFat;
+    pFatCache->cClusters           = pThis->cClusters;
 
     unsigned i = cEntries;
     while (i-- > 0)
     {
-        pCache->aEntries[i].pbData = (uint8_t *)RTMemAlloc(cbEntry);
-        if (pCache->aEntries[i].pbData == NULL)
+        pFatCache->aEntries[i].pbData = (uint8_t *)RTMemAlloc(cbEntry);
+        if (pFatCache->aEntries[i].pbData == NULL)
         {
             for (i++; i < cEntries; i++)
-                RTMemFree(pCache->aEntries[i].pbData);
-            RTMemFree(pCache);
+                RTMemFree(pFatCache->aEntries[i].pbData);
+            RTMemFree(pFatCache);
             return RTErrInfoSetF(pErrInfo, VERR_NO_MEMORY, "Failed to allocate FAT cache entry (%#x bytes)", cbEntry);
         }
 
-        pCache->aEntries[i].offFat  = UINT32_MAX;
-        pCache->aEntries[i].bmDirty = 0;
+        pFatCache->aEntries[i].offFat  = UINT32_MAX;
+        pFatCache->aEntries[i].bmDirty = 0;
     }
+    Log3(("rtFsFatClusterMap_Create:       cbFat=%#RX32 cEntries=%RU32 cEntryIndexShift=%RU32 fEntryIndexMask=%#RX32\n",
+          pFatCache->cbFat, pFatCache->cEntries, pFatCache->cEntryIndexShift, pFatCache->fEntryIndexMask));
+    Log3(("rtFsFatClusterMap_Create:   cbEntries=%#RX32 fEntryOffsetMask=%#RX32\n", pFatCache->cbEntry, pFatCache->fEntryOffsetMask));
 
     /*
      * Calc the dirty shift factor.
@@ -763,29 +860,31 @@ static int rtFsFatClusterMap_Create(PRTFSFATVOL pThis, uint8_t const *pbFirst512
     if (cbEntry < pThis->cbSector)
         cbEntry = pThis->cbSector;
 
-    pCache->cDirtyShift = 1;
-    pCache->cbDirtyLine = 1;
-    while (pCache->cbDirtyLine < cbEntry)
+    pFatCache->cDirtyShift = 1;
+    pFatCache->cbDirtyLine = 1;
+    while (pFatCache->cbDirtyLine < cbEntry)
     {
-        pCache->cDirtyShift++;
-        pCache->cbDirtyLine <<= 1;
+        pFatCache->cDirtyShift++;
+        pFatCache->cbDirtyLine <<= 1;
     }
+    Assert(pFatCache->cEntries == 1 || pFatCache->cbDirtyLine == pThis->cbSector);
+    Log3(("rtFsFatClusterMap_Create: cbDirtyLine=%#RX32 cDirtyShift=%u\n", pFatCache->cbDirtyLine, pFatCache->cDirtyShift));
 
     /*
      * Fill the cache if single entry or entry size is 512.
      */
-    if (pCache->cEntries == 1 || pCache->cbEntry == 512)
+    if (pFatCache->cEntries == 1 || pFatCache->cbEntry == 512)
     {
-        memcpy(pCache->aEntries[0].pbData, pbFirst512FatBytes, RT_MIN(512, pCache->cbEntry));
-        if (pCache->cbEntry > 512)
+        memcpy(pFatCache->aEntries[0].pbData, pbFirst512FatBytes, RT_MIN(512, pFatCache->cbEntry));
+        if (pFatCache->cbEntry > 512)
         {
             int rc = RTVfsFileReadAt(pThis->hVfsBacking, pThis->aoffFats[0] + 512,
-                                     &pCache->aEntries[0].pbData[512], pCache->cbEntry - 512, NULL);
+                                     &pFatCache->aEntries[0].pbData[512], pFatCache->cbEntry - 512, NULL);
             if (RT_FAILURE(rc))
                 return RTErrInfoSet(pErrInfo, rc, "Error reading FAT into memory");
         }
-        pCache->aEntries[0].offFat  = 0;
-        pCache->aEntries[0].bmDirty = 0;
+        pFatCache->aEntries[0].offFat  = 0;
+        pFatCache->aEntries[0].bmDirty = 0;
     }
 
     return VINF_SUCCESS;
@@ -802,8 +901,7 @@ static int rtFsFatClusterMap_Create(PRTFSFATVOL pThis, uint8_t const *pbFirst512
  */
 static int rtFsFatClusterMap_FlushWorker(PRTFSFATVOL pThis, uint32_t const iFirstEntry, uint32_t const iLastEntry)
 {
-    PRTFSFATCLUSTERMAPCACHE pCache = pThis->pFatCache;
-
+    PRTFSFATCLUSTERMAPCACHE pFatCache = pThis->pFatCache;
 
     /*
      * Walk the cache entries, accumulating segments to flush.
@@ -820,20 +918,20 @@ static int rtFsFatClusterMap_FlushWorker(PRTFSFATVOL pThis, uint32_t const iFirs
     {
         for (uint32_t iEntry = iFirstEntry; iEntry <= iLastEntry; iEntry++)
         {
-            uint64_t bmDirty = pCache->aEntries[iEntry].bmDirty;
+            uint64_t bmDirty = pFatCache->aEntries[iEntry].bmDirty;
             if (   bmDirty != 0
-                && pCache->aEntries[iEntry].offFat != UINT32_MAX)
+                && pFatCache->aEntries[iEntry].offFat != UINT32_MAX)
             {
                 uint32_t offEntry   = 0;
                 uint64_t iDirtyLine = 1;
-                while (offEntry < pCache->cbEntry)
+                while (offEntry < pFatCache->cbEntry)
                 {
-                    if (pCache->aEntries[iEntry].bmDirty & iDirtyLine)
+                    if (pFatCache->aEntries[iEntry].bmDirty & iDirtyLine)
                     {
                         /*
                          * Found dirty cache line.
                          */
-                        uint64_t offDirtyLine = pThis->aoffFats[iFatCopy] + pCache->aEntries[iEntry].offFat + offEntry;
+                        uint64_t offDirtyLine = pThis->aoffFats[iFatCopy] + pFatCache->aEntries[iEntry].offFat + offEntry;
 
                         /* Can we simply extend the last segment? */
                         if (   offDirtyLine == offEdge
@@ -841,9 +939,9 @@ static int rtFsFatClusterMap_FlushWorker(PRTFSFATVOL pThis, uint32_t const iFirs
                         {
                             Assert(SgBuf.cSegs > 0);
                             Assert(   (uintptr_t)aSgSegs[SgBuf.cSegs - 1].pvSeg + aSgSegs[SgBuf.cSegs - 1].cbSeg
-                                   == (uintptr_t)&pCache->aEntries[iEntry].pbData[offEntry]);
-                            aSgSegs[SgBuf.cSegs - 1].cbSeg += pCache->cbDirtyLine;
-                            offEdge += pCache->cbDirtyLine;
+                                   == (uintptr_t)&pFatCache->aEntries[iEntry].pbData[offEntry]);
+                            aSgSegs[SgBuf.cSegs - 1].cbSeg += pFatCache->cbDirtyLine;
+                            offEdge += pFatCache->cbDirtyLine;
                         }
                         else
                         {
@@ -866,10 +964,10 @@ static int rtFsFatClusterMap_FlushWorker(PRTFSFATVOL pThis, uint32_t const iFirs
                             }
 
                             /* Append segment. */
-                            aSgSegs[SgBuf.cSegs].cbSeg = pCache->cbDirtyLine;
-                            aSgSegs[SgBuf.cSegs].pvSeg = &pCache->aEntries[iEntry].pbData[offEntry];
+                            aSgSegs[SgBuf.cSegs].cbSeg = pFatCache->cbDirtyLine;
+                            aSgSegs[SgBuf.cSegs].pvSeg = &pFatCache->aEntries[iEntry].pbData[offEntry];
                             SgBuf.cSegs++;
-                            offEdge = offDirtyLine + pCache->cbDirtyLine;
+                            offEdge = offDirtyLine + pFatCache->cbDirtyLine;
                         }
 
                         bmDirty &= ~iDirtyLine;
@@ -877,7 +975,7 @@ static int rtFsFatClusterMap_FlushWorker(PRTFSFATVOL pThis, uint32_t const iFirs
                             break;
                     }
                     iDirtyLine <<= 1;
-                    offEntry += pCache->cbDirtyLine;
+                    offEntry += pFatCache->cbDirtyLine;
                 }
                 Assert(!bmDirty);
             }
@@ -899,7 +997,7 @@ static int rtFsFatClusterMap_FlushWorker(PRTFSFATVOL pThis, uint32_t const iFirs
      */
     if (RT_SUCCESS(rc))
         for (uint32_t iEntry = iFirstEntry; iEntry <= iLastEntry; iEntry++)
-            pCache->aEntries[iEntry].bmDirty = 0;
+            pFatCache->aEntries[iEntry].bmDirty = 0;
 
     return rc;
 }
@@ -917,21 +1015,144 @@ static int rtFsFatClusterMap_Flush(PRTFSFATVOL pThis)
 }
 
 
-#if 0 /* unused */
 /**
- * Flushes out all dirty lines in the file allocation table (cluster map) cache.
+ * Flushes out all dirty lines in the file allocation table (cluster map) cache
+ * entry.
  *
  * This is typically called prior to reusing the cache entry.
  *
  * @returns IPRT status code.  On failure, we're currently kind of screwed.
- * @param   pThis       The FAT volume instance.
+ * @param   pFatCache   The FAT cache
  * @param   iEntry      The cache entry to flush.
  */
-static int rtFsFatClusterMap_FlushEntry(PRTFSFATVOL pThis, uint32_t iEntry)
+static int rtFsFatClusterMap_FlushEntry(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t iEntry)
 {
-    return rtFsFatClusterMap_FlushWorker(pThis, iEntry, iEntry);
+    return rtFsFatClusterMap_FlushWorker(pFatCache->pVol, iEntry, iEntry);
+}
+
+
+/**
+ * Gets a pointer to a FAT entry.
+ *
+ * @returns IPRT status code.  On failure, we're currently kind of screwed.
+ * @param   pFatCache   The FAT cache.
+ * @param   offFat      The FAT byte offset to get the entry off.
+ * @param   ppbEntry    Where to return the pointer to the entry.
+ */
+static int rtFsFatClusterMap_GetEntry(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t offFat, uint8_t **ppbEntry)
+{
+    int rc;
+    if (offFat < pFatCache->cbFat)
+    {
+        uint32_t const iEntry      = (offFat >> pFatCache->cEntryIndexShift) & pFatCache->fEntryIndexMask;
+        uint32_t const offInEntry  = offFat & pFatCache->fEntryOffsetMask;
+        uint32_t const offFatEntry = offFat - offInEntry;
+
+        *ppbEntry = pFatCache->aEntries[iEntry].pbData + offInEntry;
+
+        /* If it's already ready, return immediately. */
+        if (pFatCache->aEntries[iEntry].offFat == offFatEntry)
+        {
+            Log3(("rtFsFatClusterMap_GetEntry: Hit entry %u for offFat=%#RX32\n", iEntry, offFat));
+            return VINF_SUCCESS;
+        }
+
+        /* Do we need to flush it? */
+        rc = VINF_SUCCESS;
+        if (   pFatCache->aEntries[iEntry].bmDirty != 0
+            && pFatCache->aEntries[iEntry].offFat != UINT32_MAX)
+        {
+            Log3(("rtFsFatClusterMap_GetEntry: Flushing entry %u for offFat=%#RX32\n", iEntry, offFat));
+            rc = rtFsFatClusterMap_FlushEntry(pFatCache, iEntry);
+        }
+        if (RT_SUCCESS(rc))
+        {
+            pFatCache->aEntries[iEntry].bmDirty = 0;
+
+            /* Read in the entry from disk */
+            rc = RTVfsFileReadAt(pFatCache->pVol->hVfsBacking, pFatCache->pVol->aoffFats[0] + offFatEntry,
+                                 pFatCache->aEntries[iEntry].pbData, pFatCache->cbEntry, NULL);
+            if (RT_SUCCESS(rc))
+            {
+                Log3(("rtFsFatClusterMap_GetEntry: Loaded entry %u for offFat=%#RX32\n", iEntry, offFat));
+                pFatCache->aEntries[iEntry].offFat = offFatEntry;
+                return VINF_SUCCESS;
+            }
+            /** @todo We can try other FAT copies here... */
+            LogRel(("rtFsFatClusterMap_GetEntry: Error loading entry %u for offFat=%#RX32 (%#64RX32 LB %#x): %Rrc\n",
+                    iEntry, offFat, pFatCache->pVol->aoffFats[0] + offFatEntry, pFatCache->cbEntry, rc));
+            pFatCache->aEntries[iEntry].offFat = UINT32_MAX;
+        }
+    }
+    else
+        rc = VERR_OUT_OF_RANGE;
+    *ppbEntry = NULL;
+    return rc;
+}
+
+
+/**
+ * Gets a pointer to a FAT entry, extended version.
+ *
+ * @returns IPRT status code.  On failure, we're currently kind of screwed.
+ * @param   pFatCache   The FAT cache.
+ * @param   offFat      The FAT byte offset to get the entry off.
+ * @param   ppbEntry    Where to return the pointer to the entry.
+ * @param   pidxEntry   Where to return the entry index.
+ */
+static int rtFsFatClusterMap_GetEntryEx(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t offFat,
+                                        uint8_t **ppbEntry, uint32_t *pidxEntry)
+{
+    int rc;
+    if (offFat < pFatCache->cbFat)
+    {
+        uint32_t const iEntry      = (offFat >> pFatCache->cEntryIndexShift) & pFatCache->fEntryIndexMask;
+        uint32_t const offInEntry  = offFat & pFatCache->fEntryOffsetMask;
+        uint32_t const offFatEntry = offFat - offInEntry;
+
+        *ppbEntry  = pFatCache->aEntries[iEntry].pbData + offInEntry;
+        *pidxEntry = iEntry;
+
+        /* If it's already ready, return immediately. */
+        if (pFatCache->aEntries[iEntry].offFat == offFatEntry)
+        {
+            Log3(("rtFsFatClusterMap_GetEntryEx: Hit entry %u for offFat=%#RX32\n", iEntry, offFat));
+            return VINF_SUCCESS;
+        }
+
+        /* Do we need to flush it? */
+        rc = VINF_SUCCESS;
+        if (   pFatCache->aEntries[iEntry].bmDirty != 0
+            && pFatCache->aEntries[iEntry].offFat != UINT32_MAX)
+        {
+            Log3(("rtFsFatClusterMap_GetEntryEx: Flushing entry %u for offFat=%#RX32\n", iEntry, offFat));
+            rc = rtFsFatClusterMap_FlushEntry(pFatCache, iEntry);
+        }
+        if (RT_SUCCESS(rc))
+        {
+            pFatCache->aEntries[iEntry].bmDirty = 0;
+
+            /* Read in the entry from disk */
+            rc = RTVfsFileReadAt(pFatCache->pVol->hVfsBacking, pFatCache->pVol->aoffFats[0] + offFatEntry,
+                                 pFatCache->aEntries[iEntry].pbData, pFatCache->cbEntry, NULL);
+            if (RT_SUCCESS(rc))
+            {
+                Log3(("rtFsFatClusterMap_GetEntryEx: Loaded entry %u for offFat=%#RX32\n", iEntry, offFat));
+                pFatCache->aEntries[iEntry].offFat = offFatEntry;
+                return VINF_SUCCESS;
+            }
+            /** @todo We can try other FAT copies here... */
+            LogRel(("rtFsFatClusterMap_GetEntryEx: Error loading entry %u for offFat=%#RX32 (%#64RX32 LB %#x): %Rrc\n",
+                    iEntry, offFat, pFatCache->pVol->aoffFats[0] + offFatEntry, pFatCache->cbEntry, rc));
+            pFatCache->aEntries[iEntry].offFat = UINT32_MAX;
+        }
+    }
+    else
+        rc = VERR_OUT_OF_RANGE;
+    *ppbEntry  = NULL;
+    *pidxEntry = UINT32_MAX;
+    return rc;
 }
-#endif
 
 
 /**
@@ -944,22 +1165,22 @@ static int rtFsFatClusterMap_FlushEntry(PRTFSFATVOL pThis, uint32_t iEntry)
  */
 static int rtFsFatClusterMap_Destroy(PRTFSFATVOL pThis)
 {
-    int                     rc     = VINF_SUCCESS;
-    PRTFSFATCLUSTERMAPCACHE pCache = pThis->pFatCache;
-    if (pCache)
+    int                     rc        = VINF_SUCCESS;
+    PRTFSFATCLUSTERMAPCACHE pFatCache = pThis->pFatCache;
+    if (pFatCache)
     {
         /* flush stuff. */
         rc = rtFsFatClusterMap_Flush(pThis);
 
         /* free everything. */
-        uint32_t i = pCache->cEntries;
+        uint32_t i = pFatCache->cEntries;
         while (i-- > 0)
         {
-            RTMemFree(pCache->aEntries[i].pbData);
-            pCache->aEntries[i].pbData = NULL;
+            RTMemFree(pFatCache->aEntries[i].pbData);
+            pFatCache->aEntries[i].pbData = NULL;
         }
-        pCache->cEntries = 0;
-        RTMemFree(pCache);
+        pFatCache->cEntries = 0;
+        RTMemFree(pFatCache);
 
         pThis->pFatCache = NULL;
     }
@@ -971,13 +1192,12 @@ static int rtFsFatClusterMap_Destroy(PRTFSFATVOL pThis)
 /**
  * Worker for rtFsFatClusterMap_ReadClusterChain handling FAT12.
  */
-static int rtFsFatClusterMap_Fat12_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol, uint32_t idxCluster,
-                                                    PRTFSFATCHAIN pChain)
+static int rtFsFatClusterMap_Fat12_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxCluster, PRTFSFATCHAIN pChain)
 {
     /* ASSUME that for FAT12 we cache the whole FAT in a single entry.  That
        way we don't need to deal with entries in different sectors and whatnot.  */
     AssertReturn(pFatCache->cEntries == 1, VERR_INTERNAL_ERROR_4);
-    AssertReturn(pFatCache->cbEntry == pVol->cbFat, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->cbEntry == pFatCache->cbFat, VERR_INTERNAL_ERROR_4);
     AssertReturn(pFatCache->aEntries[0].offFat == 0, VERR_INTERNAL_ERROR_4);
 
     /* Special case for empty files. */
@@ -989,7 +1209,7 @@ static int rtFsFatClusterMap_Fat12_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFat
     for (;;)
     {
         /* Validate the cluster, checking for end of file. */
-        if (   idxCluster >= pVol->cClusters
+        if (   idxCluster >= pFatCache->cClusters
             || idxCluster <  FAT_FIRST_DATA_CLUSTER)
         {
             if (idxCluster >= FAT_FIRST_FAT12_EOC)
@@ -1017,22 +1237,76 @@ static int rtFsFatClusterMap_Fat12_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFat
 /**
  * Worker for rtFsFatClusterMap_ReadClusterChain handling FAT16.
  */
-static int rtFsFatClusterMap_Fat16_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol, uint32_t idxCluster,
-                                                    PRTFSFATCHAIN pChain)
+static int rtFsFatClusterMap_Fat16_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxCluster, PRTFSFATCHAIN pChain)
 {
-    RT_NOREF(pFatCache, pVol, idxCluster, pChain);
-    return VERR_NOT_IMPLEMENTED;
+    /* ASSUME that for FAT16 we cache the whole FAT in a single entry.  That
+       way we don't need to deal with entries in different sectors and whatnot.  */
+    AssertReturn(pFatCache->cEntries == 1, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->cbEntry == pFatCache->cbFat, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->aEntries[0].offFat == 0, VERR_INTERNAL_ERROR_4);
+
+    /* Special case for empty files. */
+    if (idxCluster == 0)
+        return VINF_SUCCESS;
+
+    /* Work cluster by cluster. */
+    uint8_t const *pbFat = pFatCache->aEntries[0].pbData;
+    for (;;)
+    {
+        /* Validate the cluster, checking for end of file. */
+        if (   idxCluster >= pFatCache->cClusters
+            || idxCluster <  FAT_FIRST_DATA_CLUSTER)
+        {
+            if (idxCluster >= FAT_FIRST_FAT16_EOC)
+                return VINF_SUCCESS;
+            return VERR_VFS_BOGUS_OFFSET;
+        }
+
+        /* Add cluster to chain.  */
+        int rc = rtFsFatChain_Append(pChain, idxCluster);
+        if (RT_FAILURE(rc))
+            return rc;
+
+        /* Next cluster. */
+        idxCluster = RT_MAKE_U16(pbFat[idxCluster * 2], pbFat[idxCluster * 2 + 1]);
+    }
 }
 
 
 /**
  * Worker for rtFsFatClusterMap_ReadClusterChain handling FAT32.
  */
-static int rtFsFatClusterMap_Fat32_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol, uint32_t idxCluster,
-                                                    PRTFSFATCHAIN pChain)
+static int rtFsFatClusterMap_Fat32_ReadClusterChain(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxCluster, PRTFSFATCHAIN pChain)
 {
-    RT_NOREF(pFatCache, pVol, idxCluster, pChain);
-    return VERR_NOT_IMPLEMENTED;
+    /* Special case for empty files. */
+    if (idxCluster == 0)
+        return VINF_SUCCESS;
+
+    /* Work cluster by cluster. */
+    for (;;)
+    {
+        /* Validate the cluster, checking for end of file. */
+        if (   idxCluster >= pFatCache->cClusters
+            || idxCluster <  FAT_FIRST_DATA_CLUSTER)
+        {
+            if (idxCluster >= FAT_FIRST_FAT32_EOC)
+                return VINF_SUCCESS;
+            return VERR_VFS_BOGUS_OFFSET;
+        }
+
+        /* Add cluster to chain.  */
+        int rc = rtFsFatChain_Append(pChain, idxCluster);
+        if (RT_FAILURE(rc))
+            return rc;
+
+        /* Get the next cluster. */
+        uint8_t *pbEntry;
+        rc = rtFsFatClusterMap_GetEntry(pFatCache, idxCluster * 4, &pbEntry);
+        if (RT_SUCCESS(rc))
+            idxCluster = RT_MAKE_U32_FROM_U8(pbEntry[0], pbEntry[1], pbEntry[2], pbEntry[3]);
+        else
+            return rc;
+    }
 }
 
 
@@ -1054,9 +1328,9 @@ static int rtFsFatClusterMap_ReadClusterChain(PRTFSFATVOL pThis, uint32_t idxFir
     RTListInit(&pChain->ListParts);
     switch (pThis->enmFatType)
     {
-        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_Fat12_ReadClusterChain(pThis->pFatCache, pThis, idxFirstCluster, pChain);
-        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_Fat16_ReadClusterChain(pThis->pFatCache, pThis, idxFirstCluster, pChain);
-        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_Fat32_ReadClusterChain(pThis->pFatCache, pThis, idxFirstCluster, pChain);
+        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_Fat12_ReadClusterChain(pThis->pFatCache, idxFirstCluster, pChain);
+        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_Fat16_ReadClusterChain(pThis->pFatCache, idxFirstCluster, pChain);
+        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_Fat32_ReadClusterChain(pThis->pFatCache, idxFirstCluster, pChain);
         default:
             AssertFailedReturn(VERR_INTERNAL_ERROR_2);
     }
@@ -1076,15 +1350,28 @@ DECLINLINE(void) rtFsFatClusterMap_SetDirtyByte(PRTFSFATCLUSTERMAPCACHE pFatCach
     pFatCache->aEntries[iEntry].bmDirty |= RT_BIT_64(iLine);
 }
 
+/**
+ * Sets bmDirty for entry @a iEntry.
+ *
+ * @param   pFatCache   The FAT cache.
+ * @param   iEntry      The cache entry.
+ * @param   pbIntoEntry Pointer into the cache entry that was dirtied.
+ */
+DECLINLINE(void) rtFsFatClusterMap_SetDirtyByteByPtr(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t iEntry, uint8_t *pbIntoEntry)
+{
+    uintptr_t offEntry = pbIntoEntry - pFatCache->aEntries[iEntry].pbData;
+    Assert(offEntry < pFatCache->cbEntry);
+    rtFsFatClusterMap_SetDirtyByte(pFatCache, iEntry, (uint32_t)offEntry);
+}
+
 
 /** Sets a FAT12 cluster value. */
-static int rtFsFatClusterMap_SetCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol,
-                                          uint32_t idxCluster, uint32_t uValue)
+static int rtFsFatClusterMap_SetCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxCluster, uint32_t uValue)
 {
     /* ASSUME that for FAT12 we cache the whole FAT in a single entry.  That
        way we don't need to deal with entries in different sectors and whatnot.  */
     AssertReturn(pFatCache->cEntries == 1, VERR_INTERNAL_ERROR_4);
-    AssertReturn(pFatCache->cbEntry == pVol->cbFat, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->cbEntry == pFatCache->cbFat, VERR_INTERNAL_ERROR_4);
     AssertReturn(pFatCache->aEntries[0].offFat == 0, VERR_INTERNAL_ERROR_4);
     AssertReturn(uValue < 0x1000, VERR_INTERNAL_ERROR_2);
 
@@ -1111,22 +1398,49 @@ static int rtFsFatClusterMap_SetCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache, PRT
 
 
 /** Sets a FAT16 cluster value. */
-static int rtFsFatClusterMap_SetCluster16(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol,
-                                          uint32_t idxCluster, uint32_t uValue)
+static int rtFsFatClusterMap_SetCluster16(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxCluster, uint32_t uValue)
 {
+    /* ASSUME that for FAT16 we cache the whole FAT in a single entry.  */
+    AssertReturn(pFatCache->cEntries == 1, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->cbEntry == pFatCache->cbFat, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->aEntries[0].offFat == 0, VERR_INTERNAL_ERROR_4);
     AssertReturn(uValue < 0x10000, VERR_INTERNAL_ERROR_2);
-    RT_NOREF(pFatCache, pVol, idxCluster, uValue);
-    return VERR_NOT_IMPLEMENTED;
+
+    /* Make the change. */
+    uint8_t *pbFat  = pFatCache->aEntries[0].pbData;
+    uint32_t offFat = idxCluster * 2;
+    pbFat[offFat]     = (uint8_t)idxCluster;
+    pbFat[offFat + 1] = (uint8_t)(idxCluster >> 8);
+
+    /* Update the dirty bits. */
+    rtFsFatClusterMap_SetDirtyByte(pFatCache, 0, offFat);
+
+    return VINF_SUCCESS;
 }
 
 
 /** Sets a FAT32 cluster value. */
-static int rtFsFatClusterMap_SetCluster32(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol,
-                                          uint32_t idxCluster, uint32_t uValue)
+static int rtFsFatClusterMap_SetCluster32(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxCluster, uint32_t uValue)
 {
     AssertReturn(uValue < 0x10000000, VERR_INTERNAL_ERROR_2);
-    RT_NOREF(pFatCache, pVol, idxCluster, uValue);
-    return VERR_NOT_IMPLEMENTED;
+
+    /* Get the fat cache entry. */
+    uint8_t *pbEntry;
+    uint32_t idxEntry;
+    int rc = rtFsFatClusterMap_GetEntryEx(pFatCache, idxCluster * 4, &pbEntry, &idxEntry);
+    if (RT_SUCCESS(rc))
+    {
+        /* Make the change. */
+        pbEntry[0] = (uint8_t)idxCluster;
+        pbEntry[1] = (uint8_t)(idxCluster >>  8);
+        pbEntry[2] = (uint8_t)(idxCluster >> 16);
+        pbEntry[3] = (uint8_t)(idxCluster >> 24);
+
+        /* Update the dirty bits. */
+        rtFsFatClusterMap_SetDirtyByteByPtr(pFatCache, idxEntry, pbEntry);
+    }
+
+    return rc;
 }
 
 
@@ -1144,9 +1458,9 @@ static int rtFsFatClusterMap_SetEndOfChain(PRTFSFATVOL pThis, uint32_t idxCluste
                     VERR_VFS_BOGUS_OFFSET);
     switch (pThis->enmFatType)
     {
-        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_SetCluster12(pThis->pFatCache, pThis, idxCluster, FAT_FIRST_FAT12_EOC);
-        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_SetCluster16(pThis->pFatCache, pThis, idxCluster, FAT_FIRST_FAT16_EOC);
-        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_SetCluster32(pThis->pFatCache, pThis, idxCluster, FAT_FIRST_FAT32_EOC);
+        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_SetCluster12(pThis->pFatCache, idxCluster, FAT_FIRST_FAT12_EOC);
+        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_SetCluster16(pThis->pFatCache, idxCluster, FAT_FIRST_FAT16_EOC);
+        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_SetCluster32(pThis->pFatCache, idxCluster, FAT_FIRST_FAT32_EOC);
         default: AssertFailedReturn(VERR_INTERNAL_ERROR_3);
     }
 }
@@ -1164,9 +1478,9 @@ static int rtFsFatClusterMap_FreeCluster(PRTFSFATVOL pThis, uint32_t idxCluster)
     AssertReturn(idxCluster < pThis->cClusters, VERR_VFS_BOGUS_OFFSET);
     switch (pThis->enmFatType)
     {
-        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_SetCluster12(pThis->pFatCache, pThis, idxCluster, 0);
-        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_SetCluster16(pThis->pFatCache, pThis, idxCluster, 0);
-        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_SetCluster32(pThis->pFatCache, pThis, idxCluster, 0);
+        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_SetCluster12(pThis->pFatCache, idxCluster, 0);
+        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_SetCluster16(pThis->pFatCache, idxCluster, 0);
+        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_SetCluster32(pThis->pFatCache, idxCluster, 0);
         default: AssertFailedReturn(VERR_INTERNAL_ERROR_3);
     }
 }
@@ -1175,13 +1489,12 @@ static int rtFsFatClusterMap_FreeCluster(PRTFSFATVOL pThis, uint32_t idxCluster)
 /**
  * Worker for rtFsFatClusterMap_AllocateCluster that handles FAT12.
  */
-static int rtFsFatClusterMap_AllocateCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol,
-                                               uint32_t idxPrevCluster, uint32_t *pidxCluster)
+static int rtFsFatClusterMap_AllocateCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxPrevCluster, uint32_t *pidxCluster)
 {
     /* ASSUME that for FAT12 we cache the whole FAT in a single entry.  That
        way we don't need to deal with entries in different sectors and whatnot.  */
     AssertReturn(pFatCache->cEntries == 1, VERR_INTERNAL_ERROR_4);
-    AssertReturn(pFatCache->cbEntry == pVol->cbFat, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->cbEntry == pFatCache->cbFat, VERR_INTERNAL_ERROR_4);
     AssertReturn(pFatCache->aEntries[0].offFat == 0, VERR_INTERNAL_ERROR_4);
 
     /*
@@ -1192,6 +1505,7 @@ static int rtFsFatClusterMap_AllocateCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache
     if (idxPrevCluster != UINT32_MAX)
     {
         offFatPrev = idxPrevCluster * 3 / 2;
+        AssertReturn(offFatPrev + 1 < pFatCache->cbFat, VERR_INTERNAL_ERROR_3);
         uint32_t idxPrevValue;
         if (idxPrevCluster & 1)
             idxPrevValue = (pbFat[offFatPrev] >> 4) | ((uint32_t)pbFat[offFatPrev + 1] << 4);
@@ -1208,7 +1522,7 @@ static int rtFsFatClusterMap_AllocateCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache
      */
     uint32_t idxCluster = FAT_FIRST_DATA_CLUSTER;
     uint32_t offFat     = 3;
-    while (idxCluster < pVol->cClusters)
+    while (idxCluster < pFatCache->cClusters)
     {
         if (idxCluster & 1)
         {
@@ -1243,7 +1557,7 @@ static int rtFsFatClusterMap_AllocateCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache
         rtFsFatClusterMap_SetDirtyByte(pFatCache, 0, offFat);
         rtFsFatClusterMap_SetDirtyByte(pFatCache, 0, offFat + 1);
 
-        /* Chain it on the previous cluster. */
+        /* Chain it onto the previous cluster. */
         if (idxPrevCluster != UINT32_MAX)
         {
             if (idxPrevCluster & 1)
@@ -1271,64 +1585,229 @@ static int rtFsFatClusterMap_AllocateCluster12(PRTFSFATCLUSTERMAPCACHE pFatCache
 /**
  * Worker for rtFsFatClusterMap_AllocateCluster that handles FAT16.
  */
-static int rtFsFatClusterMap_AllocateCluster16(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol,
-                                               uint32_t idxPrevCluster, uint32_t *pidxCluster)
+static int rtFsFatClusterMap_AllocateCluster16(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxPrevCluster, uint32_t *pidxCluster)
 {
-    RT_NOREF(pFatCache, pVol, idxPrevCluster, pidxCluster);
-    return VERR_NOT_IMPLEMENTED;
-}
+    /* ASSUME that for FAT16 we cache the whole FAT in a single entry. */
+    AssertReturn(pFatCache->cEntries == 1, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->cbEntry == pFatCache->cbFat, VERR_INTERNAL_ERROR_4);
+    AssertReturn(pFatCache->aEntries[0].offFat == 0, VERR_INTERNAL_ERROR_4);
+
+    /*
+     * Check that the previous cluster is a valid chain end.
+     */
+    uint8_t *pbFat      = pFatCache->aEntries[0].pbData;
+    uint32_t offFatPrev;
+    if (idxPrevCluster != UINT32_MAX)
+    {
+        offFatPrev = idxPrevCluster * 2;
+        AssertReturn(offFatPrev + 1 < pFatCache->cbFat, VERR_INTERNAL_ERROR_3);
+        uint32_t idxPrevValue = RT_MAKE_U16(pbFat[offFatPrev], pbFat[offFatPrev + 1]);
+        AssertReturn(idxPrevValue >= FAT_FIRST_FAT16_EOC, VERR_VFS_BOGUS_OFFSET);
+    }
+    else
+        offFatPrev = UINT32_MAX;
 
+    /*
+     * We start searching at idxAllocHint and continues to the end.  The next
+     * iteration starts searching from the start and up to idxAllocHint.
+     */
+    uint32_t idxCluster = RT_MIN(pFatCache->idxAllocHint, FAT_FIRST_DATA_CLUSTER);
+    uint32_t offFat     = idxCluster * 2;
+    uint32_t cClusters  = pFatCache->cClusters;
+    for (uint32_t i = 0; i < 2; i++)
+    {
+        while (idxCluster < cClusters)
+        {
+            if (   pbFat[offFat + 0] != 0x00
+                || pbFat[offFat + 1] != 0x00)
+            {
+                /* In use - advance to the next one. */
+                offFat += 2;
+                idxCluster++;
+            }
+            else
+            {
+                /*
+                 * Found one. Grab it.
+                 */
+                /* Set EOC. */
+                pbFat[offFat + 0] = 0xff;
+                pbFat[offFat + 1] = 0xff;
+                rtFsFatClusterMap_SetDirtyByte(pFatCache, 0, offFat);
 
-/**
- * Worker for rtFsFatClusterMap_AllocateCluster that handles FAT32.
- */
-static int rtFsFatClusterMap_AllocateCluster32(PRTFSFATCLUSTERMAPCACHE pFatCache, PRTFSFATVOL pVol,
-                                               uint32_t idxPrevCluster, uint32_t *pidxCluster)
-{
-    RT_NOREF(pFatCache, pVol, idxPrevCluster, pidxCluster);
-    return VERR_NOT_IMPLEMENTED;
-}
+                /* Chain it onto the previous cluster (if any). */
+                if (idxPrevCluster != UINT32_MAX)
+                {
+                    pbFat[offFatPrev + 0] = (uint8_t)idxCluster;
+                    pbFat[offFatPrev + 1] = (uint8_t)(idxCluster >> 8);
+                    rtFsFatClusterMap_SetDirtyByte(pFatCache, 0, offFatPrev);
+                }
 
+                /* Update the allocation hint. */
+                pFatCache->idxAllocHint = idxCluster + 1;
 
-/**
- * Allocates a cluster an appends it to the chain given by @a idxPrevCluster.
- *
- * @returns IPRT status code.
- * @retval  VERR_DISK_FULL if no more available clusters.
- * @param   pThis           The FAT volume instance.
- * @param   idxPrevCluster  The previous cluster, UINT32_MAX if first.
- * @param   pidxCluster     Where to return the cluster number on success.
- */
-static int rtFsFatClusterMap_AllocateCluster(PRTFSFATVOL pThis, uint32_t idxPrevCluster, uint32_t *pidxCluster)
-{
-    AssertReturn(idxPrevCluster == UINT32_MAX || (idxPrevCluster >= FAT_FIRST_DATA_CLUSTER && idxPrevCluster < pThis->cClusters),
-                 VERR_INTERNAL_ERROR_5);
-    *pidxCluster = UINT32_MAX;
-    switch (pThis->enmFatType)
-    {
-        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_AllocateCluster12(pThis->pFatCache, pThis, idxPrevCluster, pidxCluster);
-        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_AllocateCluster16(pThis->pFatCache, pThis, idxPrevCluster, pidxCluster);
-        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_AllocateCluster32(pThis->pFatCache, pThis, idxPrevCluster, pidxCluster);
-        default: AssertFailedReturn(VERR_INTERNAL_ERROR_3);
+                /* Done. */
+                *pidxCluster = idxCluster;
+                return VINF_SUCCESS;
+            }
+        }
+
+        /* Wrap around to the start of the map. */
+        cClusters  = RT_MIN(pFatCache->idxAllocHint, pFatCache->cClusters);
+        idxCluster = FAT_FIRST_DATA_CLUSTER;
+        offFat     = 4;
     }
+
+    return VERR_DISK_FULL;
 }
 
 
 /**
- * Allocates clusters.
- *
- * Will free the clusters if it fails to allocate all of them.
- *
- * @returns IPRT status code.
- * @param   pThis           The FAT volume instance.
- * @param   pChain          The chain.
- * @param   cClusters       Number of clusters to add to the chain.
+ * Worker for rtFsFatClusterMap_AllocateCluster that handles FAT32.
  */
-static int rtFsFatClusterMap_AllocateMoreClusters(PRTFSFATVOL pThis, PRTFSFATCHAIN pChain, uint32_t cClusters)
+static int rtFsFatClusterMap_AllocateCluster32(PRTFSFATCLUSTERMAPCACHE pFatCache, uint32_t idxPrevCluster, uint32_t *pidxCluster)
 {
-    int             rc                  = VINF_SUCCESS;
-    uint32_t const  cOldClustersInChain = pChain->cClusters;
-    uint32_t const  idxOldLastCluster   = rtFsFatChain_GetLastCluster(pChain);
+    /*
+     * Check that the previous cluster is a valid chain end.
+     */
+    int      rc;
+    uint8_t *pbEntry;
+    if (idxPrevCluster != UINT32_MAX)
+    {
+        rc = rtFsFatClusterMap_GetEntry(pFatCache, idxPrevCluster * 4, &pbEntry);
+        if (RT_SUCCESS(rc))
+        {
+            uint32_t idxPrevValue = RT_MAKE_U32_FROM_U8(pbEntry[0], pbEntry[1], pbEntry[2], pbEntry[3]);
+            AssertReturn(idxPrevValue >= FAT_FIRST_FAT32_EOC, VERR_VFS_BOGUS_OFFSET);
+        }
+        else
+            return rc;
+    }
+
+    /*
+     * We start searching at idxAllocHint and continues to the end.  The next
+     * iteration starts searching from the start and up to idxAllocHint.
+     */
+    uint32_t idxCluster = RT_MIN(pFatCache->idxAllocHint, FAT_FIRST_DATA_CLUSTER);
+    uint32_t offFat     = idxCluster * 4;
+    uint32_t cClusters  = pFatCache->cClusters;
+    for (uint32_t i = 0; i < 2; i++)
+    {
+        while (idxCluster < cClusters)
+        {
+            /* Note! This could be done in cache entry chunks.  */
+            uint32_t idxEntry;
+            rc = rtFsFatClusterMap_GetEntryEx(pFatCache, offFat, &pbEntry, &idxEntry);
+            if (RT_SUCCESS(rc))
+            {
+                if (   pbEntry[0] != 0x00
+                    || pbEntry[1] != 0x00
+                    || pbEntry[2] != 0x00
+                    || pbEntry[3] != 0x00)
+                {
+                    /* In use - advance to the next one. */
+                    offFat += 4;
+                    idxCluster++;
+                }
+                else
+                {
+                    /*
+                     * Found one. Grab it.
+                     */
+                    /* Set EOC. */
+                    pbEntry[0] = 0xff;
+                    pbEntry[1] = 0xff;
+                    pbEntry[2] = 0xff;
+                    pbEntry[3] = 0x0f;
+                    rtFsFatClusterMap_SetDirtyByteByPtr(pFatCache, idxEntry, pbEntry);
+
+                    /* Chain it on the previous cluster (if any). */
+                    if (idxPrevCluster != UINT32_MAX)
+                    {
+                        rc = rtFsFatClusterMap_GetEntryEx(pFatCache, idxPrevCluster * 4, &pbEntry, &idxEntry);
+                        if (RT_SUCCESS(rc))
+                        {
+                            pbEntry[0] = (uint8_t)idxCluster;
+                            pbEntry[1] = (uint8_t)(idxCluster >> 8);
+                            pbEntry[2] = (uint8_t)(idxCluster >> 16);
+                            pbEntry[3] = (uint8_t)(idxCluster >> 24);
+                            rtFsFatClusterMap_SetDirtyByteByPtr(pFatCache, idxEntry, pbEntry);
+                        }
+                        else
+                        {
+                            /* Try free the cluster. */
+                            int rc2 = rtFsFatClusterMap_GetEntryEx(pFatCache, offFat, &pbEntry, &idxEntry);
+                            if (RT_SUCCESS(rc2))
+                            {
+                                pbEntry[0] = 0;
+                                pbEntry[1] = 0;
+                                pbEntry[2] = 0;
+                                pbEntry[3] = 0;
+                                rtFsFatClusterMap_SetDirtyByteByPtr(pFatCache, idxEntry, pbEntry);
+                            }
+                            return rc;
+                        }
+                    }
+
+                    /* Update the allocation hint. */
+                    pFatCache->idxAllocHint = idxCluster + 1;
+
+                    /* Done. */
+                    *pidxCluster = idxCluster;
+                    return VINF_SUCCESS;
+                }
+            }
+        }
+
+        /* Wrap around to the start of the map. */
+        cClusters  = RT_MIN(pFatCache->idxAllocHint, pFatCache->cClusters);
+        idxCluster = FAT_FIRST_DATA_CLUSTER;
+        offFat     = 4;
+    }
+
+    return VERR_DISK_FULL;
+}
+
+
+/**
+ * Allocates a cluster an appends it to the chain given by @a idxPrevCluster.
+ *
+ * @returns IPRT status code.
+ * @retval  VERR_DISK_FULL if no more available clusters.
+ * @param   pThis           The FAT volume instance.
+ * @param   idxPrevCluster  The previous cluster, UINT32_MAX if first.
+ * @param   pidxCluster     Where to return the cluster number on success.
+ */
+static int rtFsFatClusterMap_AllocateCluster(PRTFSFATVOL pThis, uint32_t idxPrevCluster, uint32_t *pidxCluster)
+{
+    AssertReturn(idxPrevCluster == UINT32_MAX || (idxPrevCluster >= FAT_FIRST_DATA_CLUSTER && idxPrevCluster < pThis->cClusters),
+                 VERR_INTERNAL_ERROR_5);
+    *pidxCluster = UINT32_MAX;
+    switch (pThis->enmFatType)
+    {
+        case RTFSFATTYPE_FAT12: return rtFsFatClusterMap_AllocateCluster12(pThis->pFatCache, idxPrevCluster, pidxCluster);
+        case RTFSFATTYPE_FAT16: return rtFsFatClusterMap_AllocateCluster16(pThis->pFatCache, idxPrevCluster, pidxCluster);
+        case RTFSFATTYPE_FAT32: return rtFsFatClusterMap_AllocateCluster32(pThis->pFatCache, idxPrevCluster, pidxCluster);
+        default: AssertFailedReturn(VERR_INTERNAL_ERROR_3);
+    }
+}
+
+
+/**
+ * Allocates clusters.
+ *
+ * Will free the clusters if it fails to allocate all of them.
+ *
+ * @returns IPRT status code.
+ * @param   pThis           The FAT volume instance.
+ * @param   pChain          The chain.
+ * @param   cClusters       Number of clusters to add to the chain.
+ */
+static int rtFsFatClusterMap_AllocateMoreClusters(PRTFSFATVOL pThis, PRTFSFATCHAIN pChain, uint32_t cClusters)
+{
+    int             rc                  = VINF_SUCCESS;
+    uint32_t const  cOldClustersInChain = pChain->cClusters;
+    uint32_t const  idxOldLastCluster   = rtFsFatChain_GetLastCluster(pChain);
     uint32_t        idxPrevCluster      = idxOldLastCluster;
     uint32_t        iCluster            = 0;
     while (iCluster < cClusters)
@@ -1456,6 +1935,7 @@ static uint8_t rtFsFatCurrentFatDateTime(PCRTFSFATVOL pVol, uint16_t *puDate, ui
 static void rtFsFatObj_InitFromDirEntry(PRTFSFATOBJ pObj, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir, PRTFSFATVOL pVol)
 {
     RTListInit(&pObj->Entry);
+    pObj->cRefs             = 1;
     pObj->pParentDir        = NULL;
     pObj->pVol              = pVol;
     pObj->offEntryInDir     = offEntryInDir;
@@ -1484,6 +1964,7 @@ static void rtFsFatObj_InitFromDirEntry(PRTFSFATOBJ pObj, PCFATDIRENTRY pDirEntr
 static void rtFsFatObj_InitDummy(PRTFSFATOBJ pObj, uint32_t cbObject, RTFMODE fAttrib, PRTFSFATVOL pVol)
 {
     RTListInit(&pObj->Entry);
+    pObj->cRefs             = 1;
     pObj->pParentDir        = NULL;
     pObj->pVol              = pVol;
     pObj->offEntryInDir     = UINT32_MAX;
@@ -1514,7 +1995,7 @@ static int rtFsFatObj_FlushMetaData(PRTFSFATOBJ pObj)
     }
     if (pObj->fMaybeDirtyDirEnt)
     {
-        int rc2 = rtFsFatDir_Flush(pObj->pParentDir);
+        int rc2 = rtFsFatDirShrd_Flush(pObj->pParentDir);
         if (RT_SUCCESS(rc2))
             pObj->fMaybeDirtyDirEnt = false;
         else if (RT_SUCCESS(rc))
@@ -1534,28 +2015,18 @@ static int rtFsFatObj_Close(PRTFSFATOBJ pObj)
 {
     int rc = rtFsFatObj_FlushMetaData(pObj);
     if (pObj->pParentDir)
-        rtFsFatDir_RemoveOpenChild(pObj->pParentDir, pObj);
+        rtFsFatDirShrd_RemoveOpenChild(pObj->pParentDir, pObj);
     rtFsFatChain_Delete(&pObj->Clusters);
     return rc;
 }
 
 
 /**
- * @interface_method_impl{RTVFSOBJOPS,pfnClose}
- */
-static DECLCALLBACK(int) rtFsFatFile_Close(void *pvThis)
-{
-    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
-    return rtFsFatObj_Close(&pThis->Core);
-}
-
-
-/**
- * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
+ * Worker for rtFsFatFile_QueryInfo and rtFsFatDir_QueryInfo
  */
-static DECLCALLBACK(int) rtFsFatObj_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+static int rtFsFatObj_QueryInfo(PRTFSFATOBJ pThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
 {
-    PRTFSFATOBJ pThis = (PRTFSFATOBJ)pvThis;
+    LogFlow(("rtFsFatObj_QueryInfo: %p fMode=%#x\n", pThis, pThis->fAttrib));
 
     pObjInfo->cbObject              = pThis->cbObject;
     pObjInfo->cbAllocated           = pThis->Clusters.cbChain;
@@ -1598,11 +2069,83 @@ static DECLCALLBACK(int) rtFsFatObj_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInf
 
 
 /**
+ * Worker for rtFsFatFile_SetMode and rtFsFatDir_SetMode.
+ */
+static int rtFsFatObj_SetMode(PRTFSFATOBJ pThis, RTFMODE fMode, RTFMODE fMask)
+{
+#if 0
+    if (fMask != ~RTFS_TYPE_MASK)
+    {
+        fMode |= ~fMask & ObjInfo.Attr.fMode;
+    }
+#else
+    RT_NOREF(pThis, fMode, fMask);
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
+
+
+/**
+ * Worker for rtFsFatFile_SetTimes and rtFsFatDir_SetTimes.
+ */
+static int rtFsFatObj_SetTimes(PRTFSFATOBJ pThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                               PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
+{
+#if 0
+    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
+#else
+    RT_NOREF(pThis, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
+    return VERR_NOT_IMPLEMENTED;
+#endif
+}
+
+
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnClose}
+ */
+static DECLCALLBACK(int) rtFsFatFile_Close(void *pvThis)
+{
+    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
+    LogFlow(("rtFsFatFile_Close(%p/%p)\n", pThis, pThis->pShared));
+
+    PRTFSFATFILESHRD pShared = pThis->pShared;
+    pThis->pShared = NULL;
+
+    int rc = VINF_SUCCESS;
+    if (pShared)
+    {
+        if (ASMAtomicDecU32(&pShared->Core.cRefs) == 0)
+        {
+            LogFlow(("rtFsFatFile_Close: Destroying shared structure %p\n", pShared));
+            rc = rtFsFatObj_Close(&pShared->Core);
+            RTMemFree(pShared);
+        }
+        else
+            rc = rtFsFatObj_FlushMetaData(&pShared->Core);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
+ */
+static DECLCALLBACK(int) rtFsFatFile_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
+    return rtFsFatObj_QueryInfo(&pThis->pShared->Core, pObjInfo, enmAddAttr);
+}
+
+
+/**
  * @interface_method_impl{RTVFSIOSTREAMOPS,pfnRead}
  */
 static DECLCALLBACK(int) rtFsFatFile_Read(void *pvThis, RTFOFF off, PCRTSGBUF pSgBuf, bool fBlocking, size_t *pcbRead)
 {
-    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILE     pThis   = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILESHRD pShared = pThis->pShared;
     AssertReturn(pSgBuf->cSegs != 0, VERR_INTERNAL_ERROR_3);
     RT_NOREF(fBlocking);
 
@@ -1611,7 +2154,7 @@ static DECLCALLBACK(int) rtFsFatFile_Read(void *pvThis, RTFOFF off, PCRTSGBUF pS
      */
     if (off == -1)
         off = pThis->offFile;
-    if ((uint64_t)off >= pThis->Core.cbObject)
+    if ((uint64_t)off >= pShared->Core.cbObject)
     {
         if (pcbRead)
         {
@@ -1625,7 +2168,7 @@ static DECLCALLBACK(int) rtFsFatFile_Read(void *pvThis, RTFOFF off, PCRTSGBUF pS
      * Do the reading cluster by cluster.
      */
     int      rc         = VINF_SUCCESS;
-    uint32_t cbFileLeft = pThis->Core.cbObject - (uint32_t)off;
+    uint32_t cbFileLeft = pShared->Core.cbObject - (uint32_t)off;
     uint32_t cbRead     = 0;
     size_t   cbLeft     = pSgBuf->paSegs[0].cbSeg;
     uint8_t *pbDst      = (uint8_t *)pSgBuf->paSegs[0].pvSeg;
@@ -1633,15 +2176,15 @@ static DECLCALLBACK(int) rtFsFatFile_Read(void *pvThis, RTFOFF off, PCRTSGBUF pS
     {
         if (cbFileLeft > 0)
         {
-            uint64_t offDisk = rtFsFatChain_FileOffsetToDiskOff(&pThis->Core.Clusters, (uint32_t)off, pThis->Core.pVol);
+            uint64_t offDisk = rtFsFatChain_FileOffsetToDiskOff(&pShared->Core.Clusters, (uint32_t)off, pShared->Core.pVol);
             if (offDisk != UINT64_MAX)
             {
-                uint32_t cbToRead = pThis->Core.Clusters.cbCluster - ((uint32_t)off & (pThis->Core.Clusters.cbCluster - 1));
+                uint32_t cbToRead = pShared->Core.Clusters.cbCluster - ((uint32_t)off & (pShared->Core.Clusters.cbCluster - 1));
                 if (cbToRead > cbLeft)
                     cbToRead = (uint32_t)cbLeft;
                 if (cbToRead > cbFileLeft)
                     cbToRead = cbFileLeft;
-                rc = RTVfsFileReadAt(pThis->Core.pVol->hVfsBacking, offDisk, pbDst, cbToRead, NULL);
+                rc = RTVfsFileReadAt(pShared->Core.pVol->hVfsBacking, offDisk, pbDst, cbToRead, NULL);
                 if (RT_SUCCESS(rc))
                 {
                     off         += cbToRead;
@@ -1736,7 +2279,7 @@ static int rtFsFatObj_SetSize(PRTFSFATOBJ pObj, uint32_t cbFile)
          */
         uint32_t     uWriteLock;
         PFATDIRENTRY pDirEntry;
-        rc = rtFsFatDir_GetEntryForUpdate(pObj->pParentDir, pObj->offEntryInDir, &pDirEntry, &uWriteLock);
+        rc = rtFsFatDirShrd_GetEntryForUpdate(pObj->pParentDir, pObj->offEntryInDir, &pDirEntry, &uWriteLock);
         if (RT_SUCCESS(rc))
         {
             pDirEntry->cbFile = cbFile;
@@ -1749,7 +2292,7 @@ static int rtFsFatObj_SetSize(PRTFSFATOBJ pObj, uint32_t cbFile)
             if (pObj->pVol->enmFatType >= RTFSFATTYPE_FAT32)
                 pDirEntry->u.idxClusterHigh = (uint16_t)(idxFirstCluster >> 16);
 
-            rc = rtFsFatDir_PutEntryAfterUpdate(pObj->pParentDir, pDirEntry, uWriteLock);
+            rc = rtFsFatDirShrd_PutEntryAfterUpdate(pObj->pParentDir, pDirEntry, uWriteLock);
             pObj->fMaybeDirtyDirEnt = true;
         }
     }
@@ -1762,8 +2305,9 @@ static int rtFsFatObj_SetSize(PRTFSFATOBJ pObj, uint32_t cbFile)
  */
 static DECLCALLBACK(int) rtFsFatFile_Write(void *pvThis, RTFOFF off, PCRTSGBUF pSgBuf, bool fBlocking, size_t *pcbWritten)
 {
-    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
-    PRTFSFATVOL  pVol  = pThis->Core.pVol;
+    PRTFSFATFILE     pThis   = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILESHRD pShared = pThis->pShared;
+    PRTFSFATVOL      pVol    = pShared->Core.pVol;
     AssertReturn(pSgBuf->cSegs != 0, VERR_INTERNAL_ERROR_3);
     RT_NOREF(fBlocking);
 
@@ -1783,7 +2327,7 @@ static DECLCALLBACK(int) rtFsFatFile_Write(void *pvThis, RTFOFF off, PCRTSGBUF p
     while (cbLeft > 0)
     {
         /* Figure out how much we can write.  Checking for max file size and such. */
-        uint32_t cbToWrite = pThis->Core.Clusters.cbCluster - ((uint32_t)off & (pThis->Core.Clusters.cbCluster - 1));
+        uint32_t cbToWrite = pShared->Core.Clusters.cbCluster - ((uint32_t)off & (pShared->Core.Clusters.cbCluster - 1));
         if (cbToWrite > cbLeft)
             cbToWrite = (uint32_t)cbLeft;
         uint64_t offNew = (uint64_t)off + cbToWrite;
@@ -1798,9 +2342,9 @@ static DECLCALLBACK(int) rtFsFatFile_Write(void *pvThis, RTFOFF off, PCRTSGBUF p
         }
 
         /* Grow the file? */
-        if ((uint32_t)offNew > pThis->Core.cbObject)
+        if ((uint32_t)offNew > pShared->Core.cbObject)
         {
-            rc = rtFsFatObj_SetSize(&pThis->Core, (uint32_t)offNew);
+            rc = rtFsFatObj_SetSize(&pShared->Core, (uint32_t)offNew);
             if (RT_SUCCESS(rc))
             { /* likely */}
             else
@@ -1808,7 +2352,7 @@ static DECLCALLBACK(int) rtFsFatFile_Write(void *pvThis, RTFOFF off, PCRTSGBUF p
         }
 
         /* Figure the disk offset. */
-        uint64_t offDisk = rtFsFatChain_FileOffsetToDiskOff(&pThis->Core.Clusters, (uint32_t)off, pVol);
+        uint64_t offDisk = rtFsFatChain_FileOffsetToDiskOff(&pShared->Core.Clusters, (uint32_t)off, pVol);
         if (offDisk != UINT64_MAX)
         {
             rc = RTVfsFileWriteAt(pVol->hVfsBacking, offDisk, pbSrc, cbToWrite, NULL);
@@ -1842,9 +2386,10 @@ static DECLCALLBACK(int) rtFsFatFile_Write(void *pvThis, RTFOFF off, PCRTSGBUF p
  */
 static DECLCALLBACK(int) rtFsFatFile_Flush(void *pvThis)
 {
-    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
-    int rc1 = rtFsFatObj_FlushMetaData(&pThis->Core);
-    int rc2 = RTVfsFileFlush(pThis->Core.pVol->hVfsBacking);
+    PRTFSFATFILE     pThis   = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILESHRD pShared = pThis->pShared;
+    int rc1 = rtFsFatObj_FlushMetaData(&pShared->Core);
+    int rc2 = RTVfsFileFlush(pShared->Core.pVol->hVfsBacking);
     return RT_FAILURE(rc1) ? rc1 : rc2;
 }
 
@@ -1893,40 +2438,28 @@ static DECLCALLBACK(int) rtFsFatFile_Tell(void *pvThis, PRTFOFF poffActual)
 /**
  * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
  */
-static DECLCALLBACK(int) rtFsFatObj_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
+static DECLCALLBACK(int) rtFsFatFile_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
 {
-#if 0
     PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
-    if (fMask != ~RTFS_TYPE_MASK)
-    {
-        fMode |= ~fMask & ObjInfo.Attr.fMode;
-    }
-#else
-    RT_NOREF(pvThis, fMode, fMask);
-    return VERR_NOT_IMPLEMENTED;
-#endif
+    return rtFsFatObj_SetMode(&pThis->pShared->Core, fMode, fMask);
 }
 
 
 /**
  * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
  */
-static DECLCALLBACK(int) rtFsFatObj_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
-                                             PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
+static DECLCALLBACK(int) rtFsFatFile_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                              PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
 {
-#if 0
     PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
-#else
-    RT_NOREF(pvThis, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
-    return VERR_NOT_IMPLEMENTED;
-#endif
+    return rtFsFatObj_SetTimes(&pThis->pShared->Core, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
 }
 
 
 /**
  * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
  */
-static DECLCALLBACK(int) rtFsFatObj_SetOwner(void *pvThis, RTUID uid, RTGID gid)
+static DECLCALLBACK(int) rtFsFatFile_SetOwner(void *pvThis, RTUID uid, RTGID gid)
 {
     RT_NOREF(pvThis, uid, gid);
     return VERR_NOT_SUPPORTED;
@@ -1938,7 +2471,9 @@ static DECLCALLBACK(int) rtFsFatObj_SetOwner(void *pvThis, RTUID uid, RTGID gid)
  */
 static DECLCALLBACK(int) rtFsFatFile_Seek(void *pvThis, RTFOFF offSeek, unsigned uMethod, PRTFOFF poffActual)
 {
-    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILE     pThis   = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILESHRD pShared = pThis->pShared;
+
     RTFOFF offNew;
     switch (uMethod)
     {
@@ -1946,7 +2481,7 @@ static DECLCALLBACK(int) rtFsFatFile_Seek(void *pvThis, RTFOFF offSeek, unsigned
             offNew = offSeek;
             break;
         case RTFILE_SEEK_END:
-            offNew = (RTFOFF)pThis->Core.cbObject + offSeek;
+            offNew = (RTFOFF)pShared->Core.cbObject + offSeek;
             break;
         case RTFILE_SEEK_CURRENT:
             offNew = (RTFOFF)pThis->offFile + offSeek;
@@ -1973,8 +2508,9 @@ static DECLCALLBACK(int) rtFsFatFile_Seek(void *pvThis, RTFOFF offSeek, unsigned
  */
 static DECLCALLBACK(int) rtFsFatFile_QuerySize(void *pvThis, uint64_t *pcbFile)
 {
-    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
-    *pcbFile = pThis->Core.cbObject;
+    PRTFSFATFILE     pThis   = (PRTFSFATFILE)pvThis;
+    PRTFSFATFILESHRD pShared = pThis->pShared;
+    *pcbFile = pShared->Core.cbObject;
     return VINF_SUCCESS;
 }
 
@@ -1990,7 +2526,7 @@ DECL_HIDDEN_CONST(const RTVFSFILEOPS) g_rtFsFatFileOps =
             RTVFSOBJTYPE_FILE,
             "FatFile",
             rtFsFatFile_Close,
-            rtFsFatObj_QueryInfo,
+            rtFsFatFile_QueryInfo,
             RTVFSOBJOPS_VERSION
         },
         RTVFSIOSTREAMOPS_VERSION,
@@ -2009,9 +2545,9 @@ DECL_HIDDEN_CONST(const RTVFSFILEOPS) g_rtFsFatFileOps =
     { /* ObjSet */
         RTVFSOBJSETOPS_VERSION,
         RT_OFFSETOF(RTVFSFILEOPS, Stream.Obj) - RT_OFFSETOF(RTVFSFILEOPS, ObjSet),
-        rtFsFatObj_SetMode,
-        rtFsFatObj_SetTimes,
-        rtFsFatObj_SetOwner,
+        rtFsFatFile_SetMode,
+        rtFsFatFile_SetTimes,
+        rtFsFatFile_SetOwner,
         RTVFSOBJSETOPS_VERSION
     },
     rtFsFatFile_Seek,
@@ -2032,7 +2568,7 @@ DECL_HIDDEN_CONST(const RTVFSFILEOPS) g_rtFsFatFileOps =
  * @param   fOpen           RTFILE_O_XXX flags.
  * @param   phVfsFile       Where to return the file handle.
  */
-static int rtFsFatFile_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
+static int rtFsFatFile_New(PRTFSFATVOL pThis, PRTFSFATDIRSHRD pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
                            uint64_t fOpen, PRTVFSFILE phVfsFile)
 {
     AssertPtr(pParentDir);
@@ -2043,30 +2579,52 @@ static int rtFsFatFile_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIREN
                           phVfsFile, (void **)&pNewFile);
     if (RT_SUCCESS(rc))
     {
+        pNewFile->offFile = 0;
+        pNewFile->pShared = NULL;
+
         /*
-         * Initialize it all so rtFsFatFile_Close doesn't trip up in anyway.
+         * Look for existing shared object, create a new one if necessary.
          */
-        rtFsFatObj_InitFromDirEntry(&pNewFile->Core, pDirEntry, offEntryInDir, pThis);
-        pNewFile->offFile = 0;
-        rc = rtFsFatClusterMap_ReadClusterChain(pThis, RTFSFAT_GET_CLUSTER(pDirEntry, pThis), &pNewFile->Core.Clusters);
-        if (RT_SUCCESS(rc))
+        PRTFSFATFILESHRD pShared = (PRTFSFATFILESHRD)rtFsFatDirShrd_LookupShared(pParentDir, offEntryInDir);
+        if (pShared)
         {
-            /*
-             * Link into parent directory so we can use it to update
-             * our directory entry.
-             */
-            rtFsFatDir_AddOpenChild(pParentDir, &pNewFile->Core);
+            LogFlow(("rtFsFatFile_New: cbObject=%#RX32 \n", pShared->Core.cbObject));
+            pNewFile->pShared = pShared;
+            return VINF_SUCCESS;
+        }
 
-            /*
-             * Should we truncate the file or anything of that sort?
-             */
-            if (   (fOpen & RTFILE_O_TRUNCATE)
-                || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE_REPLACE)
-                rc = rtFsFatObj_SetSize(&pNewFile->Core, 0);
+        pShared = (PRTFSFATFILESHRD)RTMemAllocZ(sizeof(*pShared));
+        if (pShared)
+        {
+            rtFsFatObj_InitFromDirEntry(&pShared->Core, pDirEntry, offEntryInDir, pThis);
+            pNewFile->pShared = pShared;
+
+            rc = rtFsFatClusterMap_ReadClusterChain(pThis, RTFSFAT_GET_CLUSTER(pDirEntry, pThis), &pShared->Core.Clusters);
             if (RT_SUCCESS(rc))
-                return VINF_SUCCESS;
+            {
+                /*
+                 * Link into parent directory so we can use it to update
+                 * our directory entry.
+                 */
+                rtFsFatDirShrd_AddOpenChild(pParentDir, &pShared->Core);
+
+                /*
+                 * Should we truncate the file or anything of that sort?
+                 */
+                if (   (fOpen & RTFILE_O_TRUNCATE)
+                    || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE_REPLACE)
+                    rc = rtFsFatObj_SetSize(&pShared->Core, 0);
+                if (RT_SUCCESS(rc))
+                {
+                    LogFlow(("rtFsFatFile_New: cbObject=%#RX32 pShared=%p\n", pShared->Core.cbObject, pShared));
+                    return VINF_SUCCESS;
+                }
+            }
         }
+        else
+            rc = VERR_NO_MEMORY;
 
+        /* Destroy the file object. */
         RTVfsFileRelease(*phVfsFile);
     }
     *phVfsFile = NIL_RTVFSFILE;
@@ -2074,6 +2632,27 @@ static int rtFsFatFile_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIREN
 }
 
 
+/**
+ * Looks up the shared structure for a child.
+ *
+ * @returns Referenced pointer to the shared structure, NULL if not found.
+ * @param   pThis           The directory.
+ * @param   offEntryInDir   The directory record offset of the child.
+ */
+static PRTFSFATOBJ rtFsFatDirShrd_LookupShared(PRTFSFATDIRSHRD pThis, uint32_t offEntryInDir)
+{
+    PRTFSFATOBJ pCur;
+    RTListForEach(&pThis->OpenChildren, pCur, RTFSFATOBJ, Entry)
+    {
+        if (pCur->offEntryInDir == offEntryInDir)
+        {
+            uint32_t cRefs = ASMAtomicIncU32(&pCur->cRefs);
+            Assert(cRefs > 1); RT_NOREF(cRefs);
+            return pCur;
+        }
+    }
+    return NULL;
+}
 
 
 /**
@@ -2082,19 +2661,19 @@ static int rtFsFatFile_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIREN
  * @returns IPRT status code
  * @param   pThis           The directory.
  */
-static int rtFsFatDir_FlushFullyBuffered(PRTFSFATDIR pThis)
+static int rtFsFatDirShrd_FlushFullyBuffered(PRTFSFATDIRSHRD pThis)
 {
     Assert(pThis->fFullyBuffered);
     uint32_t const  cbSector    = pThis->Core.pVol->cbSector;
     RTVFSFILE const hVfsBacking = pThis->Core.pVol->hVfsBacking;
     int             rc          = VINF_SUCCESS;
     for (uint32_t i = 0; i < pThis->u.Full.cSectors; i++)
-        if (pThis->u.Full.pbDirtySectors[i])
+        if (ASMBitTest(pThis->u.Full.pbDirtySectors, i))
         {
             int rc2 = RTVfsFileWriteAt(hVfsBacking, pThis->offEntriesOnDisk + i * cbSector,
                                        (uint8_t *)pThis->paEntries + i * cbSector, cbSector, NULL);
             if (RT_SUCCESS(rc2))
-                pThis->u.Full.pbDirtySectors[i] = false;
+                ASMBitClear(pThis->u.Full.pbDirtySectors, i);
             else if (RT_SUCCESS(rc))
                 rc = rc2;
         }
@@ -2108,7 +2687,7 @@ static int rtFsFatDir_FlushFullyBuffered(PRTFSFATDIR pThis)
  * @returns IPRT status code
  * @param   pThis           The directory.
  */
-static int rtFsFatDir_FlushSimple(PRTFSFATDIR pThis)
+static int rtFsFatDirShrd_FlushSimple(PRTFSFATDIRSHRD pThis)
 {
     Assert(!pThis->fFullyBuffered);
     int rc;
@@ -2133,18 +2712,18 @@ static int rtFsFatDir_FlushSimple(PRTFSFATDIR pThis)
  * @returns IPRT status code
  * @param   pThis           The directory.
  */
-static int rtFsFatDir_Flush(PRTFSFATDIR pThis)
+static int rtFsFatDirShrd_Flush(PRTFSFATDIRSHRD pThis)
 {
     if (pThis->fFullyBuffered)
-        return rtFsFatDir_FlushFullyBuffered(pThis);
-    return rtFsFatDir_FlushSimple(pThis);
+        return rtFsFatDirShrd_FlushFullyBuffered(pThis);
+    return rtFsFatDirShrd_FlushSimple(pThis);
 }
 
 
 /**
  * Gets one or more entires at @a offEntryInDir.
  *
- * Common worker for rtFsFatDir_GetEntriesAt and rtFsFatDir_GetEntryForUpdate
+ * Common worker for rtFsFatDirShrd_GetEntriesAt and rtFsFatDirShrd_GetEntryForUpdate
  *
  * @returns IPRT status code.
  * @param   pThis               The directory.
@@ -2155,11 +2734,11 @@ static int rtFsFatDir_Flush(PRTFSFATDIR pThis)
  * @param   pcEntries           Where to return the number of entries
  *                              @a *ppaEntries points to.
  * @param   puBufferReadLock    Where to return the buffer read lock handle.
- *                              Call rtFsFatDir_ReleaseBufferAfterReading when
+ *                              Call rtFsFatDirShrd_ReleaseBufferAfterReading when
  *                              done.
  */
-static int rtFsFatDir_GetEntriesAtCommon(PRTFSFATDIR pThis, uint32_t offEntryInDir, bool fForUpdate,
-                                         PFATDIRENTRYUNION *ppaEntries, uint32_t *pcEntries, uint32_t *puLock)
+static int rtFsFatDirShrd_GetEntriesAtCommon(PRTFSFATDIRSHRD pThis, uint32_t offEntryInDir, bool fForUpdate,
+                                             PFATDIRENTRYUNION *ppaEntries, uint32_t *pcEntries, uint32_t *puLock)
 {
     *puLock = UINT32_MAX;
 
@@ -2203,7 +2782,7 @@ static int rtFsFatDir_GetEntriesAtCommon(PRTFSFATDIR pThis, uint32_t offEntryInD
                 if (!pThis->u.Simple.fDirty)
                     rc = VINF_SUCCESS;
                 else
-                    rc = rtFsFatDir_FlushSimple(pThis);
+                    rc = rtFsFatDirShrd_FlushSimple(pThis);
                 if (RT_SUCCESS(rc))
                 {
                     off                      =  offEntryInDir &  (pVol->cbSector - 1);
@@ -2243,14 +2822,14 @@ static int rtFsFatDir_GetEntriesAtCommon(PRTFSFATDIR pThis, uint32_t offEntryInD
  * @param   pDirEntry       The directory entry.
  * @param   uWriteLock      The write lock.
  */
-static int rtFsFatDir_PutEntryAfterUpdate(PRTFSFATDIR pThis, PFATDIRENTRY pDirEntry, uint32_t uWriteLock)
+static int rtFsFatDirShrd_PutEntryAfterUpdate(PRTFSFATDIRSHRD pThis, PFATDIRENTRY pDirEntry, uint32_t uWriteLock)
 {
     Assert(uWriteLock == UINT32_C(0x80000001));
     RT_NOREF(uWriteLock);
     if (pThis->fFullyBuffered)
     {
         uint32_t idxSector = ((uintptr_t)pDirEntry - (uintptr_t)pThis->paEntries) / pThis->Core.pVol->cbSector;
-        pThis->u.Full.pbDirtySectors[idxSector] = true;
+        ASMBitSet(pThis->u.Full.pbDirtySectors, idxSector);
     }
     else
         pThis->u.Simple.fDirty = true;
@@ -2261,7 +2840,7 @@ static int rtFsFatDir_PutEntryAfterUpdate(PRTFSFATDIR pThis, PFATDIRENTRY pDirEn
 /**
  * Gets the pointer to the given directory entry for the purpose of updating it.
  *
- * Call rtFsFatDir_PutEntryAfterUpdate afterwards.
+ * Call rtFsFatDirShrd_PutEntryAfterUpdate afterwards.
  *
  * @returns IPRT status code.
  * @param   pThis           The directory.
@@ -2270,12 +2849,12 @@ static int rtFsFatDir_PutEntryAfterUpdate(PRTFSFATDIR pThis, PFATDIRENTRY pDirEn
  * @param   ppDirEntry      Where to return the pointer to the directory entry.
  * @param   puWriteLock     Where to return the write lock.
  */
-static int rtFsFatDir_GetEntryForUpdate(PRTFSFATDIR pThis, uint32_t offEntryInDir, PFATDIRENTRY *ppDirEntry,
-                                        uint32_t *puWriteLock)
+static int rtFsFatDirShrd_GetEntryForUpdate(PRTFSFATDIRSHRD pThis, uint32_t offEntryInDir, PFATDIRENTRY *ppDirEntry,
+                                            uint32_t *puWriteLock)
 {
     uint32_t cEntriesIgn;
-    return rtFsFatDir_GetEntriesAtCommon(pThis, offEntryInDir, true /*fForUpdate*/, (PFATDIRENTRYUNION *)ppDirEntry,
-                                         &cEntriesIgn, puWriteLock);
+    return rtFsFatDirShrd_GetEntriesAtCommon(pThis, offEntryInDir, true /*fForUpdate*/, (PFATDIRENTRYUNION *)ppDirEntry,
+                                             &cEntriesIgn, puWriteLock);
 }
 
 
@@ -2287,7 +2866,7 @@ static int rtFsFatDir_GetEntryForUpdate(PRTFSFATDIR pThis, uint32_t offEntryInDi
  * @param   pThis           The directory.
  * @param   uBufferReadLock The buffer lock.
  */
-static void rtFsFatDir_ReleaseBufferAfterReading(PRTFSFATDIR pThis, uint32_t uBufferReadLock)
+static void rtFsFatDirShrd_ReleaseBufferAfterReading(PRTFSFATDIRSHRD pThis, uint32_t uBufferReadLock)
 {
     RT_NOREF(pThis, uBufferReadLock);
     Assert(uBufferReadLock == 1);
@@ -2305,14 +2884,14 @@ static void rtFsFatDir_ReleaseBufferAfterReading(PRTFSFATDIR pThis, uint32_t uBu
  * @param   pcEntries           Where to return the number of entries
  *                              @a *ppaEntries points to.
  * @param   puBufferReadLock    Where to return the buffer read lock handle.
- *                              Call rtFsFatDir_ReleaseBufferAfterReading when
+ *                              Call rtFsFatDirShrd_ReleaseBufferAfterReading when
  *                              done.
  */
-static int rtFsFatDir_GetEntriesAt(PRTFSFATDIR pThis, uint32_t offEntryInDir,
-                                   PCFATDIRENTRYUNION *ppaEntries, uint32_t *pcEntries, uint32_t *puBufferReadLock)
+static int rtFsFatDirShrd_GetEntriesAt(PRTFSFATDIRSHRD pThis, uint32_t offEntryInDir,
+                                       PCFATDIRENTRYUNION *ppaEntries, uint32_t *pcEntries, uint32_t *puBufferReadLock)
 {
-    return rtFsFatDir_GetEntriesAtCommon(pThis, offEntryInDir, false /*fForUpdate*/, (PFATDIRENTRYUNION *)ppaEntries,
-                                         pcEntries, puBufferReadLock);
+    return rtFsFatDirShrd_GetEntriesAtCommon(pThis, offEntryInDir, false /*fForUpdate*/, (PFATDIRENTRYUNION *)ppaEntries,
+                                             pcEntries, puBufferReadLock);
 }
 
 
@@ -2329,7 +2908,7 @@ static uint16_t rtFsFatUnicodeCodepointToUpperCodepage(RTUNICP uc)
      */
     if (uc < 128)
     {
-        if (g_awchFatCp437Chars[uc] == uc)
+        if (g_awchFatCp437ValidChars[uc] == uc)
             return (uint16_t)uc;
         if (RT_C_IS_LOWER(uc))
             return uc - 0x20;
@@ -2342,11 +2921,11 @@ static uint16_t rtFsFatUnicodeCodepointToUpperCodepage(RTUNICP uc)
      */
     RTUNICP ucUpper = RTUniCpToUpper(uc);
     for (unsigned i = 128; i < 256; i++)
-        if (g_awchFatCp437Chars[i] == ucUpper)
+        if (g_awchFatCp437ValidChars[i] == ucUpper)
             return i;
     if (ucUpper != uc)
         for (unsigned i = 128; i < 256; i++)
-            if (g_awchFatCp437Chars[i] == uc)
+            if (g_awchFatCp437ValidChars[i] == uc)
                 return i;
     return UINT16_MAX;
 }
@@ -2456,8 +3035,8 @@ static uint8_t rtFsFatDir_CalcChecksum(PCFATDIRENTRY pDirEntry)
  * @param   pfLong          Where to return long name indicator.
  * @param   pDirEntry       Where to return a copy of the directory entry.
  */
-static int rtFsFatDir_FindEntry(PRTFSFATDIR pThis, const char *pszEntry, uint32_t *poffEntryInDir, bool *pfLong,
-                                PFATDIRENTRY pDirEntry)
+static int rtFsFatDirShrd_FindEntry(PRTFSFATDIRSHRD pThis, const char *pszEntry, uint32_t *poffEntryInDir, bool *pfLong,
+                                    PFATDIRENTRY pDirEntry)
 {
     /* Set return values. */
     *pfLong         = false;
@@ -2488,7 +3067,7 @@ static int rtFsFatDir_FindEntry(PRTFSFATDIR pThis, const char *pszEntry, uint32_
         uint32_t            uBufferLock = UINT32_MAX;
         uint32_t            cEntries    = 0;
         PCFATDIRENTRYUNION  paEntries   = NULL;
-        int rc = rtFsFatDir_GetEntriesAt(pThis, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
+        int rc = rtFsFatDirShrd_GetEntriesAt(pThis, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
         if (RT_FAILURE(rc))
             return rc;
 
@@ -2507,7 +3086,7 @@ static int rtFsFatDir_FindEntry(PRTFSFATDIR pThis, const char *pszEntry, uint32_
                 case FATDIRENTRY_CH0_END_OF_DIR:
                     if (pThis->Core.pVol->enmBpbVersion >= RTFSFATBPBVER_DOS_2_0)
                     {
-                        rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                        rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                         return VERR_FILE_NOT_FOUND;
                     }
                     cwcName = 0;
@@ -2550,30 +3129,32 @@ static int rtFsFatDir_FindEntry(PRTFSFATDIR pThis, const char *pszEntry, uint32_
              * Regular directory entry. Do the matching, first 8.3 then long name.
              */
             else if (   fIs8Dot3Name
+                     && !(paEntries[iEntry].Entry.fAttrib & FAT_ATTR_VOLUME)
                      && memcmp(paEntries[iEntry].Entry.achName, szName8Dot3, sizeof(paEntries[iEntry].Entry.achName)) == 0)
             {
                 *poffEntryInDir = offEntryInDir;
                 *pDirEntry      = paEntries[iEntry].Entry;
                 *pfLong         = false;
-                rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                 return VINF_SUCCESS;
             }
             else if (   cwcName != 0
                      && idNextSlot == 0
+                     && !(paEntries[iEntry].Entry.fAttrib & FAT_ATTR_VOLUME)
                      && rtFsFatDir_CalcChecksum(&paEntries[iEntry].Entry) == bChecksum
                      && RTUtf16ICmpUtf8(wszName, pszEntry) == 0)
             {
                 *poffEntryInDir = offEntryInDir;
                 *pDirEntry      = paEntries[iEntry].Entry;
                 *pfLong         = true;
-                rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                 return VINF_SUCCESS;
             }
             else
                 cwcName = 0;
         }
 
-        rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+        rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
     }
 
     return VERR_FILE_NOT_FOUND;
@@ -2581,7 +3162,7 @@ static int rtFsFatDir_FindEntry(PRTFSFATDIR pThis, const char *pszEntry, uint32_
 
 
 /**
- * Watered down version of rtFsFatDir_FindEntry that is used by the short name
+ * Watered down version of rtFsFatDirShrd_FindEntry that is used by the short name
  * generator to check for duplicates.
  *
  * @returns IPRT status code.
@@ -2590,7 +3171,7 @@ static int rtFsFatDir_FindEntry(PRTFSFATDIR pThis, const char *pszEntry, uint32_
  * @param   pThis           The directory to search.
  * @param   pszEntry        The entry to look for.
  */
-static int rtFsFatDir_FindEntryShort(PRTFSFATDIR pThis, const char *pszName8Dot3)
+static int rtFsFatDirShrd_FindEntryShort(PRTFSFATDIRSHRD pThis, const char *pszName8Dot3)
 {
     Assert(strlen(pszName8Dot3) == 8+3);
 
@@ -2607,7 +3188,7 @@ static int rtFsFatDir_FindEntryShort(PRTFSFATDIR pThis, const char *pszName8Dot3
         uint32_t            uBufferLock = UINT32_MAX;
         uint32_t            cEntries    = 0;
         PCFATDIRENTRYUNION  paEntries   = NULL;
-        int rc = rtFsFatDir_GetEntriesAt(pThis, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
+        int rc = rtFsFatDirShrd_GetEntriesAt(pThis, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
         if (RT_FAILURE(rc))
             return rc;
 
@@ -2625,7 +3206,7 @@ static int rtFsFatDir_FindEntryShort(PRTFSFATDIR pThis, const char *pszName8Dot3
                 case FATDIRENTRY_CH0_END_OF_DIR:
                     if (pThis->Core.pVol->enmBpbVersion >= RTFSFATBPBVER_DOS_2_0)
                     {
-                        rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                        rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                         return VERR_FILE_NOT_FOUND;
                     }
                     break; /* Technically a valid entry before DOS 2.0, or so some claim. */
@@ -2645,12 +3226,12 @@ static int rtFsFatDir_FindEntryShort(PRTFSFATDIR pThis, const char *pszName8Dot3
              */
             else if (memcmp(paEntries[iEntry].Entry.achName, pszName8Dot3, sizeof(paEntries[iEntry].Entry.achName)) == 0)
             {
-                rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                 return VINF_SUCCESS;
             }
         }
 
-        rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+        rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
     }
 
     return VERR_FILE_NOT_FOUND;
@@ -2779,7 +3360,7 @@ static int rtFsFatDir_ValidateLongName(PCRTUTF16 pwszEntry, size_t cwc)
             RTUTF16 wc = pwszEntry[off];
             if (wc < 128)
             {
-                if (g_awchFatCp437Chars[wc] <= UINT16_C(0xfffe))
+                if (g_awchFatCp437ValidChars[wc] <= UINT16_C(0xfffe))
                 { /* likely */ }
                 else
                     return VERR_INVALID_NAME;
@@ -2803,7 +3384,7 @@ static int rtFsFatDir_ValidateLongName(PCRTUTF16 pwszEntry, size_t cwc)
 
 
 /**
- * Worker for rtFsFatDir_GenerateShortName.
+ * Worker for rtFsFatDirShrd_GenerateShortName.
  */
 static void rtFsFatDir_CopyShortName(char *pszDst, uint32_t cchDst, const char *pszSrc, size_t cchSrc, char chPad)
 {
@@ -2819,12 +3400,12 @@ static void rtFsFatDir_CopyShortName(char *pszDst, uint32_t cchDst, const char *
             {
                 if (uc < 128)
                 {
-                    if (g_awchFatCp437Chars[uc] != uc)
+                    if (g_awchFatCp437ValidChars[uc] != uc)
                     {
                         if (uc)
                         {
                             uc = RTUniCpToUpper(uc);
-                            if (g_awchFatCp437Chars[uc] != uc)
+                            if (g_awchFatCp437ValidChars[uc] != uc)
                                 uc = '_';
                         }
                         else
@@ -2856,7 +3437,7 @@ static void rtFsFatDir_CopyShortName(char *pszDst, uint32_t cchDst, const char *
  * @param   pszEntry        The long name (UTF-8).
  * @param   pDirEntry       Where to put the short name.
  */
-static int rtFsFatDir_GenerateShortName(PRTFSFATDIR pThis, const char *pszEntry, PFATDIRENTRY pDirEntry)
+static int rtFsFatDirShrd_GenerateShortName(PRTFSFATDIRSHRD pThis, const char *pszEntry, PFATDIRENTRY pDirEntry)
 {
     /* Do some input parsing. */
     const char  *pszExt      = RTPathSuffix(pszEntry);
@@ -2876,7 +3457,7 @@ static int rtFsFatDir_GenerateShortName(PRTFSFATDIR pThis, const char *pszEntry,
     for (uint32_t iLastDigit = 1; iLastDigit < 10; iLastDigit++)
     {
         szShortName[7] = iLastDigit + '0';
-        int rc = rtFsFatDir_FindEntryShort(pThis, szShortName);
+        int rc = rtFsFatDirShrd_FindEntryShort(pThis, szShortName);
         if (rc == VERR_FILE_NOT_FOUND)
         {
             memcpy(pDirEntry->achName, szShortName, sizeof(pDirEntry->achName));
@@ -2895,7 +3476,7 @@ static int rtFsFatDir_GenerateShortName(PRTFSFATDIR pThis, const char *pszEntry,
         {
             szShortName[6] = iFirstDigit + '0';
             szShortName[7] = iLastDigit  + '0';
-            int rc = rtFsFatDir_FindEntryShort(pThis, szShortName);
+            int rc = rtFsFatDirShrd_FindEntryShort(pThis, szShortName);
             if (rc == VERR_FILE_NOT_FOUND)
             {
                 memcpy(pDirEntry->achName, szShortName, sizeof(pDirEntry->achName));
@@ -2919,7 +3500,7 @@ static int rtFsFatDir_GenerateShortName(PRTFSFATDIR pThis, const char *pszEntry,
         szShortName[5] = szHex[cchHex - 3];
         szShortName[4] = szHex[cchHex - 4];
         szShortName[3] = szHex[cchHex - 5];
-        int rc = rtFsFatDir_FindEntryShort(pThis, szShortName);
+        int rc = rtFsFatDirShrd_FindEntryShort(pThis, szShortName);
         if (rc == VERR_FILE_NOT_FOUND)
         {
             memcpy(pDirEntry->achName, szShortName, sizeof(pDirEntry->achName));
@@ -2948,8 +3529,8 @@ static int rtFsFatDir_GenerateShortName(PRTFSFATDIR pThis, const char *pszEntry,
  *                          can hold at least FATDIRNAMESLOT_MAX_SLOTS entries.
  * @param   pcSlots         Where to return the actual number of slots used.
  */
-static int rtFsFatDir_MaybeCreateLongNameAndShortAlias(PRTFSFATDIR pThis, const char *pszEntry, bool fIs8Dot3Name,
-                                                       PFATDIRENTRY pDirEntry, PFATDIRNAMESLOT paSlots, uint32_t *pcSlots)
+static int rtFsFatDirShrd_MaybeCreateLongNameAndShortAlias(PRTFSFATDIRSHRD pThis, const char *pszEntry, bool fIs8Dot3Name,
+                                                           PFATDIRENTRY pDirEntry, PFATDIRNAMESLOT paSlots, uint32_t *pcSlots)
 {
     RT_NOREF(pThis, pDirEntry, paSlots, pszEntry);
 
@@ -2978,7 +3559,7 @@ static int rtFsFatDir_MaybeCreateLongNameAndShortAlias(PRTFSFATDIR pThis, const
          * Generate a short name if we need to.
          */
         if (!fIs8Dot3Name)
-            rc = rtFsFatDir_GenerateShortName(pThis, pszEntry, pDirEntry);
+            rc = rtFsFatDirShrd_GenerateShortName(pThis, pszEntry, pDirEntry);
         if (RT_SUCCESS(rc))
         {
             /*
@@ -3034,7 +3615,7 @@ static int rtFsFatDir_MaybeCreateLongNameAndShortAlias(PRTFSFATDIR pThis, const
  *                          end of the directory when VERR_DISK_FULL is
  *                          returned.
  */
-static int rtFsFatChain_FindFreeEntries(PRTFSFATDIR pThis, uint32_t cEntriesNeeded,
+static int rtFsFatChain_FindFreeEntries(PRTFSFATDIRSHRD pThis, uint32_t cEntriesNeeded,
                                         uint32_t *poffEntryInDir, uint32_t *pcFreeTail)
 {
     /* First try make gcc happy. */
@@ -3055,7 +3636,7 @@ static int rtFsFatChain_FindFreeEntries(PRTFSFATDIR pThis, uint32_t cEntriesNeed
         uint32_t            uBufferLock = UINT32_MAX;
         uint32_t            cEntries    = 0;
         PCFATDIRENTRYUNION  paEntries   = NULL;
-        int rc = rtFsFatDir_GetEntriesAt(pThis, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
+        int rc = rtFsFatDirShrd_GetEntriesAt(pThis, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
         if (RT_FAILURE(rc))
             return rc;
 
@@ -3079,7 +3660,7 @@ static int rtFsFatChain_FindFreeEntries(PRTFSFATDIR pThis, uint32_t cEntriesNeed
                 {
                     *pcFreeTail     = cEntriesNeeded;
                     *poffEntryInDir = offStartFreeEntries;
-                    rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                    rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                     return VINF_SUCCESS;
                 }
 
@@ -3087,12 +3668,12 @@ static int rtFsFatChain_FindFreeEntries(PRTFSFATDIR pThis, uint32_t cEntriesNeed
                 {
                     if (pThis->Core.pVol->enmBpbVersion >= RTFSFATBPBVER_DOS_2_0)
                     {
-                        rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                        rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                         *pcFreeTail = cFreeEntries = (cbDir - offStartFreeEntries) / sizeof(FATDIRENTRY);
                         if (cFreeEntries >= cEntriesNeeded)
                         {
                             *poffEntryInDir = offStartFreeEntries;
-                            rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+                            rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
                             return VINF_SUCCESS;
                         }
                         return VERR_DISK_FULL;
@@ -3105,7 +3686,7 @@ static int rtFsFatChain_FindFreeEntries(PRTFSFATDIR pThis, uint32_t cEntriesNeed
                 cFreeEntries        = 0;
             }
         }
-        rtFsFatDir_ReleaseBufferAfterReading(pThis, uBufferLock);
+        rtFsFatDirShrd_ReleaseBufferAfterReading(pThis, uBufferLock);
     }
     *pcFreeTail = cFreeEntries;
     return VERR_DISK_FULL;
@@ -3122,7 +3703,7 @@ static int rtFsFatChain_FindFreeEntries(PRTFSFATDIR pThis, uint32_t cEntriesNeed
  * @param   pThis           The directory to grow.
  * @param   cMinNewEntries  The minimum number of new entries to allocated.
  */
-static int rtFsFatChain_GrowDirectory(PRTFSFATDIR pThis, uint32_t cMinNewEntries)
+static int rtFsFatChain_GrowDirectory(PRTFSFATDIRSHRD pThis, uint32_t cMinNewEntries)
 {
     RT_NOREF(pThis, cMinNewEntries);
     return VERR_DISK_FULL;
@@ -3139,7 +3720,7 @@ static int rtFsFatChain_GrowDirectory(PRTFSFATDIR pThis, uint32_t cMinNewEntries
  * @param   cSlots          The number of long name slots.
  * @param   poffEntryInDir  Where to return the directory offset.
  */
-static int rtFsFatChain_InsertEntries(PRTFSFATDIR pThis, PCFATDIRENTRY pDirEntry, PFATDIRNAMESLOT paSlots, uint32_t cSlots,
+static int rtFsFatChain_InsertEntries(PRTFSFATDIRSHRD pThis, PCFATDIRENTRY pDirEntry, PFATDIRNAMESLOT paSlots, uint32_t cSlots,
                                       uint32_t *poffEntryInDir)
 {
     uint32_t const cTotalEntries = cSlots + 1;
@@ -3178,14 +3759,14 @@ static int rtFsFatChain_InsertEntries(PRTFSFATDIR pThis, PCFATDIRENTRY pDirEntry
         {
             uint32_t        uBufferLock;
             PFATDIRENTRY    pDstEntry;
-            rc = rtFsFatDir_GetEntryForUpdate(pThis, offCurrent, &pDstEntry, &uBufferLock);
+            rc = rtFsFatDirShrd_GetEntryForUpdate(pThis, offCurrent, &pDstEntry, &uBufferLock);
             if (RT_SUCCESS(rc))
             {
                 if (iSrcSlot < cSlots)
                     memcpy(pDstEntry, &paSlots[iSrcSlot], sizeof(*pDstEntry));
                 else
                     memcpy(pDstEntry, pDirEntry,          sizeof(*pDstEntry));
-                rc = rtFsFatDir_PutEntryAfterUpdate(pThis, pDstEntry, uBufferLock);
+                rc = rtFsFatDirShrd_PutEntryAfterUpdate(pThis, pDstEntry, uBufferLock);
                 if (RT_SUCCESS(rc))
                     continue;
 
@@ -3196,12 +3777,12 @@ static int rtFsFatChain_InsertEntries(PRTFSFATDIR pThis, PCFATDIRENTRY pDirEntry
             }
             while (iSrcSlot-- > 0)
             {
-                int rc2 = rtFsFatDir_GetEntryForUpdate(pThis, offFirstInDir + iSrcSlot * sizeof(FATDIRENTRY),
+                int rc2 = rtFsFatDirShrd_GetEntryForUpdate(pThis, offFirstInDir + iSrcSlot * sizeof(FATDIRENTRY),
                                                        &pDstEntry, &uBufferLock);
                 if (RT_SUCCESS(rc2))
                 {
                     pDstEntry->achName[0] = FATDIRENTRY_CH0_DELETED;
-                    rtFsFatDir_PutEntryAfterUpdate(pThis, pDstEntry, uBufferLock);
+                    rtFsFatDirShrd_PutEntryAfterUpdate(pThis, pDstEntry, uBufferLock);
                 }
             }
             *poffEntryInDir = UINT32_MAX;
@@ -3233,11 +3814,11 @@ static int rtFsFatChain_InsertEntries(PRTFSFATDIR pThis, PCFATDIRENTRY pDirEntry
  * @param   poffEntryInDir  Where to return the offset of the directory entry.
  * @param   pDirEntry       Where to return a copy of the directory entry.
  *
- * @remarks ASSUMES caller has already called rtFsFatDir_FindEntry to make sure
+ * @remarks ASSUMES caller has already called rtFsFatDirShrd_FindEntry to make sure
  *          the entry doesn't exist.
  */
-static int rtFsFatDir_CreateEntry(PRTFSFATDIR pThis, const char *pszEntry, uint8_t fAttrib, uint32_t cbInitial,
-                                  uint32_t *poffEntryInDir, PFATDIRENTRY pDirEntry)
+static int rtFsFatDirShrd_CreateEntry(PRTFSFATDIRSHRD pThis, const char *pszEntry, uint8_t fAttrib, uint32_t cbInitial,
+                                      uint32_t *poffEntryInDir, PFATDIRENTRY pDirEntry)
 {
     PRTFSFATVOL pVol = pThis->Core.pVol;
     *poffEntryInDir = UINT32_MAX;
@@ -3264,7 +3845,7 @@ static int rtFsFatDir_CreateEntry(PRTFSFATDIR pThis, const char *pszEntry, uint8
     uint32_t        cSlots = UINT32_MAX;
     FATDIRNAMESLOT  aSlots[FATDIRNAMESLOT_MAX_SLOTS];
     AssertCompile(RTFSFAT_MAX_LFN_CHARS < RT_ELEMENTS(aSlots) * FATDIRNAMESLOT_CHARS_PER_SLOT);
-    int rc = rtFsFatDir_MaybeCreateLongNameAndShortAlias(pThis, pszEntry, fIs8Dot3Name, pDirEntry, aSlots, &cSlots);
+    int rc = rtFsFatDirShrd_MaybeCreateLongNameAndShortAlias(pThis, pszEntry, fIs8Dot3Name, pDirEntry, aSlots, &cSlots);
     if (RT_SUCCESS(rc))
     {
         Assert(cSlots <= FATDIRNAMESLOT_MAX_SLOTS);
@@ -3307,36 +3888,123 @@ static int rtFsFatDir_CreateEntry(PRTFSFATDIR pThis, const char *pszEntry, uint8
 }
 
 
+/**
+ * Releases a reference to a shared directory structure.
+ *
+ * @param   pShared             The shared directory structure.
+ */
+static int rtFsFatDirShrd_Release(PRTFSFATDIRSHRD pShared)
+{
+    uint32_t cRefs = ASMAtomicDecU32(&pShared->Core.cRefs);
+    Assert(cRefs < UINT32_MAX / 2);
+    if (cRefs == 0)
+    {
+        LogFlow(("rtFsFatDirShrd_Release: Destroying shared structure %p\n", pShared));
+        Assert(pShared->Core.cRefs == 0);
+
+        int rc;
+        if (pShared->paEntries)
+        {
+            rc = rtFsFatDirShrd_Flush(pShared);
+            RTMemFree(pShared->paEntries);
+            pShared->paEntries = NULL;
+        }
+        else
+            rc = VINF_SUCCESS;
+
+        if (   pShared->fFullyBuffered
+            && pShared->u.Full.pbDirtySectors)
+        {
+            RTMemFree(pShared->u.Full.pbDirtySectors);
+            pShared->u.Full.pbDirtySectors = NULL;
+        }
+
+        int rc2 = rtFsFatObj_Close(&pShared->Core);
+        if (RT_SUCCESS(rc))
+            rc = rc2;
+
+        RTMemFree(pShared);
+        return rc;
+    }
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * Retains a reference to a shared directory structure.
+ *
+ * @param   pShared             The shared directory structure.
+ */
+static void rtFsFatDirShrd_Retain(PRTFSFATDIRSHRD pShared)
+{
+    uint32_t cRefs = ASMAtomicIncU32(&pShared->Core.cRefs);
+    Assert(cRefs > 1); NOREF(cRefs);
+}
+
 
 /**
  * @interface_method_impl{RTVFSOBJOPS,pfnClose}
  */
 static DECLCALLBACK(int) rtFsFatDir_Close(void *pvThis)
 {
+    PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIRSHRD pShared = pThis->pShared;
+    pThis->pShared = NULL;
+    if (pShared)
+        return rtFsFatDirShrd_Release(pShared);
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
+ */
+static DECLCALLBACK(int) rtFsFatDir_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
     PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
-    int rc;
-    if (pThis->paEntries)
-    {
-        rc = rtFsFatDir_Flush(pThis);
-        RTMemFree(pThis->paEntries);
-        pThis->paEntries = NULL;
-    }
-    else
-        rc = VINF_SUCCESS;
+    return rtFsFatObj_QueryInfo(&pThis->pShared->Core, pObjInfo, enmAddAttr);
+}
 
-    rtFsFatObj_Close(&pThis->Core);
-    return rc;
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
+ */
+static DECLCALLBACK(int) rtFsFatDir_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
+{
+    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
+    return rtFsFatObj_SetMode(&pThis->pShared->Core, fMode, fMask);
 }
 
 
 /**
- * @interface_method_impl{RTVFSOBJOPS,pfnTraversalOpen}
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
  */
-static DECLCALLBACK(int) rtFsFatDir_TraversalOpen(void *pvThis, const char *pszEntry, PRTVFSDIR phVfsDir,
-                                                  PRTVFSSYMLINK phVfsSymlink, PRTVFS phVfsMounted)
+static DECLCALLBACK(int) rtFsFatDir_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                             PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
 {
-    /*
-     * FAT doesn't do symbolic links and mounting file systems within others
+    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
+    return rtFsFatObj_SetTimes(&pThis->pShared->Core, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
+ */
+static DECLCALLBACK(int) rtFsFatDir_SetOwner(void *pvThis, RTUID uid, RTGID gid)
+{
+    RT_NOREF(pvThis, uid, gid);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnTraversalOpen}
+ */
+static DECLCALLBACK(int) rtFsFatDir_TraversalOpen(void *pvThis, const char *pszEntry, PRTVFSDIR phVfsDir,
+                                                  PRTVFSSYMLINK phVfsSymlink, PRTVFS phVfsMounted)
+{
+    /*
+     * FAT doesn't do symbolic links and mounting file systems within others
      * haven't been implemented yet, I think, so only care if a directory is
      * asked for.
      */
@@ -3349,20 +4017,21 @@ static DECLCALLBACK(int) rtFsFatDir_TraversalOpen(void *pvThis, const char *pszE
     {
         *phVfsDir = NIL_RTVFSDIR;
 
-        PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
-        uint32_t    offEntryInDir;
-        bool        fLong;
-        FATDIRENTRY DirEntry;
-        rc = rtFsFatDir_FindEntry(pThis, pszEntry, &offEntryInDir, &fLong, &DirEntry);
+        PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+        PRTFSFATDIRSHRD pShared = pThis->pShared;
+        uint32_t        offEntryInDir;
+        bool            fLong;
+        FATDIRENTRY     DirEntry;
+        rc = rtFsFatDirShrd_FindEntry(pShared, pszEntry, &offEntryInDir, &fLong, &DirEntry);
         if (RT_SUCCESS(rc))
         {
             switch (DirEntry.fAttrib & (FAT_ATTR_DIRECTORY | FAT_ATTR_VOLUME))
             {
                 case FAT_ATTR_DIRECTORY:
                 {
-                    rc = rtFsFatDir_New(pThis->Core.pVol, pThis, &DirEntry, offEntryInDir,
-                                        RTFSFAT_GET_CLUSTER(&DirEntry, pThis->Core.pVol), UINT64_MAX /*offDisk*/,
-                                        DirEntry.cbFile, phVfsDir, NULL /*ppDir*/);
+                    rc = rtFsFatDir_New(pShared->Core.pVol, pShared, &DirEntry, offEntryInDir,
+                                        RTFSFAT_GET_CLUSTER(&DirEntry, pShared->Core.pVol), UINT64_MAX /*offDisk*/,
+                                        DirEntry.cbFile, phVfsDir);
                     break;
                 }
                 case 0:
@@ -3378,6 +4047,7 @@ static DECLCALLBACK(int) rtFsFatDir_TraversalOpen(void *pvThis, const char *pszE
     }
     else
         rc = VERR_PATH_NOT_FOUND;
+    LogFlow(("rtFsFatDir_TraversalOpen: %s -> %Rrc\n", pszEntry, rc));
     return rc;
 }
 
@@ -3387,7 +4057,8 @@ static DECLCALLBACK(int) rtFsFatDir_TraversalOpen(void *pvThis, const char *pszE
  */
 static DECLCALLBACK(int) rtFsFatDir_OpenFile(void *pvThis, const char *pszFilename, uint32_t fOpen, PRTVFSFILE phVfsFile)
 {
-    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIRSHRD pShared = pThis->pShared;
 
     /*
      * Try open existing file.
@@ -3395,7 +4066,7 @@ static DECLCALLBACK(int) rtFsFatDir_OpenFile(void *pvThis, const char *pszFilena
     uint32_t    offEntryInDir;
     bool        fLong;
     FATDIRENTRY DirEntry;
-    int rc = rtFsFatDir_FindEntry(pThis, pszFilename, &offEntryInDir, &fLong, &DirEntry);
+    int rc = rtFsFatDirShrd_FindEntry(pShared, pszFilename, &offEntryInDir, &fLong, &DirEntry);
     if (RT_SUCCESS(rc))
     {
         switch (DirEntry.fAttrib & (FAT_ATTR_DIRECTORY | FAT_ATTR_VOLUME))
@@ -3407,7 +4078,7 @@ static DECLCALLBACK(int) rtFsFatDir_OpenFile(void *pvThis, const char *pszFilena
                     if (   (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_OPEN
                         || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_OPEN_CREATE
                         || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE_REPLACE)
-                        rc = rtFsFatFile_New(pThis->Core.pVol, pThis, &DirEntry, offEntryInDir, fOpen, phVfsFile);
+                        rc = rtFsFatFile_New(pShared->Core.pVol, pShared, &DirEntry, offEntryInDir, fOpen, phVfsFile);
                     else
                         rc = VERR_ALREADY_EXISTS;
                 }
@@ -3431,9 +4102,9 @@ static DECLCALLBACK(int) rtFsFatDir_OpenFile(void *pvThis, const char *pszFilena
                  || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_OPEN_CREATE
                  || (fOpen & RTFILE_O_ACTION_MASK) == RTFILE_O_CREATE_REPLACE) )
     {
-        rc = rtFsFatDir_CreateEntry(pThis, pszFilename, FAT_ATTR_ARCHIVE, 0 /*cbInitial*/, &offEntryInDir, &DirEntry);
+        rc = rtFsFatDirShrd_CreateEntry(pShared, pszFilename, FAT_ATTR_ARCHIVE, 0 /*cbInitial*/, &offEntryInDir, &DirEntry);
         if (RT_SUCCESS(rc))
-            rc = rtFsFatFile_New(pThis->Core.pVol, pThis, &DirEntry, offEntryInDir, fOpen, phVfsFile);
+            rc = rtFsFatFile_New(pShared->Core.pVol, pShared, &DirEntry, offEntryInDir, fOpen, phVfsFile);
     }
     return rc;
 }
@@ -3444,9 +4115,38 @@ static DECLCALLBACK(int) rtFsFatDir_OpenFile(void *pvThis, const char *pszFilena
  */
 static DECLCALLBACK(int) rtFsFatDir_OpenDir(void *pvThis, const char *pszSubDir, uint32_t fFlags, PRTVFSDIR phVfsDir)
 {
-    RT_NOREF(pvThis, pszSubDir, fFlags, phVfsDir);
-RTAssertMsg2("%s: %s\n", __FUNCTION__, pszSubDir);
-    return VERR_NOT_IMPLEMENTED;
+    PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIRSHRD pShared = pThis->pShared;
+    AssertReturn(!fFlags, VERR_INVALID_FLAGS);
+
+    /*
+     * Try open directory.
+     */
+    uint32_t    offEntryInDir;
+    bool        fLong;
+    FATDIRENTRY DirEntry;
+    int rc = rtFsFatDirShrd_FindEntry(pShared, pszSubDir, &offEntryInDir, &fLong, &DirEntry);
+    LogFlow(("rtFsFatDir_OpenDir: FindEntry(,%s,,,) -> %Rrc fLong=%d offEntryInDir=%#RX32\n", pszSubDir, rc, fLong, offEntryInDir));
+    if (RT_SUCCESS(rc))
+    {
+        switch (DirEntry.fAttrib & (FAT_ATTR_DIRECTORY | FAT_ATTR_VOLUME))
+        {
+            case FAT_ATTR_DIRECTORY:
+                rc = rtFsFatDir_New(pShared->Core.pVol, pShared, &DirEntry, offEntryInDir,
+                                    RTFSFAT_GET_CLUSTER(&DirEntry, pShared->Core.pVol), UINT64_MAX /*offDisk*/,
+                                    DirEntry.cbFile, phVfsDir);
+                break;
+
+            case 0:
+                rc = VERR_NOT_A_DIRECTORY;
+                break;
+
+            default:
+                rc = VERR_PATH_NOT_FOUND;
+                break;
+        }
+    }
+    return rc;
 }
 
 
@@ -3455,9 +4155,30 @@ RTAssertMsg2("%s: %s\n", __FUNCTION__, pszSubDir);
  */
 static DECLCALLBACK(int) rtFsFatDir_CreateDir(void *pvThis, const char *pszSubDir, RTFMODE fMode, PRTVFSDIR phVfsDir)
 {
-    RT_NOREF(pvThis, pszSubDir, fMode, phVfsDir);
-RTAssertMsg2("%s: %s\n", __FUNCTION__, pszSubDir);
-    return VERR_NOT_IMPLEMENTED;
+    PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIRSHRD pShared = pThis->pShared;
+    RT_NOREF(fMode);
+
+    /*
+     * Check if it already exists in any form.
+     */
+    uint32_t    offEntryInDir;
+    bool        fLong;
+    FATDIRENTRY DirEntry;
+    int rc = rtFsFatDirShrd_FindEntry(pShared, pszSubDir, &offEntryInDir, &fLong, &DirEntry);
+    if (rc != VERR_FILE_NOT_FOUND)
+        return RT_SUCCESS(rc) ? VERR_ALREADY_EXISTS : rc;
+
+    /*
+     * Okay, create it.
+     */
+    rc = rtFsFatDirShrd_CreateEntry(pShared, pszSubDir, FAT_ATTR_ARCHIVE | FAT_ATTR_DIRECTORY,
+                                    pShared->Core.pVol->cbCluster, &offEntryInDir, &DirEntry);
+    if (RT_SUCCESS(rc))
+        rc = rtFsFatDir_New(pShared->Core.pVol, pShared, &DirEntry, offEntryInDir,
+                            RTFSFAT_GET_CLUSTER(&DirEntry, pShared->Core.pVol), UINT64_MAX /*offDisk*/,
+                            DirEntry.cbFile, phVfsDir);
+    return rc;
 }
 
 
@@ -3467,7 +4188,6 @@ RTAssertMsg2("%s: %s\n", __FUNCTION__, pszSubDir);
 static DECLCALLBACK(int) rtFsFatDir_OpenSymlink(void *pvThis, const char *pszSymlink, PRTVFSSYMLINK phVfsSymlink)
 {
     RT_NOREF(pvThis, pszSymlink, phVfsSymlink);
-RTAssertMsg2("%s: %s\n", __FUNCTION__, pszSymlink);
     return VERR_NOT_SUPPORTED;
 }
 
@@ -3479,7 +4199,6 @@ static DECLCALLBACK(int) rtFsFatDir_CreateSymlink(void *pvThis, const char *pszS
                                                   RTSYMLINKTYPE enmType, PRTVFSSYMLINK phVfsSymlink)
 {
     RT_NOREF(pvThis, pszSymlink, pszTarget, enmType, phVfsSymlink);
-RTAssertMsg2("%s: %s\n", __FUNCTION__, pszSymlink);
     return VERR_NOT_SUPPORTED;
 }
 
@@ -3493,11 +4212,12 @@ static DECLCALLBACK(int) rtFsFatDir_QueryEntryInfo(void *pvThis, const char *psz
     /*
      * Try locate the entry.
      */
-    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
-    uint32_t    offEntryInDir;
-    bool        fLong;
-    FATDIRENTRY DirEntry;
-    int rc = rtFsFatDir_FindEntry(pThis, pszEntry, &offEntryInDir, &fLong, &DirEntry);
+    PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIRSHRD pShared = pThis->pShared;
+    uint32_t        offEntryInDir;
+    bool            fLong;
+    FATDIRENTRY     DirEntry;
+    int rc = rtFsFatDirShrd_FindEntry(pShared, pszEntry, &offEntryInDir, &fLong, &DirEntry);
     Log2(("rtFsFatDir_QueryEntryInfo: FindEntry(,%s,) -> %Rrc\n", pszEntry, rc));
     if (RT_SUCCESS(rc))
     {
@@ -3507,7 +4227,7 @@ static DECLCALLBACK(int) rtFsFatDir_QueryEntryInfo(void *pvThis, const char *psz
          */
         RTFSFATOBJ TmpObj;
         RT_ZERO(TmpObj);
-        rtFsFatObj_InitFromDirEntry(&TmpObj, &DirEntry, offEntryInDir, pThis->Core.pVol);
+        rtFsFatObj_InitFromDirEntry(&TmpObj, &DirEntry, offEntryInDir, pShared->Core.pVol);
         rc = rtFsFatObj_QueryInfo(&TmpObj, pObjInfo, enmAddAttr);
     }
     return rc;
@@ -3520,7 +4240,6 @@ static DECLCALLBACK(int) rtFsFatDir_QueryEntryInfo(void *pvThis, const char *psz
 static DECLCALLBACK(int) rtFsFatDir_UnlinkEntry(void *pvThis, const char *pszEntry, RTFMODE fType)
 {
     RT_NOREF(pvThis, pszEntry, fType);
-RTAssertMsg2("%s: %s\n", __FUNCTION__, pszEntry);
     return VERR_NOT_IMPLEMENTED;
 }
 
@@ -3531,7 +4250,6 @@ RTAssertMsg2("%s: %s\n", __FUNCTION__, pszEntry);
 static DECLCALLBACK(int) rtFsFatDir_RenameEntry(void *pvThis, const char *pszEntry, RTFMODE fType, const char *pszNewName)
 {
     RT_NOREF(pvThis, pszEntry, fType, pszNewName);
-RTAssertMsg2("%s: %s\n", __FUNCTION__, pszEntry);
     return VERR_NOT_IMPLEMENTED;
 }
 
@@ -3541,9 +4259,148 @@ RTAssertMsg2("%s: %s\n", __FUNCTION__, pszEntry);
  */
 static DECLCALLBACK(int) rtFsFatDir_RewindDir(void *pvThis)
 {
-    RT_NOREF(pvThis);
-RTAssertMsg2("%s\n", __FUNCTION__);
-    return VERR_NOT_IMPLEMENTED;
+    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
+    pThis->offDir = 0;
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * Calculates the UTF-8 length of the name in the given directory entry.
+ *
+ * @returns The length in characters (bytes), excluding terminator.
+ * @param   pShared     The shared directory structure (for codepage).
+ * @param   pEntry      The directory entry.
+ */
+static size_t rtFsFatDir_CalcUtf8LengthForDirEntry(PRTFSFATDIRSHRD pShared, PCFATDIRENTRY pEntry)
+{
+    RT_NOREF(pShared);
+    PCRTUTF16 g_pawcMap = &g_awchFatCp437Chars[0];
+
+    /* The base name (this won't work with DBCS, but that's not a concern at the moment). */
+    size_t offSrc = 8;
+    while (offSrc > 1 && RTUniCpIsSpace(g_pawcMap[pEntry->achName[offSrc - 1]]))
+        offSrc--;
+
+    size_t cchRet = 0;
+    while (offSrc-- > 0)
+        cchRet += RTStrCpSize(g_pawcMap[pEntry->achName[offSrc]]);
+
+    /* Extension. */
+    offSrc = 11;
+    while (offSrc > 8 && RTUniCpIsSpace(g_pawcMap[pEntry->achName[offSrc - 1]]))
+        offSrc--;
+    if (offSrc > 8)
+    {
+        cchRet += 1; /* '.' */
+        while (offSrc-- > 8)
+            cchRet += RTStrCpSize(g_pawcMap[pEntry->achName[offSrc]]);
+    }
+
+    return cchRet;
+}
+
+
+/**
+ * Copies the name from the directory entry into a UTF-16 buffer.
+ *
+ * @returns Number of UTF-16 items written (excluding terminator).
+ * @param   pShared     The shared directory structure (for codepage).
+ * @param   pEntry      The directory entry.
+ * @param   pwszDst     The destination buffer.
+ * @param   cwcDst      The destination buffer size.
+ */
+static uint16_t rtFsFatDir_CopyDirEntryToUtf16(PRTFSFATDIRSHRD pShared, PCFATDIRENTRY pEntry, PRTUTF16 pwszDst, size_t cwcDst)
+{
+    Assert(cwcDst > 0);
+
+    RT_NOREF(pShared);
+    PCRTUTF16 g_pawcMap = &g_awchFatCp437Chars[0];
+
+    /* The base name (this won't work with DBCS, but that's not a concern at the moment). */
+    size_t cchSrc = 8;
+    while (cchSrc > 1 && RTUniCpIsSpace(g_pawcMap[pEntry->achName[cchSrc - 1]]))
+        cchSrc--;
+
+    size_t offDst = 0;
+    for (size_t offSrc = 0; offSrc < cchSrc; offSrc++)
+    {
+        AssertReturnStmt(offDst + 1 < cwcDst, pwszDst[cwcDst - 1] = '\0', (uint16_t)cwcDst);
+        pwszDst[offDst++] = g_pawcMap[pEntry->achName[offSrc]];
+    }
+
+    /* Extension. */
+    cchSrc = 3;
+    while (cchSrc > 0 && RTUniCpIsSpace(g_pawcMap[pEntry->achName[8 + cchSrc - 1]]))
+        cchSrc--;
+    if (cchSrc > 0)
+    {
+        AssertReturnStmt(offDst + 1 < cwcDst, pwszDst[cwcDst - 1] = '\0', (uint16_t)cwcDst);
+        pwszDst[offDst++] = '.';
+
+        for (size_t offSrc = 0; offSrc < cchSrc; offSrc++)
+        {
+            AssertReturnStmt(offDst + 1 < cwcDst, pwszDst[cwcDst - 1] = '\0', (uint16_t)cwcDst);
+            pwszDst[offDst++] = g_pawcMap[pEntry->achName[8 + offSrc]];
+        }
+    }
+
+    pwszDst[offDst] = '\0';
+    return (uint16_t)offDst;
+}
+
+
+/**
+ * Copies the name from the directory entry into a UTF-8 buffer.
+ *
+ * @returns Number of UTF-16 items written (excluding terminator).
+ * @param   pShared     The shared directory structure (for codepage).
+ * @param   pEntry      The directory entry.
+ * @param   pszDst      The destination buffer.
+ * @param   cbDst       The destination buffer size.
+ */
+static uint16_t rtFsFatDir_CopyDirEntryToUtf8(PRTFSFATDIRSHRD pShared, PCFATDIRENTRY pEntry, char *pszDst, size_t cbDst)
+{
+    Assert(cbDst > 0);
+
+    RT_NOREF(pShared);
+    PCRTUTF16 g_pawcMap = &g_awchFatCp437Chars[0];
+
+    /* The base name (this won't work with DBCS, but that's not a concern at the moment). */
+    size_t cchSrc = 8;
+    while (cchSrc > 1 && RTUniCpIsSpace(g_pawcMap[pEntry->achName[cchSrc - 1]]))
+        cchSrc--;
+
+    char * const pszDstEnd = pszDst + cbDst;
+    char *pszCurDst = pszDst;
+    for (size_t offSrc = 0; offSrc < cchSrc; offSrc++)
+    {
+        RTUNICP const uc = g_pawcMap[pEntry->achName[offSrc]];
+        size_t        cbCp = RTStrCpSize(uc);
+        AssertReturnStmt(cbCp < (size_t)(pszDstEnd - pszCurDst), *pszCurDst = '\0', (uint16_t)(pszDstEnd - pszCurDst));
+        pszCurDst = RTStrPutCp(pszCurDst, uc);
+    }
+
+    /* Extension. */
+    cchSrc = 3;
+    while (cchSrc > 0 && RTUniCpIsSpace(g_pawcMap[pEntry->achName[8 + cchSrc - 1]]))
+        cchSrc--;
+    if (cchSrc > 0)
+    {
+        AssertReturnStmt(1U < (size_t)(pszDstEnd - pszCurDst), *pszCurDst = '\0', (uint16_t)(pszDstEnd - pszCurDst));
+        *pszCurDst++ = '.';
+
+        for (size_t offSrc = 0; offSrc < cchSrc; offSrc++)
+        {
+            RTUNICP const uc = g_pawcMap[pEntry->achName[8 + offSrc]];
+            size_t        cbCp = RTStrCpSize(uc);
+            AssertReturnStmt(cbCp < (size_t)(pszDstEnd - pszCurDst), *pszCurDst = '\0', (uint16_t)(pszDstEnd - pszCurDst));
+            pszCurDst = RTStrPutCp(pszCurDst, uc);
+        }
+    }
+
+    *pszCurDst = '\0';
+    return (uint16_t)(pszDstEnd - pszCurDst);
 }
 
 
@@ -3553,14 +4410,213 @@ RTAssertMsg2("%s\n", __FUNCTION__);
 static DECLCALLBACK(int) rtFsFatDir_ReadDir(void *pvThis, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
                                             RTFSOBJATTRADD enmAddAttr)
 {
-    RT_NOREF(pvThis, pDirEntry, pcbDirEntry, enmAddAttr);
-RTAssertMsg2("%s\n", __FUNCTION__);
-    return VERR_NOT_IMPLEMENTED;
+    PRTFSFATDIR     pThis   = (PRTFSFATDIR)pvThis;
+    PRTFSFATDIRSHRD pShared = pThis->pShared;
+
+    /*
+     * Fake '.' and '..' entries (required for root, we do it everywhere).
+     */
+    if (pThis->offDir < 2)
+    {
+        size_t cbNeeded = RT_OFFSETOF(RTDIRENTRYEX, szName[pThis->offDir + 2]);
+        if (cbNeeded < *pcbDirEntry)
+            *pcbDirEntry = cbNeeded;
+        else
+        {
+            *pcbDirEntry = cbNeeded;
+            return VERR_BUFFER_OVERFLOW;
+        }
+
+        int rc;
+        if (   pThis->offDir == 0
+            || pShared->Core.pParentDir == NULL)
+            rc = rtFsFatObj_QueryInfo(&pShared->Core, &pDirEntry->Info, enmAddAttr);
+        else
+            rc = rtFsFatObj_QueryInfo(&pShared->Core.pParentDir->Core, &pDirEntry->Info, enmAddAttr);
+
+        pDirEntry->cwcShortName = 0;
+        pDirEntry->wszShortName[0] = '\0';
+        pDirEntry->szName[0] = '.';
+        pDirEntry->szName[1] = '.';
+        pDirEntry->szName[++pThis->offDir] = '\0';
+        pDirEntry->cbName = pThis->offDir;
+        return rc;
+    }
+    if (   pThis->offDir == 2
+        && pShared->cEntries >= 2)
+    {
+        /* Skip '.' and '..' entries if present. */
+        uint32_t            uBufferLock = UINT32_MAX;
+        uint32_t            cEntries    = 0;
+        PCFATDIRENTRYUNION  paEntries   = NULL;
+        int rc = rtFsFatDirShrd_GetEntriesAt(pShared, 0, &paEntries, &cEntries, &uBufferLock);
+        if (RT_FAILURE(rc))
+            return rc;
+        if (   (paEntries[0].Entry.fAttrib & FAT_ATTR_DIRECTORY)
+            && memcmp(paEntries[0].Entry.achName, RT_STR_TUPLE(".          ")) == 0)
+        {
+            if (   (paEntries[1].Entry.fAttrib & FAT_ATTR_DIRECTORY)
+                && memcmp(paEntries[1].Entry.achName, RT_STR_TUPLE("..         ")) == 0)
+                pThis->offDir += sizeof(paEntries[0]) * 2;
+            else
+                pThis->offDir += sizeof(paEntries[0]);
+        }
+        rtFsFatDirShrd_ReleaseBufferAfterReading(pShared, uBufferLock);
+    }
+
+    /*
+     * Scan the directory buffer by buffer.
+     */
+    RTUTF16             wszName[260+1];
+    uint8_t             bChecksum       = UINT8_MAX;
+    uint8_t             idNextSlot      = UINT8_MAX;
+    size_t              cwcName         = 0;
+    uint32_t            offEntryInDir   = pThis->offDir - 2;
+    uint32_t const      cbDir           = pShared->Core.cbObject;
+    Assert(RT_ALIGN_32(cbDir, sizeof(*pDirEntry)) == cbDir);
+    AssertCompile(FATDIRNAMESLOT_MAX_SLOTS * FATDIRNAMESLOT_CHARS_PER_SLOT < RT_ELEMENTS(wszName));
+    wszName[260] = '\0';
+
+    while (offEntryInDir < cbDir)
+    {
+        /* Get chunk of entries starting at offEntryInDir. */
+        uint32_t            uBufferLock = UINT32_MAX;
+        uint32_t            cEntries    = 0;
+        PCFATDIRENTRYUNION  paEntries   = NULL;
+        int rc = rtFsFatDirShrd_GetEntriesAt(pShared, offEntryInDir, &paEntries, &cEntries, &uBufferLock);
+        if (RT_FAILURE(rc))
+            return rc;
+
+        /*
+         * Now work thru each of the entries.
+         */
+        for (uint32_t iEntry = 0; iEntry < cEntries; iEntry++, offEntryInDir += sizeof(FATDIRENTRY))
+        {
+            switch ((uint8_t)paEntries[iEntry].Entry.achName[0])
+            {
+                default:
+                    break;
+                case FATDIRENTRY_CH0_DELETED:
+                    cwcName = 0;
+                    continue;
+                case FATDIRENTRY_CH0_END_OF_DIR:
+                    if (pShared->Core.pVol->enmBpbVersion >= RTFSFATBPBVER_DOS_2_0)
+                    {
+                        pThis->offDir = cbDir + 2;
+                        rtFsFatDirShrd_ReleaseBufferAfterReading(pShared, uBufferLock);
+                        return VERR_NO_MORE_FILES;
+                    }
+                    cwcName = 0;
+                    break; /* Technically a valid entry before DOS 2.0, or so some claim. */
+            }
+
+            /*
+             * Check for long filename slot.
+             */
+            if (   paEntries[iEntry].Slot.fAttrib == FAT_ATTR_NAME_SLOT
+                && paEntries[iEntry].Slot.idxZero == 0
+                && paEntries[iEntry].Slot.fZero   == 0
+                && (paEntries[iEntry].Slot.idSlot & ~FATDIRNAMESLOT_FIRST_SLOT_FLAG) <= FATDIRNAMESLOT_HIGHEST_SLOT_ID
+                && (paEntries[iEntry].Slot.idSlot & ~FATDIRNAMESLOT_FIRST_SLOT_FLAG) != 0)
+            {
+                /* New slot? */
+                if (paEntries[iEntry].Slot.idSlot & FATDIRNAMESLOT_FIRST_SLOT_FLAG)
+                {
+                    idNextSlot = paEntries[iEntry].Slot.idSlot & ~FATDIRNAMESLOT_FIRST_SLOT_FLAG;
+                    bChecksum  = paEntries[iEntry].Slot.bChecksum;
+                    cwcName    = idNextSlot * FATDIRNAMESLOT_CHARS_PER_SLOT;
+                    wszName[cwcName] = '\0';
+                }
+                /* Is valid next entry? */
+                else if (   paEntries[iEntry].Slot.idSlot    == idNextSlot
+                         && paEntries[iEntry].Slot.bChecksum == bChecksum)
+                { /* likely */ }
+                else
+                    cwcName = 0;
+                if (cwcName)
+                {
+                    idNextSlot--;
+                    size_t offName = idNextSlot * FATDIRNAMESLOT_CHARS_PER_SLOT;
+                    memcpy(&wszName[offName],         paEntries[iEntry].Slot.awcName0, sizeof(paEntries[iEntry].Slot.awcName0));
+                    memcpy(&wszName[offName + 5],     paEntries[iEntry].Slot.awcName1, sizeof(paEntries[iEntry].Slot.awcName1));
+                    memcpy(&wszName[offName + 5 + 6], paEntries[iEntry].Slot.awcName2, sizeof(paEntries[iEntry].Slot.awcName2));
+                }
+            }
+            /*
+             * Got a regular directory entry.  Try return it to the caller if not volume label.
+             */
+            else if (!(paEntries[iEntry].Entry.fAttrib & FAT_ATTR_VOLUME))
+            {
+                /* Do the length calc and check for overflows. */
+                bool   fLongName = false;
+                size_t cchName = 0;
+                if (   cwcName != 0
+                    && idNextSlot == 0
+                    && rtFsFatDir_CalcChecksum(&paEntries[iEntry].Entry) == bChecksum)
+                {
+                    rc = RTUtf16CalcUtf8LenEx(wszName, cwcName, &cchName);
+                    if (RT_SUCCESS(rc))
+                        fLongName = true;
+                }
+                if (!fLongName)
+                    cchName = rtFsFatDir_CalcUtf8LengthForDirEntry(pShared, &paEntries[iEntry].Entry);
+                size_t cbNeeded = RT_OFFSETOF(RTDIRENTRYEX, szName[cchName + 1]);
+                if (cbNeeded <= *pcbDirEntry)
+                    *pcbDirEntry = cbNeeded;
+                else
+                {
+                    *pcbDirEntry = cbNeeded;
+                    return VERR_BUFFER_OVERFLOW;
+                }
+
+                /* To avoid duplicating code in rtFsFatObj_InitFromDirRec and
+                   rtFsFatObj_QueryInfo, we create a dummy RTFSFATOBJ on the stack. */
+                RTFSFATOBJ TmpObj;
+                RT_ZERO(TmpObj);
+                rtFsFatObj_InitFromDirEntry(&TmpObj, &paEntries[iEntry].Entry, offEntryInDir, pShared->Core.pVol);
+
+                rtFsFatDirShrd_ReleaseBufferAfterReading(pShared, uBufferLock);
+
+                rc = rtFsFatObj_QueryInfo(&TmpObj, &pDirEntry->Info, enmAddAttr);
+
+                /* Copy out the names. */
+                pDirEntry->cbName = (uint16_t)cchName;
+                if (fLongName)
+                {
+                    char *pszDst = &pDirEntry->szName[0];
+                    int rc2 = RTUtf16ToUtf8Ex(wszName, cwcName, &pszDst, cchName + 1, NULL);
+                    AssertRC(rc2);
+
+                    pDirEntry->cwcShortName = rtFsFatDir_CopyDirEntryToUtf16(pShared, &paEntries[iEntry].Entry,
+                                                                             pDirEntry->wszShortName,
+                                                                             RT_ELEMENTS(pDirEntry->wszShortName));
+                }
+                else
+                {
+                    rtFsFatDir_CopyDirEntryToUtf8(pShared, &paEntries[iEntry].Entry, &pDirEntry->szName[0], cchName + 1);
+                    pDirEntry->wszShortName[0] = '\0';
+                    pDirEntry->cwcShortName = 0;
+                }
+
+                if (RT_SUCCESS(rc))
+                    pThis->offDir = offEntryInDir + sizeof(paEntries[iEntry]) + 2;
+                Assert(RTStrValidateEncoding(pDirEntry->szName) == VINF_SUCCESS);
+                return rc;
+            }
+            else
+                cwcName = 0;
+        }
+
+        rtFsFatDirShrd_ReleaseBufferAfterReading(pShared, uBufferLock);
+    }
+
+    pThis->offDir = cbDir + 2;
+    return VERR_NO_MORE_FILES;
 }
 
 
 /**
- * FAT file operations.
+ * FAT directory operations.
  */
 static const RTVFSDIROPS g_rtFsFatDirOps =
 {
@@ -3569,7 +4625,7 @@ static const RTVFSDIROPS g_rtFsFatDirOps =
         RTVFSOBJTYPE_DIR,
         "FatDir",
         rtFsFatDir_Close,
-        rtFsFatObj_QueryInfo,
+        rtFsFatDir_QueryInfo,
         RTVFSOBJOPS_VERSION
     },
     RTVFSDIROPS_VERSION,
@@ -3577,9 +4633,9 @@ static const RTVFSDIROPS g_rtFsFatDirOps =
     { /* ObjSet */
         RTVFSOBJSETOPS_VERSION,
         RT_OFFSETOF(RTVFSDIROPS, Obj) - RT_OFFSETOF(RTVFSDIROPS, ObjSet),
-        rtFsFatObj_SetMode,
-        rtFsFatObj_SetTimes,
-        rtFsFatObj_SetOwner,
+        rtFsFatDir_SetMode,
+        rtFsFatDir_SetTimes,
+        rtFsFatDir_SetOwner,
         RTVFSOBJSETOPS_VERSION
     },
     rtFsFatDir_TraversalOpen,
@@ -3597,6 +4653,8 @@ static const RTVFSDIROPS g_rtFsFatDirOps =
 };
 
 
+
+
 /**
  * Adds an open child to the parent directory.
  *
@@ -3606,26 +4664,12 @@ static const RTVFSDIROPS g_rtFsFatDirOps =
  *
  * @param   pDir        The directory.
  * @param   pChild      The child being opened.
- * @sa      rtFsFatDir_RemoveOpenChild
+ * @sa      rtFsFatDirShrd_RemoveOpenChild
  */
-static void rtFsFatDir_AddOpenChild(PRTFSFATDIR pDir, PRTFSFATOBJ pChild)
+static void rtFsFatDirShrd_AddOpenChild(PRTFSFATDIRSHRD pDir, PRTFSFATOBJ pChild)
 {
-    /* First child that gets opened retains the parent directory.  This is
-       released by the final open child. */
-    if (RTListIsEmpty(&pDir->OpenChildren))
-    {
-        uint32_t cRefs = RTVfsDirRetain(pDir->hVfsSelf);
-        Assert(cRefs != UINT32_MAX); NOREF(cRefs);
+    rtFsFatDirShrd_Retain(pDir);
 
-        /* Root also retains the whole file system. */
-        if (pDir->Core.pVol->pRootDir == pDir)
-        {
-            Assert(pDir->Core.pVol);
-            Assert(pDir->Core.pVol == pChild->pVol);
-            cRefs = RTVfsRetain(pDir->Core.pVol->hVfsSelf);
-            Assert(cRefs != UINT32_MAX); NOREF(cRefs);
-        }
-    }
     RTListAppend(&pDir->OpenChildren, &pChild->Entry);
     pChild->pParentDir = pDir;
 }
@@ -3640,39 +4684,20 @@ static void rtFsFatDir_AddOpenChild(PRTFSFATDIR pDir, PRTFSFATOBJ pChild)
  * @remarks This is the very last thing you do as it may cause a few other
  *          objects to be released recursively (parent dir and the volume).
  *
- * @sa      rtFsFatDir_AddOpenChild
+ * @sa      rtFsFatDirShrd_AddOpenChild
  */
-static void rtFsFatDir_RemoveOpenChild(PRTFSFATDIR pDir, PRTFSFATOBJ pChild)
+static void rtFsFatDirShrd_RemoveOpenChild(PRTFSFATDIRSHRD pDir, PRTFSFATOBJ pChild)
 {
     AssertReturnVoid(pChild->pParentDir == pDir);
     RTListNodeRemove(&pChild->Entry);
     pChild->pParentDir = NULL;
 
-    /* Final child? If so, release directory. */
-    if (RTListIsEmpty(&pDir->OpenChildren))
-    {
-        bool const fIsRootDir = pDir->Core.pVol->pRootDir == pDir;
-
-        uint32_t cRefs = RTVfsDirRelease(pDir->hVfsSelf);
-        Assert(cRefs != UINT32_MAX); NOREF(cRefs);
-
-        /* Root directory releases the file system as well.  Since the volume
-           holds a reference to the root directory, it will remain valid after
-           the above release. */
-        if (fIsRootDir)
-        {
-            Assert(cRefs > 0);
-            Assert(pDir->Core.pVol);
-            Assert(pDir->Core.pVol == pChild->pVol);
-            cRefs = RTVfsRelease(pDir->Core.pVol->hVfsSelf);
-            Assert(cRefs != UINT32_MAX); NOREF(cRefs);
-        }
-    }
+    rtFsFatDirShrd_Release(pDir);
 }
 
 
 /**
- * Instantiates a new directory.
+ * Instantiates a new shared directory instance.
  *
  * @returns IPRT status code.
  * @param   pThis           The FAT volume instance.
@@ -3688,102 +4713,112 @@ static void rtFsFatDir_RemoveOpenChild(PRTFSFATDIR pDir, PRTFSFATOBJ pChild)
  * @param   offDisk         The disk byte offset of the FAT12/16 root directory.
  *                          This is UINT64_MAX if idxCluster is given.
  * @param   cbDir           The size of the directory.
- * @param   phVfsDir        Where to return the directory handle.
- * @param   ppDir           Where to return the FAT directory instance data.
+ * @param   ppSharedDir     Where to return shared FAT directory instance.
  */
-static int rtFsFatDir_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
-                          uint32_t idxCluster, uint64_t offDisk, uint32_t cbDir, PRTVFSDIR phVfsDir, PRTFSFATDIR *ppDir)
+static int rtFsFatDirShrd_New(PRTFSFATVOL pThis, PRTFSFATDIRSHRD pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
+                              uint32_t idxCluster, uint64_t offDisk, uint32_t cbDir, PRTFSFATDIRSHRD *ppSharedDir)
 {
     Assert((idxCluster == UINT32_MAX) != (offDisk == UINT64_MAX));
     Assert((pDirEntry == NULL) == (offEntryInDir == UINT32_MAX));
-    if (ppDir)
-        *ppDir = NULL;
+    *ppSharedDir = NULL;
 
-    PRTFSFATDIR pNewDir;
-    int rc = RTVfsNewDir(&g_rtFsFatDirOps, sizeof(*pNewDir), pParentDir ? 0 : RTVFSDIR_F_NO_VFS_REF,
-                         pThis->hVfsSelf, NIL_RTVFSLOCK /*use volume lock*/, phVfsDir, (void **)&pNewDir);
-    if (RT_SUCCESS(rc))
+    int rc = VERR_NO_MEMORY;
+    PRTFSFATDIRSHRD pShared = (PRTFSFATDIRSHRD)RTMemAllocZ(sizeof(*pShared));
+    if (pShared)
     {
         /*
          * Initialize it all so rtFsFatDir_Close doesn't trip up in anyway.
          */
-        RTListInit(&pNewDir->OpenChildren);
+        RTListInit(&pShared->OpenChildren);
         if (pDirEntry)
-            rtFsFatObj_InitFromDirEntry(&pNewDir->Core, pDirEntry, offEntryInDir, pThis);
+            rtFsFatObj_InitFromDirEntry(&pShared->Core, pDirEntry, offEntryInDir, pThis);
         else
-            rtFsFatObj_InitDummy(&pNewDir->Core, cbDir, RTFS_TYPE_DIRECTORY | RTFS_DOS_DIRECTORY | RTFS_UNIX_ALL_PERMS, pThis);
-
-        pNewDir->hVfsSelf           = *phVfsDir;
-        pNewDir->cEntries           = cbDir / sizeof(FATDIRENTRY);
-        pNewDir->fIsLinearRootDir   = idxCluster == UINT32_MAX;
-        pNewDir->fFullyBuffered     = pNewDir->fIsLinearRootDir;
-        pNewDir->paEntries          = NULL;
-        pNewDir->offEntriesOnDisk   = UINT64_MAX;
-        if (pNewDir->fFullyBuffered)
-            pNewDir->cbAllocatedForEntries = RT_ALIGN_32(cbDir, pThis->cbSector);
+            rtFsFatObj_InitDummy(&pShared->Core, cbDir, RTFS_TYPE_DIRECTORY | RTFS_DOS_DIRECTORY | RTFS_UNIX_ALL_PERMS, pThis);
+
+        pShared->cEntries           = cbDir / sizeof(FATDIRENTRY);
+        pShared->fIsLinearRootDir   = idxCluster == UINT32_MAX;
+        pShared->fFullyBuffered     = pShared->fIsLinearRootDir;
+        pShared->paEntries          = NULL;
+        pShared->offEntriesOnDisk   = UINT64_MAX;
+        if (pShared->fFullyBuffered)
+            pShared->cbAllocatedForEntries = RT_ALIGN_32(cbDir, pThis->cbSector);
         else
-            pNewDir->cbAllocatedForEntries = pThis->cbSector;
+            pShared->cbAllocatedForEntries = pThis->cbSector;
 
         /*
          * If clustered backing, read the chain and see if we cannot still do the full buffering.
          */
         if (idxCluster != UINT32_MAX)
         {
-            rc = rtFsFatClusterMap_ReadClusterChain(pThis, idxCluster, &pNewDir->Core.Clusters);
+            rc = rtFsFatClusterMap_ReadClusterChain(pThis, idxCluster, &pShared->Core.Clusters);
             if (RT_SUCCESS(rc))
             {
-                if (   pNewDir->Core.Clusters.cClusters >= 1
-                    && pNewDir->Core.Clusters.cbChain   <= _64K
-                    && rtFsFatChain_IsContiguous(&pNewDir->Core.Clusters))
+                if (   pShared->Core.Clusters.cClusters >= 1
+                    && pShared->Core.Clusters.cbChain   <= _64K
+                    && rtFsFatChain_IsContiguous(&pShared->Core.Clusters))
+                {
+                    Assert(pShared->Core.Clusters.cbChain >= cbDir);
+                    pShared->cbAllocatedForEntries = pShared->Core.Clusters.cbChain;
+                    pShared->fFullyBuffered = true;
+                }
+
+                /* DOS doesn't set a size on directores, so use the cluster length instead. */
+                if (   cbDir == 0
+                    && pShared->Core.Clusters.cbChain > 0)
                 {
-                    Assert(pNewDir->Core.Clusters.cbChain >= cbDir);
-                    pNewDir->cbAllocatedForEntries = pNewDir->Core.Clusters.cbChain;
-                    pNewDir->fFullyBuffered = true;
+                    cbDir = pShared->Core.Clusters.cbChain;
+                    pShared->Core.cbObject = cbDir;
+                    pShared->cEntries      = cbDir / sizeof(FATDIRENTRY);
+                    if (pShared->fFullyBuffered)
+                        pShared->cbAllocatedForEntries = RT_ALIGN_32(cbDir, pThis->cbSector);
                 }
             }
         }
         else
-            rtFsFatChain_InitEmpty(&pNewDir->Core.Clusters, pThis);
+        {
+            rtFsFatChain_InitEmpty(&pShared->Core.Clusters, pThis);
+            rc = VINF_SUCCESS;
+        }
         if (RT_SUCCESS(rc))
         {
             /*
              * Allocate and initialize the buffering.  Fill the buffer.
              */
-            pNewDir->paEntries = (PFATDIRENTRYUNION)RTMemAlloc(pNewDir->cbAllocatedForEntries);
-            if (!pNewDir->paEntries)
+            pShared->paEntries = (PFATDIRENTRYUNION)RTMemAlloc(pShared->cbAllocatedForEntries);
+            if (!pShared->paEntries)
             {
-                if (pNewDir->fFullyBuffered && !pNewDir->fIsLinearRootDir)
+                if (pShared->fFullyBuffered && !pShared->fIsLinearRootDir)
                 {
-                    pNewDir->fFullyBuffered = false;
-                    pNewDir->cbAllocatedForEntries = pThis->cbSector;
-                    pNewDir->paEntries = (PFATDIRENTRYUNION)RTMemAlloc(pNewDir->cbAllocatedForEntries);
+                    pShared->fFullyBuffered = false;
+                    pShared->cbAllocatedForEntries = pThis->cbSector;
+                    pShared->paEntries = (PFATDIRENTRYUNION)RTMemAlloc(pShared->cbAllocatedForEntries);
                 }
-                if (!pNewDir->paEntries)
+                if (!pShared->paEntries)
                     rc = VERR_NO_MEMORY;
             }
 
             if (RT_SUCCESS(rc))
             {
-                if (pNewDir->fFullyBuffered)
+                if (pShared->fFullyBuffered)
                 {
-                    pNewDir->u.Full.cDirtySectors   = 0;
-                    pNewDir->u.Full.cSectors        = pNewDir->cbAllocatedForEntries / pThis->cbSector;
-                    pNewDir->u.Full.pbDirtySectors  = (uint8_t *)RTMemAllocZ((pNewDir->u.Full.cSectors + 63) / 8);
-                    if (pNewDir->u.Full.pbDirtySectors)
-                        pNewDir->offEntriesOnDisk   = offDisk != UINT64_MAX ? offDisk
+                    pShared->u.Full.cDirtySectors   = 0;
+                    pShared->u.Full.cSectors        = pShared->cbAllocatedForEntries / pThis->cbSector;
+                    pShared->u.Full.pbDirtySectors  = (uint8_t *)RTMemAllocZ((pShared->u.Full.cSectors + 63) / 8);
+                    if (pShared->u.Full.pbDirtySectors)
+                        pShared->offEntriesOnDisk   = offDisk != UINT64_MAX ? offDisk
                                                     : rtFsFatClusterToDiskOffset(pThis, idxCluster);
                     else
                         rc = VERR_NO_MEMORY;
                 }
                 else
                 {
-                    pNewDir->offEntriesOnDisk       = rtFsFatClusterToDiskOffset(pThis, idxCluster);
-                    pNewDir->u.Simple.offInDir      = 0;
-                    pNewDir->u.Simple.fDirty        = false;
+                    pShared->offEntriesOnDisk       = rtFsFatClusterToDiskOffset(pThis, idxCluster);
+                    pShared->u.Simple.offInDir      = 0;
+                    pShared->u.Simple.fDirty        = false;
                 }
                 if (RT_SUCCESS(rc))
-                    rc = RTVfsFileReadAt(pThis->hVfsBacking, pNewDir->offEntriesOnDisk,
-                                         pNewDir->paEntries, pNewDir->cbAllocatedForEntries, NULL);
+                    rc = RTVfsFileReadAt(pThis->hVfsBacking, pShared->offEntriesOnDisk,
+                                         pShared->paEntries, pShared->cbAllocatedForEntries, NULL);
                 if (RT_SUCCESS(rc))
                 {
                     /*
@@ -3791,28 +4826,99 @@ static int rtFsFatDir_New(PRTFSFATVOL pThis, PRTFSFATDIR pParentDir, PCFATDIRENT
                      * our directory entry.
                      */
                     if (pParentDir)
-                        rtFsFatDir_AddOpenChild(pParentDir, &pNewDir->Core);
-                    if (ppDir)
-                        *ppDir = pNewDir;
+                        rtFsFatDirShrd_AddOpenChild(pParentDir, &pShared->Core);
+                    *ppSharedDir = pShared;
                     return VINF_SUCCESS;
                 }
             }
 
             /* Free the buffer on failure so rtFsFatDir_Close doesn't try do anything with it. */
-            RTMemFree(pNewDir->paEntries);
-            pNewDir->paEntries = NULL;
+            RTMemFree(pShared->paEntries);
+            pShared->paEntries = NULL;
         }
 
-        RTVfsDirRelease(*phVfsDir);
+        Assert(pShared->Core.cRefs == 1);
+        rtFsFatDirShrd_Release(pShared);
+    }
+    return rc;
+}
+
+
+/**
+ * Instantiates a new directory with a shared structure presupplied.
+ *
+ * @returns IPRT status code.
+ * @param   pThis           The FAT volume instance.
+ * @param   pShared         Referenced pointer to the shared structure.  The
+ *                          reference is always CONSUMED.
+ * @param   phVfsDir        Where to return the directory handle.
+ */
+static int rtFsFatDir_NewWithShared(PRTFSFATVOL pThis, PRTFSFATDIRSHRD pShared, PRTVFSDIR phVfsDir)
+{
+    /*
+     * Create VFS object around the shared structure.
+     */
+    PRTFSFATDIR pNewDir;
+    int rc = RTVfsNewDir(&g_rtFsFatDirOps, sizeof(*pNewDir), 0 /*fFlags*/, pThis->hVfsSelf,
+                         NIL_RTVFSLOCK /*use volume lock*/, phVfsDir, (void **)&pNewDir);
+    if (RT_SUCCESS(rc))
+    {
+        /*
+         * Look for existing shared object, create a new one if necessary.
+         * We CONSUME a reference to pShared here.
+         */
+        pNewDir->offDir  = 0;
+        pNewDir->pShared = pShared;
+        return VINF_SUCCESS;
     }
+
+    rtFsFatDirShrd_Release(pShared);
     *phVfsDir = NIL_RTVFSDIR;
-    if (ppDir)
-        *ppDir = NULL;
     return rc;
 }
 
 
 
+/**
+ * Instantiates a new directory VFS, creating the shared structure as necessary.
+ *
+ * @returns IPRT status code.
+ * @param   pThis           The FAT volume instance.
+ * @param   pParentDir      The parent directory.  This is NULL for the root
+ *                          directory.
+ * @param   pDirEntry       The parent directory entry. This is NULL for the
+ *                          root directory.
+ * @param   offEntryInDir   The byte offset of the directory entry in the parent
+ *                          directory.  UINT32_MAX if root directory.
+ * @param   idxCluster      The cluster where the directory content is to be
+ *                          found. This can be UINT32_MAX if a root FAT12/16
+ *                          directory.
+ * @param   offDisk         The disk byte offset of the FAT12/16 root directory.
+ *                          This is UINT64_MAX if idxCluster is given.
+ * @param   cbDir           The size of the directory.
+ * @param   phVfsDir        Where to return the directory handle.
+ */
+static int  rtFsFatDir_New(PRTFSFATVOL pThis, PRTFSFATDIRSHRD pParentDir, PCFATDIRENTRY pDirEntry, uint32_t offEntryInDir,
+                           uint32_t idxCluster, uint64_t offDisk, uint32_t cbDir, PRTVFSDIR phVfsDir)
+{
+    /*
+     * Look for existing shared object, create a new one if necessary.
+     */
+    PRTFSFATDIRSHRD pShared = (PRTFSFATDIRSHRD)rtFsFatDirShrd_LookupShared(pParentDir, offEntryInDir);
+    if (!pShared)
+    {
+        int rc = rtFsFatDirShrd_New(pThis, pParentDir, pDirEntry, offEntryInDir, idxCluster, offDisk, cbDir, &pShared);
+        if (RT_FAILURE(rc))
+        {
+            *phVfsDir = NIL_RTVFSDIR;
+            return rc;
+        }
+    }
+    return rtFsFatDir_NewWithShared(pThis, pShared, phVfsDir);
+}
+
+
+
 
 
 /**
@@ -3822,17 +4928,20 @@ static DECLCALLBACK(int) rtFsFatVol_Close(void *pvThis)
 {
     PRTFSFATVOL pThis = (PRTFSFATVOL)pvThis;
     LogFlow(("rtFsFatVol_Close(%p)\n", pThis));
-    int rc = rtFsFatClusterMap_Destroy(pThis);
 
-    if (pThis->hVfsRootDir != NIL_RTVFSDIR)
+    int rc = VINF_SUCCESS;
+    if (pThis->pRootDir != NULL)
     {
         Assert(RTListIsEmpty(&pThis->pRootDir->OpenChildren));
-        uint32_t cRefs = RTVfsDirRelease(pThis->hVfsRootDir);
-        Assert(cRefs == 0); NOREF(cRefs);
-        pThis->hVfsRootDir = NIL_RTVFSDIR;
-        pThis->pRootDir    = NULL;
+        Assert(pThis->pRootDir->Core.cRefs == 1);
+        rc = rtFsFatDirShrd_Release(pThis->pRootDir);
+        pThis->pRootDir = NULL;
     }
 
+    int rc2 = rtFsFatClusterMap_Destroy(pThis);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
     RTVfsFileRelease(pThis->hVfsBacking);
     pThis->hVfsBacking = NIL_RTVFSFILE;
 
@@ -3851,18 +4960,14 @@ static DECLCALLBACK(int) rtFsFatVol_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInf
 
 
 /**
- * @interface_method_impl{RTVFSOPS,pfnOpenRoo}
+ * @interface_method_impl{RTVFSOPS,pfnOpenRoot}
  */
 static DECLCALLBACK(int) rtFsFatVol_OpenRoot(void *pvThis, PRTVFSDIR phVfsDir)
 {
     PRTFSFATVOL pThis = (PRTFSFATVOL)pvThis;
-    uint32_t cRefs = RTVfsDirRetain(pThis->hVfsRootDir);
-    if (cRefs != UINT32_MAX)
-    {
-        *phVfsDir = pThis->hVfsRootDir;
-        return VINF_SUCCESS;
-    }
-    return VERR_INTERNAL_ERROR_5;
+
+    rtFsFatDirShrd_Retain(pThis->pRootDir); /* consumed by the next call */
+    return rtFsFatDir_NewWithShared(pThis, pThis->pRootDir, phVfsDir);
 }
 
 
@@ -4387,6 +5492,7 @@ static int rtFsFatVolTryInitDos2Plus(PRTFSFATVOL pThis, PCFATBOOTSECTOR pBootSec
     if (pbFatSector[0] != pThis->bMedia)
         return RTErrInfoSetF(pErrInfo, VERR_VFS_BOGUS_FORMAT,
                              "Media byte and FAT ID mismatch: %#x vs %#x (%.7Rhxs)", pbFatSector[0], pThis->bMedia, pbFatSector);
+    uint32_t idxOurEndOfChain;
     switch (pThis->enmFatType)
     {
         case RTFSFATTYPE_FAT12:
@@ -4394,6 +5500,7 @@ static int rtFsFatVolTryInitDos2Plus(PRTFSFATVOL pThis, PCFATBOOTSECTOR pBootSec
                 return RTErrInfoSetF(pErrInfo, VERR_VFS_BOGUS_FORMAT, "Bogus FAT ID patting (FAT12): %.3Rhxs", pbFatSector);
             pThis->idxMaxLastCluster = FAT_LAST_FAT12_DATA_CLUSTER;
             pThis->idxEndOfChain     = (pbFatSector[1] >> 4) | ((uint32_t)pbFatSector[2] << 4);
+            idxOurEndOfChain         = FAT_FIRST_FAT12_EOC | 0xf;
             break;
 
         case RTFSFATTYPE_FAT16:
@@ -4401,6 +5508,7 @@ static int rtFsFatVolTryInitDos2Plus(PRTFSFATVOL pThis, PCFATBOOTSECTOR pBootSec
                 return RTErrInfoSetF(pErrInfo, VERR_VFS_BOGUS_FORMAT, "Bogus FAT ID patting (FAT16): %.4Rhxs", pbFatSector);
             pThis->idxMaxLastCluster = FAT_LAST_FAT16_DATA_CLUSTER;
             pThis->idxEndOfChain     = RT_MAKE_U16(pbFatSector[2], pbFatSector[3]);
+            idxOurEndOfChain         = FAT_FIRST_FAT16_EOC | 0xf;
             break;
 
         case RTFSFATTYPE_FAT32:
@@ -4410,13 +5518,17 @@ static int rtFsFatVolTryInitDos2Plus(PRTFSFATVOL pThis, PCFATBOOTSECTOR pBootSec
                 return RTErrInfoSetF(pErrInfo, VERR_VFS_BOGUS_FORMAT, "Bogus FAT ID patting (FAT32): %.8Rhxs", pbFatSector);
             pThis->idxMaxLastCluster = FAT_LAST_FAT32_DATA_CLUSTER;
             pThis->idxEndOfChain     = RT_MAKE_U32_FROM_U8(pbFatSector[4], pbFatSector[5], pbFatSector[6], pbFatSector[7]);
+            idxOurEndOfChain         = FAT_FIRST_FAT32_EOC | 0xf;
             break;
 
         default: AssertFailedReturn(VERR_INTERNAL_ERROR_2);
     }
+
     if (pThis->idxEndOfChain <= pThis->idxMaxLastCluster)
-        return RTErrInfoSetF(pErrInfo, VERR_VFS_BOGUS_FORMAT, "Bogus formatter end-of-chain value: %#x, must be above %#x",
-                             pThis->idxEndOfChain, pThis->idxMaxLastCluster);
+    {
+        Log(("rtFsFatVolTryInitDos2Plus: Bogus idxEndOfChain=%#x, using %#x instead\n", pThis->idxEndOfChain, idxOurEndOfChain));
+        pThis->idxEndOfChain = idxOurEndOfChain;
+    }
 
     RT_NOREF(pbFatSector);
     return VINF_SUCCESS;
@@ -4484,7 +5596,6 @@ static int rtFsFatVolTryInit(PRTFSFATVOL pThis, RTVFS hVfsSelf, RTVFSFILE hVfsBa
     pThis->idxRootDirCluster    = UINT32_MAX;
     pThis->cRootDirEntries      = UINT32_MAX;
     pThis->cbRootDir            = 0;
-    pThis->hVfsRootDir          = NIL_RTVFSDIR;
     pThis->pRootDir             = NULL;
 
     pThis->uSerialNo            = 0;
@@ -4557,13 +5668,11 @@ static int rtFsFatVolTryInit(PRTFSFATVOL pThis, RTVFS hVfsSelf, RTVFSFILE hVfsBa
      * Create the root directory fun.
      */
     if (pThis->idxRootDirCluster == UINT32_MAX)
-        rc = rtFsFatDir_New(pThis, NULL /*pParentDir*/, NULL /*pDirEntry*/, UINT32_MAX /*offEntryInDir*/,
-                            UINT32_MAX, pThis->offRootDir, pThis->cbRootDir,
-                            &pThis->hVfsRootDir, &pThis->pRootDir);
+        rc = rtFsFatDirShrd_New(pThis, NULL /*pParentDir*/, NULL /*pDirEntry*/, UINT32_MAX /*offEntryInDir*/,
+                                UINT32_MAX, pThis->offRootDir, pThis->cbRootDir, &pThis->pRootDir);
     else
-        rc = rtFsFatDir_New(pThis, NULL /*pParentDir*/, NULL /*pDirEntry*/, UINT32_MAX /*offEntryInDir*/,
-                            pThis->idxRootDirCluster, UINT64_MAX, pThis->cbRootDir,
-                            &pThis->hVfsRootDir, &pThis->pRootDir);
+        rc = rtFsFatDirShrd_New(pThis, NULL /*pParentDir*/, NULL /*pDirEntry*/, UINT32_MAX /*offEntryInDir*/,
+                                pThis->idxRootDirCluster, UINT64_MAX, pThis->cbRootDir, &pThis->pRootDir);
     return rc;
 }
 
diff --git a/src/VBox/Runtime/common/fs/isomaker.cpp b/src/VBox/Runtime/common/fs/isomaker.cpp
index 6efcf7f..6fe103f 100644
--- a/src/VBox/Runtime/common/fs/isomaker.cpp
+++ b/src/VBox/Runtime/common/fs/isomaker.cpp
@@ -5822,8 +5822,8 @@ static void rtFsIosMakerOutFile_GenerateRockRidge(PRTFSISOMAKERNAME pName, uint8
             pPX->uid.le         = RT_H2LE_U32((uint32_t)pName->uid);
             pPX->gid.be         = RT_H2BE_U32((uint32_t)pName->gid);
             pPX->gid.le         = RT_H2LE_U32((uint32_t)pName->gid);
-            pPX->INode.be       = RT_H2BE_U32((uint32_t)pName->pObj->idxObj);
-            pPX->INode.le       = RT_H2LE_U32((uint32_t)pName->pObj->idxObj);
+            pPX->INode.be       = RT_H2BE_U32((uint32_t)pName->pObj->idxObj + 1); /* Don't use zero - isoinfo doesn't like it. */
+            pPX->INode.le       = RT_H2LE_U32((uint32_t)pName->pObj->idxObj + 1);
             pbSys += sizeof(*pPX);
             cbSys -= sizeof(*pPX);
         }
diff --git a/src/VBox/Runtime/common/fs/isomakercmd-man.xml b/src/VBox/Runtime/common/fs/isomakercmd-man.xml
index 4eab252..631a5d2 100644
--- a/src/VBox/Runtime/common/fs/isomakercmd-man.xml
+++ b/src/VBox/Runtime/common/fs/isomakercmd-man.xml
@@ -21,11 +21,11 @@
     You may elect to license modified versions of this file under the
     terms and conditions of either the GPL or the CDDL or both.
  -->
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
 <refentry id="viso" lang="en">
 
   <refentryinfo>
-    <pubdate>$Date: 2017-10-17 16:21:35 +0200 (Tue, 17 Oct 2017) $</pubdate>
+    <pubdate>$Date: 2017-11-09 19:13:13 +0100 (Thu, 09 Nov 2017) $</pubdate>
     <title>VISO file format / RTIsoMaker</title>
   </refentryinfo>
 
diff --git a/src/VBox/Runtime/common/fs/isomakercmd.cpp b/src/VBox/Runtime/common/fs/isomakercmd.cpp
index 9f7b05c..0588ebb 100644
--- a/src/VBox/Runtime/common/fs/isomakercmd.cpp
+++ b/src/VBox/Runtime/common/fs/isomakercmd.cpp
@@ -1107,7 +1107,9 @@ static int rtFsIsoMakerCmdWriteImage(PRTFSISOMAKERCMDOPTS pOpts, RTVFSFILE hVfsS
             RTVFSFILE       hVfsDstFile;
             uint32_t        offError;
             RTERRINFOSTATIC ErrInfo;
-            rc = RTVfsChainOpenFile(pOpts->pszOutFile, RTFILE_O_READWRITE | RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_WRITE,
+            rc = RTVfsChainOpenFile(pOpts->pszOutFile,
+                                    RTFILE_O_READWRITE | RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_WRITE
+                                    | (0664 << RTFILE_O_CREATE_MODE_SHIFT),
                                     &hVfsDstFile, &offError, RTErrInfoInitStatic(&ErrInfo));
             if (RT_SUCCESS(rc))
             {
diff --git a/src/VBox/Runtime/common/fs/isovfs.cpp b/src/VBox/Runtime/common/fs/isovfs.cpp
index d934801..a68ac74 100644
--- a/src/VBox/Runtime/common/fs/isovfs.cpp
+++ b/src/VBox/Runtime/common/fs/isovfs.cpp
@@ -454,6 +454,7 @@ typedef RTFSISOVDSINFO *PRTFSISOVDSINFO;
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
 
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
@@ -4126,7 +4127,7 @@ static DECLCALLBACK(int) rtFsIsoVol_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInf
 
 
 /**
- * @interface_method_impl{RTVFSOPS,pfnOpenRoo}
+ * @interface_method_impl{RTVFSOPS,pfnOpenRoot}
  */
 static DECLCALLBACK(int) rtFsIsoVol_OpenRoot(void *pvThis, PRTVFSDIR phVfsDir)
 {
diff --git a/src/VBox/Runtime/common/ldr/ldrELF.cpp b/src/VBox/Runtime/common/ldr/ldrELF.cpp
index 4a273ad..b309941 100644
--- a/src/VBox/Runtime/common/ldr/ldrELF.cpp
+++ b/src/VBox/Runtime/common/ldr/ldrELF.cpp
@@ -37,10 +37,10 @@
 #include <iprt/string.h>
 #include <iprt/log.h>
 #include <iprt/err.h>
-#include "internal/ldrELF32.h"
-#include "internal/ldrELF64.h"
-#include "internal/ldrELFi386.h"
-#include "internal/ldrELFAmd64.h"
+#include <iprt/formats/elf32.h>
+#include <iprt/formats/elf64.h>
+#include <iprt/formats/elf-i386.h>
+#include <iprt/formats/elf-amd64.h>
 #include "internal/ldr.h"
 
 
diff --git a/src/VBox/Runtime/common/log/log.cpp b/src/VBox/Runtime/common/log/log.cpp
index 08fb089..fb44c9d 100644
--- a/src/VBox/Runtime/common/log/log.cpp
+++ b/src/VBox/Runtime/common/log/log.cpp
@@ -227,13 +227,12 @@ static void rtR0LogLoggerExFallback(uint32_t fDestFlags, uint32_t fFlags, PRTLOG
                                     const char *pszFormat, va_list va);
 #endif
 #ifdef IN_RING3
-static int rtlogFileOpen(PRTLOGGER pLogger, char *pszErrorMsg, size_t cchErrorMsg);
-static void rtlogRotate(PRTLOGGER pLogger, uint32_t uTimeSlot, bool fFirst);
+static int  rtR3LogOpenFileDestination(PRTLOGGER pLogger, PRTERRINFO pErrInfo);
 #endif
 #ifndef IN_RC
 static void rtLogRingBufFlush(PRTLOGGER pLogger);
 #endif
-static void rtlogFlush(PRTLOGGER pLogger);
+static void rtlogFlush(PRTLOGGER pLogger, bool fNeedSpace);
 static DECLCALLBACK(size_t) rtLogOutput(void *pv, const char *pachChars, size_t cbChars);
 static DECLCALLBACK(size_t) rtLogOutputPrefixed(void *pv, const char *pachChars, size_t cbChars);
 static void rtlogLoggerExVLocked(PRTLOGGER pLogger, unsigned fFlags, unsigned iGroup, const char *pszFormat, va_list args);
@@ -777,13 +776,11 @@ static void rtLogRingBufFlush(PRTLOGGER pLogger)
 }
 
 
-
-
 RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGroupSettings,
                            const char *pszEnvVarBase, unsigned cGroups, const char * const *papszGroups,
                            uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory,
                            uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot,
-                           char *pszErrorMsg, size_t cchErrorMsg, const char *pszFilenameFmt, va_list args)
+                           PRTERRINFO pErrInfo, const char *pszFilenameFmt, va_list args)
 {
     int         rc;
     size_t      offInternal;
@@ -793,17 +790,14 @@ RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *psz
     /*
      * Validate input.
      */
-    if (    (cGroups && !papszGroups)
-        ||  !VALID_PTR(ppLogger) )
+    if (   (cGroups && !papszGroups)
+        || !VALID_PTR(ppLogger) )
     {
         AssertMsgFailed(("Invalid parameters!\n"));
         return VERR_INVALID_PARAMETER;
     }
     *ppLogger = NULL;
 
-    if (pszErrorMsg)
-        RTStrPrintf(pszErrorMsg, cchErrorMsg, N_("unknown error"));
-
     AssertMsgReturn(cHistory < _1M, ("%#x", cHistory), VERR_OUT_OF_RANGE);
 
     /*
@@ -884,11 +878,11 @@ RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *psz
         }
         else
         {
+            rc = VERR_NO_MEMORY;
 #  ifdef RT_OS_LINUX
-            if (pszErrorMsg) /* Most probably SELinux causing trouble since the larger RTMemAlloc succeeded. */
-                RTStrPrintf(pszErrorMsg, cchErrorMsg, N_("mmap(PROT_WRITE | PROT_EXEC) failed -- SELinux?"));
+                /* Most probably SELinux causing trouble since the larger RTMemAlloc succeeded. */
+            RTErrInfoSet(pErrInfo, rc, N_("mmap(PROT_WRITE | PROT_EXEC) failed -- SELinux?"));
 #  endif
-            rc = VERR_NO_MEMORY;
         }
         if (RT_SUCCESS(rc))
 # endif /* X86 wrapper code*/
@@ -901,7 +895,8 @@ RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *psz
             {
                 /** @todo validate the length, fail on overflow. */
                 RTStrPrintfV(pLogger->pInt->szFilename, sizeof(pLogger->pInt->szFilename), pszFilenameFmt, args);
-                pLogger->fDestFlags |= RTLOGDEST_FILE;
+                if (pLogger->pInt->szFilename[0])
+                    pLogger->fDestFlags |= RTLOGDEST_FILE;
             }
 
             /*
@@ -946,32 +941,12 @@ RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *psz
              * Open the destination(s).
              */
             rc = VINF_SUCCESS;
+            if ((pLogger->fDestFlags & (RTLOGDEST_F_DELAY_FILE | RTLOGDEST_FILE)) == RTLOGDEST_F_DELAY_FILE)
+                pLogger->fDestFlags &= ~RTLOGDEST_F_DELAY_FILE;
 # ifdef IN_RING3
-            if (pLogger->fDestFlags & RTLOGDEST_FILE)
-            {
-                if (pLogger->fFlags & RTLOGFLAGS_APPEND)
-                {
-                    rc = rtlogFileOpen(pLogger, pszErrorMsg, cchErrorMsg);
-
-                    /* Rotate in case of appending to a too big log file,
-                       otherwise this simply doesn't do anything. */
-                    rtlogRotate(pLogger, 0, true /* fFirst */);
-                }
-                else
-                {
-                    /* Force rotation if it is configured. */
-                    pLogger->pInt->cbHistoryFileWritten = UINT64_MAX;
-                    rtlogRotate(pLogger, 0, true /* fFirst */);
-
-                    /* If the file is not open then rotation is not set up. */
-                    if (pLogger->pInt->hFile == NIL_RTFILE)
-                    {
-                        pLogger->pInt->cbHistoryFileWritten = 0;
-                        rc = rtlogFileOpen(pLogger, pszErrorMsg, cchErrorMsg);
-                    }
-                }
-            }
-# endif  /* IN_RING3 */
+            if ((pLogger->fDestFlags & (RTLOGDEST_FILE | RTLOGDEST_F_DELAY_FILE)) == RTLOGDEST_FILE)
+                rc = rtR3LogOpenFileDestination(pLogger, pErrInfo);
+# endif
 
             if ((pLogger->fDestFlags & RTLOGDEST_RINGBUF) && RT_SUCCESS(rc))
                 rc = rtLogRingBufAdjust(pLogger, pLogger->pInt->cbRingBuf, true /*fForce*/);
@@ -1006,8 +981,7 @@ RTDECL(int) RTLogCreateExV(PRTLOGGER *ppLogger, uint32_t fFlags, const char *psz
                     return VINF_SUCCESS;
                 }
 
-                if (pszErrorMsg)
-                    RTStrPrintf(pszErrorMsg, cchErrorMsg, N_("failed to create semaphore"));
+                RTErrInfoSet(pErrInfo, rc, N_("failed to create semaphore"));
             }
 # ifdef IN_RING3
             RTFileClose(pLogger->pInt->hFile);
@@ -1038,7 +1012,7 @@ RTDECL(int) RTLogCreate(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszGro
     va_start(args, pszFilenameFmt);
     rc = RTLogCreateExV(ppLogger, fFlags, pszGroupSettings, pszEnvVarBase, cGroups, papszGroups,
                         fDestFlags, NULL /*pfnPhase*/, 0 /*cHistory*/, 0 /*cbHistoryFileMax*/, 0 /*cSecsHistoryTimeSlot*/,
-                        NULL /*pszErrorMsg*/, 0 /*cchErrorMsg*/, pszFilenameFmt, args);
+                        NULL /*pErrInfo*/, pszFilenameFmt, args);
     va_end(args);
     return rc;
 }
@@ -1049,7 +1023,7 @@ RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszG
                           const char *pszEnvVarBase, unsigned cGroups, const char * const * papszGroups,
                           uint32_t fDestFlags, PFNRTLOGPHASE pfnPhase, uint32_t cHistory,
                           uint64_t cbHistoryFileMax, uint32_t cSecsHistoryTimeSlot,
-                          char *pszErrorMsg, size_t cchErrorMsg, const char *pszFilenameFmt, ...)
+                          PRTERRINFO pErrInfo, const char *pszFilenameFmt, ...)
 {
     va_list args;
     int rc;
@@ -1057,7 +1031,7 @@ RTDECL(int) RTLogCreateEx(PRTLOGGER *ppLogger, uint32_t fFlags, const char *pszG
     va_start(args, pszFilenameFmt);
     rc = RTLogCreateExV(ppLogger, fFlags, pszGroupSettings, pszEnvVarBase, cGroups, papszGroups,
                         fDestFlags, pfnPhase, cHistory, cbHistoryFileMax, cSecsHistoryTimeSlot,
-                        pszErrorMsg, cchErrorMsg, pszFilenameFmt, args);
+                        pErrInfo, pszFilenameFmt, args);
     va_end(args);
     return rc;
 }
@@ -1101,7 +1075,7 @@ RTDECL(int) RTLogDestroy(PRTLOGGER pLogger)
     /*
      * Flush it.
      */
-    rtlogFlush(pLogger);
+    rtlogFlush(pLogger, false /*fNeedSpace*/);
 
 # ifdef IN_RING3
     /*
@@ -2448,6 +2422,53 @@ RT_EXPORT_SYMBOL(RTLogDestinations);
 
 
 /**
+ * Clear the file delay flag if set, opening the destination and flushing.
+ *
+ * @returns IPRT status code.
+ * @param   pLogger             Logger instance (NULL for default logger).
+ * @param   pszValue            The value to parse.
+ * @param   pErrInfo            Where to return extended error info.  Optional.
+ */
+RTDECL(int) RTLogClearFileDelayFlag(PRTLOGGER pLogger, PRTERRINFO pErrInfo)
+{
+    /*
+     * Resolve defaults.
+     */
+    if (!pLogger)
+    {
+        pLogger = RTLogDefaultInstance();
+        if (!pLogger)
+            return VINF_SUCCESS;
+    }
+
+    /*
+     * Do the work.
+     */
+    int rc = rtlogLock(pLogger);
+    if (RT_SUCCESS(rc))
+    {
+        if (pLogger->fDestFlags & RTLOGDEST_F_DELAY_FILE)
+        {
+            pLogger->fDestFlags &= ~RTLOGDEST_F_DELAY_FILE;
+# ifdef IN_RING3
+            if (   pLogger->fDestFlags & RTLOGDEST_FILE
+                && pLogger->pInt->hFile == NIL_RTFILE)
+            {
+                rc = rtR3LogOpenFileDestination(pLogger, pErrInfo);
+                if (RT_SUCCESS(rc))
+                    rtlogFlush(pLogger, false /*fNeedSpace*/);
+            }
+# endif
+            RT_NOREF(pErrInfo); /** @todo fix create API to use RTErrInfo */
+        }
+        rtlogUnlock(pLogger);
+    }
+    return VINF_SUCCESS;
+}
+RT_EXPORT_SYMBOL(RTLogClearFileDelayFlag);
+
+
+/**
  * Get the current log destinations as a string.
  *
  * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW.
@@ -2604,7 +2625,7 @@ RTDECL(void) RTLogFlush(PRTLOGGER pLogger)
         /*
          * Call worker.
          */
-        rtlogFlush(pLogger);
+        rtlogFlush(pLogger, false /*fNeedSpace*/);
 
 #ifndef IN_RC
         /*
@@ -3149,11 +3170,10 @@ RT_EXPORT_SYMBOL(RTLogDumpPrintfV);
  * Opens/creates the log file.
  *
  * @param   pLogger         The logger instance to update. NULL is not allowed!
- * @param   pszErrorMsg     A buffer which is filled with an error message if
- *                          something fails.  May be NULL.
- * @param   cchErrorMsg     The size of the error message buffer.
+ * @param   pErrInfo        Where to return extended error information.
+ *                          Optional.
  */
-static int rtlogFileOpen(PRTLOGGER pLogger, char *pszErrorMsg, size_t cchErrorMsg)
+static int rtlogFileOpen(PRTLOGGER pLogger, PRTERRINFO pErrInfo)
 {
     uint32_t fOpen = RTFILE_O_WRITE | RTFILE_O_DENY_NONE;
     if (pLogger->fFlags & RTLOGFLAGS_APPEND)
@@ -3186,8 +3206,7 @@ static int rtlogFileOpen(PRTLOGGER pLogger, char *pszErrorMsg, size_t cchErrorMs
     else
     {
         pLogger->pInt->hFile = NIL_RTFILE;
-        if (pszErrorMsg)
-            RTStrPrintf(pszErrorMsg, cchErrorMsg, N_("could not open file '%s' (fOpen=%#x)"), pLogger->pInt->szFilename, fOpen);
+        RTErrInfoSetF(pErrInfo, rc, N_("could not open file '%s' (fOpen=%#x)"), pLogger->pInt->szFilename, fOpen);
     }
     return rc;
 }
@@ -3203,8 +3222,9 @@ static int rtlogFileOpen(PRTLOGGER pLogger, char *pszErrorMsg, size_t cchErrorMs
  * @param   fFirst      Flag whether this is the beginning of logging, i.e.
  *                      called from RTLogCreateExV.  Prevents pfnPhase from
  *                      being called.
+ * @param   pErrInfo    Where to return extended error information. Optional.
  */
-static void rtlogRotate(PRTLOGGER pLogger, uint32_t uTimeSlot, bool fFirst)
+static void rtlogRotate(PRTLOGGER pLogger, uint32_t uTimeSlot, bool fFirst, PRTERRINFO pErrInfo)
 {
     /* Suppress rotating empty log files simply because the time elapsed. */
     if (RT_UNLIKELY(!pLogger->pInt->cbHistoryFileWritten))
@@ -3296,7 +3316,7 @@ static void rtlogRotate(PRTLOGGER pLogger, uint32_t uTimeSlot, bool fFirst)
      */
     pLogger->pInt->cbHistoryFileWritten = 0;
     pLogger->pInt->uHistoryTimeSlotStart = uTimeSlot;
-    rtlogFileOpen(pLogger, NULL, 0);
+    rtlogFileOpen(pLogger, pErrInfo);
 
     /*
      * Use the callback to generate some initial log contents, but only if this
@@ -3316,21 +3336,64 @@ static void rtlogRotate(PRTLOGGER pLogger, uint32_t uTimeSlot, bool fFirst)
     pLogger->fFlags         = fSavedFlags;
 }
 
+
+/**
+ * Worker for RTLogCreateExV and RTLogClearFileDelayFlag.
+ *
+ * This will later be used to reopen the file by RTLogDestinations.
+ *
+ * @returns IPRT status code.
+ * @param   pLogger             The logger.
+ * @param   pErrInfo            Where to return extended error information.
+ *                              Optional.
+ */
+static int rtR3LogOpenFileDestination(PRTLOGGER pLogger, PRTERRINFO pErrInfo)
+{
+    int rc;
+    if (pLogger->fFlags & RTLOGFLAGS_APPEND)
+    {
+        rc = rtlogFileOpen(pLogger, pErrInfo);
+
+        /* Rotate in case of appending to a too big log file,
+           otherwise this simply doesn't do anything. */
+        rtlogRotate(pLogger, 0, true /* fFirst */, pErrInfo);
+    }
+    else
+    {
+        /* Force rotation if it is configured. */
+        pLogger->pInt->cbHistoryFileWritten = UINT64_MAX;
+        rtlogRotate(pLogger, 0, true /* fFirst */, pErrInfo);
+
+        /* If the file is not open then rotation is not set up. */
+        if (pLogger->pInt->hFile == NIL_RTFILE)
+        {
+            pLogger->pInt->cbHistoryFileWritten = 0;
+            rc = rtlogFileOpen(pLogger, pErrInfo);
+        }
+        else
+            rc = VINF_SUCCESS;
+    }
+    return rc;
+}
+
 #endif /* IN_RING3 */
 
 
 /**
  * Writes the buffer to the given log device without checking for buffered
  * data or anything.
+ *
  * Used by the RTLogFlush() function.
  *
  * @param   pLogger     The logger instance to write to. NULL is not allowed!
+ * @param   fNeedSpace  Set if the caller assumes space will be made available.
  */
-static void rtlogFlush(PRTLOGGER pLogger)
+static void rtlogFlush(PRTLOGGER pLogger, bool fNeedSpace)
 {
     uint32_t const cchScratch = pLogger->offScratch;
     if (cchScratch == 0)
         return; /* nothing to flush. */
+    NOREF(fNeedSpace);
 
 #ifndef IN_RC
     /*
@@ -3344,7 +3407,14 @@ static void rtlogFlush(PRTLOGGER pLogger)
         rtLogRingBufWrite(pLogger->pInt, pLogger->achScratch, pLogger->offScratch);
         pLogger->offScratch = 0; /* empty the buffer. */
     }
+    /*
+     * In file delay mode, we ignore flush requests except when we're full
+     * and the caller really needs some scratch space to get work done.
+     */
     else
+# ifdef IN_RING3
+        if (!(pLogger->fDestFlags & RTLOGDEST_F_DELAY_FILE))
+# endif
 #endif
     {
         /* Make sure the string is terminated.  On Windows, RTLogWriteDebugger
@@ -3406,9 +3476,32 @@ static void rtlogFlush(PRTLOGGER pLogger)
          */
         if (   (pLogger->fDestFlags & RTLOGDEST_FILE)
             && pLogger->pInt->cHistory)
-            rtlogRotate(pLogger, RTTimeProgramSecTS() / pLogger->pInt->cSecsHistoryTimeSlot, false /* fFirst */);
+            rtlogRotate(pLogger, RTTimeProgramSecTS() / pLogger->pInt->cSecsHistoryTimeSlot, false /*fFirst*/, NULL /*pErrInfo*/);
 #endif
     }
+#ifdef IN_RING3
+    else
+    {
+        /*
+         * Delay file open but the caller really need some space.  So, give him half a
+         * buffer and insert a message indicating that we've dropped output.
+         */
+        uint32_t offHalf = sizeof(pLogger->achScratch) / 2;
+        if (cchScratch > offHalf)
+        {
+            if (pLogger->fFlags & RTLOGFLAGS_USECRLF)
+                pLogger->achScratch[offHalf++] = '\r';
+            static const char s_szDropMsg[] = "\n[DROP DROP DROP]";
+            memcpy(&pLogger->achScratch[offHalf], RT_STR_TUPLE(s_szDropMsg));
+            offHalf += sizeof(s_szDropMsg) - 1;
+            if (pLogger->fFlags & RTLOGFLAGS_USECRLF)
+                pLogger->achScratch[offHalf++] = '\r';
+            pLogger->achScratch[offHalf++] = '\n';
+
+            pLogger->offScratch = offHalf;
+        }
+    }
+#endif
 }
 
 
@@ -3454,7 +3547,7 @@ static DECLCALLBACK(size_t) rtLogOutput(void *pv, const char *pachChars, size_t
             pachChars += cb;
 
             /* flush */
-            rtlogFlush(pLogger);
+            rtlogFlush(pLogger, true /*fNeedSpace*/);
         }
 
         /* won't ever get here! */
@@ -3551,7 +3644,7 @@ static DECLCALLBACK(size_t) rtLogOutputPrefixed(void *pv, const char *pachChars,
                  */
                 if (cb < 256 + 16)
                 {
-                    rtlogFlush(pLogger);
+                    rtlogFlush(pLogger, true /*fNeedSpace*/);
                     offScratch = pLogger->offScratch;
                     cb = sizeof(pLogger->achScratch) - offScratch - 1;
                 }
@@ -3849,7 +3942,7 @@ static DECLCALLBACK(size_t) rtLogOutputPrefixed(void *pv, const char *pachChars,
             }
             else if (cb <= 0)
             {
-                rtlogFlush(pLogger);
+                rtlogFlush(pLogger, true /*fNeedSpace*/);
                 offScratch = pLogger->offScratch;
                 cb = sizeof(pLogger->achScratch) - offScratch - 1;
             }
@@ -3952,7 +4045,7 @@ static void rtlogLoggerExVLocked(PRTLOGGER pLogger, unsigned fFlags, unsigned iG
         RTLogFormatV(rtLogOutput, pLogger, pszFormat, args);
     if (    !(pLogger->fFlags & RTLOGFLAGS_BUFFERED)
         &&  pLogger->offScratch)
-        rtlogFlush(pLogger);
+        rtlogFlush(pLogger, false /*fNeedSpace*/);
 }
 
 
diff --git a/src/VBox/Runtime/common/math/RTUInt128MulByU64.asm b/src/VBox/Runtime/common/math/RTUInt128MulByU64.asm
index 8dfe1dd..0e7c2fb 100644
--- a/src/VBox/Runtime/common/math/RTUInt128MulByU64.asm
+++ b/src/VBox/Runtime/common/math/RTUInt128MulByU64.asm
@@ -79,4 +79,3 @@ SEH64_END_PROLOGUE
         ret
 ENDPROC RTUInt128MulByU64
 
-
diff --git a/src/VBox/Runtime/common/math/remainderf.asm b/src/VBox/Runtime/common/math/remainderf.asm
index 445c51a..5bf8606 100644
--- a/src/VBox/Runtime/common/math/remainderf.asm
+++ b/src/VBox/Runtime/common/math/remainderf.asm
@@ -64,4 +64,3 @@ BEGINPROC RT_NOCRT(remainderf)
     ret
 ENDPROC   RT_NOCRT(remainderf)
 
-
diff --git a/src/VBox/Runtime/common/math/x86/fenv-x86.c b/src/VBox/Runtime/common/math/x86/fenv-x86.c
index 58c9184..c48ae29 100644
--- a/src/VBox/Runtime/common/math/x86/fenv-x86.c
+++ b/src/VBox/Runtime/common/math/x86/fenv-x86.c
@@ -29,7 +29,7 @@
 /*#include "namespace.h"
 #include <sys/cdefs.h>
 #include <sys/types.h>
-#include <machine/npx.h> 
+#include <machine/npx.h>
 #include "fenv.h"*/
 #include <iprt/types.h>
 #include <iprt/nocrt/fenv.h>
@@ -44,7 +44,7 @@ const fenv_t __fe_dfl_env = {
 	{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff }
 };
-#endif 
+#endif
 
 enum __sse_support __has_sse =
 #ifdef __SSE__
diff --git a/src/VBox/Runtime/common/misc/getopt.cpp b/src/VBox/Runtime/common/misc/getopt.cpp
index 6eace30..034c6de 100644
--- a/src/VBox/Runtime/common/misc/getopt.cpp
+++ b/src/VBox/Runtime/common/misc/getopt.cpp
@@ -827,3 +827,30 @@ RTDECL(RTEXITCODE) RTGetOptPrintError(int ch, PCRTGETOPTUNION pValueUnion)
 }
 RT_EXPORT_SYMBOL(RTGetOptPrintError);
 
+
+RTDECL(ssize_t) RTGetOptFormatError(char *pszBuf, size_t cbBuf, int ch, PCRTGETOPTUNION pValueUnion)
+{
+    ssize_t cchRet;
+    if (ch == VINF_GETOPT_NOT_OPTION)
+        cchRet = RTStrPrintf2(pszBuf, cbBuf, "Invalid parameter: %s", pValueUnion->psz);
+    else if (ch > 0)
+    {
+        if (RT_C_IS_GRAPH(ch))
+            cchRet = RTStrPrintf2(pszBuf, cbBuf, "Unhandled option: -%c", ch);
+        else
+            cchRet = RTStrPrintf2(pszBuf, cbBuf, "Unhandled option: %i (%#x)", ch, ch);
+    }
+    else if (ch == VERR_GETOPT_UNKNOWN_OPTION)
+        cchRet = RTStrPrintf2(pszBuf, cbBuf, "Unknown option: '%s'", pValueUnion->psz);
+    else if (pValueUnion->pDef && ch == VERR_GETOPT_INVALID_ARGUMENT_FORMAT)
+        /** @todo r=klaus not really ideal, as the value isn't available */
+        cchRet = RTStrPrintf2(pszBuf, cbBuf, "The value given '%s' has an invalid format.", pValueUnion->pDef->pszLong);
+    else if (pValueUnion->pDef)
+        cchRet = RTStrPrintf2(pszBuf, cbBuf, "%s: %Rrs\n", pValueUnion->pDef->pszLong, ch);
+    else
+        cchRet = RTStrPrintf2(pszBuf, cbBuf, "%Rrs\n", ch);
+
+    return cchRet;
+}
+RT_EXPORT_SYMBOL(RTGetOptFormatError);
+
diff --git a/src/VBox/Runtime/common/misc/json.cpp b/src/VBox/Runtime/common/misc/json.cpp
index b20bd1a..8c8821c 100644
--- a/src/VBox/Runtime/common/misc/json.cpp
+++ b/src/VBox/Runtime/common/misc/json.cpp
@@ -945,6 +945,10 @@ static int rtJsonParseObject(PRTJSONTOKENIZER pTokenizer, PRTJSONVALINT pJsonVal
                     char **papszNamesNew =  (char **)RTMemRealloc(papValues, cMembersMax * sizeof(char *));
                     if (RT_UNLIKELY(!papValuesNew || !papszNamesNew))
                     {
+                        if (papValuesNew)
+                            RTMemFree(papValuesNew);
+                        if (papszNamesNew)
+                            RTMemFree(papszNamesNew);
                         rc = VERR_NO_MEMORY;
                         break;
                     }
diff --git a/src/VBox/Runtime/common/misc/thread.cpp b/src/VBox/Runtime/common/misc/thread.cpp
index 01ac3d6..f2fde4d 100644
--- a/src/VBox/Runtime/common/misc/thread.cpp
+++ b/src/VBox/Runtime/common/misc/thread.cpp
@@ -281,6 +281,8 @@ static int rtThreadAdopt(RTTHREADTYPE enmType, unsigned fFlags, uint32_t fIntFla
             rtThreadSetState(pThread, RTTHREADSTATE_RUNNING);
             rtThreadRelease(pThread);
         }
+        else
+            rtThreadDestroy(pThread);
     }
     return rc;
 }
diff --git a/src/VBox/Runtime/common/path/RTPathGlob.cpp b/src/VBox/Runtime/common/path/RTPathGlob.cpp
index 9102b0f..3faa72d 100644
--- a/src/VBox/Runtime/common/path/RTPathGlob.cpp
+++ b/src/VBox/Runtime/common/path/RTPathGlob.cpp
@@ -1446,7 +1446,7 @@ static int rtPathGlobParse(PRTPATHGLOB pGlob, const char *pszPattern, PRTPATHPAR
  * @param   hDir        The directory handle.
  * @param   cbNeeded    The required entry size.
  */
-DECL_NO_INLINE(static, int) rtPathGlobSkipDirEntry(PRTDIR hDir, size_t cbNeeded)
+DECL_NO_INLINE(static, int) rtPathGlobSkipDirEntry(RTDIR hDir, size_t cbNeeded)
 {
     int rc = VERR_BUFFER_OVERFLOW;
     cbNeeded = RT_ALIGN_Z(cbNeeded, 16);
@@ -1874,7 +1874,7 @@ DECL_NO_INLINE(static, int) rtPathGlobExecRecursiveGeneric(PRTPATHGLOB pGlob, si
     /*
      * Enumerate entire directory and match each entry.
      */
-    PRTDIR hDir;
+    RTDIR hDir;
     int rc = RTDirOpen(&hDir, offPath ? pGlob->szPath : ".");
     if (RT_SUCCESS(rc))
     {
diff --git a/src/VBox/Runtime/common/path/RTPathRmCmd.cpp b/src/VBox/Runtime/common/path/RTPathRmCmd.cpp
index 50c64f4..74b4dcc 100644
--- a/src/VBox/Runtime/common/path/RTPathRmCmd.cpp
+++ b/src/VBox/Runtime/common/path/RTPathRmCmd.cpp
@@ -269,7 +269,7 @@ static int rtPathRmRecursive(PRTPATHRMCMDOPTS pOpts, char *pszPath, size_t cchPa
     /*
      * Traverse the directory.
      */
-    PRTDIR hDir;
+    RTDIR hDir;
     int rc = RTDirOpen(&hDir, pszPath);
     if (RT_FAILURE(rc))
         return rtPathRmError(pOpts, pszPath, rc, "Error opening directory '%s': %Rrc", pszPath, rc);
diff --git a/src/VBox/Runtime/common/time/timesupA.mac b/src/VBox/Runtime/common/time/timesupA.mac
index c65b0d8..ae7d10c 100644
--- a/src/VBox/Runtime/common/time/timesupA.mac
+++ b/src/VBox/Runtime/common/time/timesupA.mac
@@ -883,5 +883,3 @@ ALIGNCODE(16)
 %endif  ; AMD64
 ENDPROC rtTimeNanoTSInternalAsm
 
-
-
diff --git a/src/VBox/Runtime/common/vfs/vfsbase.cpp b/src/VBox/Runtime/common/vfs/vfsbase.cpp
index 984a19f..660b3a1 100644
--- a/src/VBox/Runtime/common/vfs/vfsbase.cpp
+++ b/src/VBox/Runtime/common/vfs/vfsbase.cpp
@@ -1190,50 +1190,9 @@ RTDECL(int)         RTVfsObjQueryInfo(RTVFSOBJ hVfsObj, PRTFSOBJINFO pObjInfo, R
  */
 
 
-
-/**
- * Removes dots from the path.
- *
- * @returns The new @a pszDst value.
- * @param   pPath               The path parsing buffer.
- * @param   pszDst              The current szPath position.  This will be
- *                              updated and returned.
- * @param   fTheEnd             Indicates whether we're at the end of the path
- *                              or not.
- * @param   piRestartComp       The component to restart parsing at.
- */
-static char *rtVfsParsePathHandleDots(PRTVFSPARSEDPATH pPath, char *pszDst, bool fTheEnd, uint16_t *piRestartComp)
-{
-    if (pszDst[-1] != '.')
-        return pszDst;
-
-    if (pszDst[-2] == '/')
-    {
-        pPath->cComponents--;
-        pszDst = &pPath->szPath[pPath->aoffComponents[pPath->cComponents]];
-    }
-    else if (pszDst[-2] == '.' && pszDst[-3] == '/')
-    {
-        pPath->cComponents -= pPath->cComponents > 1 ? 2 : 1;
-        pszDst = &pPath->szPath[pPath->aoffComponents[pPath->cComponents]];
-        if (piRestartComp && *piRestartComp + 1 >= pPath->cComponents)
-            *piRestartComp = pPath->cComponents > 0 ? pPath->cComponents - 1 : 0;
-    }
-    else
-        return pszDst;
-
-    /*
-     * Drop the trailing slash if we're at the end of the source path.
-     */
-    if (fTheEnd && pPath->cComponents == 0)
-        pszDst--;
-    return pszDst;
-}
-
-
 RTDECL(int) RTVfsParsePathAppend(PRTVFSPARSEDPATH pPath, const char *pszPath, uint16_t *piRestartComp)
 {
-    AssertReturn(*pszPath != '/', VERR_INTERNAL_ERROR_4);
+    AssertReturn(*pszPath != '/' && *pszPath != '\\', VERR_INTERNAL_ERROR_4);
 
     /* In case *piRestartComp was set higher than the number of components
        before making the call to this function. */
@@ -1243,55 +1202,106 @@ RTDECL(int) RTVfsParsePathAppend(PRTVFSPARSEDPATH pPath, const char *pszPath, ui
     /*
      * Append a slash to the destination path if necessary.
      */
-    char *pszDst = &pPath->szPath[pPath->cch];
+    char * const pszDst         = pPath->szPath;
+    size_t       offDst         = pPath->cch;
     if (pPath->cComponents > 0)
     {
-        *pszDst++ = '/';
-        if (pszDst - &pPath->szPath[0] >= RTVFSPARSEDPATH_MAX)
+        pszDst[offDst++] = '/';
+        if (offDst >= RTVFSPARSEDPATH_MAX)
             return VERR_FILENAME_TOO_LONG;
     }
-    Assert(pszDst[-1] == '/');
+    if (pPath->fAbsolute)
+        Assert(pszDst[offDst - 1] == '/' && pszDst[0] == '/');
+    else
+        Assert(offDst == 0 || (pszDst[0] != '/' && pszDst[offDst - 1] == '/'));
 
     /*
      * Parse and append the relative path.
      */
     const char *pszSrc = pszPath;
     pPath->fDirSlash   = false;
-    while (pszSrc[0])
+    for (;;)
     {
-        /* Skip unncessary slashes. */
-        while (pszSrc[0] == '/')
-            pszSrc++;
-
         /* Copy until we encounter the next slash. */
-        pPath->aoffComponents[pPath->cComponents++] = pszDst - &pPath->szPath[0];
-        while (pszSrc[0])
+        pPath->aoffComponents[pPath->cComponents++] = (uint16_t)offDst;
+        for (;;)
         {
-            if (pszSrc[0] == '/')
+            char ch = *pszSrc++;
+            if (   ch != '/'
+                && ch != '\\'
+                && ch != '\0')
             {
-                pszSrc++;
-                if (pszSrc[0])
-                    *pszDst++ = '/';
+                pszDst[offDst++] = ch;
+                if (offDst < RTVFSPARSEDPATH_MAX)
+                { /* likely */ }
                 else
-                    pPath->fDirSlash = true;
-                pszDst = rtVfsParsePathHandleDots(pPath, pszDst, pszSrc[0] == '\0', piRestartComp);
-                break;
+                    return VERR_FILENAME_TOO_LONG;
             }
+            else
+            {
+                /* Deal with dot components before we processes the slash/end. */
+                if (pszDst[offDst - 1] == '.')
+                {
+                    if (   offDst == 1
+                        || pszDst[offDst - 2] == '/')
+                    {
+                        pPath->cComponents--;
+                        offDst = pPath->aoffComponents[pPath->cComponents];
+                    }
+                    else if (   offDst > 3
+                             && pszDst[offDst - 2] == '.'
+                             && pszDst[offDst - 3] == '/')
+                    {
+                        if (   pPath->fAbsolute
+                            || offDst < 5
+                            || pszDst[offDst - 4] != '.'
+                            || pszDst[offDst - 5] != '.'
+                            || (offDst >= 6 && pszDst[offDst - 6] != '/') )
+                        {
+                            pPath->cComponents -= pPath->cComponents > 1 ? 2 : 1;
+                            offDst = pPath->aoffComponents[pPath->cComponents];
+                            if (piRestartComp && *piRestartComp + 1 >= pPath->cComponents)
+                                *piRestartComp = pPath->cComponents > 0 ? pPath->cComponents - 1 : 0;
+                        }
+                    }
+                }
 
-            *pszDst++ = *pszSrc++;
-            if (pszDst - &pPath->szPath[0] >= RTVFSPARSEDPATH_MAX)
-                return VERR_FILENAME_TOO_LONG;
-        }
-    }
-    pszDst = rtVfsParsePathHandleDots(pPath, pszDst, true /*fTheEnd*/, piRestartComp);
+                if (ch != '\0')
+                {
+                    /* Skip unnecessary slashes and check for end of path. */
+                    while ((ch = *pszSrc) == '/' || ch == '\\')
+                        pszSrc++;
 
-    /* Terminate the string and enter its length. */
-    pszDst[0] = '\0';
-    pszDst[1] = '\0';                   /* for aoffComponents */
-    pPath->cch = (uint16_t)(pszDst - &pPath->szPath[0]);
-    pPath->aoffComponents[pPath->cComponents] = pPath->cch + 1;
+                    if (ch == '\0')
+                        pPath->fDirSlash = true;
+                }
 
-    return VINF_SUCCESS;
+                if (ch == '\0')
+                {
+                    /* Drop trailing slash unless it's the root slash. */
+                    if (   offDst > 0
+                        && pszDst[offDst - 1] == '/'
+                        && (   !pPath->fAbsolute
+                            || offDst > 1))
+                        offDst--;
+
+                    /* Terminate the string and enter its length. */
+                    pszDst[offDst]     = '\0';
+                    pszDst[offDst + 1] = '\0'; /* for aoffComponents[pPath->cComponents] */
+                    pPath->cch = (uint16_t)offDst;
+                    pPath->aoffComponents[pPath->cComponents] = (uint16_t)(offDst + 1);
+                    return VINF_SUCCESS;
+                }
+
+                /* Append component separator before continuing with the next component. */
+                if (offDst > 0 && pszDst[offDst - 1] != '/')
+                    pszDst[offDst++] = '/';
+                if (offDst >= RTVFSPARSEDPATH_MAX)
+                    return VERR_FILENAME_TOO_LONG;
+                break;
+            }
+        }
+    }
 }
 
 
@@ -1300,12 +1310,29 @@ RTDECL(int) RTVfsParsePath(PRTVFSPARSEDPATH pPath, const char *pszPath, const ch
 {
     if (*pszPath != '/')
     {
-        /*
-         * Relative, recurse and parse pszCwd first.
-         */
-        int rc = RTVfsParsePath(pPath, pszCwd, NULL /*crash if pszCwd is not absolute*/);
-        if (RT_FAILURE(rc))
-            return rc;
+        if (pszCwd)
+        {
+            /*
+             * Relative with a CWD.
+             */
+            int rc = RTVfsParsePath(pPath, pszCwd, NULL /*crash if pszCwd is not absolute*/);
+            if (RT_FAILURE(rc))
+                return rc;
+        }
+        else
+        {
+            /*
+             * Relative.
+             */
+            pPath->cch               = 0;
+            pPath->cComponents       = 0;
+            pPath->fDirSlash         = false;
+            pPath->fAbsolute         = false;
+            pPath->aoffComponents[0] = 0;
+            pPath->aoffComponents[1] = 1;
+            pPath->szPath[0]         = '\0';
+            pPath->szPath[1]         = '\0';
+        }
     }
     else
     {
@@ -1316,6 +1343,7 @@ RTDECL(int) RTVfsParsePath(PRTVFSPARSEDPATH pPath, const char *pszPath, const ch
         pPath->cch               = 1;
         pPath->cComponents       = 0;
         pPath->fDirSlash         = false;
+        pPath->fAbsolute         = true;
         pPath->aoffComponents[0] = 1;
         pPath->aoffComponents[1] = 2;
         pPath->szPath[0]         = '/';
@@ -1494,6 +1522,7 @@ static int rtVfsDirTraverseToParent(RTVFSDIRINTERNAL *pThis, PRTVFSPARSEDPATH pP
             RTVfsLockReleaseRead(pCurDir->Base.hLock);
             *pszEntryEnd = '\0';
             if (   rc == VERR_PATH_NOT_FOUND
+                || rc == VERR_FILE_NOT_FOUND
                 || rc == VERR_NOT_A_DIRECTORY
                 || rc == VERR_NOT_SYMLINK)
                 rc = VINF_SUCCESS;
@@ -2275,7 +2304,7 @@ RTDECL(int) RTVfsDirOpenDir(RTVFSDIR hVfsDir, const char *pszPath, uint32_t fFla
      * Parse the path, it's always relative to the given directory.
      */
     PRTVFSPARSEDPATH pPath;
-    int rc = RTVfsParsePathA(pszPath, "/", &pPath);
+    int rc = RTVfsParsePathA(pszPath, NULL, &pPath);
     if (RT_SUCCESS(rc))
     {
         if (pPath->cComponents > 0)
@@ -2321,6 +2350,65 @@ RTDECL(int) RTVfsDirOpenDir(RTVFSDIR hVfsDir, const char *pszPath, uint32_t fFla
 }
 
 
+RTDECL(int) RTVfsDirCreateDir(RTVFSDIR hVfsDir, const char *pszRelPath, RTFMODE fMode, uint32_t fFlags, PRTVFSDIR phVfsDir)
+{
+    /*
+     * Validate input.
+     */
+    RTVFSDIRINTERNAL *pThis = hVfsDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->uMagic == RTVFSDIR_MAGIC, VERR_INVALID_HANDLE);
+    AssertPtrReturn(pszRelPath, VERR_INVALID_POINTER);
+    AssertPtrNullReturn(phVfsDir, VERR_INVALID_POINTER);
+    AssertReturn(!(fFlags & ~RTDIRCREATE_FLAGS_VALID_MASK), VERR_INVALID_FLAGS);
+    fMode = rtFsModeNormalize(fMode, pszRelPath, 0);
+    AssertReturn(rtFsModeIsValidPermissions(fMode), VERR_INVALID_FMODE);
+    if (!(fFlags & RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_DONT_SET))
+        fMode |= RTFS_DOS_NT_NOT_CONTENT_INDEXED;
+
+    /*
+     * Parse the path, it's always relative to the given directory.
+     */
+    PRTVFSPARSEDPATH pPath;
+    int rc = RTVfsParsePathA(pszRelPath, NULL, &pPath);
+    if (RT_SUCCESS(rc))
+    {
+        if (pPath->cComponents > 0)
+        {
+            /*
+             * Tranverse the path, resolving the parent node, not checking for symbolic
+             * links in the final element, and ask the directory to create the subdir.
+             */
+            RTVFSDIRINTERNAL *pVfsParentDir;
+            rc = rtVfsDirTraverseToParent(pThis, pPath,
+                                            fFlags & RTDIRCREATE_FLAGS_NO_SYMLINKS
+                                          ? RTPATH_F_NO_SYMLINKS | RTPATH_F_ON_LINK : RTPATH_F_FOLLOW_LINK,
+                                          &pVfsParentDir);
+            if (RT_SUCCESS(rc))
+            {
+                const char *pszEntryName = &pPath->szPath[pPath->aoffComponents[pPath->cComponents - 1]];
+
+                RTVfsLockAcquireWrite(pVfsParentDir->Base.hLock);
+                rc = pVfsParentDir->pOps->pfnCreateDir(pVfsParentDir->Base.pvThis, pszEntryName, fMode, phVfsDir);
+                RTVfsLockReleaseWrite(pVfsParentDir->Base.hLock);
+
+                RTVfsDirRelease(pVfsParentDir);
+
+                if (RT_SUCCESS(rc) && phVfsDir)
+                {
+                    AssertPtr(*phVfsDir);
+                    Assert((*phVfsDir)->uMagic == RTVFSDIR_MAGIC);
+                }
+            }
+        }
+        else
+            rc = VERR_PATH_ZERO_LENGTH;
+        RTVfsParsePathFree(pPath);
+    }
+    return rc;
+}
+
+
 RTDECL(int) RTVfsDirOpenFile(RTVFSDIR hVfsDir, const char *pszPath, uint64_t fOpen, PRTVFSFILE phVfsFile)
 {
     /*
@@ -2341,7 +2429,7 @@ RTDECL(int) RTVfsDirOpenFile(RTVFSDIR hVfsDir, const char *pszPath, uint64_t fOp
      * caller context here.
      */
     PRTVFSPARSEDPATH pPath;
-    rc = RTVfsParsePathA(pszPath, "/", &pPath);
+    rc = RTVfsParsePathA(pszPath, NULL, &pPath);
     if (RT_SUCCESS(rc))
     {
         if (   !pPath->fDirSlash
@@ -2410,11 +2498,10 @@ RTDECL(int) RTVfsDirQueryPathInfo(RTVFSDIR hVfsDir, const char *pszPath, PRTFSOB
     AssertMsgReturn(RTPATH_F_IS_VALID(fFlags, 0), ("%#x\n", fFlags), VERR_INVALID_PARAMETER);
 
     /*
-     * Parse the path, assume current directory is root since we've got no
-     * caller context here.  Then traverse to the parent directory.
+     * Parse the relative path.  Then traverse to the parent directory.
      */
     PRTVFSPARSEDPATH pPath;
-    int rc = RTVfsParsePathA(pszPath, "/", &pPath);
+    int rc = RTVfsParsePathA(pszPath, NULL, &pPath);
     if (RT_SUCCESS(rc))
     {
         if (pPath->cComponents > 0)
@@ -2452,6 +2539,52 @@ RTDECL(int) RTVfsDirQueryPathInfo(RTVFSDIR hVfsDir, const char *pszPath, PRTFSOB
 }
 
 
+RTDECL(int) RTVfsDirRemoveDir(RTVFSDIR hVfsDir, const char *pszRelPath, uint32_t fFlags)
+{
+    /*
+     * Validate input.
+     */
+    RTVFSDIRINTERNAL *pThis = hVfsDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->uMagic == RTVFSDIR_MAGIC, VERR_INVALID_HANDLE);
+    AssertPtrReturn(pszRelPath, VERR_INVALID_POINTER);
+    AssertReturn(!fFlags, VERR_INVALID_FLAGS);
+
+    /*
+     * Parse the path, it's always relative to the given directory.
+     */
+    PRTVFSPARSEDPATH pPath;
+    int rc = RTVfsParsePathA(pszRelPath, NULL, &pPath);
+    if (RT_SUCCESS(rc))
+    {
+        if (pPath->cComponents > 0)
+        {
+            /*
+             * Tranverse the path, resolving the parent node, not checking for symbolic
+             * links in the final element, and ask the directory to remove the subdir.
+             */
+            RTVFSDIRINTERNAL *pVfsParentDir;
+            rc = rtVfsDirTraverseToParent(pThis, pPath, RTPATH_F_ON_LINK, &pVfsParentDir);
+            if (RT_SUCCESS(rc))
+            {
+                const char *pszEntryName = &pPath->szPath[pPath->aoffComponents[pPath->cComponents - 1]];
+
+                RTVfsLockAcquireWrite(pVfsParentDir->Base.hLock);
+                rc = pVfsParentDir->pOps->pfnUnlinkEntry(pVfsParentDir->Base.pvThis, pszEntryName, RTFS_TYPE_DIRECTORY);
+                RTVfsLockReleaseWrite(pVfsParentDir->Base.hLock);
+
+                RTVfsDirRelease(pVfsParentDir);
+            }
+        }
+        else
+            rc = VERR_PATH_ZERO_LENGTH;
+        RTVfsParsePathFree(pPath);
+    }
+    return rc;
+}
+
+
+
 RTDECL(int) RTVfsDirReadEx(RTVFSDIR hVfsDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAddAttr)
 {
     /*
diff --git a/src/VBox/Runtime/common/vfs/vfschain.cpp b/src/VBox/Runtime/common/vfs/vfschain.cpp
index 0695c9a..3cf305c 100644
--- a/src/VBox/Runtime/common/vfs/vfschain.cpp
+++ b/src/VBox/Runtime/common/vfs/vfschain.cpp
@@ -33,6 +33,7 @@
 
 #include <iprt/asm.h>
 #include <iprt/critsect.h>
+#include <iprt/ctype.h>
 #include <iprt/err.h>
 #include <iprt/file.h>
 #include <iprt/mem.h>
@@ -144,7 +145,7 @@ static DECLCALLBACK(int) rtVfsChainOpen_Validate(PCRTVFSCHAINELEMENTREG pProvide
         if (pElement->enmTypeIn == RTVFSOBJTYPE_INVALID)
         {
             /*
-             * First element: Ttransform into 'stdfile' or 'stddir' if registered.
+             * First element: Transform into 'stdfile' or 'stddir' if registered.
              */
             const char            *pszNewProvider = pElement->enmType == RTVFSOBJTYPE_DIR ? "stddir" : "stdfile";
             PCRTVFSCHAINELEMENTREG pNewProvider   = rtVfsChainFindProviderLocked(pszNewProvider);
@@ -176,13 +177,16 @@ static DECLCALLBACK(int) rtVfsChainOpen_Validate(PCRTVFSCHAINELEMENTREG pProvide
             *poffError = pElement->cArgs > 1 ? pElement->paArgs[1].offSpec : pElement->offSpec;
             return VERR_VFS_CHAIN_INVALID_ARGUMENT;
         }
+        return rc;
     }
 
+
     /*
      * Directory checks.  Path argument only, optional. If not given the root directory of a VFS or the
      */
     if (pElement->cArgs > 1)
         return VERR_VFS_CHAIN_AT_MOST_ONE_ARG;
+    pElement->uProvider = 0;
     return VINF_SUCCESS;
 }
 
@@ -479,7 +483,7 @@ DECLINLINE(char *) rtVfsChainSpecDupStrN(const char *psz, size_t cch, int *prc)
                 char ch = *psz++;
                 if (ch == '\\' && cch > 0)
                 {
-                    char ch2 = psz[2];
+                    char ch2 = *psz;
                     if (rtVfsChainSpecIsEscapableChar(ch2))
                     {
                         psz++;
@@ -1186,8 +1190,150 @@ RTDECL(int) RTVfsChainOpenDir(const char *pszSpec, uint32_t fOpen,
     /*
      * Path to regular file system.
      */
-    /** @todo implement system specific standard VFS directory class. */
-    rc = VERR_NOT_IMPLEMENTED;
+    rc = RTVfsDirOpenNormal(pszSpec, fOpen, phVfsDir);
+
+    RTVfsChainSpecFree(pSpec);
+    return rc;
+
+}
+
+
+RTDECL(int) RTVfsChainOpenParentDir(const char *pszSpec, uint32_t fOpen, PRTVFSDIR phVfsDir, const char **ppszChild,
+                                    uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    uint32_t offErrorIgn;
+    if (!poffError)
+        poffError = &offErrorIgn;
+    *poffError = 0;
+    AssertPtrReturn(pszSpec, VERR_INVALID_POINTER);
+    AssertReturn(*pszSpec != '\0', VERR_INVALID_PARAMETER);
+    AssertPtrReturn(phVfsDir, VERR_INVALID_POINTER);
+    AssertPtrReturn(ppszChild, VERR_INVALID_POINTER);
+    *ppszChild = NULL;
+    AssertPtrNullReturn(pErrInfo, VERR_INVALID_POINTER);
+
+    /*
+     * Process the spec from the end, trying to find the child part of it.
+     * We cannot use RTPathFilename here because we must ignore trailing slashes.
+     */
+    const char * const pszEnd   = RTStrEnd(pszSpec, RTSTR_MAX);
+    const char        *pszChild = pszEnd;
+    while (   pszChild != pszSpec
+           && RTPATH_IS_SLASH(pszChild[-1]))
+        pszChild--;
+    while (   pszChild != pszSpec
+           && !RTPATH_IS_SLASH(pszChild[-1])
+           && !RTPATH_IS_VOLSEP(pszChild[-1]))
+        pszChild--;
+    size_t const cchChild = pszEnd - pszChild;
+    *ppszChild = pszChild;
+
+    /*
+     * Try for a VFS chain first, falling back on regular file system stuff if it's just a path.
+     */
+    int rc;
+    PRTVFSCHAINSPEC pSpec = NULL;
+    if (strncmp(pszSpec, RTVFSCHAIN_SPEC_PREFIX, sizeof(RTVFSCHAIN_SPEC_PREFIX) - 1) == 0)
+    {
+        rc = RTVfsChainSpecParse(pszSpec,  0 /*fFlags*/, RTVFSOBJTYPE_DIR, &pSpec, poffError);
+        if (RT_FAILURE(rc))
+            return rc;
+
+        Assert(pSpec->cElements > 0);
+        if (   pSpec->cElements > 1
+            || pSpec->paElements[0].enmType != RTVFSOBJTYPE_END)
+        {
+            /*
+             * Check that it ends with a path-only element and that this in turn ends with
+             * what pszChild points to.  (We cannot easiy figure out the parent part of
+             * an element that isn't path-only, so we don't bother trying try.)
+             */
+            PRTVFSCHAINELEMSPEC pLast = &pSpec->paElements[pSpec->cElements - 1];
+            if (pLast->pszProvider == NULL)
+            {
+                size_t cchFinal = strlen(pLast->paArgs[0].psz);
+                if (   cchFinal >= cchChild
+                    && memcmp(&pLast->paArgs[0].psz[cchFinal - cchChild], pszChild, cchChild + 1) == 0)
+                {
+                    /*
+                     * Drop the child part so we have a path to the parent, then setup the chain.
+                     */
+                    if (cchFinal > cchChild)
+                        pLast->paArgs[0].psz[cchFinal - cchChild] = '\0';
+                    else
+                        pSpec->cElements--;
+
+                    const char *pszFinal = NULL;
+                    RTVFSOBJ    hVfsObj  = NIL_RTVFSOBJ;
+                    pSpec->fOpenFile = fOpen;
+                    rc = RTVfsChainSpecCheckAndSetup(pSpec, NULL /*pReuseSpec*/, &hVfsObj, &pszFinal, poffError, pErrInfo);
+                    if (RT_SUCCESS(rc))
+                    {
+                        if (!pszFinal)
+                        {
+                            Assert(cchFinal == cchChild);
+
+                            /* Try convert it to a file object and we're done. */
+                            *phVfsDir = RTVfsObjToDir(hVfsObj);
+                            if (*phVfsDir)
+                                rc = VINF_SUCCESS;
+                            else
+                                rc = VERR_VFS_CHAIN_CAST_FAILED;
+                        }
+                        else
+                        {
+                            /*
+                             * Do a file open with the final path on the returned object.
+                             */
+                            RTVFS           hVfs    = RTVfsObjToVfs(hVfsObj);
+                            RTVFSDIR        hVfsDir = RTVfsObjToDir(hVfsObj);
+                            RTVFSFSSTREAM   hVfsFss = RTVfsObjToFsStream(hVfsObj);
+                            if (hVfs != NIL_RTVFS)
+                                rc = RTVfsDirOpen(hVfs, pszFinal, fOpen, phVfsDir);
+                            else if (hVfsDir != NIL_RTVFSDIR)
+                                rc = RTVfsDirOpenDir(hVfsDir, pszFinal, fOpen, phVfsDir);
+                            else if (hVfsFss != NIL_RTVFSFSSTREAM)
+                                rc = VERR_NOT_IMPLEMENTED;
+                            else
+                                rc = VERR_VFS_CHAIN_TYPE_MISMATCH_PATH_ONLY;
+                            RTVfsRelease(hVfs);
+                            RTVfsDirRelease(hVfsDir);
+                            RTVfsFsStrmRelease(hVfsFss);
+                        }
+                        RTVfsObjRelease(hVfsObj);
+                    }
+                }
+                else
+                    rc = VERR_VFS_CHAIN_TOO_SHORT_FOR_PARENT;
+            }
+            else
+                rc = VERR_VFS_CHAIN_NOT_PATH_ONLY;
+
+            RTVfsChainSpecFree(pSpec);
+            return rc;
+        }
+
+        /* Only a path element. */
+        pszSpec = pSpec->paElements[0].paArgs[0].psz;
+    }
+
+    /*
+     * Path to regular file system.
+     */
+    if (RTPathHasPath(pszSpec))
+    {
+        char *pszCopy = RTStrDup(pszSpec);
+        if (pszCopy)
+        {
+            RTPathStripFilename(pszCopy);
+            rc = RTVfsDirOpenNormal(pszCopy, fOpen, phVfsDir);
+            RTStrFree(pszCopy);
+        }
+        else
+            rc = VERR_NO_STR_MEMORY;
+    }
+    else
+        rc = RTVfsDirOpenNormal(".", fOpen, phVfsDir);
 
     RTVfsChainSpecFree(pSpec);
     return rc;
@@ -1222,7 +1368,6 @@ RTDECL(int) RTVfsChainOpenFile(const char *pszSpec, uint64_t fOpen,
         if (   pSpec->cElements > 1
             || pSpec->paElements[0].enmType != RTVFSOBJTYPE_END)
         {
-
             const char *pszFinal = NULL;
             RTVFSOBJ    hVfsObj  = NIL_RTVFSOBJ;
             pSpec->fOpenFile = fOpen;
@@ -1316,7 +1461,6 @@ RTDECL(int) RTVfsChainOpenIoStream(const char *pszSpec, uint64_t fOpen,
         if (   pSpec->cElements > 1
             || pSpec->paElements[0].enmType != RTVFSOBJTYPE_END)
         {
-
             const char *pszFinal = NULL;
             RTVFSOBJ    hVfsObj  = NIL_RTVFSOBJ;
             pSpec->fOpenFile = fOpen;
@@ -1428,7 +1572,6 @@ RTDECL(int) RTVfsChainQueryInfo(const char *pszSpec, PRTFSOBJINFO pObjInfo, RTFS
         if (   pSpec->cElements > 1
             || pSpec->paElements[0].enmType != RTVFSOBJTYPE_END)
         {
-
             const char *pszFinal = NULL;
             RTVFSOBJ    hVfsObj  = NIL_RTVFSOBJ;
             pSpec->fOpenFile = RTFILE_O_READ | RTFILE_O_OPEN;
@@ -1524,3 +1667,70 @@ RTDECL(int) RTVfsChainQueryFinalPath(const char *pszSpec, char **ppszFinalPath,
     return rc;
 }
 
+
+RTDECL(int) RTVfsChainSplitOffFinalPath(char *pszSpec, char **ppszSpec, char **ppszFinalPath, uint32_t *poffError)
+{
+    /* Make sure we've got an error info variable. */
+    uint32_t offErrorIgn;
+    if (!poffError)
+        poffError = &offErrorIgn;
+    *poffError = 0;
+
+    /*
+     * If not chain specifier, just duplicate the input and return.
+     */
+    if (strncmp(pszSpec, RTVFSCHAIN_SPEC_PREFIX, sizeof(RTVFSCHAIN_SPEC_PREFIX) - 1) != 0)
+    {
+        *ppszSpec      = NULL;
+        *ppszFinalPath = pszSpec;
+        return VINF_SUCCESS;
+    }
+
+    /*
+     * Parse it and check out the last element.
+     */
+    PRTVFSCHAINSPEC pSpec = NULL;
+    int rc = RTVfsChainSpecParse(pszSpec,  0 /*fFlags*/, RTVFSOBJTYPE_BASE, &pSpec, poffError);
+    if (RT_SUCCESS(rc))
+    {
+        Assert(pSpec->cElements > 0);
+        PCRTVFSCHAINELEMSPEC pLast = &pSpec->paElements[pSpec->cElements - 1];
+        if (pLast->pszProvider == NULL)
+        {
+            char *psz = &pszSpec[pLast->offSpec];
+            *ppszFinalPath = psz;
+            if (pSpec->cElements > 1)
+            {
+                *ppszSpec = pszSpec;
+
+                /* Remove the separator and any whitespace around it. */
+                while (   psz != pszSpec
+                       && RT_C_IS_SPACE(psz[-1]))
+                    psz--;
+                if (    psz != pszSpec
+                    && (   psz[-1] == ':'
+                        || psz[-1] == '|'))
+                    psz--;
+                while (   psz != pszSpec
+                       && RT_C_IS_SPACE(psz[-1]))
+                    psz--;
+                *psz = '\0';
+            }
+            else
+                *ppszSpec = NULL;
+        }
+        else
+        {
+            *ppszFinalPath = NULL;
+            *ppszSpec      = pszSpec;
+        }
+        RTVfsChainSpecFree(pSpec);
+    }
+    else
+    {
+        *ppszSpec      = NULL;
+        *ppszFinalPath = NULL;
+    }
+    return rc;
+}
+
diff --git a/src/VBox/Runtime/common/vfs/vfsiosmisc.cpp b/src/VBox/Runtime/common/vfs/vfsiosmisc.cpp
index bf35ac3..8483114 100644
--- a/src/VBox/Runtime/common/vfs/vfsiosmisc.cpp
+++ b/src/VBox/Runtime/common/vfs/vfsiosmisc.cpp
@@ -169,6 +169,7 @@ RTDECL(int) RTVfsIoStrmReadAll(RTVFSIOSTREAM hVfsIos, void **ppvBuf, size_t *pcb
 
                 void *pvNew = RTMemRealloc(pvBuf, cbAllocated);
                 AssertBreakStmt(pvNew, rc = VERR_NO_MEMORY);
+                pvBuf = pvNew;
 
                 cbToRead = cbAllocated - off - READ_ALL_HEADER_SIZE - 1;
             }
diff --git a/src/VBox/Runtime/common/vfs/vfsprogress.cpp b/src/VBox/Runtime/common/vfs/vfsprogress.cpp
index 494b9bd..d0e4ec6 100644
--- a/src/VBox/Runtime/common/vfs/vfsprogress.cpp
+++ b/src/VBox/Runtime/common/vfs/vfsprogress.cpp
@@ -517,4 +517,3 @@ RTDECL(int) RTVfsCreateProgressForFile(RTVFSFILE hVfsFile, PFNRTPROGRESS pfnProg
     return rc;
 }
 
-
diff --git a/src/VBox/Runtime/common/vfs/vfsstddir.cpp b/src/VBox/Runtime/common/vfs/vfsstddir.cpp
new file mode 100644
index 0000000..211db61
--- /dev/null
+++ b/src/VBox/Runtime/common/vfs/vfsstddir.cpp
@@ -0,0 +1,691 @@
+/* $Id: vfsstddir.cpp $ */
+/** @file
+ * IPRT - Virtual File System, Standard Directory Implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_VFS
+#include <iprt/vfs.h>
+#include <iprt/vfslowlevel.h>
+
+#include <iprt/assert.h>
+#include <iprt/dir.h>
+#include <iprt/err.h>
+#include <iprt/file.h>
+#include <iprt/log.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+
+#define RTDIR_AGNOSTIC
+#include "internal/dir.h"
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+/**
+ * Private data of a standard directory.
+ */
+typedef struct RTVFSSTDDIR
+{
+    /** The directory handle. */
+    RTDIR           hDir;
+    /** Whether to leave the handle open when the VFS handle is closed. */
+    bool            fLeaveOpen;
+    /** Open flags, RTDIR_F_XXX. */
+    uint32_t        fFlags;
+    /** Handle to the director so we can make sure it sticks around for symbolic
+     * link objects. */
+    RTVFSDIR        hSelf;
+} RTVFSSTDDIR;
+/** Pointer to the private data of a standard directory. */
+typedef RTVFSSTDDIR *PRTVFSSTDDIR;
+
+
+/**
+ * Private data of a standard symbolic link.
+ */
+typedef struct RTVFSSTDSYMLINK
+{
+    /** Pointer to the VFS directory where the symbolic link lives . */
+    PRTVFSSTDDIR    pDir;
+    /** The symbolic link name. */
+    char            szSymlink[RT_FLEXIBLE_ARRAY];
+} RTVFSSTDSYMLINK;
+/** Pointer to the private data of a standard symbolic link. */
+typedef RTVFSSTDSYMLINK *PRTVFSSTDSYMLINK;
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+static DECLCALLBACK(int) rtVfsStdDir_OpenDir(void *pvThis, const char *pszSubDir, uint32_t fFlags, PRTVFSDIR phVfsDir);
+static DECLCALLBACK(int) rtVfsStdDir_OpenSymlink(void *pvThis, const char *pszSymlink, PRTVFSSYMLINK phVfsSymlink);
+static DECLCALLBACK(int) rtVfsStdDir_QueryEntryInfo(void *pvThis, const char *pszEntry,
+                                                    PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr);
+static int rtVfsDirFromRTDir(RTDIR hDir, uint32_t fFlags, bool fLeaveOpen, PRTVFSDIR phVfsDir);
+
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnClose}
+ */
+static DECLCALLBACK(int) rtVfsStdSym_Close(void *pvThis)
+{
+    PRTVFSSTDSYMLINK pThis = (PRTVFSSTDSYMLINK)pvThis;
+    RTVfsDirRelease(pThis->pDir->hSelf);
+    pThis->pDir = NULL;
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
+ */
+static DECLCALLBACK(int) rtVfsStdSym_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTVFSSTDSYMLINK pThis = (PRTVFSSTDSYMLINK)pvThis;
+    return rtVfsStdDir_QueryEntryInfo(pThis->pDir, pThis->szSymlink, pObjInfo, enmAddAttr);
+}
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
+ */
+static DECLCALLBACK(int) rtVfsStdSym_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
+{
+    NOREF(pvThis); NOREF(fMode); NOREF(fMask);
+    return VERR_ACCESS_DENIED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
+ */
+static DECLCALLBACK(int) rtVfsStdSym_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                                 PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
+{
+    NOREF(pvThis); NOREF(pAccessTime); NOREF(pModificationTime); NOREF(pChangeTime); NOREF(pBirthTime);
+    return VERR_ACCESS_DENIED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
+ */
+static DECLCALLBACK(int) rtVfsStdSym_SetOwner(void *pvThis, RTUID uid, RTGID gid)
+{
+    NOREF(pvThis); NOREF(uid); NOREF(gid);
+    return VERR_ACCESS_DENIED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSSYMLINKOPS,pfnRead}
+ */
+static DECLCALLBACK(int) rtVfsStdSym_Read(void *pvThis, char *pszTarget, size_t cbTarget)
+{
+    PRTVFSSTDSYMLINK pThis = (PRTVFSSTDSYMLINK)pvThis;
+    return RTDirRelSymlinkRead(pThis->pDir->hDir, pThis->szSymlink, pszTarget, cbTarget, 0 /*fRead*/);
+}
+
+
+/**
+ * Symbolic operations for standard directory.
+ */
+static const RTVFSSYMLINKOPS g_rtVfsStdSymOps =
+{
+    { /* Obj */
+        RTVFSOBJOPS_VERSION,
+        RTVFSOBJTYPE_SYMLINK,
+        "StdSymlink",
+        rtVfsStdSym_Close,
+        rtVfsStdSym_QueryInfo,
+        RTVFSOBJOPS_VERSION
+    },
+    RTVFSSYMLINKOPS_VERSION,
+    0,
+    { /* ObjSet */
+        RTVFSOBJSETOPS_VERSION,
+        RT_OFFSETOF(RTVFSSYMLINKOPS, Obj) - RT_OFFSETOF(RTVFSSYMLINKOPS, ObjSet),
+        rtVfsStdSym_SetMode,
+        rtVfsStdSym_SetTimes,
+        rtVfsStdSym_SetOwner,
+        RTVFSOBJSETOPS_VERSION
+    },
+    rtVfsStdSym_Read,
+    RTVFSSYMLINKOPS_VERSION
+};
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnClose}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_Close(void *pvThis)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+
+    int rc;
+    if (!pThis->fLeaveOpen)
+        rc = RTDirClose(pThis->hDir);
+    else
+        rc = VINF_SUCCESS;
+    pThis->hDir = NULL;
+
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_QueryInfo(void *pvThis, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    return RTDirQueryInfo(pThis->hDir, pObjInfo, enmAddAttr);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    if (fMask != ~RTFS_TYPE_MASK)
+    {
+        RTFSOBJINFO ObjInfo;
+        int rc = RTDirQueryInfo(pThis->hDir, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+        if (RT_FAILURE(rc))
+            return rc;
+        fMode |= ~fMask & ObjInfo.Attr.fMode;
+    }
+    //RTPathSetMode
+    //return RTFileSetMode(pThis->hDir, fMode);
+    return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                              PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    return RTDirSetTimes(pThis->hDir, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_SetOwner(void *pvThis, RTUID uid, RTGID gid)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    return RTDirRelPathSetOwner(pThis->hDir, ".", uid, gid, RTPATH_F_FOLLOW_LINK);
+}
+
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnTraversalOpen}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_TraversalOpen(void *pvThis, const char *pszEntry, PRTVFSDIR phVfsDir,
+                                                   PRTVFSSYMLINK phVfsSymlink, PRTVFS phVfsMounted)
+{
+    /* No union mounting or mount points here (yet). */
+    if (phVfsMounted)
+        *phVfsMounted = NIL_RTVFS;
+
+    int rc;
+    if (phVfsDir || phVfsSymlink)
+    {
+        if (phVfsDir)
+            *phVfsDir = NIL_RTVFSDIR;
+        if (phVfsSymlink)
+            *phVfsSymlink = NIL_RTVFSSYMLINK;
+
+        RTFSOBJINFO ObjInfo;
+        rc = rtVfsStdDir_QueryEntryInfo(pvThis, pszEntry, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+        if (RT_SUCCESS(rc))
+        {
+            switch (ObjInfo.Attr.fMode & RTFS_TYPE_MASK)
+            {
+                case RTFS_TYPE_DIRECTORY:
+                    if (phVfsDir)
+                        rc = rtVfsStdDir_OpenDir(pvThis, pszEntry, 0, phVfsDir);
+                    else
+                        rc = VERR_NOT_SYMLINK;
+                    break;
+
+                case RTFS_TYPE_SYMLINK:
+                    if (phVfsSymlink)
+                        rc = rtVfsStdDir_OpenSymlink(pvThis, pszEntry, phVfsSymlink);
+                    else
+                        rc = VERR_NOT_A_DIRECTORY;
+                    break;
+
+                default:
+                    rc = phVfsDir ? VERR_NOT_A_DIRECTORY : VERR_NOT_SYMLINK;
+                    break;
+            }
+        }
+    }
+    else
+        rc = VERR_PATH_NOT_FOUND;
+
+    LogFlow(("rtVfsStdDir_TraversalOpen: %s -> %Rrc\n", pszEntry, rc));
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnOpenFile}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_OpenFile(void *pvThis, const char *pszFilename, uint32_t fOpen, PRTVFSFILE phVfsFile)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    RTFILE       hFile;
+    int rc = RTDirRelFileOpen(pThis->hDir, pszFilename, fOpen, &hFile);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTVfsFileFromRTFile(hFile, fOpen, false /*fLeaveOpen*/, phVfsFile);
+        if (RT_FAILURE(rc))
+            RTFileClose(hFile);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnOpenDir}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_OpenDir(void *pvThis, const char *pszSubDir, uint32_t fFlags, PRTVFSDIR phVfsDir)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    /** @todo subdir open flags */
+    RTDIR hSubDir;
+    int rc = RTDirRelDirOpenFiltered(pThis->hDir, pszSubDir, RTDIRFILTER_NONE, fFlags, &hSubDir);
+    if (RT_SUCCESS(rc))
+    {
+        rc = rtVfsDirFromRTDir(hSubDir, fFlags, false, phVfsDir);
+        if (RT_FAILURE(rc))
+            RTDirClose(hSubDir);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnCreateDir}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_CreateDir(void *pvThis, const char *pszSubDir, RTFMODE fMode, PRTVFSDIR phVfsDir)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    int rc;
+    if (!phVfsDir)
+        rc = RTDirRelDirCreate(pThis->hDir, pszSubDir, fMode, 0 /* fFlags */, NULL);
+    else
+    {
+        RTDIR hSubDir;
+        rc = RTDirRelDirCreate(pThis->hDir, pszSubDir, fMode, 0 /* fFlags */, &hSubDir);
+        if (RT_SUCCESS(rc))
+        {
+            /** @todo subdir open flags...   */
+            rc = rtVfsDirFromRTDir(hSubDir, 0, false, phVfsDir);
+            if (RT_FAILURE(rc))
+                RTDirClose(hSubDir);
+        }
+    }
+
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnOpenSymlink}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_OpenSymlink(void *pvThis, const char *pszSymlink, PRTVFSSYMLINK phVfsSymlink)
+{
+    RTFSOBJINFO ObjInfo;
+    int rc = rtVfsStdDir_QueryEntryInfo(pvThis, pszSymlink, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+    if (RT_SUCCESS(rc))
+    {
+        if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode))
+        {
+            PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+            uint32_t cRefs = RTVfsDirRetain(pThis->hSelf);
+            if (cRefs != UINT32_MAX)
+            {
+                PRTVFSSTDSYMLINK pNewSymlink;
+                size_t           cchSymlink = strlen(pszSymlink);
+                rc = RTVfsNewSymlink(&g_rtVfsStdSymOps, RT_UOFFSETOF(RTVFSSTDSYMLINK, szSymlink[cchSymlink + 1]),
+                                     NIL_RTVFS, NIL_RTVFSLOCK, phVfsSymlink, (void **)&pNewSymlink);
+                if (RT_SUCCESS(rc))
+                {
+                    memcpy(pNewSymlink->szSymlink, pszSymlink, cchSymlink);
+                    pNewSymlink->szSymlink[cchSymlink] = '\0';
+                    pNewSymlink->pDir = pThis;
+                    return VINF_SUCCESS;
+                }
+
+                RTVfsDirRelease(pThis->hSelf);
+            }
+            else
+                rc = VERR_INTERNAL_ERROR_2;
+        }
+        else
+            rc = VERR_NOT_SYMLINK;
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnCreateSymlink}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_CreateSymlink(void *pvThis, const char *pszSymlink, const char *pszTarget,
+                                                   RTSYMLINKTYPE enmType, PRTVFSSYMLINK phVfsSymlink)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    int rc = RTDirRelSymlinkCreate(pThis->hDir, pszSymlink, pszTarget, enmType, 0 /*fCreate*/);
+    if (RT_SUCCESS(rc))
+    {
+        if (!phVfsSymlink)
+            return VINF_SUCCESS;
+        return rtVfsStdDir_OpenSymlink(pThis, pszSymlink, phVfsSymlink);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnQueryEntryInfo}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_QueryEntryInfo(void *pvThis, const char *pszEntry,
+                                                    PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    return RTDirRelPathQueryInfo(pThis->hDir, pszEntry, pObjInfo, enmAddAttr, RTPATH_F_ON_LINK);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnUnlinkEntry}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_UnlinkEntry(void *pvThis, const char *pszEntry, RTFMODE fType)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    if (fType != 0)
+    {
+        if (fType == RTFS_TYPE_DIRECTORY)
+            return RTDirRelDirRemove(pThis->hDir, pszEntry);
+
+        RTFSOBJINFO ObjInfo;
+        int rc = rtVfsStdDir_QueryEntryInfo(pThis, pszEntry, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+        if (RT_FAILURE(rc))
+            return rc;
+        if ((fType & RTFS_TYPE_MASK) != (ObjInfo.Attr.fMode & RTFS_TYPE_MASK))
+            return VERR_WRONG_TYPE;
+    }
+    return RTDirRelPathUnlink(pThis->hDir, pszEntry, 0 /*fUnlink*/);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnRenameEntry}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_RenameEntry(void *pvThis, const char *pszEntry, RTFMODE fType, const char *pszNewName)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    if (fType != 0)
+    {
+        RTFSOBJINFO ObjInfo;
+        int rc = rtVfsStdDir_QueryEntryInfo(pThis, pszEntry, &ObjInfo, RTFSOBJATTRADD_NOTHING);
+        if (RT_FAILURE(rc))
+            return rc;
+        if ((fType & RTFS_TYPE_MASK) != (ObjInfo.Attr.fMode & RTFS_TYPE_MASK))
+            return VERR_WRONG_TYPE;
+    }
+
+    /** @todo  RTVFSDIROPS::pfnRenameEntry doesn't really work, this must move to
+     *         file system level. */
+    return RTDirRelPathRename(pThis->hDir, pszEntry, pThis->hDir, pszNewName,
+                              RTPATHRENAME_FLAGS_NO_SYMLINKS | RTPATHRENAME_FLAGS_NO_REPLACE);
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnRewindDir}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_RewindDir(void *pvThis)
+{
+    NOREF(pvThis);
+    return VERR_NOT_SUPPORTED;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSDIROPS,pfnReadDir}
+ */
+static DECLCALLBACK(int) rtVfsStdDir_ReadDir(void *pvThis, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAddAttr)
+{
+    PRTVFSSTDDIR pThis = (PRTVFSSTDDIR)pvThis;
+    return RTDirReadEx(pThis->hDir, pDirEntry, pcbDirEntry, enmAddAttr, RTPATH_F_ON_LINK);
+}
+
+
+/**
+ * Standard file operations.
+ */
+DECL_HIDDEN_CONST(const RTVFSDIROPS) g_rtVfsStdDirOps =
+{
+    { /* Obj */
+        RTVFSOBJOPS_VERSION,
+        RTVFSOBJTYPE_DIR,
+        "StdDir",
+        rtVfsStdDir_Close,
+        rtVfsStdDir_QueryInfo,
+        RTVFSOBJOPS_VERSION
+    },
+    RTVFSDIROPS_VERSION,
+    0,
+    { /* ObjSet */
+        RTVFSOBJSETOPS_VERSION,
+        RT_OFFSETOF(RTVFSDIROPS, Obj) - RT_OFFSETOF(RTVFSDIROPS, ObjSet),
+        rtVfsStdDir_SetMode,
+        rtVfsStdDir_SetTimes,
+        rtVfsStdDir_SetOwner,
+        RTVFSOBJSETOPS_VERSION
+    },
+    rtVfsStdDir_TraversalOpen,
+    rtVfsStdDir_OpenFile,
+    rtVfsStdDir_OpenDir,
+    rtVfsStdDir_CreateDir,
+    rtVfsStdDir_OpenSymlink,
+    rtVfsStdDir_CreateSymlink,
+    rtVfsStdDir_QueryEntryInfo,
+    rtVfsStdDir_UnlinkEntry,
+    rtVfsStdDir_RenameEntry,
+    rtVfsStdDir_RewindDir,
+    rtVfsStdDir_ReadDir,
+    RTVFSDIROPS_VERSION
+};
+
+
+/**
+ * Internal worker for RTVfsDirFromRTDir and RTVfsDirOpenNormal.
+ *
+ * @returns IRPT status code.
+ * @param   hDir                The IPRT directory handle.
+ * @param   fOpen               Reserved for future.
+ * @param   fLeaveOpen          Whether to leave it open or close it.
+ * @param   phVfsDir            Where to return the handle.
+ */
+static int rtVfsDirFromRTDir(RTDIR hDir, uint32_t fFlags, bool fLeaveOpen, PRTVFSDIR phVfsDir)
+{
+    PRTVFSSTDDIR    pThis;
+    RTVFSDIR        hVfsDir;
+    int rc = RTVfsNewDir(&g_rtVfsStdDirOps, sizeof(RTVFSSTDDIR), 0 /*fFlags*/, NIL_RTVFS, NIL_RTVFSLOCK,
+                         &hVfsDir, (void **)&pThis);
+    if (RT_SUCCESS(rc))
+    {
+        pThis->hDir         = hDir;
+        pThis->fLeaveOpen   = fLeaveOpen;
+        pThis->fFlags       = fFlags;
+        pThis->hSelf        = hVfsDir;
+
+        *phVfsDir = hVfsDir;
+        return VINF_SUCCESS;
+    }
+    return rc;
+}
+
+
+RTDECL(int) RTVfsDirFromRTDir(RTDIR hDir, bool fLeaveOpen, PRTVFSDIR phVfsDir)
+{
+    AssertReturn(RTDirIsValid(hDir), VERR_INVALID_HANDLE);
+    return rtVfsDirFromRTDir(hDir, hDir->fFlags, fLeaveOpen, phVfsDir);
+}
+
+
+RTDECL(int) RTVfsDirOpenNormal(const char *pszPath, uint32_t fFlags, PRTVFSDIR phVfsDir)
+{
+    /*
+     * Open the file the normal way and pass it to RTVfsFileFromRTFile.
+     */
+    RTDIR hDir;
+    int rc = RTDirOpenFiltered(&hDir, pszPath, RTDIRFILTER_NONE, fFlags);
+    if (RT_SUCCESS(rc))
+    {
+        /*
+         * Create a VFS file handle.
+         */
+        rc = rtVfsDirFromRTDir(hDir, fFlags, false /*fLeaveOpen*/, phVfsDir);
+        if (RT_SUCCESS(rc))
+            return VINF_SUCCESS;
+
+        RTDirClose(hDir);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnValidate}
+ */
+static DECLCALLBACK(int) rtVfsChainStdDir_Validate(PCRTVFSCHAINELEMENTREG pProviderReg, PRTVFSCHAINSPEC pSpec,
+                                                   PRTVFSCHAINELEMSPEC pElement, uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(pProviderReg, pSpec);
+
+    /*
+     * Basic checks.
+     */
+    if (pElement->enmTypeIn != RTVFSOBJTYPE_INVALID)
+        return VERR_VFS_CHAIN_MUST_BE_FIRST_ELEMENT;
+    if (pElement->enmType != RTVFSOBJTYPE_DIR)
+        return VERR_VFS_CHAIN_ONLY_DIR;
+    if (pElement->cArgs < 1)
+        return VERR_VFS_CHAIN_AT_LEAST_ONE_ARG;
+
+    /*
+     * Parse flag arguments if any, storing them in the element.
+     */
+    uint32_t fFlags = 0;
+    for (uint32_t i = 1; i < pElement->cArgs; i++)
+        if (strcmp(pElement->paArgs[i].psz, "deny-ascent") == 0)
+            fFlags |= RTDIR_F_DENY_ASCENT;
+        else if (strcmp(pElement->paArgs[i].psz, "allow-ascent") == 0)
+            fFlags &= ~RTDIR_F_DENY_ASCENT;
+        else
+        {
+            *poffError = pElement->paArgs[i].offSpec;
+            return RTErrInfoSetF(pErrInfo, VERR_VFS_CHAIN_INVALID_ARGUMENT, "Unknown flag argument: %s", pElement->paArgs[i].psz);
+        }
+    pElement->uProvider = fFlags;
+
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnInstantiate}
+ */
+static DECLCALLBACK(int) rtVfsChainStdDir_Instantiate(PCRTVFSCHAINELEMENTREG pProviderReg, PCRTVFSCHAINSPEC pSpec,
+                                                      PCRTVFSCHAINELEMSPEC pElement, RTVFSOBJ hPrevVfsObj,
+                                                      PRTVFSOBJ phVfsObj, uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(pProviderReg, pSpec, poffError, pErrInfo);
+    AssertReturn(hPrevVfsObj == NIL_RTVFSOBJ, VERR_VFS_CHAIN_IPE);
+
+    RTVFSDIR hVfsDir;
+    int rc = RTVfsDirOpenNormal(pElement->paArgs[0].psz, (uint32_t)pElement->uProvider, &hVfsDir);
+    if (RT_SUCCESS(rc))
+    {
+        *phVfsObj = RTVfsObjFromDir(hVfsDir);
+        RTVfsDirRelease(hVfsDir);
+        if (*phVfsObj != NIL_RTVFSOBJ)
+            return VINF_SUCCESS;
+        rc = VERR_VFS_CHAIN_CAST_FAILED;
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnCanReuseElement}
+ */
+static DECLCALLBACK(bool) rtVfsChainStdDir_CanReuseElement(PCRTVFSCHAINELEMENTREG pProviderReg,
+                                                           PCRTVFSCHAINSPEC pSpec, PCRTVFSCHAINELEMSPEC pElement,
+                                                           PCRTVFSCHAINSPEC pReuseSpec, PCRTVFSCHAINELEMSPEC pReuseElement)
+{
+    RT_NOREF(pProviderReg, pSpec, pReuseSpec);
+    if (strcmp(pElement->paArgs[0].psz, pReuseElement->paArgs[0].psz) == 0)
+        if (pElement->paArgs[0].uProvider == pReuseElement->paArgs[0].uProvider)
+            return true;
+    return false;
+}
+
+
+/** VFS chain element 'file'. */
+static RTVFSCHAINELEMENTREG g_rtVfsChainStdDirReg =
+{
+    /* uVersion = */            RTVFSCHAINELEMENTREG_VERSION,
+    /* fReserved = */           0,
+    /* pszName = */             "stddir",
+    /* ListEntry = */           { NULL, NULL },
+    /* pszHelp = */             "Open a real directory. Initial element.\n"
+                                "Takes zero or more flag arguments: deny-ascent, allow-ascent",
+    /* pfnValidate = */         rtVfsChainStdDir_Validate,
+    /* pfnInstantiate = */      rtVfsChainStdDir_Instantiate,
+    /* pfnCanReuseElement = */  rtVfsChainStdDir_CanReuseElement,
+    /* uEndMarker = */          RTVFSCHAINELEMENTREG_VERSION
+};
+
+RTVFSCHAIN_AUTO_REGISTER_ELEMENT_PROVIDER(&g_rtVfsChainStdDirReg, rtVfsChainStdDirReg);
+
diff --git a/src/VBox/Runtime/common/vfs/vfsstdfile.cpp b/src/VBox/Runtime/common/vfs/vfsstdfile.cpp
index 7c95ab3..b5d16b7 100644
--- a/src/VBox/Runtime/common/vfs/vfsstdfile.cpp
+++ b/src/VBox/Runtime/common/vfs/vfsstdfile.cpp
@@ -244,7 +244,14 @@ static DECLCALLBACK(int) rtVfsStdFile_Write(void *pvThis, RTFOFF off, PCRTSGBUF
 static DECLCALLBACK(int) rtVfsStdFile_Flush(void *pvThis)
 {
     PRTVFSSTDFILE pThis = (PRTVFSSTDFILE)pvThis;
-    return RTFileFlush(pThis->hFile);
+    int rc = RTFileFlush(pThis->hFile);
+#ifdef RT_OS_WINDOWS
+    /* Workaround for console handles. */  /** @todo push this further down? */
+    if (   rc == VERR_INVALID_HANDLE
+        && RTFileIsValid(pThis->hFile))
+        rc = VINF_NOT_SUPPORTED; /* not flushable */
+#endif
+    return rc;
 }
 
 
diff --git a/src/VBox/Runtime/common/zip/pkzip.cpp b/src/VBox/Runtime/common/zip/pkzip.cpp
index 4c7bf51..dfa659e 100644
--- a/src/VBox/Runtime/common/zip/pkzip.cpp
+++ b/src/VBox/Runtime/common/zip/pkzip.cpp
@@ -220,7 +220,7 @@ RTDECL(int) RTZipPkzipMemDecompress(void **ppvDst, size_t *pcbDst, const void *p
                         if (pv)
                         {
                             RTVFSIOSTREAM hVfsIosObj = RTVfsObjToIoStream(hVfsObj);
-                            if (hVfsIos)
+                            if (hVfsIos != NIL_RTVFSIOSTREAM)
                             {
                                 rc = RTVfsIoStrmRead(hVfsIosObj, pv, cb, true /*fBlocking*/, NULL);
                                 if (RT_SUCCESS(rc))
@@ -228,9 +228,11 @@ RTDECL(int) RTZipPkzipMemDecompress(void **ppvDst, size_t *pcbDst, const void *p
                                     *ppvDst = pv;
                                     *pcbDst = cb;
                                 }
-                                else
-                                    RTMemFree(pv);
                             }
+                            else
+                                rc = VERR_INTERNAL_ERROR_4;
+                            if (RT_FAILURE(rc))
+                                RTMemFree(pv);
                         }
                     }
                 }
diff --git a/src/VBox/Runtime/common/zip/tarvfs.cpp b/src/VBox/Runtime/common/zip/tarvfs.cpp
index 639254a..fa10bab 100644
--- a/src/VBox/Runtime/common/zip/tarvfs.cpp
+++ b/src/VBox/Runtime/common/zip/tarvfs.cpp
@@ -1530,4 +1530,3 @@ RTDECL(int) RTZipTarFsStreamFromIoStream(RTVFSIOSTREAM hVfsIosIn, uint32_t fFlag
     return rc;
 }
 
-
diff --git a/src/VBox/Runtime/generic/RTDirQueryInfo-generic.cpp b/src/VBox/Runtime/generic/RTDirQueryInfo-generic.cpp
index 6d71e0f..a8f5681 100644
--- a/src/VBox/Runtime/generic/RTDirQueryInfo-generic.cpp
+++ b/src/VBox/Runtime/generic/RTDirQueryInfo-generic.cpp
@@ -44,13 +44,13 @@
 #include "internal/dir.h"
 
 
-RTR3DECL(int) RTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
+RTR3DECL(int) RTDirQueryInfo(RTDIR hDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
 {
     /*
      * Validate and digest input.
      */
-    if (!rtDirValidHandle(pDir))
+    if (!rtDirValidHandle(hDir))
         return VERR_INVALID_PARAMETER;
-    return RTPathQueryInfoEx(pDir->pszPath, pObjInfo, enmAdditionalAttribs, RTPATH_F_FOLLOW_LINK);
+    return RTPathQueryInfoEx(hDir->pszPath, pObjInfo, enmAdditionalAttribs, RTPATH_F_FOLLOW_LINK);
 }
 
diff --git a/src/VBox/Runtime/generic/RTDirSetTimes-generic.cpp b/src/VBox/Runtime/generic/RTDirSetTimes-generic.cpp
index ec91faf..073f086 100644
--- a/src/VBox/Runtime/generic/RTDirSetTimes-generic.cpp
+++ b/src/VBox/Runtime/generic/RTDirSetTimes-generic.cpp
@@ -45,14 +45,14 @@
 
 
 
-RTR3DECL(int) RTDirSetTimes(PRTDIR pDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+RTR3DECL(int) RTDirSetTimes(RTDIR hDir, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
                             PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
 {
     /*
      * Validate and digest input.
      */
-    if (!rtDirValidHandle(pDir))
+    if (!rtDirValidHandle(hDir))
         return VERR_INVALID_PARAMETER;
-    return RTPathSetTimes(pDir->pszPath, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
+    return RTPathSetTimes(hDir->pszPath, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
 }
 
diff --git a/src/VBox/Runtime/include/internal/dir.h b/src/VBox/Runtime/include/internal/dir.h
index 551e93c..15eec67 100644
--- a/src/VBox/Runtime/include/internal/dir.h
+++ b/src/VBox/Runtime/include/internal/dir.h
@@ -32,6 +32,9 @@
 #include "internal/magics.h"
 
 
+/** Pointer to the data behind an open directory handle. */
+typedef struct RTDIRINTERNAL *PRTDIRINTERNAL;
+
 /**
  * Filter a the filename in the against a filter.
  *
@@ -40,7 +43,7 @@
  * @param   pDir        The directory handle.
  * @param   pszName     The path to match to the filter.
  */
-typedef DECLCALLBACK(bool) FNRTDIRFILTER(PRTDIR pDir, const char *pszName);
+typedef DECLCALLBACK(bool) FNRTDIRFILTER(PRTDIRINTERNAL pDir, const char *pszName);
 /** Pointer to a filter function. */
 typedef FNRTDIRFILTER *PFNRTDIRFILTER;
 
@@ -48,7 +51,7 @@ typedef FNRTDIRFILTER *PFNRTDIRFILTER;
 /**
  * Open directory.
  */
-typedef struct RTDIR
+typedef struct RTDIRINTERNAL
 {
     /** Magic value, RTDIR_MAGIC. */
     uint32_t            u32Magic;
@@ -72,8 +75,6 @@ typedef struct RTDIR
     const char         *pszPath;
     /** The length of the path. */
     size_t              cchPath;
-    /** Set to indicate that the Data member contains unread data. */
-    bool                fDataUnread;
     /** Pointer to the converted filename.
      * This can be NULL. */
 #ifdef RT_OS_WINDOWS
@@ -85,6 +86,10 @@ typedef struct RTDIR
     size_t              cchName;
     /** The size of this structure. */
     size_t              cbSelf;
+    /** The RTDIR_F_XXX flags passed to RTDirOpenFiltered */
+    uint32_t            fFlags;
+    /** Set to indicate that the Data member contains unread data. */
+    bool                fDataUnread;
 
 #ifndef RTDIR_AGNOSTIC
 # ifdef RT_OS_WINDOWS
@@ -135,7 +140,8 @@ typedef struct RTDIR
     struct dirent       Data;
 # endif
 #endif
-} RTDIR;
+} RTDIRINTERNAL;
+
 
 
 /**
@@ -143,7 +149,7 @@ typedef struct RTDIR
  * @returns true if valid.
  * @returns false if valid after having bitched about it first.
  */
-DECLINLINE(bool) rtDirValidHandle(PRTDIR pDir)
+DECLINLINE(bool) rtDirValidHandle(PRTDIRINTERNAL pDir)
 {
     AssertMsgReturn(VALID_PTR(pDir), ("%p\n", pDir), false);
     AssertMsgReturn(pDir->u32Magic == RTDIR_MAGIC, ("%#RX32\n", pDir->u32Magic), false);
@@ -156,13 +162,17 @@ DECLINLINE(bool) rtDirValidHandle(PRTDIR pDir)
  * Called by rtDirOpenCommon().
  *
  * @returns IPRT status code.
- * @param   pDir        The directory to open. The pszPath member contains the
- *                      path to the directory.
- * @param   pszPathBuf  Pointer to a RTPATH_MAX sized buffer containing pszPath.
- *                      Find-first style systems can use this to setup the
- *                      wildcard expression.
+ * @param   pDir                The directory to open. The pszPath member contains the
+ *                              path to the directory.
+ * @param   pszPathBuf          Pointer to a RTPATH_MAX sized buffer containing
+ *                              pszPath.  Find-first style systems can use this
+ *                              to setup the wildcard expression.
+ * @param   hRelativeDir        The directory @a pvNativeRelative is relative,
+ *                              ~(uintptr_t)0 if absolute.
+ * @param   pvNativeRelative    The native relative path.  NULL if absolute or
+ *                              we're to use (consume) hRelativeDir.
  */
-int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf);
+int rtDirNativeOpen(PRTDIRINTERNAL pDir, char *pszPathBuf, uintptr_t hRelativeDir, void *pvNativeRelative);
 
 /**
  * Returns the size of the directory structure.
@@ -172,4 +182,8 @@ int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf);
  */
 size_t rtDirNativeGetStructSize(const char *pszPath);
 
+
+DECLHIDDEN(int) rtDirOpenRelativeOrHandle(RTDIR *phDir, const char *pszRelativeAndFilter, RTDIRFILTER enmFilter,
+                                          uint32_t fFlags, uintptr_t hRelativeDir, void *pvNativeRelative);
+
 #endif
diff --git a/src/VBox/Runtime/include/internal/dvm.h b/src/VBox/Runtime/include/internal/dvm.h
index d7bc914..9a0b063 100644
--- a/src/VBox/Runtime/include/internal/dvm.h
+++ b/src/VBox/Runtime/include/internal/dvm.h
@@ -30,6 +30,7 @@
 #include <iprt/types.h>
 #include <iprt/err.h>
 #include <iprt/assert.h>
+#include <iprt/vfs.h>
 #include "internal/magics.h"
 
 RT_C_DECLS_BEGIN
@@ -54,15 +55,11 @@ typedef RTDVMVOLUMEFMT                *PRTDVMVOLUMEFMT;
 typedef struct RTDVMDISK
 {
     /** Size of the disk in bytes. */
-    uint64_t       cbDisk;
+    uint64_t        cbDisk;
     /** Sector size. */
-    uint64_t       cbSector;
-    /** Read callback */
-    PFNDVMREAD     pfnRead;
-    /** Write callback. */
-    PFNDVMWRITE    pfnWrite;
-    /** Opaque user data. */
-    void          *pvUser;
+    uint64_t        cbSector;
+    /** The VFS file handle if backed by such. */
+    RTVFSFILE       hVfsFile;
 } RTDVMDISK;
 /** Pointer to a disk descriptor. */
 typedef RTDVMDISK *PRTDVMDISK;
@@ -83,7 +80,9 @@ typedef const RTDVMDISK *PCRTDVMDISK;
 typedef struct RTDVMFMTOPS
 {
     /** Name of the format. */
-    const char *pcszFmt;
+    const char         *pszFmt;
+    /** The format type.   */
+    RTDVMFORMATTYPE     enmFormat;
 
     /**
      * Probes the given disk for known structures.
@@ -293,7 +292,7 @@ DECLINLINE(int) rtDvmDiskRead(PCRTDVMDISK pDisk, uint64_t off, void *pvBuf, size
     AssertReturn(cbRead > 0, VERR_INVALID_PARAMETER);
     AssertReturn(off + cbRead <= pDisk->cbDisk, VERR_INVALID_PARAMETER);
 
-    return pDisk->pfnRead(pDisk->pvUser, off, pvBuf, cbRead);
+    return RTVfsFileReadAt(pDisk->hVfsFile, off, pvBuf, cbRead, NULL /*pcbRead*/);
 }
 
 /**
@@ -312,7 +311,7 @@ DECLINLINE(int) rtDvmDiskWrite(PCRTDVMDISK pDisk, uint64_t off, const void *pvBu
     AssertReturn(cbWrite > 0, VERR_INVALID_PARAMETER);
     AssertReturn(off + cbWrite <= pDisk->cbDisk, VERR_INVALID_PARAMETER);
 
-    return pDisk->pfnWrite(pDisk->pvUser, off, pvBuf, cbWrite);
+    return RTVfsFileWriteAt(pDisk->hVfsFile, off, pvBuf, cbWrite, NULL /*pcbWritten*/);
 }
 
 RT_C_DECLS_END
diff --git a/src/VBox/Runtime/include/internal/file.h b/src/VBox/Runtime/include/internal/file.h
index 424207d..4c9490b 100644
--- a/src/VBox/Runtime/include/internal/file.h
+++ b/src/VBox/Runtime/include/internal/file.h
@@ -55,6 +55,25 @@ int rtFileRecalcAndValidateFlags(uint64_t *pfOpen);
  */
 RTFILE rtFileGetStandard(RTHANDLESTD enmStdHandle);
 
+#ifdef RT_OS_WINDOWS
+/**
+ * Helper for converting RTFILE_O_XXX to the various NtCreateFile flags.
+ *
+ * @returns IPRT status code
+ * @param   fOpen               The RTFILE_O_XXX flags to convert.
+ * @param   pfDesiredAccess     Where to return the desired access mask.
+ * @param   pfObjAttribs        Where to return the NT object attributes.
+ * @param   pfFileAttribs       Where to return the file attributes (create).
+ * @param   pfShareAccess       Where to return the file sharing access mask.
+ * @param   pfCreateDisposition Where to return the file create disposition.
+ * @param   pfCreateOptions     Where to return the file open/create options.
+ */
+DECLHIDDEN(int) rtFileNtValidateAndConvertFlags(uint64_t fOpen, uint32_t *pfDesiredAccess, uint32_t *pfObjAttribs,
+                                                uint32_t *pfFileAttribs, uint32_t *pfShareAccess, uint32_t *pfCreateDisposition,
+                                                uint32_t *pfCreateOptions);
+
+#endif
+
 RT_C_DECLS_END
 
 #endif
diff --git a/src/VBox/Runtime/include/internal/ldrELF.h b/src/VBox/Runtime/include/internal/ldrELF.h
deleted file mode 100644
index 10fe588..0000000
--- a/src/VBox/Runtime/include/internal/ldrELF.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $Id: ldrELF.h $ */
-/** @file
- * ELF types, current architecture.
- */
-
-/*
- * Copyright (C) 2010-2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-
-#ifndef ___internal_ldrELF_h
-#define ___internal_ldrELF_h
-
-#if defined(RT_ARCH_AMD64)
-# include "ldrELF64.h"
-typedef Elf64_Addr          Elf_Addr;
-typedef Elf64_Half          Elf_Half;
-typedef Elf64_Off           Elf_Off;
-typedef Elf64_Sword         Elf_Sword;
-typedef Elf64_Word          Elf_Word;
-typedef Elf64_Size          Elf_Size;
-typedef Elf64_Hashelt       Elf_Hashelt;
-typedef	Elf64_Ehdr          Elf_Ehdr;
-typedef	Elf64_Shdr          Elf_Shdr;
-typedef	Elf64_Phdr          Elf_Phdr;
-typedef	Elf64_Nhdr          Elf_Nhdr;
-typedef	Elf64_Dyn           Elf_Dyn;
-typedef	Elf64_Rel           Elf_Rel;
-typedef	Elf64_Rela          Elf_Rela;
-typedef	Elf64_Sym           Elf_Sym;
-
-#define ELF_R_SYM           ELF64_R_SYM
-#define ELF_R_TYPE          ELF64_R_TYPE
-#define ELF_R_INFO          ELF64_R_INFO
-#define ELF_ST_BIND         ELF64_ST_BIND
-#define ELF_ST_TYPE         ELF64_ST_TYPE
-#define ELF_ST_INFO         ELF64_ST_INFO
-
-#elif defined(RT_ARCH_X86)
-# include "ldrELF32.h"
-typedef Elf32_Addr          Elf_Addr;
-typedef Elf32_Half          Elf_Half;
-typedef Elf32_Off           Elf_Off;
-typedef Elf32_Sword         Elf_Sword;
-typedef Elf32_Word          Elf_Word;
-typedef Elf32_Size          Elf_Size;
-typedef Elf32_Hashelt       Elf_Hashelt;
-typedef	Elf32_Ehdr          Elf_Ehdr;
-typedef	Elf32_Shdr          Elf_Shdr;
-typedef	Elf32_Phdr          Elf_Phdr;
-typedef	Elf32_Nhdr          Elf_Nhdr;
-typedef	Elf32_Dyn           Elf_Dyn;
-typedef	Elf32_Rel           Elf_Rel;
-typedef	Elf32_Rela          Elf_Rela;
-typedef	Elf32_Sym           Elf_Sym;
-
-#define ELF_R_SYM           ELF32_R_SYM
-#define ELF_R_TYPE          ELF32_R_TYPE
-#define ELF_R_INFO          ELF32_R_INFO
-#define ELF_ST_BIND         ELF32_ST_BIND
-#define ELF_ST_TYPE         ELF32_ST_TYPE
-#define ELF_ST_INFO         ELF32_ST_INFO
-
-#else
-# error Unknown arch!
-#endif
-
-#endif /* !___internal_ldrELF_h */
-
diff --git a/src/VBox/Runtime/include/internal/ldrELF32.h b/src/VBox/Runtime/include/internal/ldrELF32.h
deleted file mode 100644
index 8ed43a7..0000000
--- a/src/VBox/Runtime/include/internal/ldrELF32.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/* $Id: ldrELF32.h $ */
-/** @file
- * IPRT - ELF 32-bit header.
- */
-
-/*
- * Copyright (C) 2010-2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-#ifndef ___internal_ldrELF32_h
-#define ___internal_ldrELF32_h
-
-#include <iprt/assert.h>
-
-#include "ldrELFCommon.h"
-
-/*
- * ELF 32 standard types.
- */
-typedef uint32_t        Elf32_Addr;
-typedef uint16_t        Elf32_Half;
-typedef uint32_t        Elf32_Off;
-typedef int32_t         Elf32_Sword;
-typedef uint32_t        Elf32_Word;
-
-/*
- * Ensure type size correctness in accordance to                                                             .
- * Portable Format Specification (for ELF), Version 1.1, fig 1-2.                                            .
- */
-AssertCompileSize(Elf32_Addr,   4);
-AssertCompileSize(Elf32_Half,   2);
-AssertCompileSize(Elf32_Off,    4);
-AssertCompileSize(Elf32_Sword,  4);
-AssertCompileSize(Elf32_Word,   4);
-
-/*
- * ELF 32 non-standard types for convenience.
- */
-typedef Elf32_Word      Elf32_Size;
-typedef Elf32_Word      Elf32_Hashelt;
-
-/*
- * ELF header.
- */
-typedef struct
-{
-    unsigned char e_ident[16];      /* ELF identification. */
-    Elf32_Half    e_type;           /* Object file type. */
-    Elf32_Half    e_machine;        /* Machine type. */
-    Elf32_Word    e_version;        /* Object file version. */
-    Elf32_Addr    e_entry;          /* Entry point address. */
-    Elf32_Off     e_phoff;          /* Program header offset. */
-    Elf32_Off     e_shoff;          /* Section header offset. */
-    Elf32_Word    e_flags;          /* Processor-specific flags. */
-    Elf32_Half    e_ehsize;         /* ELF header size. */
-    Elf32_Half    e_phentsize;      /* Size of program header entries. */
-    Elf32_Half    e_phnum;          /* Number of program headers. */
-    Elf32_Half    e_shentsize;      /* Size of section header entries. */
-    Elf32_Half    e_shnum;          /* Number of section headers. */
-    Elf32_Half    e_shstrndx;       /* Section name string table index. */
-} Elf32_Ehdr;
-
-/*
- * Section header.
- */
-typedef struct
-{
-    Elf32_Word    sh_name;          /* Section name. */
-    Elf32_Word    sh_type;          /* Section type. */
-    Elf32_Word    sh_flags;         /* Section attributes. */
-    Elf32_Addr    sh_addr;          /* Virtual address in memory. */
-    Elf32_Off     sh_offset;        /* Offset in file. */
-    Elf32_Word    sh_size;          /* Size of section. */
-    Elf32_Word    sh_link;          /* Link to other section. */
-    Elf32_Word    sh_info;          /* Miscellaneous information. */
-    Elf32_Word    sh_addralign;     /* Address alignment boundary. */
-    Elf32_Word    sh_entsize;       /* Size of entries, if section has table. */
-} Elf32_Shdr;
-
-
-/*
- * Program header.
- */
-typedef struct
-{
-    Elf32_Word    p_type;           /* Type of segment. */
-    Elf32_Off     p_offset;         /* Offset in file. */
-    Elf32_Addr    p_vaddr;          /* Virtual address in memory. */
-    Elf32_Addr    p_paddr;          /* Physical address (reserved). */
-    Elf32_Word    p_filesz;         /* Size of segment in file. */
-    Elf32_Word    p_memsz;          /* Size of segment in memory. */
-    Elf32_Word    p_flags;          /* Segment attributes. */
-    Elf32_Word    p_align;          /* Alignment of segment. */
-} Elf32_Phdr;
-
-
-/*
- * Note header.
- */
-typedef struct
-{
-    Elf32_Word    n_namesz;         /* Length of note's name. */
-    Elf32_Word    n_descsz;         /* Length of note's description. */
-    Elf32_Word    n_type;           /* Type of note. */
-} Elf32_Nhdr;
-
-
-/*
- * Symbol table entry.
- */
-typedef struct
-{
-    Elf32_Word    st_name;          /* Symbol name. */
-    Elf32_Addr    st_value;         /* Symbol value. */
-    Elf32_Word    st_size;          /* Size associated with symbol. */
-    unsigned char st_info;          /* Type and binding attributes. */
-    unsigned char st_other;         /* Reserved. */
-    Elf32_Half    st_shndx;         /* Section header table index. */
-} Elf32_Sym;
-
-
-/*
- * Relocations.
- */
-typedef struct
-{
-    Elf32_Addr    r_offset;         /* Location to be relocated. */
-    Elf32_Word    r_info;           /* Symbol index and type of relocation. */
-} Elf32_Rel;
-
-typedef struct
-{
-    Elf32_Addr    r_offset;         /* Location to be relocated. */
-    Elf32_Word    r_info;           /* Symbol index and type of relocation. */
-    Elf32_Sword   r_addend;         /* Constant part of expression. */
-} Elf32_Rela;
-
-/*
- * Dynamic section entry.
- * ".dynamic" section contains an array of this.
- */
-typedef struct
-{
-    Elf32_Sword   d_tag;            /* Type of entry. */
-    union
-    {
-        Elf32_Word    d_val;        /* Integer value. */
-        Elf32_Addr    d_ptr;        /* Virtual address value. */
-    } d_un;
-} Elf32_Dyn;
-
-/*
- * Helper macros.
- */
-/** The symbol's type. */
-#define ELF32_ST_TYPE(info)         ((info) & 0xF)
-/** The symbol's binding. */
-#define ELF32_ST_BIND(info)         ((info) >> 4)
-/** Make st_info. given binding and type. */
-#define ELF32_ST_INFO(bind, type)   (((bind) << 4) + ((type) & 0xf))
-
-/** Relocation type. */
-#define ELF32_R_TYPE(info)          ((unsigned char)(info))
-/** Relocation symbol index. */
-#define ELF32_R_SYM(info)           ((info) >> 8)
-/** Make r_info given the symbol index and type.  */
-#define ELF32_R_INFO(sym, type)     (((sym) << 8) + (unsigned char)(type))
-
-
-#endif /* !___internal_ldrELF32_h */
-
diff --git a/src/VBox/Runtime/include/internal/ldrELF64.h b/src/VBox/Runtime/include/internal/ldrELF64.h
deleted file mode 100644
index 5ed7b58..0000000
--- a/src/VBox/Runtime/include/internal/ldrELF64.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* $Id: ldrELF64.h $ */
-/** @file
- * IPRT - ELF 64-bit header.
- */
-
-/*
- * Copyright (C) 2010-2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-#ifndef ___internal_ldrELF64_h
-#define ___internal_ldrELF64_h
-
-#include <iprt/assert.h>            /* Added by Ramshankar */
-
-#include "ldrELFCommon.h"
-
-/*
- * ELF 64 standard types.
- */
-typedef uint64_t        Elf64_Addr;
-typedef uint64_t        Elf64_Off;
-typedef uint16_t        Elf64_Half;
-typedef uint32_t        Elf64_Word;
-typedef int32_t         Elf64_Sword;
-typedef uint64_t        Elf64_Xword;
-typedef int64_t         Elf64_Sxword;
-
-/*
- * Ensure type size correctness in accordance to ELF-64 Object File Format, Version 1.5 Draft 2, p2.
- */
-AssertCompileSize(Elf64_Addr,    8);
-AssertCompileSize(Elf64_Off,     8);
-AssertCompileSize(Elf64_Half,    2);
-AssertCompileSize(Elf64_Word,    4);
-AssertCompileSize(Elf64_Sword,   4);
-AssertCompileSize(Elf64_Xword,   8);
-AssertCompileSize(Elf64_Sxword,  8);
-
-/*
- * ELF 64 non-standard types for convenience.
- */
-typedef Elf64_Xword     Elf64_Size;
-typedef Elf64_Word      Elf64_Hashelt;
-
-/*
- * ELF Header.
- */
-typedef struct
-{
-    unsigned char e_ident[16];      /* ELF identification. */
-    Elf64_Half    e_type;           /* Object file type. */
-    Elf64_Half    e_machine;        /* Machine type. */
-    Elf64_Word    e_version;        /* Object file version. */
-    Elf64_Addr    e_entry;          /* Entry point address. */
-    Elf64_Off     e_phoff;          /* Program header offset. */
-    Elf64_Off     e_shoff;          /* Section header offset. */
-    Elf64_Word    e_flags;          /* Processor-specific flags. */
-    Elf64_Half    e_ehsize;         /* ELF header size. */
-    Elf64_Half    e_phentsize;      /* Size of program header entry. */
-    Elf64_Half    e_phnum;          /* Number of program header entries. */
-    Elf64_Half    e_shentsize;      /* Size of section header entry. */
-    Elf64_Half    e_shnum;          /* Number of section header entries. */
-    Elf64_Half    e_shstrndx;       /* Section name string table index. */
-} Elf64_Ehdr;
-
-/*
- * Section header.
- */
-typedef struct
-{
-    Elf64_Word    sh_name;          /* Section name. */
-    Elf64_Word    sh_type;          /* Section type. */
-    Elf64_Xword   sh_flags;         /* Section attributes. */
-    Elf64_Addr    sh_addr;          /* Virtual address in memory. */
-    Elf64_Off     sh_offset;        /* Offset in file. */
-    Elf64_Xword   sh_size;          /* Size of section. */
-    Elf64_Word    sh_link;          /* Link to other section. */
-    Elf64_Word    sh_info;          /* Miscellaneous information. */
-    Elf64_Xword   sh_addralign;     /* Address alignment boundary. */
-    Elf64_Xword   sh_entsize;       /* Size of entries, if section has table. */
-} Elf64_Shdr;
-
-/*
- * Program header.
- */
-typedef struct
-{
-    Elf64_Word    p_type;           /* Type of segment. */
-    Elf64_Word    p_flags;          /* Segment attributes. */
-    Elf64_Off     p_offset;         /* Offset in file. */
-    Elf64_Addr    p_vaddr;          /* Virtual address in memory. */
-    Elf64_Addr    p_paddr;          /* Physical address (reserved). */
-    Elf64_Xword   p_filesz;         /* Size of segment in file. */
-    Elf64_Xword   p_memsz;          /* Size of segment in memory. */
-    Elf64_Xword   p_align;          /* Alignment of segment. */
-} Elf64_Phdr;
-
-/*
- * Note header.
- */
-typedef struct
-{
-    Elf64_Word    n_namesz;         /* Length of note's name. */
-    Elf64_Word    n_descsz;         /* Length of note's description. */
-    Elf64_Word    n_type;           /* Type of note. */
-} Elf64_Nhdr;
-
-/*
- * Symbol table entry.
- */
-typedef struct
-{
-    Elf64_Word    st_name;          /* Symbol name. */
-    unsigned char st_info;          /* Type and binding attributes. */
-    unsigned char st_other;         /* Reserved. */
-    Elf64_Half    st_shndx;         /* Section header table index. */
-    Elf64_Addr    st_value;         /* Symbol value. */
-    Elf64_Xword   st_size;          /* Size associated with symbol. */
-} Elf64_Sym;
-
-/*
- * Relocations.
- */
-typedef struct
-{
-    Elf64_Addr    r_offset;         /* Location to be relocated. */
-    Elf64_Xword   r_info;           /* Symbol index and type of relocation. */
-} Elf64_Rel;
-
-typedef struct
-{
-    Elf64_Addr    r_offset;         /* Location to be relocated. */
-    Elf64_Xword   r_info;           /* Symbol index and type of relocation. */
-    Elf64_Sxword  r_addend;         /* Constant part of expression. */
-} Elf64_Rela;
-
-/*
- * Dynamic section entry.
- * ".dynamic" section contains an array of this.
- */
-typedef struct
-{
-    Elf64_Sxword  d_tag;            /* Type of entry. */
-    union
-    {
-        Elf64_Xword   d_val;        /* Integer value. */
-        Elf64_Addr    d_ptr;        /* Virtual address value. */
-    } d_un;
-} Elf64_Dyn;
-
-/*
- * Helper macros.
- */
-/** The symbol's type. */
-#define ELF64_ST_TYPE(info)         ((info) & 0xF)
-/** The symbol's binding. */
-#define ELF64_ST_BIND(info)         ((info) >> 4)
-/** Make st_info. given binding and type. */
-#define ELF64_ST_INFO(bind, type)   (((bind) << 4) + ((type) & 0xf))
-
-/** Relocation type. */
-#define ELF64_R_TYPE(info)          ((unsigned char)(info))
-/** Relocation symbol index. */
-#define ELF64_R_SYM(info)           ((info) >> 32)
-/** Make r_info given the symbol index and type.  */
-#define ELF64_R_INFO(sym, type)     (((sym) << 32) + (unsigned char)(type))
-
-
-#endif /* !___internal_ldrELF64_h */
-
diff --git a/src/VBox/Runtime/include/internal/ldrELFAmd64.h b/src/VBox/Runtime/include/internal/ldrELFAmd64.h
deleted file mode 100644
index cd92510..0000000
--- a/src/VBox/Runtime/include/internal/ldrELFAmd64.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*-
- * Copyright (c) 1996-1997 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef ___internal_ldrELFAmd64_h
-#define	___internal_ldrELFAmd64_h
-
-/*
- * ELF definitions for the AMD64 architecture.
- */
-
-#if 0 /* later */
-/*
- * Auxiliary vector entries for passing information to the interpreter.
- *
- * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
- * but POSIX lays claim to all symbols ending with "_t".
- */
-typedef struct {	/* Auxiliary vector entry on initial stack */
-	int	a_type;			/* Entry type. */
-	union {
-		int	a_val;		/* Integer value. */
-	} a_un;
-} Elf32_Auxinfo;
-
-
-typedef struct {	/* Auxiliary vector entry on initial stack */
-	long	a_type;			/* Entry type. */
-	union {
-		long	a_val;		/* Integer value. */
-		void	*a_ptr;		/* Address. */
-		void	(*a_fcn)(void);	/* Function pointer (not used). */
-	} a_un;
-} Elf64_Auxinfo;
-
-__ElfType(Auxinfo);
-
-/* Values for a_type. */
-#define	AT_NULL		0	/* Terminates the vector. */
-#define	AT_IGNORE	1	/* Ignored entry. */
-#define	AT_EXECFD	2	/* File descriptor of program to load. */
-#define	AT_PHDR		3	/* Program header of program already loaded. */
-#define	AT_PHENT	4	/* Size of each program header entry. */
-#define	AT_PHNUM	5	/* Number of program header entries. */
-#define	AT_PAGESZ	6	/* Page size in bytes. */
-#define	AT_BASE		7	/* Interpreter's base address. */
-#define	AT_FLAGS	8	/* Flags (unused for i386). */
-#define	AT_ENTRY	9	/* Where interpreter should transfer control. */
-
-/*
- * The following non-standard values are used for passing information
- * from John Polstra's testbed program to the dynamic linker.  These
- * are expected to go away soon.
- *
- * Unfortunately, these overlap the Linux non-standard values, so they
- * must not be used in the same context.
- */
-#define	AT_BRK		10	/* Starting point for sbrk and brk. */
-#define	AT_DEBUG	11	/* Debugging level. */
-
-/*
- * The following non-standard values are used in Linux ELF binaries.
- */
-#define	AT_NOTELF	10	/* Program is not ELF ?? */
-#define	AT_UID		11	/* Real uid. */
-#define	AT_EUID		12	/* Effective uid. */
-#define	AT_GID		13	/* Real gid. */
-#define	AT_EGID		14	/* Effective gid. */
-
-#define	AT_COUNT	15	/* Count of defined aux entry types. */
-
-#endif /* later */
-
-/*
- * Relocation types.
- */
-
-#define	R_X86_64_NONE	0	/* No relocation. */
-#define	R_X86_64_64	1	/* Add 64 bit symbol value. */
-#define	R_X86_64_PC32	2	/* PC-relative 32 bit signed sym value. */
-#define	R_X86_64_GOT32	3	/* PC-relative 32 bit GOT offset. */
-#define	R_X86_64_PLT32	4	/* PC-relative 32 bit PLT offset. */
-#define	R_X86_64_COPY	5	/* Copy data from shared object. */
-#define	R_X86_64_GLOB_DAT 6	/* Set GOT entry to data address. */
-#define	R_X86_64_JMP_SLOT 7	/* Set GOT entry to code address. */
-#define	R_X86_64_RELATIVE 8	/* Add load address of shared object. */
-#define	R_X86_64_GOTPCREL 9	/* Add 32 bit signed pcrel offset to GOT. */
-#define	R_X86_64_32	10	/* Add 32 bit zero extended symbol value */
-#define	R_X86_64_32S	11	/* Add 32 bit sign extended symbol value */
-#define	R_X86_64_16	12	/* Add 16 bit zero extended symbol value */
-#define	R_X86_64_PC16	13	/* Add 16 bit signed extended pc relative symbol value */
-#define	R_X86_64_8	14	/* Add 8 bit zero extended symbol value */
-#define	R_X86_64_PC8	15	/* Add 8 bit signed extended pc relative symbol value */
-#define	R_X86_64_DTPMOD64 16	/* ID of module containing symbol */
-#define	R_X86_64_DTPOFF64 17	/* Offset in TLS block */
-#define	R_X86_64_TPOFF64 18	/* Offset in static TLS block */
-#define	R_X86_64_TLSGD	19	/* PC relative offset to GD GOT entry */
-#define	R_X86_64_TLSLD	20	/* PC relative offset to LD GOT entry */
-#define	R_X86_64_DTPOFF32 21	/* Offset in TLS block */
-#define	R_X86_64_GOTTPOFF 22	/* PC relative offset to IE GOT entry */
-#define	R_X86_64_TPOFF32 23	/* Offset in static TLS block */
-
-#define	R_X86_64_COUNT	24	/* Count of defined relocation types. */
-
-#endif
-
diff --git a/src/VBox/Runtime/include/internal/ldrELFCommon.h b/src/VBox/Runtime/include/internal/ldrELFCommon.h
deleted file mode 100644
index 352a639..0000000
--- a/src/VBox/Runtime/include/internal/ldrELFCommon.h
+++ /dev/null
@@ -1,336 +0,0 @@
-/*-
- * Copyright (c) 1998 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef ___internal_ldrELFCommon_h
-#define ___internal_ldrELFCommon_h
-
-#include <iprt/stdint.h>
-
-/*
- * ELF definitions that are independent of architecture or word size.
- */
-
-/*
- * Note header.  The ".note" section contains an array of notes.  Each
- * begins with this header, aligned to a word boundary.  Immediately
- * following the note header is n_namesz bytes of name, padded to the
- * next word boundary.  Then comes n_descsz bytes of descriptor, again
- * padded to a word boundary.  The values of n_namesz and n_descsz do
- * not include the padding.
- */
-
-typedef struct {
-	uint32_t	n_namesz;	/* Length of name. */
-	uint32_t	n_descsz;	/* Length of descriptor. */
-	uint32_t	n_type;		/* Type of this note. */
-} Elf_Note;
-
-/* Indexes into the e_ident array.  Keep synced with
-   http://www.sco.com/developer/gabi/ch4.eheader.html */
-#define EI_MAG0		0	/* Magic number, byte 0. */
-#define EI_MAG1		1	/* Magic number, byte 1. */
-#define EI_MAG2		2	/* Magic number, byte 2. */
-#define EI_MAG3		3	/* Magic number, byte 3. */
-#define EI_CLASS	4	/* Class of machine. */
-#define EI_DATA		5	/* Data format. */
-#define EI_VERSION	6	/* ELF format version. */
-#define EI_OSABI	7	/* Operating system / ABI identification */
-#define EI_ABIVERSION	8	/* ABI version */
-#define OLD_EI_BRAND	8	/* Start of architecture identification. */
-#define EI_PAD		9	/* Start of padding (per SVR4 ABI). */
-#define EI_NIDENT	16	/* Size of e_ident array. */
-
-/* Values for the magic number bytes. */
-#define ELFMAG0		0x7f
-#define ELFMAG1		'E'
-#define ELFMAG2		'L'
-#define ELFMAG3		'F'
-#define ELFMAG		"\177ELF"	/* magic string */
-#define SELFMAG		4		/* magic string size */
-
-/* Values for e_ident[EI_VERSION] and e_version. */
-#define EV_NONE		0
-#define EV_CURRENT	1
-
-/* Values for e_ident[EI_CLASS]. */
-#define ELFCLASSNONE	0	/* Unknown class. */
-#define ELFCLASS32	1	/* 32-bit architecture. */
-#define ELFCLASS64	2	/* 64-bit architecture. */
-
-/* Values for e_ident[EI_DATA]. */
-#define ELFDATANONE	0	/* Unknown data format. */
-#define ELFDATA2LSB	1	/* 2's complement little-endian. */
-#define ELFDATA2MSB	2	/* 2's complement big-endian. */
-
-/* Values for e_ident[EI_OSABI]. */
-#define ELFOSABI_SYSV		0	/* UNIX System V ABI */
-#define ELFOSABI_NONE		ELFOSABI_SYSV	/* symbol used in old spec */
-#define ELFOSABI_HPUX		1	/* HP-UX operating system */
-#define ELFOSABI_NETBSD		2	/* NetBSD */
-#define ELFOSABI_LINUX		3	/* GNU/Linux */
-#define ELFOSABI_HURD		4	/* GNU/Hurd */
-#define ELFOSABI_86OPEN		5	/* 86Open common IA32 ABI */
-#define ELFOSABI_SOLARIS	6	/* Solaris */
-#define ELFOSABI_MONTEREY	7	/* Monterey */
-#define ELFOSABI_IRIX		8	/* IRIX */
-#define ELFOSABI_FREEBSD	9	/* FreeBSD */
-#define ELFOSABI_TRU64		10	/* TRU64 UNIX */
-#define ELFOSABI_MODESTO	11	/* Novell Modesto */
-#define ELFOSABI_OPENBSD	12	/* OpenBSD */
-#define ELFOSABI_ARM		97	/* ARM */
-#define ELFOSABI_STANDALONE	255	/* Standalone (embedded) application */
-
-/* e_ident */
-#define IS_ELF(ehdr)	((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \
-			 (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \
-			 (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \
-			 (ehdr).e_ident[EI_MAG3] == ELFMAG3)
-
-/* Values for e_type. */
-#define ET_NONE		0	/* Unknown type. */
-#define ET_REL		1	/* Relocatable. */
-#define ET_EXEC		2	/* Executable. */
-#define ET_DYN		3	/* Shared object. */
-#define ET_CORE		4	/* Core file. */
-
-/* Values for e_machine. */
-#define EM_NONE		0	/* Unknown machine. */
-#define EM_M32		1	/* AT&T WE32100. */
-#define EM_SPARC	2	/* Sun SPARC. */
-#define EM_386		3	/* Intel i386. */
-#define EM_68K		4	/* Motorola 68000. */
-#define EM_88K		5	/* Motorola 88000. */
-#define EM_486		6	/* Intel i486. */
-#define EM_860		7	/* Intel i860. */
-#define EM_MIPS		8	/* MIPS R3000 Big-Endian only */
-
-/* Extensions.  This list is not complete. */
-#define EM_S370		9	/* IBM System/370 */
-#define EM_MIPS_RS4_BE	10	/* MIPS R4000 Big-Endian */ /* Depreciated */
-#define EM_PARISC	15	/* HPPA */
-#define EM_SPARC32PLUS	18	/* SPARC v8plus */
-#define EM_PPC		20	/* PowerPC 32-bit */
-#define EM_PPC64	21	/* PowerPC 64-bit */
-#define EM_ARM		40	/* ARM */
-#define EM_SPARCV9	43	/* SPARC v9 64-bit */
-#define EM_IA_64	50	/* Intel IA-64 Processor */
-#define EM_X86_64	62	/* Advanced Micro Devices x86-64 */
-#define EM_AMD64    EM_X86_64   /* SunOS compatibility (added by Ramshankar) */
-#define EM_ALPHA	0x9026	/* Alpha (written in the absence of an ABI */
-
-/* Special section indexes. */
-#define SHN_UNDEF	     0		/* Undefined, missing, irrelevant. */
-#define SHN_LORESERVE	0xff00		/* First of reserved range. */
-#define SHN_LOPROC	0xff00		/* First processor-specific. */
-#define SHN_HIPROC	0xff1f		/* Last processor-specific. */
-#define SHN_ABS		0xfff1		/* Absolute values. */
-#define SHN_COMMON	0xfff2		/* Common data. */
-#define SHN_HIRESERVE	0xffff		/* Last of reserved range. */
-
-/* sh_type */
-#define SHT_NULL	0		/* inactive */
-#define SHT_PROGBITS	1		/* program defined information */
-#define SHT_SYMTAB	2		/* symbol table section */
-#define SHT_STRTAB	3		/* string table section */
-#define SHT_RELA	4		/* relocation section with addends */
-#define SHT_HASH	5		/* symbol hash table section */
-#define SHT_DYNAMIC	6		/* dynamic section */
-#define SHT_NOTE	7		/* note section */
-#define SHT_NOBITS	8		/* no space section */
-#define SHT_REL		9		/* relocation section - no addends */
-#define SHT_SHLIB	10		/* reserved - purpose unknown */
-#define SHT_DYNSYM	11		/* dynamic symbol table section */
-#define SHT_NUM		12		/* number of section types */
-#define SHT_LOOS	0x60000000	/* First of OS specific semantics */
-#define SHT_HIOS	0x6fffffff	/* Last of OS specific semantics */
-#define SHT_LOPROC	0x70000000	/* reserved range for processor */
-#define SHT_HIPROC	0x7fffffff	/* specific section header types */
-#define SHT_LOUSER	0x80000000	/* reserved range for application */
-#define SHT_HIUSER	0xffffffff	/* specific indexes */
-
-/* Flags for sh_flags. */
-#define SHF_WRITE	0x1		/* Section contains writable data. */
-#define SHF_ALLOC	0x2		/* Section occupies memory. */
-#define SHF_EXECINSTR	0x4		/* Section contains instructions. */
-#define SHF_TLS		0x400		/* Section contains TLS data. */
-#define SHF_MASKPROC	0xf0000000	/* Reserved for processor-specific. */
-
-/* Values for p_type. */
-#define PT_NULL		0	/* Unused entry. */
-#define PT_LOAD		1	/* Loadable segment. */
-#define PT_DYNAMIC	2	/* Dynamic linking information segment. */
-#define PT_INTERP	3	/* Pathname of interpreter. */
-#define PT_NOTE		4	/* Auxiliary information. */
-#define PT_SHLIB	5	/* Reserved (not used). */
-#define PT_PHDR		6	/* Location of program header itself. */
-#define	PT_TLS		7	/* Thread local storage segment */
-
-#define PT_COUNT	8	/* Number of defined p_type values. */
-
-#define	PT_LOOS		0x60000000	/* OS-specific */
-#define	PT_HIOS		0x6fffffff	/* OS-specific */
-#define PT_LOPROC	0x70000000	/* First processor-specific type. */
-#define PT_HIPROC	0x7fffffff	/* Last processor-specific type. */
-
-/* Values for p_flags. */
-#define PF_X		0x1	/* Executable. */
-#define PF_W		0x2	/* Writable. */
-#define PF_R		0x4	/* Readable. */
-
-/* Values for d_tag. */
-#define DT_NULL		0	/* Terminating entry. */
-#define DT_NEEDED	1	/* String table offset of a needed shared
-				   library. */
-#define DT_PLTRELSZ	2	/* Total size in bytes of PLT relocations. */
-#define DT_PLTGOT	3	/* Processor-dependent address. */
-#define DT_HASH		4	/* Address of symbol hash table. */
-#define DT_STRTAB	5	/* Address of string table. */
-#define DT_SYMTAB	6	/* Address of symbol table. */
-#define DT_RELA		7	/* Address of ElfNN_Rela relocations. */
-#define DT_RELASZ	8	/* Total size of ElfNN_Rela relocations. */
-#define DT_RELAENT	9	/* Size of each ElfNN_Rela relocation entry. */
-#define DT_STRSZ	10	/* Size of string table. */
-#define DT_SYMENT	11	/* Size of each symbol table entry. */
-#define DT_INIT		12	/* Address of initialization function. */
-#define DT_FINI		13	/* Address of finalization function. */
-#define DT_SONAME	14	/* String table offset of shared object
-				   name. */
-#define DT_RPATH	15	/* String table offset of library path. [sup] */
-#define DT_SYMBOLIC	16	/* Indicates "symbolic" linking. [sup] */
-#define DT_REL		17	/* Address of ElfNN_Rel relocations. */
-#define DT_RELSZ	18	/* Total size of ElfNN_Rel relocations. */
-#define DT_RELENT	19	/* Size of each ElfNN_Rel relocation. */
-#define DT_PLTREL	20	/* Type of relocation used for PLT. */
-#define DT_DEBUG	21	/* Reserved (not used). */
-#define DT_TEXTREL	22	/* Indicates there may be relocations in
-				   non-writable segments. [sup] */
-#define DT_JMPREL	23	/* Address of PLT relocations. */
-#define	DT_BIND_NOW	24	/* [sup] */
-#define	DT_INIT_ARRAY	25	/* Address of the array of pointers to
-				   initialization functions */
-#define	DT_FINI_ARRAY	26	/* Address of the array of pointers to
-				   termination functions */
-#define	DT_INIT_ARRAYSZ	27	/* Size in bytes of the array of
-				   initialization functions. */
-#define	DT_FINI_ARRAYSZ	28	/* Size in bytes of the array of
-				   terminationfunctions. */
-#define	DT_RUNPATH	29	/* String table offset of a null-terminated
-				   library search path string. */
-#define	DT_FLAGS	30	/* Object specific flag values. */
-#define	DT_ENCODING	32	/* Values greater than or equal to DT_ENCODING
-				   and less than DT_LOOS follow the rules for
-				   the interpretation of the d_un union
-				   as follows: even == 'd_ptr', even == 'd_val'
-				   or none */
-#define	DT_PREINIT_ARRAY 32	/* Address of the array of pointers to
-				   pre-initialization functions. */
-#define	DT_PREINIT_ARRAYSZ 33	/* Size in bytes of the array of
-				   pre-initialization functions. */
-
-#define	DT_COUNT	33	/* Number of defined d_tag values. */
-
-#define	DT_LOOS		0x6000000d	/* First OS-specific */
-#define	DT_HIOS		0x6fff0000	/* Last OS-specific */
-#define	DT_LOPROC	0x70000000	/* First processor-specific type. */
-#define	DT_HIPROC	0x7fffffff	/* Last processor-specific type. */
-
-/* Values for DT_FLAGS */
-#define	DF_ORIGIN	0x0001	/* Indicates that the object being loaded may
-				   make reference to the $ORIGIN substitution
-				   string */
-#define	DF_SYMBOLIC	0x0002	/* Indicates "symbolic" linking. */
-#define	DF_TEXTREL	0x0004	/* Indicates there may be relocations in
-				   non-writable segments. */
-#define	DF_BIND_NOW	0x0008	/* Indicates that the dynamic linker should
-				   process all relocations for the object
-				   containing this entry before transferring
-				   control to the program. */
-#define	DF_STATIC_TLS	0x0010	/* Indicates that the shared object or
-				   executable contains code using a static
-				   thread-local storage scheme. */
-
-/* Values for n_type.  Used in core files. */
-#if defined(RT_OS_FREEBSD)  /* (added by Ramshankar) */
-#define NT_PRSTATUS	1	/* Process status. */
-#define NT_FPREGSET	2	/* Floating point registers. */
-#define NT_PRPSINFO	3	/* Process state info. */
-#elif defined(RT_OS_SOLARIS) /* (added by Ramshankar) */
-#define	NT_PRSTATUS	1	/* prstatus_t <sys/old_procfs.h>	*/
-#define	NT_PRFPREG	2	/* prfpregset_t	<sys/old_procfs.h>	*/
-#define	NT_PRPSINFO	3	/* prpsinfo_t <sys/old_procfs.h>	*/
-#define	NT_PRXREG	4	/* prxregset_t <sys/procfs.h> */
-#define	NT_PLATFORM	5	/* string from sysinfo(SI_PLATFORM)	*/
-#define	NT_AUXV		6	/* auxv_t array	<sys/auxv.h> */
-#define	NT_LDT		9	/* ssd array <sys/sysi86.h> IA32 only */
-#define	NT_PSTATUS	10	/* pstatus_t <sys/procfs.h> */
-#define	NT_PSINFO	13	/* psinfo_t	<sys/procfs.h> */
-#define	NT_PRCRED	14	/* prcred_t	<sys/procfs.h> */
-#define	NT_UTSNAME	15	/* struct utsname <sys/utsname.h> */
-#define	NT_LWPSTATUS	16	/* lwpstatus_t	<sys/procfs.h> */
-#define	NT_LWPSINFO	17	/* lwpsinfo_t <sys/procfs.h> */
-#define	NT_PRPRIV	18	/* prpriv_t	<sys/procfs.h>	*/
-#define	NT_PRPRIVINFO	19	/* priv_impl_info_t <sys/priv.h> */
-#define	NT_CONTENT	20	/* core_content_t <sys/corectl.h> */
-#define	NT_ZONENAME	21	/* string from getzonenamebyid(3C) */
-#define	PF_SUNW_FAILURE	0x00100000	/* mapping absent due to failure */
-#define	PN_XNUM		0xffff	/* extended program header index */
-#elif defined(RT_OS_LINUX) /* (added by Ramshankar) */
-#define NT_PRSTATUS     1   /* Process status. */
-#define NT_PRFPREG      2   /* Floating point registers. */
-#define NT_PRPSINFO     3   /* Process state info. */
-#define NT_TASKSTRUCT   4   /* Task info. */
-#define NT_AUXV         6   /* Process auxiliary vectors. */
-#define NT_PRXFPREG     0x46e62b7f /* from gdb5.1/include/elf/common.h */
-#endif
-
-/* VirtualBox specific NOTE sections (added by Ramshankar) */
-#ifdef VBOX
-#define NT_VBOXCORE 0xb00
-#define NT_VBOXCPU  0xb01
-#endif
-
-/* Symbol Binding - ELFNN_ST_BIND - st_info */
-#define STB_LOCAL	0	/* Local symbol */
-#define STB_GLOBAL	1	/* Global symbol */
-#define STB_WEAK	2	/* like global - lower precedence */
-#define STB_LOPROC	13	/* reserved range for processor */
-#define STB_HIPROC	15	/*  specific symbol bindings */
-
-/* Symbol type - ELFNN_ST_TYPE - st_info */
-#define STT_NOTYPE	0	/* Unspecified type. */
-#define STT_OBJECT	1	/* Data object. */
-#define STT_FUNC	2	/* Function. */
-#define STT_SECTION	3	/* Section. */
-#define STT_FILE	4	/* Source file. */
-#define STT_TLS		6	/* TLS object. */
-#define STT_NUM		7	/* Number of generic symbol types. */
-#define STT_LOPROC	13	/* reserved range for processor */
-#define STT_HIPROC	15	/*  specific symbol types */
-
-/* Special symbol table indexes. */
-#define STN_UNDEF	0	/* Undefined symbol index. */
-
-#endif
diff --git a/src/VBox/Runtime/include/internal/ldrELFi386.h b/src/VBox/Runtime/include/internal/ldrELFi386.h
deleted file mode 100644
index 611c0ce..0000000
--- a/src/VBox/Runtime/include/internal/ldrELFi386.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*-
- * Copyright (c) 1996-1997 John D. Polstra.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef ___internal_ldrELFi386_h
-#define ___internal_ldrELFi386_h
-
-#if 0  /* later */
-
-/*
- * Auxiliary vector entries for passing information to the interpreter.
- *
- * The i386 supplement to the SVR4 ABI specification names this "auxv_t",
- * but POSIX lays claim to all symbols ending with "_t".
- */
-
-typedef struct {	/* Auxiliary vector entry on initial stack */
-	int	a_type;			/* Entry type. */
-	union {
-		long	a_val;		/* Integer value. */
-		void	*a_ptr;		/* Address. */
-		void	(*a_fcn)(void);	/* Function pointer (not used). */
-	} a_un;
-} Elf32_Auxinfo;
-
-#if __ELF_WORD_SIZE == 64
-/* Fake for amd64 loader support */
-typedef struct {
-	int fake;
-} Elf64_Auxinfo;
-#endif
-
-/* Values for a_type. */
-#define	AT_NULL		0	/* Terminates the vector. */
-#define	AT_IGNORE	1	/* Ignored entry. */
-#define	AT_EXECFD	2	/* File descriptor of program to load. */
-#define	AT_PHDR		3	/* Program header of program already loaded. */
-#define	AT_PHENT	4	/* Size of each program header entry. */
-#define	AT_PHNUM	5	/* Number of program header entries. */
-#define	AT_PAGESZ	6	/* Page size in bytes. */
-#define	AT_BASE		7	/* Interpreter's base address. */
-#define	AT_FLAGS	8	/* Flags (unused for i386). */
-#define	AT_ENTRY	9	/* Where interpreter should transfer control. */
-
-/*
- * The following non-standard values are used for passing information
- * from John Polstra's testbed program to the dynamic linker.  These
- * are expected to go away soon.
- *
- * Unfortunately, these overlap the Linux non-standard values, so they
- * must not be used in the same context.
- */
-#define	AT_BRK		10	/* Starting point for sbrk and brk. */
-#define	AT_DEBUG	11	/* Debugging level. */
-
-/*
- * The following non-standard values are used in Linux ELF binaries.
- */
-#define	AT_NOTELF	10	/* Program is not ELF ?? */
-#define	AT_UID		11	/* Real uid. */
-#define	AT_EUID		12	/* Effective uid. */
-#define	AT_GID		13	/* Real gid. */
-#define	AT_EGID		14	/* Effective gid. */
-
-#define	AT_COUNT	15	/* Count of defined aux entry types. */
-
-#endif /* later */
-
-
-/*
- * Relocation types.
- */
-
-#define	R_386_NONE	0	/* No relocation. */
-#define	R_386_32	1	/* Add symbol value. */
-#define	R_386_PC32	2	/* Add PC-relative symbol value. */
-#define	R_386_GOT32	3	/* Add PC-relative GOT offset. */
-#define	R_386_PLT32	4	/* Add PC-relative PLT offset. */
-#define	R_386_COPY	5	/* Copy data from shared object. */
-#define	R_386_GLOB_DAT	6	/* Set GOT entry to data address. */
-#define	R_386_JMP_SLOT	7	/* Set GOT entry to code address. */
-#define	R_386_RELATIVE	8	/* Add load address of shared object. */
-#define	R_386_GOTOFF	9	/* Add GOT-relative symbol address. */
-#define	R_386_GOTPC	10	/* Add PC-relative GOT table address. */
-#define	R_386_TLS_TPOFF	14	/* Negative offset in static TLS block */
-#define	R_386_TLS_IE	15	/* Absolute address of GOT for -ve static TLS */
-#define	R_386_TLS_GOTIE	16	/* GOT entry for negative static TLS block */
-#define	R_386_TLS_LE	17	/* Negative offset relative to static TLS */
-#define	R_386_TLS_GD	18	/* 32 bit offset to GOT (index,off) pair */
-#define	R_386_TLS_LDM	19	/* 32 bit offset to GOT (index,zero) pair */
-#define	R_386_TLS_GD_32	24	/* 32 bit offset to GOT (index,off) pair */
-#define	R_386_TLS_GD_PUSH 25	/* pushl instruction for Sun ABI GD sequence */
-#define	R_386_TLS_GD_CALL 26	/* call instruction for Sun ABI GD sequence */
-#define	R_386_TLS_GD_POP 27	/* popl instruction for Sun ABI GD sequence */
-#define	R_386_TLS_LDM_32 28	/* 32 bit offset to GOT (index,zero) pair */
-#define	R_386_TLS_LDM_PUSH 29	/* pushl instruction for Sun ABI LD sequence */
-#define	R_386_TLS_LDM_CALL 30	/* call instruction for Sun ABI LD sequence */
-#define	R_386_TLS_LDM_POP 31	/* popl instruction for Sun ABI LD sequence */
-#define	R_386_TLS_LDO_32 32	/* 32 bit offset from start of TLS block */
-#define	R_386_TLS_IE_32	33	/* 32 bit offset to GOT static TLS offset entry */
-#define	R_386_TLS_LE_32	34	/* 32 bit offset within static TLS block */
-#define	R_386_TLS_DTPMOD32 35	/* GOT entry containing TLS index */
-#define	R_386_TLS_DTPOFF32 36	/* GOT entry containing TLS offset */
-#define	R_386_TLS_TPOFF32 37	/* GOT entry of -ve static TLS offset */
-
-#define	R_386_COUNT	38	/* Count of defined relocation types. */
-
-#endif
-
diff --git a/src/VBox/Runtime/include/internal/magics.h b/src/VBox/Runtime/include/internal/magics.h
index 7fd1778..cc453bd 100644
--- a/src/VBox/Runtime/include/internal/magics.h
+++ b/src/VBox/Runtime/include/internal/magics.h
@@ -46,9 +46,9 @@
 #define RTDBGMODVTIMG_MAGIC             UINT32_C(0x19350419)
 /** Magic value for RTDBGKRNLINFOINT::u32Magic. (John Carmack) */
 #define RTDBGKRNLINFO_MAGIC             UINT32_C(0x19700820)
-/** The value of RTDIR::u32Magic. (Michael Ende) */
+/** The value of RTDIRINTERNAL::u32Magic. (Michael Ende) */
 #define RTDIR_MAGIC                     UINT32_C(0x19291112)
-/** The value of RTDIR::u32Magic after RTDirClose().  */
+/** The value of RTDIRINTERNAL::u32Magic after RTDirClose().  */
 #define RTDIR_MAGIC_DEAD                UINT32_C(0x19950829)
 /** The value of RTDVMINTERNAL::u32Magic. (Dan Brown) */
 #define RTDVM_MAGIC                     UINT32_C(0x19640622)
diff --git a/src/VBox/Runtime/include/internal/path.h b/src/VBox/Runtime/include/internal/path.h
index 46caaa4..8cafe24 100644
--- a/src/VBox/Runtime/include/internal/path.h
+++ b/src/VBox/Runtime/include/internal/path.h
@@ -131,6 +131,14 @@ int rtPathFromNativeCopy(char *pszPath, size_t cbPath, const char *pszNativePath
 int rtPathFromNativeDup(char **ppszPath, const char *pszNativePath, const char *pszBasePath);
 
 
+#if defined(RT_OS_WINDOWS) && defined(___iprt_fs_h) && defined(UNICODE_NULL)
+DECLHIDDEN(int) rtPathNtQueryInfoWorker(HANDLE hRootDir, struct _UNICODE_STRING *pNtName, PRTFSOBJINFO pObjInfo,
+                                        RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags, const char *pszPath);
+DECLHIDDEN(int) rtPathNtQueryInfoFromHandle(HANDLE hFile, void *pvBuf, size_t cbBuf, PRTFSOBJINFO pObjInfo,
+                                            RTFSOBJATTRADD enmAddAttr, const char *pszPath, ULONG uReparseTag);
+#endif
+
+
 RT_C_DECLS_END
 
 #endif
diff --git a/src/VBox/Runtime/iprt.d b/src/VBox/Runtime/iprt.d
index cb3a6f7..c142c87 100644
--- a/src/VBox/Runtime/iprt.d
+++ b/src/VBox/Runtime/iprt.d
@@ -13,6 +13,15 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
  */
 
 provider iprt
diff --git a/src/VBox/Runtime/nt/RTErrConvertFromNtStatus.cpp b/src/VBox/Runtime/nt/RTErrConvertFromNtStatus.cpp
index 5513b38..201d1e4 100644
--- a/src/VBox/Runtime/nt/RTErrConvertFromNtStatus.cpp
+++ b/src/VBox/Runtime/nt/RTErrConvertFromNtStatus.cpp
@@ -80,6 +80,8 @@ RTDECL(int)  RTErrConvertFromNtStatus(long lNativeCode)
         case STATUS_OBJECT_PATH_SYNTAX_BAD: return VERR_INVALID_NAME;
         case STATUS_BAD_NETWORK_PATH:       return VERR_NET_PATH_NOT_FOUND;
         case STATUS_NOT_A_DIRECTORY:        return VERR_NOT_A_DIRECTORY;
+        case STATUS_DIRECTORY_NOT_EMPTY:    return VERR_DIR_NOT_EMPTY;
+        case STATUS_SHARING_VIOLATION:      return VERR_SHARING_VIOLATION;
 
         case STATUS_UNEXPECTED_NETWORK_ERROR:
                                             return VERR_NET_IO_ERROR;
diff --git a/src/VBox/Runtime/nt/fileioutils-nt.cpp b/src/VBox/Runtime/nt/fileioutils-nt.cpp
new file mode 100644
index 0000000..8986ea2
--- /dev/null
+++ b/src/VBox/Runtime/nt/fileioutils-nt.cpp
@@ -0,0 +1,179 @@
+/* $Id: fileioutils-nt.cpp $ */
+/** @file
+ * IPRT - File I/O, common NT helpers.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/nt/nt.h>
+#include "internal/iprt.h"
+
+#include <iprt/err.h>
+#include "internal/file.h"
+
+
+
+/**
+ * Helper for converting RTFILE_O_XXX to the various NtCreateFile flags.
+ *
+ * @returns IPRT status code
+ * @param   fOpen               The RTFILE_O_XXX flags to convert.
+ * @param   pfDesiredAccess     Where to return the desired access mask.
+ * @param   pfObjAttribs        Where to return the NT object attributes.
+ * @param   pfFileAttribs       Where to return the file attributes (create).
+ * @param   pfShareAccess       Where to return the file sharing access mask.
+ * @param   pfCreateDisposition Where to return the file create disposition.
+ * @param   pfCreateOptions     Where to return the file open/create options.
+ */
+DECLHIDDEN(int) rtFileNtValidateAndConvertFlags(uint64_t fOpen, uint32_t *pfDesiredAccess, uint32_t *pfObjAttribs,
+                                                uint32_t *pfFileAttribs, uint32_t *pfShareAccess, uint32_t *pfCreateDisposition,
+                                                uint32_t *pfCreateOptions)
+{
+    /*
+     * Merge forced open flags and validate them.
+     */
+    int rc = rtFileRecalcAndValidateFlags(&fOpen);
+    if (RT_FAILURE(rc))
+        return rc;
+
+    /*
+     * Determine disposition, access, share mode, creation flags, and security attributes
+     * for the CreateFile API call.
+     */
+    ULONG fCreateDisposition;
+    switch (fOpen & RTFILE_O_ACTION_MASK)
+    {
+        case RTFILE_O_OPEN:
+            fCreateDisposition = fOpen & RTFILE_O_TRUNCATE ? FILE_OVERWRITE : FILE_OPEN;
+            break;
+        case RTFILE_O_OPEN_CREATE:
+            fCreateDisposition = FILE_OPEN_IF;
+            break;
+        case RTFILE_O_CREATE:
+            fCreateDisposition = FILE_CREATE;
+            break;
+        case RTFILE_O_CREATE_REPLACE:
+            fCreateDisposition = FILE_SUPERSEDE;
+            break;
+        default:
+            AssertMsgFailed(("Impossible fOpen=%#llx\n", fOpen));
+            return VERR_INVALID_PARAMETER;
+    }
+
+    ACCESS_MASK fDesiredAccess;
+    switch (fOpen & RTFILE_O_ACCESS_MASK)
+    {
+        case RTFILE_O_READ:
+            fDesiredAccess = FILE_GENERIC_READ; /* RTFILE_O_APPEND is ignored. */
+            break;
+        case RTFILE_O_WRITE:
+            fDesiredAccess = fOpen & RTFILE_O_APPEND
+                           ? FILE_GENERIC_WRITE & ~FILE_WRITE_DATA
+                           : FILE_GENERIC_WRITE;
+            break;
+        case RTFILE_O_READWRITE:
+            fDesiredAccess = fOpen & RTFILE_O_APPEND
+                           ? 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)
+            {
+                fDesiredAccess = 0;
+                break;
+            }
+            RT_FALL_THRU();
+        default:
+            AssertMsgFailed(("Impossible fOpen=%#llx\n", fOpen));
+            return VERR_INVALID_PARAMETER;
+    }
+    if (fCreateDisposition == FILE_OVERWRITE)
+        /* Required for truncating the file (see MSDN), it is *NOT* part of FILE_GENERIC_WRITE. */
+        fDesiredAccess |= GENERIC_WRITE;
+
+    /* RTFileSetMode needs following rights as well. */
+    switch (fOpen & RTFILE_O_ACCESS_ATTR_MASK)
+    {
+        case RTFILE_O_ACCESS_ATTR_READ:      fDesiredAccess |= FILE_READ_ATTRIBUTES  | SYNCHRONIZE; break;
+        case RTFILE_O_ACCESS_ATTR_WRITE:     fDesiredAccess |= FILE_WRITE_ATTRIBUTES | SYNCHRONIZE; break;
+        case RTFILE_O_ACCESS_ATTR_READWRITE: fDesiredAccess |= FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE; break;
+        default:
+            /* Attributes access is the same as the file access. */
+            switch (fOpen & RTFILE_O_ACCESS_MASK)
+            {
+                case RTFILE_O_READ:          fDesiredAccess |= FILE_READ_ATTRIBUTES  | SYNCHRONIZE; break;
+                case RTFILE_O_WRITE:         fDesiredAccess |= FILE_WRITE_ATTRIBUTES | SYNCHRONIZE; break;
+                case RTFILE_O_READWRITE:     fDesiredAccess |= FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES | SYNCHRONIZE; break;
+                default:
+                    AssertMsgFailed(("Impossible fOpen=%#llx\n", fOpen));
+                    return VERR_INVALID_PARAMETER;
+            }
+    }
+
+    ULONG fShareAccess;
+    switch (fOpen & RTFILE_O_DENY_MASK)
+    {
+        case RTFILE_O_DENY_NONE:                                fShareAccess = FILE_SHARE_READ | FILE_SHARE_WRITE; break;
+        case RTFILE_O_DENY_READ:                                fShareAccess = FILE_SHARE_WRITE; break;
+        case RTFILE_O_DENY_WRITE:                               fShareAccess = FILE_SHARE_READ; break;
+        case RTFILE_O_DENY_READWRITE:                           fShareAccess = 0; break;
+
+        case RTFILE_O_DENY_NOT_DELETE:                          fShareAccess = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE; break;
+        case RTFILE_O_DENY_NOT_DELETE | RTFILE_O_DENY_READ:     fShareAccess = FILE_SHARE_DELETE | FILE_SHARE_WRITE; break;
+        case RTFILE_O_DENY_NOT_DELETE | RTFILE_O_DENY_WRITE:    fShareAccess = FILE_SHARE_DELETE | FILE_SHARE_READ; break;
+        case RTFILE_O_DENY_NOT_DELETE | RTFILE_O_DENY_READWRITE:fShareAccess = FILE_SHARE_DELETE; break;
+        default:
+            AssertMsgFailed(("Impossible fOpen=%#llx\n", fOpen));
+            return VERR_INVALID_PARAMETER;
+    }
+
+    ULONG fObjAttribs = 0;
+    if (fOpen & RTFILE_O_INHERIT)
+        fObjAttribs = OBJ_INHERIT;
+
+    ULONG fCreateOptions = FILE_NON_DIRECTORY_FILE;
+    if (fOpen & RTFILE_O_WRITE_THROUGH)
+        fCreateOptions |= FILE_WRITE_THROUGH;
+    if (!(fOpen & RTFILE_O_ASYNC_IO))
+        fCreateOptions |= FILE_SYNCHRONOUS_IO_NONALERT;
+    if (fOpen & RTFILE_O_NO_CACHE)
+    {
+        fCreateOptions |= FILE_NO_INTERMEDIATE_BUFFERING;
+        fDesiredAccess &= ~FILE_APPEND_DATA;
+    }
+
+    /*
+     * Done.
+     */
+    *pfDesiredAccess        = fDesiredAccess;
+    *pfObjAttribs           = fObjAttribs;
+    *pfFileAttribs          = FILE_ATTRIBUTE_NORMAL;
+    *pfShareAccess          = fShareAccess;
+    *pfCreateDisposition    = fCreateDisposition;
+    *pfCreateOptions        = fCreateOptions;
+    return VINF_SUCCESS;
+}
+
diff --git a/src/VBox/Runtime/os2/sys0.asm b/src/VBox/Runtime/os2/sys0.asm
index 6920f6d..847773b 100644
--- a/src/VBox/Runtime/os2/sys0.asm
+++ b/src/VBox/Runtime/os2/sys0.asm
@@ -53,4 +53,3 @@ BEGINBSS
 global __bss_start
 __bss_start:
 
-
diff --git a/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp b/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
index ec874f7..2d16a43 100644
--- a/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
+++ b/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
@@ -48,6 +48,12 @@ RT_C_DECLS_END
 # include <stdio.h> /* for printf */
 #endif
 
+#if !defined(IN_RING0) && !defined(DOXYGEN_RUNNING) /* A linking tweak for the testcase: */
+# include <iprt/cdefs.h>
+# undef  RTR0DECL
+# define RTR0DECL(type) DECLHIDDEN(type) RTCALL
+#endif
+
 #include "internal/iprt.h"
 #include <iprt/dbg.h>
 
@@ -117,6 +123,10 @@ RT_C_DECLS_END
 
 #define VERR_LDR_UNEXPECTED     (-641)
 
+#ifndef RT_OS_DARWIN
+# define MAC_OS_X_VERSION_MIN_REQUIRED 1050
+#endif
+
 
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
@@ -562,8 +572,9 @@ static int rtR0DbgKrnlDarwinCheckStandardSymbols(RTDBGKRNLINFOINT *pThis)
  *
  * @returns IPRT status code.
  * @param   pThis               The internal scratch data.
+ * @param   pszKernelFile       The name of the kernel file.
  */
-static int rtR0DbgKrnlDarwinLoadSymTab(RTDBGKRNLINFOINT *pThis)
+static int rtR0DbgKrnlDarwinLoadSymTab(RTDBGKRNLINFOINT *pThis, const char *pszKernelFile)
 {
     /*
      * Load the tables.
@@ -601,7 +612,11 @@ static int rtR0DbgKrnlDarwinLoadSymTab(RTDBGKRNLINFOINT *pThis)
     for (uint32_t iSym = 0; iSym < cSyms; iSym++, pSym++)
     {
         if ((uint32_t)pSym->n_un.n_strx >= pThis->cbStrTab)
+        {
+            printf("RTR0DbgKrnlInfoOpen: %s: Symbol #%u has a bad string table index: %#x vs cbStrTab=%#x\n",
+                   pszKernelFile, iSym, pSym->n_un.n_strx, pThis->cbStrTab);
             RETURN_VERR_BAD_EXE_FORMAT;
+        }
         const char *pszSym = &pThis->pachStrTab[(uint32_t)pSym->n_un.n_strx];
 #ifdef IN_RING3
         RTAssertMsg2("%05i: %02x:%08llx %02x %04x %s\n", iSym, pSym->n_sect, (uint64_t)pSym->n_value, pSym->n_type, pSym->n_desc, pszSym);
@@ -616,42 +631,76 @@ static int rtR0DbgKrnlDarwinLoadSymTab(RTDBGKRNLINFOINT *pThis)
             {
                 case MACHO_N_SECT:
                     if (pSym->n_sect == MACHO_NO_SECT)
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Symbol #%u '%s' problem: n_sect = MACHO_NO_SECT\n",
+                               pszKernelFile, iSym, pszSym);
                         RETURN_VERR_BAD_EXE_FORMAT;
+                    }
                     if (pSym->n_sect > pThis->cSections)
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Symbol #%u '%s' problem: n_sect (%u) is higher than cSections (%u)\n",
+                               pszKernelFile, iSym, pszSym, pSym->n_sect, pThis->cSections);
                         RETURN_VERR_BAD_EXE_FORMAT;
-                    if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY))
+                    }
+                    if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY | N_WEAK_DEF))
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Symbol #%u '%s' problem: Unexpected value n_desc=%#x\n",
+                               pszKernelFile, iSym, pszSym, pSym->n_desc);
                         RETURN_VERR_BAD_EXE_FORMAT;
+                    }
                     if (   pSym->n_value < pThis->apSections[pSym->n_sect - 1]->addr
                         && strcmp(pszSym, "__mh_execute_header"))    /* in 10.8 it's no longer absolute (PIE?). */
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Symbol #%u '%s' problem: n_value (%#llx) < section addr (%#llx)\n",
+                               pszKernelFile, iSym, pszSym, pSym->n_value, pThis->apSections[pSym->n_sect - 1]->addr);
                         RETURN_VERR_BAD_EXE_FORMAT;
+                    }
                     if (      pSym->n_value - pThis->apSections[pSym->n_sect - 1]->addr
                            > pThis->apSections[pSym->n_sect - 1]->size
                         && strcmp(pszSym, "__mh_execute_header"))    /* see above. */
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Symbol #%u '%s' problem: n_value (%#llx) >= end of section (%#llx + %#llx)\n",
+                               pszKernelFile, iSym, pszSym, pSym->n_value, pThis->apSections[pSym->n_sect - 1]->addr,
+                               pThis->apSections[pSym->n_sect - 1]->size);
                         RETURN_VERR_BAD_EXE_FORMAT;
+                    }
                     break;
 
                 case MACHO_N_ABS:
                     if (   pSym->n_sect != MACHO_NO_SECT
                         && (   strcmp(pszSym, "__mh_execute_header") /* n_sect=1 in 10.7/amd64 */
                             || pSym->n_sect > pThis->cSections) )
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Abs symbol #%u '%s' problem: n_sect (%u) is not MACHO_NO_SECT (cSections is %u)\n",
+                               pszKernelFile, iSym, pszSym, pSym->n_sect, pThis->cSections);
                         RETURN_VERR_BAD_EXE_FORMAT;
-                    if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY))
+                    }
+                    if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY | N_WEAK_DEF))
+                    {
+                        printf("RTR0DbgKrnlInfoOpen: %s: Abs symbol #%u '%s' problem: Unexpected value n_desc=%#x\n",
+                               pszKernelFile, iSym, pszSym, pSym->n_desc);
                         RETURN_VERR_BAD_EXE_FORMAT;
+                    }
                     break;
 
                 case MACHO_N_UNDF:
                     /* No undefined or common symbols in the kernel. */
+                    printf("RTR0DbgKrnlInfoOpen: %s: Unexpected undefined symbol #%u '%s'\n", pszKernelFile, iSym, pszSym);
                     RETURN_VERR_BAD_EXE_FORMAT;
 
                 case MACHO_N_INDR:
                     /* No indirect symbols in the kernel. */
+                    printf("RTR0DbgKrnlInfoOpen: %s: Unexpected indirect symbol #%u '%s'\n", pszKernelFile, iSym, pszSym);
                     RETURN_VERR_BAD_EXE_FORMAT;
 
                 case MACHO_N_PBUD:
                     /* No prebound symbols in the kernel. */
+                    printf("RTR0DbgKrnlInfoOpen: %s: Unexpected prebound symbol #%u '%s'\n", pszKernelFile, iSym, pszSym);
                     RETURN_VERR_BAD_EXE_FORMAT;
 
                 default:
+                    printf("RTR0DbgKrnlInfoOpen: %s: Unexpected symbol n_type %#x for symbol #%u '%s'\n",
+                           pszKernelFile, pSym->n_type, iSym, pszSym);
                     RETURN_VERR_BAD_EXE_FORMAT;
             }
         }
@@ -1045,7 +1094,7 @@ static int rtR0DbgKrnlDarwinOpen(PRTDBGKRNLINFO phKrnlInfo, const char *pszKerne
     if (RT_SUCCESS(rc))
         rc = rtR0DbgKrnlDarwinLoadCommands(pThis);
     if (RT_SUCCESS(rc))
-        rc = rtR0DbgKrnlDarwinLoadSymTab(pThis);
+        rc = rtR0DbgKrnlDarwinLoadSymTab(pThis, pszKernelFile);
     if (RT_SUCCESS(rc))
     {
 #ifdef IN_RING0
@@ -1085,18 +1134,24 @@ RTR0DECL(int) RTR0DbgKrnlInfoOpen(PRTDBGKRNLINFO phKrnlInfo, uint32_t fFlags)
      * Note! We should try fish kcsuffix out of bootargs or somewhere one day.
      */
     static bool s_fFirstCall = true;
+#ifdef IN_RING3
+    extern const char *g_pszTestKernel;
+#endif
     struct
     {
         const char *pszLocation;
         int         rc;
     } aKernels[] =
     {
+#ifdef IN_RING3
+        { g_pszTestKernel, VERR_WRONG_ORDER },
+#endif
         { "/System/Library/Kernels/kernel", VERR_WRONG_ORDER },
         { "/System/Library/Kernels/kernel.development", VERR_WRONG_ORDER },
         { "/System/Library/Kernels/kernel.debug", VERR_WRONG_ORDER },
         { "/mach_kernel", VERR_WRONG_ORDER },
     };
-    int rc;
+    int rc = VERR_WRONG_ORDER; /* shut up stupid MSC */
     for (uint32_t i = 0; i < RT_ELEMENTS(aKernels); i++)
     {
         aKernels[i].rc = rc = rtR0DbgKrnlDarwinOpen(phKrnlInfo, aKernels[i].pszLocation);
diff --git a/src/VBox/Runtime/r0drv/netbsd/alloc-r0drv-netbsd.c b/src/VBox/Runtime/r0drv/netbsd/alloc-r0drv-netbsd.c
index c0f47fb..e269f79 100644
--- a/src/VBox/Runtime/r0drv/netbsd/alloc-r0drv-netbsd.c
+++ b/src/VBox/Runtime/r0drv/netbsd/alloc-r0drv-netbsd.c
@@ -21,6 +21,8 @@
  *
  * You may elect to license modified versions of this file under the
  * terms and conditions of either the GPL or the CDDL or both.
+ * ---------------------------------------------------------------------------
+ *
  * This code is based on:
  *
  * Copyright (c) 2014 Arto Huusko
diff --git a/src/VBox/Runtime/r0drv/netbsd/process-r0drv-netbsd.c b/src/VBox/Runtime/r0drv/netbsd/process-r0drv-netbsd.c
index cc304e6..5b58bfe 100644
--- a/src/VBox/Runtime/r0drv/netbsd/process-r0drv-netbsd.c
+++ b/src/VBox/Runtime/r0drv/netbsd/process-r0drv-netbsd.c
@@ -4,6 +4,8 @@
  */
 
 /*
+ * Copyright (c) 2007 knut st. osmundsen <bird-src-spam at anduin.net>
+ *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
  * files (the "Software"), to deal in the Software without
@@ -46,3 +48,4 @@ RTR0DECL(RTR0PROCESS) RTR0ProcHandleSelf(void)
 {
     return (RTR0PROCESS)curproc;
 }
+
diff --git a/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp b/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp
index 3cdc601..ff70f47 100644
--- a/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp
+++ b/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp
@@ -1002,8 +1002,8 @@ static RTEXITCODE processDirSub(char *pszDir, size_t cchDir, PRTDIRENTRYEX pDirE
         return RTMsgErrorExit(RTEXITCODE_FAILURE, "Path too long: '%s'\n", pszDir);
 
     /* Open directory. */
-    PRTDIR pDir;
-    int rc = RTDirOpen(&pDir, pszDir);
+    RTDIR hDir;
+    int rc = RTDirOpen(&hDir, pszDir);
     if (RT_FAILURE(rc))
         return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDirOpen failed on '%s': %Rrc\n", pszDir, rc);
 
@@ -1022,13 +1022,12 @@ static RTEXITCODE processDirSub(char *pszDir, size_t cchDir, PRTDIRENTRYEX pDirE
     {
         /* Get the next directory. */
         size_t cbDirEntry = MY_DIRENTRY_BUF_SIZE;
-        rc = RTDirReadEx(pDir, pDirEntry, &cbDirEntry, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+        rc = RTDirReadEx(hDir, pDirEntry, &cbDirEntry, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
         if (RT_FAILURE(rc))
             break;
 
         /* Skip the dot and dot-dot links. */
-        if (   (pDirEntry->cbName == 1 && pDirEntry->szName[0] == '.')
-            || (pDirEntry->cbName == 2 && pDirEntry->szName[0] == '.' && pDirEntry->szName[1] == '.'))
+        if (RTDirEntryExIsStdDotLink(pDirEntry))
             continue;
 
         /* Check length. */
@@ -1076,7 +1075,7 @@ static RTEXITCODE processDirSub(char *pszDir, size_t cchDir, PRTDIRENTRYEX pDirE
     if (rc != VERR_NO_MORE_FILES)
         rcExit = RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDirReadEx failed: %Rrc\npszDir=%.*s", rc, cchDir, pszDir);
 
-    rc = RTDirClose(pDir);
+    rc = RTDirClose(hDir);
     if (RT_FAILURE(rc))
         rcExit = RTMsgErrorExit(RTEXITCODE_FAILURE, "RTDirClose failed: %Rrc\npszDir=%.*s", rc, cchDir, pszDir);
     return rcExit;
@@ -1153,7 +1152,7 @@ int main(int argc, char **argv)
                 break;
 
             case 'V':
-                RTPrintf("$Revision: 118412 $");
+                RTPrintf("$Revision: 119153 $");
                 break;
 
             case 'h':
diff --git a/src/VBox/Runtime/r3/dir.cpp b/src/VBox/Runtime/r3/dir.cpp
index cab8210..a09fc3c 100644
--- a/src/VBox/Runtime/r3/dir.cpp
+++ b/src/VBox/Runtime/r3/dir.cpp
@@ -46,8 +46,8 @@
 #include "internal/path.h"
 
 
-static DECLCALLBACK(bool) rtDirFilterWinNtMatch(PRTDIR pDir, const char *pszName);
-static DECLCALLBACK(bool) rtDirFilterWinNtMatchNoWildcards(PRTDIR pDir, const char *pszName);
+static DECLCALLBACK(bool) rtDirFilterWinNtMatch(PRTDIRINTERNAL pDir, const char *pszName);
+static DECLCALLBACK(bool) rtDirFilterWinNtMatchNoWildcards(PRTDIRINTERNAL pDir, const char *pszName);
 DECLINLINE(bool) rtDirFilterWinNtMatchEon(PCRTUNICP puszFilter);
 static bool rtDirFilterWinNtMatchDosStar(unsigned iDepth, RTUNICP uc, const char *pszNext, PCRTUNICP puszFilter);
 static bool rtDirFilterWinNtMatchStar(unsigned iDepth, RTUNICP uc, const char *pszNext, PCRTUNICP puszFilter);
@@ -116,7 +116,7 @@ RTDECL(int) RTDirCreateFullPath(const char *pszPath, RTFMODE fMode)
  * @param   pDir        The directory handle.
  * @param   pszName     The path to match to the filter.
  */
-static DECLCALLBACK(bool) rtDirFilterWinNtMatchNoWildcards(PRTDIR pDir, const char *pszName)
+static DECLCALLBACK(bool) rtDirFilterWinNtMatchNoWildcards(PRTDIRINTERNAL pDir, const char *pszName)
 {
     /*
      * Walk the string and compare.
@@ -446,7 +446,7 @@ static bool rtDirFilterWinNtMatchBase(unsigned iDepth, const char *pszName, PCRT
  * @param   pDir        The directory handle.
  * @param   pszName     The path to match to the filter.
  */
-static DECLCALLBACK(bool) rtDirFilterWinNtMatch(PRTDIR pDir, const char *pszName)
+static DECLCALLBACK(bool) rtDirFilterWinNtMatch(PRTDIRINTERNAL pDir, const char *pszName)
 {
     return rtDirFilterWinNtMatchBase(0, pszName, pDir->puszFilter);
 }
@@ -459,7 +459,7 @@ static DECLCALLBACK(bool) rtDirFilterWinNtMatch(PRTDIR pDir, const char *pszName
  * @returns NULL if the filter doesn't filter out anything.
  * @param   pDir        The directory handle (not yet opened).
  */
-static PFNRTDIRFILTER rtDirFilterWinNtInit(PRTDIR pDir)
+static PFNRTDIRFILTER rtDirFilterWinNtInit(PRTDIRINTERNAL pDir)
 {
     /*
      * Check for the usual * and <"< (*.* in DOS language) patterns.
@@ -505,12 +505,19 @@ static PFNRTDIRFILTER rtDirFilterWinNtInit(PRTDIR pDir)
  * Common worker for opening a directory.
  *
  * @returns IPRT status code.
- * @param   ppDir       Where to store the directory handle.
- * @param   pszPath     The specified path.
- * @param   pszFilter   Pointer to where the filter start in the path. NULL if no filter.
- * @param   enmFilter   The type of filter to apply.
+ * @param   phDir               Where to store the directory handle.
+ * @param   pszPath             The specified path.
+ * @param   pszFilter           Pointer to where the filter start in the path.
+ *                              NULL if no filter.
+ * @param   enmFilter           The type of filter to apply.
+ * @param   fFlags              RTDIR_F_XXX.
+ * @param   hRelativeDir        The directory @a pvNativeRelative is relative
+ *                              to, ~(uintptr_t)0 if absolute.
+ * @param   pvNativeRelative    The native relative path.  NULL if absolute or
+ *                              we're to use (consume) hRelativeDir.
  */
-static int rtDirOpenCommon(PRTDIR *ppDir, const char *pszPath, const char *pszFilter, RTDIRFILTER enmFilter)
+static int rtDirOpenCommon(RTDIR *phDir, const char *pszPath, const char *pszFilter, RTDIRFILTER enmFilter,
+                           uint32_t fFlags, uintptr_t hRelativeDir, void *pvNativeRelative)
 {
     /*
      * Expand the path.
@@ -568,7 +575,7 @@ static int rtDirOpenCommon(PRTDIR *ppDir, const char *pszPath, const char *pszFi
                              + cucFilter0 * sizeof(RTUNICP)
                              + cbFilter
                              + cchRealPath + 1 + 4;
-    PRTDIR pDir = (PRTDIR)RTMemAllocZ(cbAllocated);
+    PRTDIRINTERNAL pDir = (PRTDIRINTERNAL)RTMemAllocZ(cbAllocated);
     if (!pDir)
         return VERR_NO_MEMORY;
     uint8_t *pb = (uint8_t *)pDir + cbDir;
@@ -613,16 +620,17 @@ static int rtDirOpenCommon(PRTDIR *ppDir, const char *pszPath, const char *pszFi
     pDir->cchPath = cchRealPath;
     pDir->pszPath = (char *)memcpy(pb, szRealPath, cchRealPath + 1);
     Assert(pb - (uint8_t *)pDir + cchRealPath + 1 <= cbAllocated);
-    pDir->fDataUnread = false;
     pDir->pszName = NULL;
     pDir->cchName = 0;
+    pDir->fFlags  = fFlags;
+    pDir->fDataUnread = false;
 
     /*
      * Hand it over to the native part.
      */
-    rc = rtDirNativeOpen(pDir, szRealPath);
+    rc = rtDirNativeOpen(pDir, szRealPath, hRelativeDir, pvNativeRelative);
     if (RT_SUCCESS(rc))
-        *ppDir = pDir;
+        *phDir = pDir;
     else
         RTMemFree(pDir);
 
@@ -630,32 +638,32 @@ static int rtDirOpenCommon(PRTDIR *ppDir, const char *pszPath, const char *pszFi
 }
 
 
-
-RTDECL(int) RTDirOpen(PRTDIR *ppDir, const char *pszPath)
+RTDECL(int) RTDirOpen(RTDIR *phDir, const char *pszPath)
 {
     /*
      * Validate input.
      */
-    AssertMsgReturn(VALID_PTR(ppDir), ("%p\n", ppDir), VERR_INVALID_POINTER);
+    AssertMsgReturn(VALID_PTR(phDir), ("%p\n", phDir), VERR_INVALID_POINTER);
     AssertMsgReturn(VALID_PTR(pszPath), ("%p\n", pszPath), VERR_INVALID_POINTER);
 
     /*
      * Take common cause with RTDirOpenFiltered().
      */
-    int rc = rtDirOpenCommon(ppDir, pszPath, NULL,  RTDIRFILTER_NONE);
-    LogFlow(("RTDirOpen(%p:{%p}, %p:{%s}): return %Rrc\n", ppDir, *ppDir, pszPath, pszPath, rc));
+    int rc = rtDirOpenCommon(phDir, pszPath, NULL, RTDIRFILTER_NONE, 0 /*fFlags*/, ~(uintptr_t)0, NULL);
+    LogFlow(("RTDirOpen(%p:{%p}, %p:{%s}): return %Rrc\n", phDir, *phDir, pszPath, pszPath, rc));
     return rc;
 }
 
 
-RTDECL(int) RTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fOpen)
+DECLHIDDEN(int) rtDirOpenRelativeOrHandle(RTDIR *phDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fFlags,
+                                          uintptr_t hRelativeDir, void *pvNativeRelative)
 {
     /*
      * Validate input.
      */
-    AssertMsgReturn(VALID_PTR(ppDir), ("%p\n", ppDir), VERR_INVALID_POINTER);
+    AssertMsgReturn(VALID_PTR(phDir), ("%p\n", phDir), VERR_INVALID_POINTER);
     AssertMsgReturn(VALID_PTR(pszPath), ("%p\n", pszPath), VERR_INVALID_POINTER);
-    AssertReturn(!(fOpen & ~RTDIROPEN_FLAGS_NO_SYMLINKS), VERR_INVALID_FLAGS);
+    AssertReturn(!(fFlags & ~RTDIR_F_VALID_MASK), VERR_INVALID_FLAGS);
     switch (enmFilter)
     {
         case RTDIRFILTER_UNIX:
@@ -686,14 +694,27 @@ RTDECL(int) RTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER en
      * Call worker common with RTDirOpen which will verify the path, allocate
      * and initialize the handle, and finally call the backend.
      */
-    int rc = rtDirOpenCommon(ppDir, pszPath, pszFilter, enmFilter);
+    int rc = rtDirOpenCommon(phDir, pszPath, pszFilter, enmFilter, fFlags, hRelativeDir, pvNativeRelative);
 
-    LogFlow(("RTDirOpenFiltered(%p:{%p}, %p:{%s}, %d): return %Rrc\n",
-             ppDir, *ppDir, pszPath, pszPath, enmFilter, rc));
+    LogFlow(("RTDirOpenFiltered(%p:{%p}, %p:{%s}, %d, %#x, %p, %p): return %Rrc\n",
+             phDir,*phDir, pszPath, pszPath, enmFilter, fFlags, hRelativeDir, pvNativeRelative, rc));
     return rc;
 }
 
 
+RTDECL(int) RTDirOpenFiltered(RTDIR *phDir, const char *pszPath, RTDIRFILTER enmFilter, uint32_t fFlags)
+{
+    return rtDirOpenRelativeOrHandle(phDir, pszPath, enmFilter, fFlags, ~(uintptr_t)0, NULL);
+}
+
+
+RTDECL(bool) RTDirIsValid(RTDIR hDir)
+{
+    return RT_VALID_PTR(hDir)
+        && hDir->u32Magic == RTDIR_MAGIC;
+}
+
+
 RTDECL(int) RTDirFlushParent(const char *pszChild)
 {
     char szPath[RTPATH_MAX];
@@ -773,3 +794,61 @@ RTDECL(bool) RTDirEntryExIsStdDotLink(PCRTDIRENTRYEX pDirEntryEx)
     return pDirEntryEx->szName[1] == '.';
 }
 
+
+RTDECL(int) RTDirReadExA(RTDIR hDir, PRTDIRENTRYEX *ppDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAddAttr, uint32_t fFlags)
+{
+    PRTDIRENTRYEX pDirEntry  = *ppDirEntry;
+    size_t        cbDirEntry = *pcbDirEntry;
+    if (pDirEntry != NULL && cbDirEntry >= sizeof(RTDIRENTRYEX))
+    { /* likely */ }
+    else
+    {
+        Assert(pDirEntry == NULL);
+        Assert(cbDirEntry == 0);
+
+        cbDirEntry  = RT_ALIGN_Z(sizeof(RTDIRENTRYEX), 16);
+        *ppDirEntry = pDirEntry = (PRTDIRENTRYEX)RTMemTmpAlloc(cbDirEntry);
+        if (pDirEntry)
+            *pcbDirEntry = cbDirEntry;
+        else
+        {
+            *pcbDirEntry = 0;
+            return VERR_NO_TMP_MEMORY;
+        }
+    }
+
+    for (;;)
+    {
+        int rc = RTDirReadEx(hDir, pDirEntry, &cbDirEntry, enmAddAttr, fFlags);
+        if (rc != VERR_BUFFER_OVERFLOW)
+            return rc;
+
+        /* Grow the buffer. */
+        RTMemTmpFree(pDirEntry);
+        cbDirEntry = RT_MAX(RT_ALIGN_Z(cbDirEntry, 64), *pcbDirEntry + 64);
+        *ppDirEntry = pDirEntry = (PRTDIRENTRYEX)RTMemTmpAlloc(cbDirEntry);
+        if (pDirEntry)
+            *pcbDirEntry = cbDirEntry;
+        else
+        {
+            *pcbDirEntry = 0;
+            return VERR_NO_TMP_MEMORY;
+        }
+    }
+}
+
+
+RTDECL(void) RTDirReadExAFree(PRTDIRENTRYEX *ppDirEntry, size_t *pcbDirEntry)
+{
+    PRTDIRENTRYEX pDirEntry = *ppDirEntry;
+    if (pDirEntry != NULL && *pcbDirEntry >= sizeof(*pcbDirEntry))
+        RTMemTmpFree(pDirEntry);
+    else
+    {
+        Assert(pDirEntry == NULL);
+        Assert(*pcbDirEntry == 0);
+    }
+    *ppDirEntry  = NULL;
+    *pcbDirEntry = 0;
+}
+
diff --git a/src/VBox/Runtime/r3/dir2.cpp b/src/VBox/Runtime/r3/dir2.cpp
index 51ce635..ef6fe01 100644
--- a/src/VBox/Runtime/r3/dir2.cpp
+++ b/src/VBox/Runtime/r3/dir2.cpp
@@ -61,17 +61,13 @@ static int rtDirRemoveRecursiveSub(char *pszBuf, size_t cchDir, PRTDIRENTRY pDir
     /*
      * Enumerate the directory content and dispose of it.
      */
-    PRTDIR pDir;
-    int rc = RTDirOpen(&pDir, pszBuf);
+    RTDIR hDir;
+    int rc = RTDirOpen(&hDir, pszBuf);
     if (RT_FAILURE(rc))
         return rc;
-    while (RT_SUCCESS(rc = RTDirRead(pDir, pDirEntry, NULL)))
+    while (RT_SUCCESS(rc = RTDirRead(hDir, pDirEntry, NULL)))
     {
-        if (   pDirEntry->szName[0] != '.'
-            || pDirEntry->cbName > 2
-            || (   pDirEntry->cbName == 2
-                && pDirEntry->szName[1] != '.')
-           )
+        if (!RTDirEntryIsStdDotLink(pDirEntry))
         {
             /* Construct the full name of the entry. */
             if (cchDir + pDirEntry->cbName + 1 /* dir slash */ >= RTPATH_MAX)
@@ -129,7 +125,7 @@ static int rtDirRemoveRecursiveSub(char *pszBuf, size_t cchDir, PRTDIRENTRY pDir
     }
     if (rc == VERR_NO_MORE_FILES)
         rc = VINF_SUCCESS;
-    RTDirClose(pDir);
+    RTDirClose(hDir);
     return rc;
 }
 
diff --git a/src/VBox/Runtime/r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp b/src/VBox/Runtime/r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp
index 61dbdbe..1b4ae5b 100644
--- a/src/VBox/Runtime/r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp
+++ b/src/VBox/Runtime/r3/generic/RTLocaleQueryNormalizedBaseLocaleName-r3-generic.cpp
@@ -90,4 +90,3 @@ RTDECL(int) RTLocaleQueryNormalizedBaseLocaleName(char *pszName, size_t cbName)
     return rc;
 }
 
-
diff --git a/src/VBox/Runtime/r3/generic/dirrel-r3-generic.cpp b/src/VBox/Runtime/r3/generic/dirrel-r3-generic.cpp
new file mode 100644
index 0000000..28998e2
--- /dev/null
+++ b/src/VBox/Runtime/r3/generic/dirrel-r3-generic.cpp
@@ -0,0 +1,554 @@
+/* $Id: dirrel-r3-generic.cpp $ */
+/** @file
+ * IPRT - Directory relative base APIs, generic implementation.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_DIR
+#include <iprt/dir.h>
+#include "internal/iprt.h"
+
+#include <iprt/assert.h>
+#include <iprt/file.h>
+#include <iprt/err.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+#include <iprt/symlink.h>
+#define RTDIR_AGNOSTIC
+#include "internal/dir.h"
+
+
+
+/**
+ * Helper that builds a full path for a directory relative path.
+ *
+ * @returns IPRT status code.
+ * @param   pThis               The directory.
+ * @param   pszPathDst          The destination buffer.
+ * @param   cbPathDst           The size of the destination buffer.
+ * @param   pszRelPath          The relative path.
+ */
+static int rtDirRelBuildFullPath(PRTDIRINTERNAL pThis, char *pszPathDst, size_t cbPathDst, const char *pszRelPath)
+{
+    AssertMsgReturn(!RTPathStartsWithRoot(pszRelPath), ("pszRelPath='%s'\n", pszRelPath), VERR_PATH_IS_NOT_RELATIVE);
+
+    /*
+     * Let's hope we can avoid checking for ascension.
+     *
+     * Note! We don't take symbolic links into account here.  That can be
+     *       done later if desired.
+     */
+    if (   !(pThis->fFlags & RTDIR_F_DENY_ASCENT)
+        || strstr(pszRelPath, "..") == NULL)
+    {
+        size_t const cchRelPath = strlen(pszRelPath);
+        size_t const cchDirPath = pThis->cchPath;
+        if (cchDirPath + cchRelPath < cbPathDst)
+        {
+            memcpy(pszPathDst, pThis->pszPath, cchDirPath);
+            memcpy(&pszPathDst[cchDirPath], pszRelPath, cchRelPath);
+            pszPathDst[cchDirPath + cchRelPath] = '\0';
+            return VINF_SUCCESS;
+        }
+        return VERR_FILENAME_TOO_LONG;
+    }
+
+    /*
+     * Calc the absolute path using the directory as a base, then check if the result
+     * still starts with the full directory path.
+     *
+     * This ASSUMES that pThis->pszPath is an absolute path.
+     */
+    int rc = RTPathAbsEx(pThis->pszPath, pszRelPath, pszPathDst, cbPathDst);
+    if (RT_SUCCESS(rc))
+    {
+        if (RTPathStartsWith(pszPathDst, pThis->pszPath))
+            return VINF_SUCCESS;
+        return VERR_PATH_NOT_FOUND;
+    }
+    return rc;
+}
+
+
+/*
+ *
+ *
+ * RTFile stuff.
+ * RTFile stuff.
+ * RTFile stuff.
+ *
+ *
+ */
+
+
+
+
+/**
+ * Open a file relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory to open relative to.
+ * @param   pszRelFilename  The relative path to the file.
+ * @param   fOpen           Open flags, i.e a combination of the RTFILE_O_XXX
+ *                          defines.  The ACCESS, ACTION and DENY flags are
+ *                          mandatory!
+ * @param   phFile          Where to store the handle to the opened file.
+ *
+ * @sa      RTFileOpen
+ */
+RTDECL(int)  RTDirRelFileOpen(RTDIR hDir, const char *pszRelFilename, uint64_t fOpen, PRTFILE phFile)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelFilename);
+    if (RT_SUCCESS(rc))
+        rc = RTFileOpen(phFile, szPath, fOpen);
+    return rc;
+}
+
+
+
+/*
+ *
+ *
+ * RTDir stuff.
+ * RTDir stuff.
+ * RTDir stuff.
+ *
+ *
+ */
+
+
+
+/**
+ * Opens a directory relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory to open relative to.
+ * @param   pszDir          The relative path to the directory to open.
+ * @param   phDir           Where to store the directory handle.
+ *
+ * @sa      RTDirOpen
+ */
+RTDECL(int) RTDirRelDirOpen(RTDIR hDir, const char *pszDir, RTDIR *phDir)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszDir);
+    if (RT_SUCCESS(rc))
+        rc = RTDirOpen(phDir, szPath);
+    return rc;
+
+}
+
+
+/**
+ * Opens a directory relative to @a hDir, with flags and optional filtering.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory to open relative to.
+ * @param   pszDirAndFilter The relative path to the directory to search, this
+ *                          must include wildcards.
+ * @param   enmFilter       The kind of filter to apply. Setting this to
+ *                          RTDIRFILTER_NONE makes this function behave like
+ *                          RTDirOpen.
+ * @param   fFlags          Open flags, RTDIR_F_XXX.
+ * @param   phDir           Where to store the directory handle.
+ *
+ * @sa      RTDirOpenFiltered
+ */
+RTDECL(int) RTDirRelDirOpenFiltered(RTDIR hDir, const char *pszDirAndFilter, RTDIRFILTER enmFilter,
+                                    uint32_t fFlags, RTDIR *phDir)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszDirAndFilter);
+    if (RT_SUCCESS(rc))
+        rc = RTDirOpenFiltered(phDir, szPath, enmFilter, fFlags);
+    return rc;
+}
+
+
+/**
+ * Creates a directory relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the directory to create.
+ * @param   fMode           The mode of the new directory.
+ * @param   fCreate         Create flags, RTDIRCREATE_FLAGS_XXX.
+ * @param   phSubDir        Where to return the handle of the created directory.
+ *                          Optional.
+ *
+ * @sa      RTDirCreate
+ */
+RTDECL(int) RTDirRelDirCreate(RTDIR hDir, const char *pszRelPath, RTFMODE fMode, uint32_t fCreate, RTDIR *phSubDir)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTDirCreate(szPath, fMode, fCreate);
+        if (RT_SUCCESS(rc) && phSubDir)
+            rc = RTDirOpen(phSubDir, szPath);
+    }
+    return rc;
+}
+
+
+/**
+ * Removes a directory relative to @a hDir if empty.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the directory to remove.
+ *
+ * @sa      RTDirRemove
+ */
+RTDECL(int) RTDirRelDirRemove(RTDIR hDir, const char *pszRelPath)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+        rc = RTDirRemove(szPath);
+    return rc;
+}
+
+
+/*
+ *
+ * RTPath stuff.
+ * RTPath stuff.
+ * RTPath stuff.
+ *
+ *
+ */
+
+
+/**
+ * Query information about a file system object relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @retval  VINF_SUCCESS if the object exists, information returned.
+ * @retval  VERR_PATH_NOT_FOUND if any but the last component in the specified
+ *          path was not found or was not a directory.
+ * @retval  VERR_FILE_NOT_FOUND if the object does not exist (but path to the
+ *          parent directory exists).
+ *
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   pObjInfo        Object information structure to be filled on successful
+ *                          return.
+ * @param   enmAddAttr      Which set of additional attributes to request.
+ *                          Use RTFSOBJATTRADD_NOTHING if this doesn't matter.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathQueryInfoEx
+ */
+RTDECL(int) RTDirRelPathQueryInfo(RTDIR hDir, const char *pszRelPath, PRTFSOBJINFO pObjInfo,
+                                  RTFSOBJATTRADD enmAddAttr, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+        rc = RTPathQueryInfoEx(szPath, pObjInfo, enmAddAttr, fFlags);
+    return rc;
+}
+
+
+/**
+ * Changes the mode flags of a file system object relative to @a hDir.
+ *
+ * The API requires at least one of the mode flag sets (Unix/Dos) to
+ * be set. The type is ignored.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   fMode           The new file mode, see @ref grp_rt_fs for details.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathSetMode
+ */
+RTDECL(int) RTDirRelPathSetMode(RTDIR hDir, const char *pszRelPath, RTFMODE fMode, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+    AssertMsgReturn(RTPATH_F_IS_VALID(fFlags, 0), ("%#x\n", fFlags), VERR_INVALID_FLAGS);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+    {
+#ifndef RT_OS_WINDOWS
+        rc = RTPathSetMode(szPath, fMode); /** @todo fFlags is currently ignored. */
+#else
+        rc = VERR_NOT_IMPLEMENTED; /** @todo implement RTPathSetMode on windows. */
+        RT_NOREF(fMode);
+#endif
+    }
+    return rc;
+}
+
+
+/**
+ * Changes one or more of the timestamps associated of file system object
+ * relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir                The directory @a pszRelPath is relative to.
+ * @param   pszRelPath          The relative path to the file system object.
+ * @param   pAccessTime         Pointer to the new access time.
+ * @param   pModificationTime   Pointer to the new modification time.
+ * @param   pChangeTime         Pointer to the new change time. NULL if not to be changed.
+ * @param   pBirthTime          Pointer to the new time of birth. NULL if not to be changed.
+ * @param   fFlags              RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @remark  The file system might not implement all these time attributes,
+ *          the API will ignore the ones which aren't supported.
+ *
+ * @remark  The file system might not implement the time resolution
+ *          employed by this interface, the time will be chopped to fit.
+ *
+ * @remark  The file system may update the change time even if it's
+ *          not specified.
+ *
+ * @remark  POSIX can only set Access & Modification and will always set both.
+ *
+ * @sa      RTPathSetTimesEx
+ */
+RTDECL(int) RTDirRelPathSetTimes(RTDIR hDir, const char *pszRelPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                 PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+        rc = RTPathSetTimesEx(szPath, pAccessTime, pModificationTime, pChangeTime, pBirthTime, fFlags);
+    return rc;
+}
+
+
+/**
+ * Changes the owner and/or group of a file system object relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   uid             The new file owner user id.  Pass NIL_RTUID to leave
+ *                          this unchanged.
+ * @param   gid             The new group id.  Pass NIL_RTGID to leave this
+ *                          unchanged.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathSetOwnerEx
+ */
+RTDECL(int) RTDirRelPathSetOwner(RTDIR hDir, const char *pszRelPath, uint32_t uid, uint32_t gid, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+    {
+#ifndef RT_OS_WINDOWS
+        rc = RTPathSetOwnerEx(szPath, uid, gid, fFlags);
+#else
+        rc = VERR_NOT_IMPLEMENTED;
+        RT_NOREF(uid, gid, fFlags);
+#endif
+    }
+    return rc;
+}
+
+
+/**
+ * Renames a directory relative path within a filesystem.
+ *
+ * This will rename symbolic links.  If RTPATHRENAME_FLAGS_REPLACE is used and
+ * pszDst is a symbolic link, it will be replaced and not its target.
+ *
+ * @returns IPRT status code.
+ * @param   hDirSrc         The directory the source path is relative to.
+ * @param   pszSrc          The source path, relative to @a hDirSrc.
+ * @param   hDirDst         The directory the destination path is relative to.
+ * @param   pszDst          The destination path, relative to @a hDirDst.
+ * @param   fRename         Rename flags, RTPATHRENAME_FLAGS_XXX.
+ *
+ * @sa      RTPathRename
+ */
+RTDECL(int) RTDirRelPathRename(RTDIR hDirSrc, const char *pszSrc, RTDIR hDirDst, const char *pszDst, unsigned fRename)
+{
+    PRTDIRINTERNAL pThis = hDirSrc;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    PRTDIRINTERNAL pThat = hDirDst;
+    if (pThat != pThis)
+    {
+        AssertPtrReturn(pThat, VERR_INVALID_HANDLE);
+        AssertReturn(pThat->u32Magic != RTDIR_MAGIC, VERR_INVALID_HANDLE);
+    }
+
+    char szSrcPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szSrcPath, sizeof(szSrcPath), pszSrc);
+    if (RT_SUCCESS(rc))
+    {
+        char szDstPath[RTPATH_MAX];
+        rc = rtDirRelBuildFullPath(pThis, szDstPath, sizeof(szDstPath), pszDst);
+        if (RT_SUCCESS(rc))
+            rc = RTPathRename(szSrcPath, szDstPath, fRename);
+    }
+    return rc;
+}
+
+
+/**
+ * Removes the last component of the directory relative path.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   fUnlink         Unlink flags, RTPATHUNLINK_FLAGS_XXX.
+ *
+ * @sa      RTPathUnlink
+ */
+RTDECL(int) RTDirRelPathUnlink(RTDIR hDir, const char *pszRelPath, uint32_t fUnlink)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+        rc = RTPathUnlink(szPath, fUnlink);
+    return rc;
+}
+
+
+/*
+ *
+ * RTSymlink stuff.
+ * RTSymlink stuff.
+ * RTSymlink stuff.
+ *
+ *
+ */
+
+
+/**
+ * Creates a symbolic link (@a pszSymlink) relative to @a hDir targeting @a
+ * pszTarget.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszSymlink is relative to.
+ * @param   pszSymlink      The relative path of the symbolic link.
+ * @param   pszTarget       The path to the symbolic link target.  This is
+ *                          relative to @a pszSymlink or an absolute path.
+ * @param   enmType         The symbolic link type.  For Windows compatability
+ *                          it is very important to set this correctly.  When
+ *                          RTSYMLINKTYPE_UNKNOWN is used, the API will try
+ *                          make a guess and may attempt query information
+ *                          about @a pszTarget in the process.
+ * @param   fCreate         Create flags, RTSYMLINKCREATE_FLAGS_XXX.
+ *
+ * @sa      RTSymlinkCreate
+ */
+RTDECL(int) RTDirRelSymlinkCreate(RTDIR hDir, const char *pszSymlink, const char *pszTarget,
+                                  RTSYMLINKTYPE enmType, uint32_t fCreate)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszSymlink);
+    if (RT_SUCCESS(rc))
+        rc = RTSymlinkCreate(szPath, pszTarget, enmType, fCreate);
+    return rc;
+}
+
+
+/**
+ * Read the symlink target relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @retval  VERR_NOT_SYMLINK if @a pszSymlink does not specify a symbolic link.
+ * @retval  VERR_BUFFER_OVERFLOW if the link is larger than @a cbTarget.  The
+ *          buffer will contain what all we managed to read, fully terminated
+ *          if @a cbTarget > 0.
+ *
+ * @param   hDir            The directory @a pszSymlink is relative to.
+ * @param   pszSymlink      The relative path to the symbolic link that should
+ *                          be read.
+ * @param   pszTarget       The target buffer.
+ * @param   cbTarget        The size of the target buffer.
+ * @param   fRead           Read flags, RTSYMLINKREAD_FLAGS_XXX.
+ *
+ * @sa      RTSymlinkRead
+ */
+RTDECL(int) RTDirRelSymlinkRead(RTDIR hDir, const char *pszSymlink, char *pszTarget, size_t cbTarget, uint32_t fRead)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszSymlink);
+    if (RT_SUCCESS(rc))
+        rc = RTSymlinkRead(szPath, pszTarget, cbTarget, fRead);
+    return rc;
+}
+
diff --git a/src/VBox/Runtime/r3/linux/RTProcIsRunningByName-linux.cpp b/src/VBox/Runtime/r3/linux/RTProcIsRunningByName-linux.cpp
index 2b6c037..a2af741 100644
--- a/src/VBox/Runtime/r3/linux/RTProcIsRunningByName-linux.cpp
+++ b/src/VBox/Runtime/r3/linux/RTProcIsRunningByName-linux.cpp
@@ -53,19 +53,20 @@ RTR3DECL(bool) RTProcIsRunningByName(const char *pszName)
     /*
      * Enumerate /proc.
      */
-    PRTDIR pDir;
-    int rc = RTDirOpen(&pDir, "/proc");
+    RTDIR hDir;
+    int rc = RTDirOpen(&hDir, "/proc");
     AssertMsgRCReturn(rc, ("RTDirOpen on /proc failed: rc=%Rrc\n", rc), false);
     if (RT_SUCCESS(rc))
     {
         RTDIRENTRY DirEntry;
-        while (RT_SUCCESS(RTDirRead(pDir, &DirEntry, NULL)))
+        while (RT_SUCCESS(RTDirRead(hDir, &DirEntry, NULL)))
         {
             /*
              * Filter numeric directory entries only.
              */
-            if (    DirEntry.enmType == RTDIRENTRYTYPE_DIRECTORY
-                &&  RTStrToUInt32(DirEntry.szName) > 0)
+            if (   (   DirEntry.enmType == RTDIRENTRYTYPE_DIRECTORY
+                    || DirEntry.enmType == RTDIRENTRYTYPE_UNKNOWN)
+                && RTStrToUInt32(DirEntry.szName) > 0)
             {
                 /*
                  * Try readlink on exe first since it's more faster and reliable.
@@ -103,13 +104,13 @@ RTR3DECL(bool) RTProcIsRunningByName(const char *pszName)
                     if (RTStrCmp(pszProcName, pszName) == 0)
                     {
                         /* Found it! */
-                        RTDirClose(pDir);
+                        RTDirClose(hDir);
                         return true;
                     }
                 }
             }
         }
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
 
     return false;
diff --git a/src/VBox/Runtime/r3/linux/krnlmod-linux.cpp b/src/VBox/Runtime/r3/linux/krnlmod-linux.cpp
index 304efe7..94c19b5 100644
--- a/src/VBox/Runtime/r3/linux/krnlmod-linux.cpp
+++ b/src/VBox/Runtime/r3/linux/krnlmod-linux.cpp
@@ -171,21 +171,20 @@ RTDECL(uint32_t) RTKrnlModLoadedGetCount(void)
 {
     uint32_t cKmodsLoaded = 0;
 
-    PRTDIR pDir = NULL;
-    int rc = RTDirOpen(&pDir, "/sys/module");
+    RTDIR hDir = NULL;
+    int rc = RTDirOpen(&hDir, "/sys/module");
     if (RT_SUCCESS(rc))
     {
         RTDIRENTRY DirEnt;
-        rc = RTDirRead(pDir, &DirEnt, NULL);
+        rc = RTDirRead(hDir, &DirEnt, NULL);
         while (RT_SUCCESS(rc))
         {
-            if (   RTStrCmp(DirEnt.szName, ".")
-                && RTStrCmp(DirEnt.szName, ".."))
+            if (!RTDirEntryIsStdDotLink(&DirEnt))
                 cKmodsLoaded++;
-            rc = RTDirRead(pDir, &DirEnt, NULL);
+            rc = RTDirRead(hDir, &DirEnt, NULL);
         }
 
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
 
 
@@ -206,18 +205,17 @@ RTDECL(int) RTKrnlModLoadedQueryInfoAll(PRTKRNLMODINFO pahKrnlModInfo, uint32_t
         return VERR_BUFFER_OVERFLOW;
     }
 
-    PRTDIR pDir = NULL;
-    int rc = RTDirOpen(&pDir, "/sys/module");
+    RTDIR hDir = NULL;
+    int rc = RTDirOpen(&hDir, "/sys/module");
     if (RT_SUCCESS(rc))
     {
         unsigned idxKrnlModInfo = 0;
         RTDIRENTRY DirEnt;
 
-        rc = RTDirRead(pDir, &DirEnt, NULL);
+        rc = RTDirRead(hDir, &DirEnt, NULL);
         while (RT_SUCCESS(rc))
         {
-            if (   RTStrCmp(DirEnt.szName, ".")
-                && RTStrCmp(DirEnt.szName, ".."))
+            if (!RTDirEntryIsStdDotLink(&DirEnt))
             {
                 rc = rtKrnlModLinuxInfoCreate(DirEnt.szName, &pahKrnlModInfo[idxKrnlModInfo]);
                 if (RT_SUCCESS(rc))
@@ -225,7 +223,7 @@ RTDECL(int) RTKrnlModLoadedQueryInfoAll(PRTKRNLMODINFO pahKrnlModInfo, uint32_t
             }
 
             if (RT_SUCCESS(rc))
-                rc = RTDirRead(pDir, &DirEnt, NULL);
+                rc = RTDirRead(hDir, &DirEnt, NULL);
         }
 
         if (rc == VERR_NO_MORE_FILES)
@@ -240,7 +238,7 @@ RTDECL(int) RTKrnlModLoadedQueryInfoAll(PRTKRNLMODINFO pahKrnlModInfo, uint32_t
         if (*pcEntries)
             *pcEntries = cKmodsLoaded;
 
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
 
     return rc;
diff --git a/src/VBox/Runtime/r3/nt/RTFileSetMode-r3-nt.cpp b/src/VBox/Runtime/r3/nt/RTFileSetMode-r3-nt.cpp
new file mode 100644
index 0000000..6cb527b
--- /dev/null
+++ b/src/VBox/Runtime/r3/nt/RTFileSetMode-r3-nt.cpp
@@ -0,0 +1,82 @@
+/* $Id: RTFileSetMode-r3-nt.cpp $ */
+/** @file
+ * IPRT - RTFileSetMode, Native NT.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_FILE
+#include "internal-r3-nt.h"
+
+#include <iprt/file.h>
+#include <iprt/err.h>
+
+#include "internal/fs.h"
+
+
+/**
+ * Common worker for RTFileSetMode, RTPathSetMode and RTDirRelPathSetMode.
+ *
+ * @returns IPRT status code.
+ * @param   hNativeFile The NT handle to the file system object.
+ * @param   fMode       Valid and normalized file mode mask to set.
+ */
+DECLHIDDEN(int) rtNtFileSetModeWorker(HANDLE hNativeFile, RTFMODE fMode)
+{
+    IO_STATUS_BLOCK         Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+    FILE_BASIC_INFORMATION  BasicInfo;
+    BasicInfo.CreationTime.QuadPart   = 0;
+    BasicInfo.ChangeTime.QuadPart     = 0;
+    BasicInfo.LastAccessTime.QuadPart = 0;
+    BasicInfo.LastWriteTime.QuadPart  = 0;
+    BasicInfo.FileAttributes          = (fMode & ~(  RTFS_DOS_NT_ENCRYPTED
+                                                   | RTFS_DOS_NT_COMPRESSED
+                                                   | RTFS_DOS_NT_REPARSE_POINT
+                                                   | RTFS_DOS_NT_SPARSE_FILE
+                                                   | RTFS_DOS_NT_DEVICE
+                                                   | RTFS_DOS_DIRECTORY)
+                                               & RTFS_DOS_MASK_NT)
+                                      >> RTFS_DOS_SHIFT;
+    Assert(!(BasicInfo.FileAttributes & ~0x31a7U /* FILE_ATTRIBUTE_VALID_SET_FLAGS */));
+    if (!BasicInfo.FileAttributes)
+        BasicInfo.FileAttributes |= FILE_ATTRIBUTE_NORMAL;
+
+    NTSTATUS rcNt = NtSetInformationFile(hNativeFile, &Ios, &BasicInfo, sizeof(BasicInfo), FileBasicInformation);
+    if (NT_SUCCESS(rcNt))
+        return VINF_SUCCESS;
+    return RTErrConvertFromNtStatus(rcNt);
+}
+
+
+RTDECL(int) RTFileSetMode(RTFILE hFile, RTFMODE fMode)
+{
+    HANDLE hNative = (HANDLE)RTFileToNative(hFile);
+    AssertReturn(hNative != RTNT_INVALID_HANDLE_VALUE, VERR_INVALID_HANDLE);
+    fMode = rtFsModeNormalize(fMode, NULL, 0);
+    AssertReturn(rtFsModeIsValidPermissions(fMode), VERR_INVALID_FMODE);
+
+    return rtNtFileSetModeWorker(hNative, fMode);
+}
diff --git a/src/VBox/Runtime/r3/nt/RTPathQueryInfo-nt.cpp b/src/VBox/Runtime/r3/nt/RTPathQueryInfo-nt.cpp
index 97f9b6f..4b8dd84 100644
--- a/src/VBox/Runtime/r3/nt/RTPathQueryInfo-nt.cpp
+++ b/src/VBox/Runtime/r3/nt/RTPathQueryInfo-nt.cpp
@@ -35,6 +35,16 @@
 #include <iprt/err.h>
 #include <iprt/time.h>
 #include "internal/fs.h"
+#include "internal/path.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+/** Helper for comparing a UNICODE_STRING with a string litteral. */
+#define ARE_UNICODE_STRINGS_EQUAL(a_UniStr, a_wszType) \
+    (   (a_UniStr)->Length == sizeof(a_wszType) - sizeof(RTUTF16) \
+     && memcmp((a_UniStr)->Buffer, a_wszType, sizeof(a_wszType) - sizeof(RTUTF16)) == 0)
 
 
 /* ASSUMES FileID comes after ShortName and the structs are identical up to that point. */
@@ -54,338 +64,553 @@ AssertCompileMembersSameSizeAndOffset(FILE_BOTH_DIR_INFORMATION, ShortName
 
 
 
-RTR3DECL(int) RTPathQueryInfo(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
+/**
+ * Splits up an NT path into directory and filename.
+ *
+ * @param   pNtName             The path to split.
+ * @param   pNtParent           Where to return the directory path.
+ * @param   pNtFilename         Where to return the filename part.
+ * @param   fNoParentDirSlash   Whether to make sure the directory path doesn't
+ *                              end with a slash (except root).
+ */
+static void ntPathNtSplitName(UNICODE_STRING const *pNtName, UNICODE_STRING *pNtParent, UNICODE_STRING *pNtFilename,
+                              bool fNoParentDirSlash)
 {
-    return RTPathQueryInfoEx(pszPath, pObjInfo, enmAdditionalAttribs, RTPATH_F_ON_LINK);
+    PRTUTF16 pwszBuffer = pNtName->Buffer;
+    size_t   off        = pNtName->Length / sizeof(RTUTF16);
+
+    /* Skip trailing slash if present. */
+    if (   off > 0
+        && pwszBuffer[off - 1] == '\\')
+        off--;
+
+    /* Find the slash before that. */
+    RTUTF16  wc;
+    while (   off > 0
+           && (wc = pwszBuffer[off - 1]) != '\\'
+           && wc != '/')
+        off--;
+    if (off != 0)
+    {
+        pNtParent->Buffer        = pwszBuffer;
+        pNtParent->MaximumLength = pNtParent->Length = (USHORT)(off * sizeof(RTUTF16));
+    }
+    else
+    {
+        AssertFailed(); /* This is impossible and won't work (NT doesn't know '.' or '..').  */
+        /** @todo query the whole path as it is possible relative. Use the buffer for
+         *        temporary name storage. */
+        pNtParent->Buffer        = L".";
+        pNtParent->Length        = 1 * sizeof(RTUTF16);
+        pNtParent->MaximumLength = 2 * sizeof(RTUTF16);
+    }
+
+    pNtFilename->Buffer        = &pwszBuffer[off];
+    pNtFilename->Length        = pNtName->Length        - (USHORT)(off * sizeof(RTUTF16));
+    pNtFilename->MaximumLength = pNtName->MaximumLength - (USHORT)(off * sizeof(RTUTF16));
+
+    while (   fNoParentDirSlash
+           && pNtParent->Length > sizeof(RTUTF16)
+           && pNtParent->Buffer[pNtParent->Length / sizeof(RTUTF16) - 1] == '\\')
+        pNtParent->Length -= sizeof(RTUTF16);
 }
 
-#if 1
-RTR3DECL(int) RTPathQueryInfoEx(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
+
+/**
+ * Deals with enmAddAttr != RTFSOBJATTRADD_UNIX.
+ *
+ * @returns IPRT status code (usually @a rc).
+ * @param   rc                  The return code.
+ * @param   pObjInfo            The info to complete.
+ * @param   enmAddAttr          What to complete it with.  Caller should fill in
+ *                              RTFSOBJATTRADD_UNIX.
+ */
+static int rtPathNtQueryInfoFillInDummyData(int rc, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAddAttr)
+{
+    switch (enmAddAttr)
+    {
+        case RTFSOBJATTRADD_UNIX:
+            pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX;
+            break;
+
+        case RTFSOBJATTRADD_NOTHING:
+            pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_NOTHING;
+            break;
+
+        case RTFSOBJATTRADD_UNIX_OWNER:
+            pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_OWNER;
+            pObjInfo->Attr.u.UnixOwner.uid        = NIL_RTUID;
+            pObjInfo->Attr.u.UnixOwner.szName[0]  = '\0'; /** @todo return something sensible here. */
+            break;
+
+        case RTFSOBJATTRADD_UNIX_GROUP:
+            pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_GROUP;
+            pObjInfo->Attr.u.UnixGroup.gid        = NIL_RTGID;
+            pObjInfo->Attr.u.UnixGroup.szName[0]  = '\0';
+            break;
+
+        case RTFSOBJATTRADD_EASIZE:
+            pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_EASIZE;
+            pObjInfo->Attr.u.EASize.cb            = 0;
+            break;
+
+        default:
+            AssertMsgFailed(("Impossible!\n"));
+            rc = VERR_INTERNAL_ERROR;
+    }
+    return rc;
+}
+
+
+/**
+ * Deal with getting info about something that could be in a directory object.
+ *
+ * @returns IPRT status code
+ * @param   pObjAttr        The NT object attribute.
+ * @param   pObjInfo        Where to return the info.
+ * @param   enmAddAttr      Which extra attributes to get (/fake).
+ * @param   fFlags          The flags.
+ * @param   pvBuf           Query buffer space.
+ * @param   cbBuf           Size of the buffer.  ASSUMES lots of space.
+ */
+static int rtPathNtQueryInfoInDirectoryObject(OBJECT_ATTRIBUTES *pObjAttr, PRTFSOBJINFO pObjInfo,
+                                              RTFSOBJATTRADD enmAddAttr, uint32_t fFlags,
+                                              void *pvBuf, size_t cbBuf)
 {
+    RT_NOREF(fFlags);
+
     /*
-     * Validate input.
+     * Special case: Root dir.
      */
-    AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
-    AssertReturn(*pszPath, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(pObjInfo, VERR_INVALID_POINTER);
-    AssertMsgReturn(    enmAdditionalAttribs >= RTFSOBJATTRADD_NOTHING
-                    &&  enmAdditionalAttribs <= RTFSOBJATTRADD_LAST,
-                    ("Invalid enmAdditionalAttribs=%p\n", enmAdditionalAttribs),
-                    VERR_INVALID_PARAMETER);
-    AssertMsgReturn(RTPATH_F_IS_VALID(fFlags, 0), ("%#x\n", fFlags), VERR_INVALID_PARAMETER);
-
+    if (   pObjAttr->RootDirectory == NULL
+        && pObjAttr->ObjectName->Length == sizeof(RTUTF16)
+        && pObjAttr->ObjectName->Buffer[0] == '\\')
+    {
+        pObjInfo->cbObject    = 0;
+        pObjInfo->cbAllocated = 0;
+        RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         0);
+        RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        0);
+        RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  0);
+        RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        0);
+        pObjInfo->Attr.fMode = RTFS_DOS_DIRECTORY | RTFS_TYPE_DIRECTORY | 0777;
+        return rtPathNtQueryInfoFillInDummyData(VINF_SUCCESS, pObjInfo, enmAddAttr);
+    }
 
     /*
-     * Convert the input path.
+     * We must open and scan the parent directory object.
      */
-    HANDLE         hRootDir;
-    UNICODE_STRING NtName;
-    int rc = RTNtPathFromWinUtf8(&NtName, &hRootDir, pszPath);
-    if (RT_SUCCESS(rc))
+    UNICODE_STRING NtDirName;
+    UNICODE_STRING NtDirEntry;
+    ntPathNtSplitName(pObjAttr->ObjectName, &NtDirName, &NtDirEntry, true /*fNoParentDirSlash*/);
+
+    while (   NtDirEntry.Length > sizeof(RTUTF16)
+           && NtDirEntry.Buffer[NtDirEntry.Length / sizeof(RTUTF16) - 1] == '\\')
+        NtDirEntry.Length -= sizeof(RTUTF16);
+
+    pObjAttr->ObjectName = &NtDirName;
+    HANDLE   hDir = RTNT_INVALID_HANDLE_VALUE;
+    NTSTATUS rcNt = NtOpenDirectoryObject(&hDir, DIRECTORY_QUERY | DIRECTORY_TRAVERSE, pObjAttr);
+    if (NT_SUCCESS(rcNt))
     {
-        /*
-         * There are a three different ways of doing this:
-         *   1. Use NtQueryFullAttributesFile to the get basic file info.
-         *   2. Open whatever the path points to and use NtQueryInformationFile.
-         *   3. Open the parent directory and use NtQueryDirectoryFile like RTDirReadEx.
-         *
-         * The first two options may fail with sharing violations or access denied,
-         * in which case we must use the last one as fallback.
-         */
-        HANDLE              hFile = RTNT_INVALID_HANDLE_VALUE;
-        IO_STATUS_BLOCK     Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER;
-        NTSTATUS            rcNt;
-        OBJECT_ATTRIBUTES   ObjAttr;
-        union
-        {
-            FILE_NETWORK_OPEN_INFORMATION   NetOpenInfo;
-            FILE_ALL_INFORMATION            AllInfo;
-            FILE_FS_VOLUME_INFORMATION      VolInfo;
-            FILE_BOTH_DIR_INFORMATION       Both;
-            FILE_ID_BOTH_DIR_INFORMATION    BothId;
-            uint8_t                         abPadding[sizeof(FILE_ID_BOTH_DIR_INFORMATION) + RTPATH_MAX * sizeof(wchar_t)];
-        } uBuf;
-
-        /*
-         * We can only use the first option if no additional UNIX attribs are
-         * requested and it isn't a symbolic link.
-         */
-        rc = VINF_TRY_AGAIN;
-        if (enmAdditionalAttribs != RTFSOBJATTRADD_UNIX)
+        ULONG uObjDirCtx = 0;
+        for (;;)
         {
-            InitializeObjectAttributes(&ObjAttr, &NtName, OBJ_CASE_INSENSITIVE, hRootDir, NULL);
-            rcNt = NtQueryFullAttributesFile(&ObjAttr, &uBuf.NetOpenInfo);
-            if (NT_SUCCESS(rcNt))
+            ULONG cbReturned = 0;
+            rcNt = NtQueryDirectoryObject(hDir,
+                                          pvBuf,
+                                          (ULONG)cbBuf,
+                                          FALSE /*ReturnSingleEntry */,
+                                          FALSE /*RestartScan*/,
+                                          &uObjDirCtx,
+                                          &cbReturned);
+            if (!NT_SUCCESS(rcNt))
+                break;
+
+            for (POBJECT_DIRECTORY_INFORMATION pObjDir = (POBJECT_DIRECTORY_INFORMATION)pvBuf;
+                 pObjDir->Name.Length != 0;
+                 pObjDir++)
             {
-                if (!(uBuf.NetOpenInfo.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT))
+                if (   pObjDir->Name.Length == NtDirEntry.Length
+                    && memcmp(pObjDir->Name.Buffer, NtDirEntry.Buffer, NtDirEntry.Length) == 0)
                 {
-                    pObjInfo->cbObject    = uBuf.NetOpenInfo.EndOfFile.QuadPart;
-                    pObjInfo->cbAllocated = uBuf.NetOpenInfo.AllocationSize.QuadPart;
-                    RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         uBuf.NetOpenInfo.CreationTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        uBuf.NetOpenInfo.LastAccessTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  uBuf.NetOpenInfo.LastWriteTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        uBuf.NetOpenInfo.ChangeTime.QuadPart);
-                    pObjInfo->Attr.fMode = rtFsModeFromDos((uBuf.NetOpenInfo.FileAttributes << RTFS_DOS_SHIFT) & RTFS_DOS_MASK_NT,
-                                                           pszPath, strlen(pszPath), 0 /*uReparseTag*/);
-                    pObjInfo->Attr.enmAdditional = enmAdditionalAttribs;
-                    rc = VINF_SUCCESS;
+                    /*
+                     * Find it.  Fill in the info we've got and return (see similar code in direnum-r3-nt.cpp).
+                     */
+                    NtClose(hDir);
+
+                    pObjInfo->cbObject    = 0;
+                    pObjInfo->cbAllocated = 0;
+                    RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         0);
+                    RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        0);
+                    RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  0);
+                    RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        0);
+
+                    if (ARE_UNICODE_STRINGS_EQUAL(&pObjDir->TypeName, L"Directory"))
+                        pObjInfo->Attr.fMode = RTFS_DOS_DIRECTORY | RTFS_TYPE_DIRECTORY | 0777;
+                    else if (ARE_UNICODE_STRINGS_EQUAL(&pObjDir->TypeName, L"SymbolicLink"))
+                        pObjInfo->Attr.fMode = RTFS_DOS_NT_REPARSE_POINT | RTFS_TYPE_SYMLINK | 0777;
+                    else if (ARE_UNICODE_STRINGS_EQUAL(&pObjDir->TypeName, L"Device"))
+                        pObjInfo->Attr.fMode = RTFS_DOS_NT_DEVICE | RTFS_TYPE_DEV_CHAR | 0666;
+                    else
+                        pObjInfo->Attr.fMode = RTFS_DOS_NT_NORMAL | RTFS_TYPE_FILE | 0666;
+
+                    pObjInfo->Attr.enmAdditional = enmAddAttr;
+                    return rtPathNtQueryInfoFillInDummyData(VINF_SUCCESS, pObjInfo, enmAddAttr);
                 }
             }
-            else if (   rcNt != STATUS_ACCESS_DENIED
-                     && rcNt != STATUS_SHARING_VIOLATION)
-                rc = RTErrConvertFromNtStatus(rcNt);
-            else
-                RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
         }
 
-        /*
-         * Try the 2nd option.  We might have to redo this if not following symbolic
-         * links and the reparse point isn't a symbolic link but a mount point or similar.
-         * We want to return information about the mounted root directory if we can, not
-         * the directory in which it was mounted.
-         */
-        if (rc == VINF_TRY_AGAIN)
+        NtClose(hDir);
+        if (rcNt == STATUS_NO_MORE_FILES || rcNt == STATUS_NO_MORE_ENTRIES || rcNt == STATUS_NO_SUCH_FILE)
+            return VERR_FILE_NOT_FOUND;
+    }
+    return RTErrConvertFromNtStatus(rcNt);
+}
+
+
+/**
+ * Queries information from a file or directory handle.
+ *
+ * This is shared between the RTPathQueryInfo, RTFileQueryInfo and
+ * RTDirQueryInfo code.
+ *
+ * @returns IPRT status code.
+ * @param   hFile               The handle to query information from.  Must have
+ *                              the necessary privileges.
+ * @param   pvBuf               Pointer to a scratch buffer.
+ * @param   cbBuf               The size of the buffer.  This must be large
+ *                              enough to hold a FILE_ALL_INFORMATION struct.
+ * @param   pObjInfo            Where to return information about the handle.
+ * @param   enmAddAttr          What extra info to return.
+ * @param   pszPath             The path if this is a file (for exe detect).
+ * @param   uReparseTag         The reparse tag number (0 if not applicable) for
+ *                              symlink detection/whatnot.
+ */
+DECLHIDDEN(int) rtPathNtQueryInfoFromHandle(HANDLE hFile, void *pvBuf, size_t cbBuf, PRTFSOBJINFO pObjInfo,
+                                            RTFSOBJATTRADD enmAddAttr, const char *pszPath, ULONG uReparseTag)
+{
+    Assert(cbBuf >= sizeof(FILE_ALL_INFORMATION));
+
+    /** @todo Try optimize this for when RTFSOBJATTRADD_UNIX isn't set? */
+    IO_STATUS_BLOCK  Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+    NTSTATUS rcNt = NtQueryInformationFile(hFile, &Ios, pvBuf, sizeof(FILE_ALL_INFORMATION), FileAllInformation);
+    if (   NT_SUCCESS(rcNt)
+        || rcNt == STATUS_BUFFER_OVERFLOW)
+    {
+        FILE_ALL_INFORMATION *pAllInfo = (FILE_ALL_INFORMATION *)pvBuf;
+        pObjInfo->cbObject    = pAllInfo->StandardInformation.EndOfFile.QuadPart;
+        pObjInfo->cbAllocated = pAllInfo->StandardInformation.AllocationSize.QuadPart;
+        RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         pAllInfo->BasicInformation.CreationTime.QuadPart);
+        RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        pAllInfo->BasicInformation.LastAccessTime.QuadPart);
+        RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  pAllInfo->BasicInformation.LastWriteTime.QuadPart);
+        RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        pAllInfo->BasicInformation.ChangeTime.QuadPart);
+        pObjInfo->Attr.fMode = rtFsModeFromDos(  (pAllInfo->BasicInformation.FileAttributes << RTFS_DOS_SHIFT)
+                                               & RTFS_DOS_MASK_NT,
+                                               pszPath, pszPath ? strlen(pszPath) : 0, uReparseTag);
+        pObjInfo->Attr.enmAdditional = enmAddAttr;
+        if (enmAddAttr == RTFSOBJATTRADD_UNIX)
         {
-            InitializeObjectAttributes(&ObjAttr, &NtName, OBJ_CASE_INSENSITIVE, hRootDir, NULL);
-            rcNt = NtCreateFile(&hFile,
-                                FILE_READ_ATTRIBUTES | SYNCHRONIZE,
-                                &ObjAttr,
-                                &Ios,
-                                NULL /*pcbFile*/,
-                                FILE_ATTRIBUTE_NORMAL,
-                                FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
-                                FILE_OPEN,
-                                FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT
-                                | (fFlags & RTPATH_F_FOLLOW_LINK ? 0 : FILE_OPEN_REPARSE_POINT),
-                                NULL /*pvEaBuffer*/,
-                                0 /*cbEa*/);
-            if (NT_SUCCESS(rcNt))
+            pObjInfo->Attr.u.Unix.uid             = ~0U;
+            pObjInfo->Attr.u.Unix.gid             = ~0U;
+            pObjInfo->Attr.u.Unix.cHardlinks      = RT_MAX(1, pAllInfo->StandardInformation.NumberOfLinks);
+            pObjInfo->Attr.u.Unix.INodeIdDevice   = 0; /* below */
+            pObjInfo->Attr.u.Unix.INodeId         = pAllInfo->InternalInformation.IndexNumber.QuadPart;
+            pObjInfo->Attr.u.Unix.fFlags          = 0;
+            pObjInfo->Attr.u.Unix.GenerationId    = 0;
+            pObjInfo->Attr.u.Unix.Device          = 0;
+
+            /* Get the serial number. */
+            rcNt = NtQueryVolumeInformationFile(hFile, &Ios, pvBuf, (ULONG)RT_MIN(cbBuf, _2K), FileFsVolumeInformation);
+            if (NT_SUCCESS(rcNt) || rcNt == STATUS_BUFFER_OVERFLOW)
             {
-                /* Query tag information first in order to try re-open non-symlink reparse points. */
-                FILE_ATTRIBUTE_TAG_INFORMATION TagInfo;
-                rcNt = NtQueryInformationFile(hFile, &Ios, &TagInfo, sizeof(TagInfo), FileAttributeTagInformation);
-                if (!NT_SUCCESS(rcNt))
-                    TagInfo.FileAttributes = TagInfo.ReparseTag = 0;
-                if (   !(TagInfo.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
-                    || TagInfo.ReparseTag == IO_REPARSE_TAG_SYMLINK
-                    || (fFlags & RTPATH_F_FOLLOW_LINK))
-                { /* likely */ }
-                else
-                {
-                    /* Reparse point that isn't a symbolic link, try follow the reparsing. */
-                    HANDLE hFile2;
-                    RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
-                    rcNt = NtCreateFile(&hFile2,
-                                        FILE_READ_ATTRIBUTES | SYNCHRONIZE,
-                                        &ObjAttr,
-                                        &Ios,
-                                        NULL /*pcbFile*/,
-                                        FILE_ATTRIBUTE_NORMAL,
-                                        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
-                                        FILE_OPEN,
-                                        FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
-                                        NULL /*pvEaBuffer*/,
-                                        0 /*cbEa*/);
-                    if (NT_SUCCESS(rcNt))
-                    {
-                        NtClose(hFile);
-                        hFile = hFile2;
-                        TagInfo.FileAttributes = TagInfo.ReparseTag = 0;
-                    }
-                }
+                FILE_FS_VOLUME_INFORMATION *pVolInfo = (FILE_FS_VOLUME_INFORMATION *)pvBuf;
+                pObjInfo->Attr.u.Unix.INodeIdDevice = pVolInfo->VolumeSerialNumber;
+            }
+        }
+
+        return rtPathNtQueryInfoFillInDummyData(VINF_SUCCESS, pObjInfo, enmAddAttr);
+    }
+    return RTErrConvertFromNtStatus(rcNt);
+}
 
-                /*
-                 * Get the information we need and convert it.
-                 */
-                /** @todo Try optimize this for when RTFSOBJATTRADD_UNIX isn't set? */
-                RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
-                rcNt = NtQueryInformationFile(hFile, &Ios, &uBuf.AllInfo, sizeof(uBuf.AllInfo), FileAllInformation);
-                if (NT_SUCCESS(rcNt) || rcNt == STATUS_BUFFER_OVERFLOW)
-                {
-                    pObjInfo->cbObject    = uBuf.AllInfo.StandardInformation.EndOfFile.QuadPart;
-                    pObjInfo->cbAllocated = uBuf.AllInfo.StandardInformation.AllocationSize.QuadPart;
-                    RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         uBuf.AllInfo.BasicInformation.CreationTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        uBuf.AllInfo.BasicInformation.LastAccessTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  uBuf.AllInfo.BasicInformation.LastWriteTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        uBuf.AllInfo.BasicInformation.ChangeTime.QuadPart);
-                    pObjInfo->Attr.fMode = rtFsModeFromDos(  (uBuf.AllInfo.BasicInformation.FileAttributes << RTFS_DOS_SHIFT)
-                                                           & RTFS_DOS_MASK_NT,
-                                                           pszPath, strlen(pszPath), TagInfo.ReparseTag);
-                    pObjInfo->Attr.enmAdditional = enmAdditionalAttribs;
-                    if (enmAdditionalAttribs == RTFSOBJATTRADD_UNIX)
-                    {
-                        pObjInfo->Attr.u.Unix.uid             = ~0U;
-                        pObjInfo->Attr.u.Unix.gid             = ~0U;
-                        pObjInfo->Attr.u.Unix.cHardlinks      = RT_MAX(1, uBuf.AllInfo.StandardInformation.NumberOfLinks);
-                        pObjInfo->Attr.u.Unix.INodeIdDevice   = 0; /* below */
-                        pObjInfo->Attr.u.Unix.INodeId         = uBuf.AllInfo.InternalInformation.IndexNumber.QuadPart;
-                        pObjInfo->Attr.u.Unix.fFlags          = 0;
-                        pObjInfo->Attr.u.Unix.GenerationId    = 0;
-                        pObjInfo->Attr.u.Unix.Device          = 0;
-
-                        /* Get the serial number. */
-                        rcNt = NtQueryVolumeInformationFile(hFile, &Ios, &uBuf, RT_MIN(sizeof(uBuf), _2K),
-                                                            FileFsVolumeInformation);
-                        if (NT_SUCCESS(rcNt) || rcNt == STATUS_BUFFER_OVERFLOW)
-                            pObjInfo->Attr.u.Unix.INodeIdDevice = uBuf.VolInfo.VolumeSerialNumber;
-                    }
-
-                    rc = VINF_SUCCESS;
-                }
 
-                NtClose(hFile);
+/**
+ * Worker for RTPathQueryInfoEx and RTDirRelPathQueryInfo.
+ *
+ * @returns IPRT status code.
+ * @param   hRootDir            The root directory that pNtName is relative to.
+ * @param   pNtName             The NT path which we want to query info for.
+ * @param   pObjInfo            Where to return the info.
+ * @param   enmAddAttr          What additional info to get/fake.
+ * @param   fFlags              Query flags (RTPATH_F_XXX).
+ * @param   pszPath             The path for detecting executables and such.
+ *                              Pass empty string if not applicable/available.
+ */
+DECLHIDDEN(int) rtPathNtQueryInfoWorker(HANDLE hRootDir, UNICODE_STRING *pNtName, PRTFSOBJINFO pObjInfo,
+                                        RTFSOBJATTRADD enmAddAttr, uint32_t fFlags, const char *pszPath)
+{
+    /*
+     * There are a three different ways of doing this:
+     *   1. Use NtQueryFullAttributesFile to the get basic file info.
+     *   2. Open whatever the path points to and use NtQueryInformationFile.
+     *   3. Open the parent directory and use NtQueryDirectoryFile like RTDirReadEx.
+     *
+     * The first two options may fail with sharing violations or access denied,
+     * in which case we must use the last one as fallback.
+     */
+    HANDLE              hFile = RTNT_INVALID_HANDLE_VALUE;
+    IO_STATUS_BLOCK     Ios = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+    NTSTATUS            rcNt;
+    OBJECT_ATTRIBUTES   ObjAttr;
+    union
+    {
+        FILE_NETWORK_OPEN_INFORMATION   NetOpenInfo;
+        FILE_ALL_INFORMATION            AllInfo;
+        FILE_FS_VOLUME_INFORMATION      VolInfo;
+        FILE_BOTH_DIR_INFORMATION       Both;
+        FILE_ID_BOTH_DIR_INFORMATION    BothId;
+        uint8_t                         abPadding[sizeof(FILE_ID_BOTH_DIR_INFORMATION) + RTPATH_MAX * sizeof(wchar_t)];
+    } uBuf;
+
+    /*
+     * We can only use the first option if no additional UNIX attribs are
+     * requested and it isn't a symbolic link.  NT directory object
+     */
+    int rc = VINF_TRY_AGAIN;
+    if (enmAddAttr != RTFSOBJATTRADD_UNIX)
+    {
+        InitializeObjectAttributes(&ObjAttr, pNtName, OBJ_CASE_INSENSITIVE, hRootDir, NULL);
+        rcNt = NtQueryFullAttributesFile(&ObjAttr, &uBuf.NetOpenInfo);
+        if (NT_SUCCESS(rcNt))
+        {
+            if (!(uBuf.NetOpenInfo.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT))
+            {
+                pObjInfo->cbObject    = uBuf.NetOpenInfo.EndOfFile.QuadPart;
+                pObjInfo->cbAllocated = uBuf.NetOpenInfo.AllocationSize.QuadPart;
+                RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         uBuf.NetOpenInfo.CreationTime.QuadPart);
+                RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        uBuf.NetOpenInfo.LastAccessTime.QuadPart);
+                RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  uBuf.NetOpenInfo.LastWriteTime.QuadPart);
+                RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        uBuf.NetOpenInfo.ChangeTime.QuadPart);
+                pObjInfo->Attr.fMode = rtFsModeFromDos((uBuf.NetOpenInfo.FileAttributes << RTFS_DOS_SHIFT) & RTFS_DOS_MASK_NT,
+                                                       pszPath, strlen(pszPath), 0 /*uReparseTag*/);
+                pObjInfo->Attr.enmAdditional = enmAddAttr;
+
+                return rtPathNtQueryInfoFillInDummyData(VINF_SUCCESS, pObjInfo, enmAddAttr);
             }
-            else if (   rcNt != STATUS_ACCESS_DENIED
-                     && rcNt != STATUS_SHARING_VIOLATION)
-                rc = RTErrConvertFromNtStatus(rcNt);
-            else
-                RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
         }
+        else if (   rcNt == STATUS_OBJECT_TYPE_MISMATCH
+                 || rcNt == STATUS_OBJECT_NAME_INVALID
+                 || rcNt == STATUS_INVALID_PARAMETER)
+        {
+            rc = rtPathNtQueryInfoInDirectoryObject(&ObjAttr, pObjInfo, enmAddAttr, fFlags, &uBuf, sizeof(uBuf));
+            if (RT_SUCCESS(rc))
+                return rc;
+            rc = RTErrConvertFromNtStatus(rcNt);
+        }
+        else if (   rcNt != STATUS_ACCESS_DENIED
+                 && rcNt != STATUS_SHARING_VIOLATION)
+            rc = RTErrConvertFromNtStatus(rcNt);
+        else
+            RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
+    }
 
-        /*
-         * Try the 3rd option if none of the other worked.
-         * If none of the above worked, try open the directory and enumerate
-         * the file we're after.  This
-         */
-        if (rc == VINF_TRY_AGAIN)
+    /*
+     * Try the 2nd option.  We might have to redo this if not following symbolic
+     * links and the reparse point isn't a symbolic link but a mount point or similar.
+     * We want to return information about the mounted root directory if we can, not
+     * the directory in which it was mounted.
+     */
+    if (rc == VINF_TRY_AGAIN)
+    {
+        InitializeObjectAttributes(&ObjAttr, pNtName, OBJ_CASE_INSENSITIVE, hRootDir, NULL);
+        rcNt = NtCreateFile(&hFile,
+                            FILE_READ_ATTRIBUTES | SYNCHRONIZE,
+                            &ObjAttr,
+                            &Ios,
+                            NULL /*pcbFile*/,
+                            FILE_ATTRIBUTE_NORMAL,
+                            FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                            FILE_OPEN,
+                            FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT
+                            | (fFlags & RTPATH_F_FOLLOW_LINK ? 0 : FILE_OPEN_REPARSE_POINT),
+                            NULL /*pvEaBuffer*/,
+                            0 /*cbEa*/);
+        if (NT_SUCCESS(rcNt))
         {
-            /* Drop the name from NtPath. */
-            UNICODE_STRING NtDirName = NtName;
-            size_t off = NtName.Length / sizeof(NtName.Buffer[0]);
-            wchar_t wc;
-            while (   off > 0
-                   && (wc = NtName.Buffer[off - 1]) != '\\'
-                   && wc != '/')
-                off--;
-            if (off != 0)
-                NtDirName.Length = (USHORT)(off * sizeof(NtName.Buffer[0]));
+            /* Query tag information first in order to try re-open non-symlink reparse points. */
+            FILE_ATTRIBUTE_TAG_INFORMATION TagInfo;
+            rcNt = NtQueryInformationFile(hFile, &Ios, &TagInfo, sizeof(TagInfo), FileAttributeTagInformation);
+            if (!NT_SUCCESS(rcNt))
+                TagInfo.FileAttributes = TagInfo.ReparseTag = 0;
+            if (   !(TagInfo.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+                || TagInfo.ReparseTag == IO_REPARSE_TAG_SYMLINK
+                || (fFlags & RTPATH_F_FOLLOW_LINK))
+            { /* likely */ }
             else
             {
-                AssertFailed(); /* This is impossible and won't work (NT doesn't know '.' or '..').  */
-                NtDirName.Buffer = L".";
-                NtDirName.Length = sizeof(NtName.Buffer[0]);
-                NtDirName.MaximumLength = 2 * sizeof(NtName.Buffer[0]);
+                /* Reparse point that isn't a symbolic link, try follow the reparsing. */
+                HANDLE hFile2;
+                RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
+                rcNt = NtCreateFile(&hFile2,
+                                    FILE_READ_ATTRIBUTES | SYNCHRONIZE,
+                                    &ObjAttr,
+                                    &Ios,
+                                    NULL /*pcbFile*/,
+                                    FILE_ATTRIBUTE_NORMAL,
+                                    FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                                    FILE_OPEN,
+                                    FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
+                                    NULL /*pvEaBuffer*/,
+                                    0 /*cbEa*/);
+                if (NT_SUCCESS(rcNt))
+                {
+                    NtClose(hFile);
+                    hFile = hFile2;
+                    TagInfo.FileAttributes = TagInfo.ReparseTag = 0;
+                }
             }
 
-            UNICODE_STRING NtFilter;
-            NtFilter.Buffer        = &NtName.Buffer[off];
-            NtFilter.Length        = NtName.Length        - (USHORT)(off * sizeof(NtName.Buffer[0]));
-            NtFilter.MaximumLength = NtName.MaximumLength - (USHORT)(off * sizeof(NtName.Buffer[0]));
-
-            /* Try open the directory. */
-            InitializeObjectAttributes(&ObjAttr, &NtDirName, OBJ_CASE_INSENSITIVE, hRootDir, NULL);
-            rcNt = NtCreateFile(&hFile,
-                                FILE_LIST_DIRECTORY | SYNCHRONIZE,
-                                &ObjAttr,
-                                &Ios,
-                                NULL /*pcbFile*/,
-                                FILE_ATTRIBUTE_NORMAL,
-                                FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
-                                FILE_OPEN,
-                                FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
-                                NULL /*pvEaBuffer*/,
-                                0 /*cbEa*/);
+            /*
+             * Get the information we need and convert it.
+             */
+            rc = rtPathNtQueryInfoFromHandle(hFile, &uBuf, sizeof(uBuf), pObjInfo, enmAddAttr, pszPath, TagInfo.ReparseTag);
+            NtClose(hFile);
+            if (RT_SUCCESS(rc))
+                return rc;
+
+            if (RT_FAILURE(rc))
+                rc = VERR_TRY_AGAIN;
+        }
+        else if (   rcNt != STATUS_ACCESS_DENIED
+                 && rcNt != STATUS_SHARING_VIOLATION)
+            rc = RTErrConvertFromNtStatus(rcNt);
+        else
+            RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
+    }
+
+    /*
+     * Try the 3rd option if none of the other worked.
+     * If none of the above worked, try open the directory and enumerate
+     * the file we're after.  This
+     */
+    if (rc == VINF_TRY_AGAIN)
+    {
+        /* Split up the name into parent directory path and filename. */
+        UNICODE_STRING NtDirName;
+        UNICODE_STRING NtFilter;
+        ntPathNtSplitName(pNtName, &NtDirName, &NtFilter, false /*fNoParentDirSlash*/);
+
+        /* Try open the directory. */
+        InitializeObjectAttributes(&ObjAttr, &NtDirName, OBJ_CASE_INSENSITIVE, hRootDir, NULL);
+        rcNt = NtCreateFile(&hFile,
+                            FILE_LIST_DIRECTORY | SYNCHRONIZE,
+                            &ObjAttr,
+                            &Ios,
+                            NULL /*pcbFile*/,
+                            FILE_ATTRIBUTE_NORMAL,
+                            FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                            FILE_OPEN,
+                            FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
+                            NULL /*pvEaBuffer*/,
+                            0 /*cbEa*/);
+        if (NT_SUCCESS(rcNt))
+        {
+            FILE_INFORMATION_CLASS enmInfoClass;
+            if (RT_MAKE_U64(RTNtCurrentPeb()->OSMinorVersion, RTNtCurrentPeb()->OSMajorVersion) > RT_MAKE_U64(0,5) /* > W2K */)
+                enmInfoClass = FileIdBothDirectoryInformation; /* Introduced in XP, from I can tell. */
+            else
+                enmInfoClass = FileBothDirectoryInformation;
+            rcNt = NtQueryDirectoryFile(hFile,
+                                        NULL /* Event */,
+                                        NULL /* ApcRoutine */,
+                                        NULL /* ApcContext */,
+                                        &Ios,
+                                        &uBuf,
+                                        RT_MIN(sizeof(uBuf), 0xfff0),
+                                        enmInfoClass,
+                                        TRUE /*ReturnSingleEntry */,
+                                        &NtFilter,
+                                        FALSE /*RestartScan */);
             if (NT_SUCCESS(rcNt))
             {
-                FILE_INFORMATION_CLASS enmInfoClass;
-                if (RT_MAKE_U64(RTNtCurrentPeb()->OSMinorVersion, RTNtCurrentPeb()->OSMajorVersion) > RT_MAKE_U64(0,5) /* > W2K */)
-                    enmInfoClass = FileIdBothDirectoryInformation; /* Introduced in XP, from I can tell. */
-                else
-                    enmInfoClass = FileBothDirectoryInformation;
-                rcNt = NtQueryDirectoryFile(hFile,
-                                            NULL /* Event */,
-                                            NULL /* ApcRoutine */,
-                                            NULL /* ApcContext */,
-                                            &Ios,
-                                            &uBuf,
-                                            RT_MIN(sizeof(uBuf), 0xfff0),
-                                            enmInfoClass,
-                                            TRUE /*ReturnSingleEntry */,
-                                            &NtFilter,
-                                            FALSE /*RestartScan */);
-                if (NT_SUCCESS(rcNt))
-                {
-                    pObjInfo->cbObject    = uBuf.Both.EndOfFile.QuadPart;
-                    pObjInfo->cbAllocated = uBuf.Both.AllocationSize.QuadPart;
-
-                    RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         uBuf.Both.CreationTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        uBuf.Both.LastAccessTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  uBuf.Both.LastWriteTime.QuadPart);
-                    RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        uBuf.Both.ChangeTime.QuadPart);
-
-                    pObjInfo->Attr.fMode  = rtFsModeFromDos((uBuf.Both.FileAttributes << RTFS_DOS_SHIFT) & RTFS_DOS_MASK_NT,
-                                                            pszPath, strlen(pszPath), uBuf.Both.EaSize);
-
-                    pObjInfo->Attr.enmAdditional = enmAdditionalAttribs;
-                    if (enmAdditionalAttribs == RTFSOBJATTRADD_UNIX)
-                    {
-                        pObjInfo->Attr.u.Unix.uid             = ~0U;
-                        pObjInfo->Attr.u.Unix.gid             = ~0U;
-                        pObjInfo->Attr.u.Unix.cHardlinks      = 1;
-                        pObjInfo->Attr.u.Unix.INodeIdDevice   = 0; /* below */
-                        pObjInfo->Attr.u.Unix.INodeId         = enmInfoClass == FileIdBothDirectoryInformation
-                                                              ? uBuf.BothId.FileId.QuadPart : 0;
-                        pObjInfo->Attr.u.Unix.fFlags          = 0;
-                        pObjInfo->Attr.u.Unix.GenerationId    = 0;
-                        pObjInfo->Attr.u.Unix.Device          = 0;
-
-                        /* Get the serial number. */
-                        rcNt = NtQueryVolumeInformationFile(hFile, &Ios, &uBuf, RT_MIN(sizeof(uBuf), _2K),
-                                                            FileFsVolumeInformation);
-                        if (NT_SUCCESS(rcNt))
-                            pObjInfo->Attr.u.Unix.INodeIdDevice = uBuf.VolInfo.VolumeSerialNumber;
-                    }
-
-                    rc = VINF_SUCCESS;
+                pObjInfo->cbObject    = uBuf.Both.EndOfFile.QuadPart;
+                pObjInfo->cbAllocated = uBuf.Both.AllocationSize.QuadPart;
+
+                RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         uBuf.Both.CreationTime.QuadPart);
+                RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        uBuf.Both.LastAccessTime.QuadPart);
+                RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  uBuf.Both.LastWriteTime.QuadPart);
+                RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        uBuf.Both.ChangeTime.QuadPart);
 
+                pObjInfo->Attr.fMode  = rtFsModeFromDos((uBuf.Both.FileAttributes << RTFS_DOS_SHIFT) & RTFS_DOS_MASK_NT,
+                                                        pszPath, strlen(pszPath), uBuf.Both.EaSize);
+
+                pObjInfo->Attr.enmAdditional = enmAddAttr;
+                if (enmAddAttr == RTFSOBJATTRADD_UNIX)
+                {
+                    pObjInfo->Attr.u.Unix.uid             = ~0U;
+                    pObjInfo->Attr.u.Unix.gid             = ~0U;
+                    pObjInfo->Attr.u.Unix.cHardlinks      = 1;
+                    pObjInfo->Attr.u.Unix.INodeIdDevice   = 0; /* below */
+                    pObjInfo->Attr.u.Unix.INodeId         = enmInfoClass == FileIdBothDirectoryInformation
+                                                          ? uBuf.BothId.FileId.QuadPart : 0;
+                    pObjInfo->Attr.u.Unix.fFlags          = 0;
+                    pObjInfo->Attr.u.Unix.GenerationId    = 0;
+                    pObjInfo->Attr.u.Unix.Device          = 0;
+
+                    /* Get the serial number. */
+                    rcNt = NtQueryVolumeInformationFile(hFile, &Ios, &uBuf, RT_MIN(sizeof(uBuf), _2K),
+                                                        FileFsVolumeInformation);
+                    if (NT_SUCCESS(rcNt))
+                        pObjInfo->Attr.u.Unix.INodeIdDevice = uBuf.VolInfo.VolumeSerialNumber;
                 }
-                else
-                    rc = RTErrConvertFromNtStatus(rcNt);
 
-                NtClose(hFile);
+                rc = rtPathNtQueryInfoFillInDummyData(VINF_SUCCESS, pObjInfo, enmAddAttr);
             }
             else
                 rc = RTErrConvertFromNtStatus(rcNt);
-        }
 
-        /*
-         * Fill in dummy additional attributes for the non-UNIX requests.
-         */
-        switch (enmAdditionalAttribs)
-        {
-            case RTFSOBJATTRADD_UNIX:
-                break;
-
-            case RTFSOBJATTRADD_NOTHING:
-                pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_NOTHING;
-                break;
+            NtClose(hFile);
+        }
+        else
+            rc = RTErrConvertFromNtStatus(rcNt);
+    }
 
-            case RTFSOBJATTRADD_UNIX_OWNER:
-                pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_OWNER;
-                pObjInfo->Attr.u.UnixOwner.uid        = ~0U;
-                pObjInfo->Attr.u.UnixOwner.szName[0]  = '\0'; /** @todo return something sensible here. */
-                break;
+    return rc;
+}
 
-            case RTFSOBJATTRADD_UNIX_GROUP:
-                pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_GROUP;
-                pObjInfo->Attr.u.UnixGroup.gid        = ~0U;
-                pObjInfo->Attr.u.UnixGroup.szName[0]  = '\0';
-                break;
 
-            case RTFSOBJATTRADD_EASIZE:
-                pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_EASIZE;
-                pObjInfo->Attr.u.EASize.cb            = 0;
-                break;
+RTR3DECL(int) RTPathQueryInfoEx(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
+{
+    /*
+     * Validate input.
+     */
+    AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
+    AssertReturn(*pszPath, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pObjInfo, VERR_INVALID_POINTER);
+    AssertMsgReturn(    enmAdditionalAttribs >= RTFSOBJATTRADD_NOTHING
+                    &&  enmAdditionalAttribs <= RTFSOBJATTRADD_LAST,
+                    ("Invalid enmAdditionalAttribs=%p\n", enmAdditionalAttribs),
+                    VERR_INVALID_PARAMETER);
+    AssertMsgReturn(RTPATH_F_IS_VALID(fFlags, 0), ("%#x\n", fFlags), VERR_INVALID_PARAMETER);
 
-            default:
-                AssertMsgFailed(("Impossible!\n"));
-                rc = VERR_INTERNAL_ERROR;
-        }
 
+    /*
+     * Convert the input path and call common worker.
+     */
+    HANDLE         hRootDir;
+    UNICODE_STRING NtName;
+    int rc = RTNtPathFromWinUtf8(&NtName, &hRootDir, pszPath);
+    if (RT_SUCCESS(rc))
+    {
+        rc = rtPathNtQueryInfoWorker(hRootDir, &NtName, pObjInfo, enmAdditionalAttribs, fFlags, pszPath);
         RTNtPathFree(&NtName, &hRootDir);
     }
-
     return rc;
 }
-#endif
+
+
+RTR3DECL(int) RTPathQueryInfo(const char *pszPath, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
+{
+    return RTPathQueryInfoEx(pszPath, pObjInfo, enmAdditionalAttribs, RTPATH_F_ON_LINK);
+}
 
diff --git a/src/VBox/Runtime/r3/nt/RTPathSetMode-r3-nt.cpp b/src/VBox/Runtime/r3/nt/RTPathSetMode-r3-nt.cpp
new file mode 100644
index 0000000..10d3fba
--- /dev/null
+++ b/src/VBox/Runtime/r3/nt/RTPathSetMode-r3-nt.cpp
@@ -0,0 +1,88 @@
+/* $Id: RTPathSetMode-r3-nt.cpp $ */
+/** @file
+ * IPRT - RTPathSetMode, Native NT.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_FILE
+#include "internal-r3-nt.h"
+
+#include <iprt/path.h>
+#include <iprt/err.h>
+
+#include "internal/fs.h"
+
+
+
+RTDECL(int) RTPathSetMode(const char *pszPath, RTFMODE fMode)
+{
+    fMode = rtFsModeNormalize(fMode, pszPath, 0);
+    AssertReturn(rtFsModeIsValidPermissions(fMode), VERR_INVALID_FMODE);
+
+    /*
+     * Convert and normalize the path.
+     */
+    UNICODE_STRING NtName;
+    HANDLE         hRootDir;
+    int rc = RTNtPathFromWinUtf8(&NtName, &hRootDir, pszPath);
+    if (RT_SUCCESS(rc))
+    {
+        HANDLE              hPath   = RTNT_INVALID_HANDLE_VALUE;
+        IO_STATUS_BLOCK     Ios     = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+        OBJECT_ATTRIBUTES   ObjAttr;
+        InitializeObjectAttributes(&ObjAttr, &NtName, 0 /*fAttrib*/, hRootDir, NULL);
+
+        ULONG fOpenOptions = FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_REPARSE_POINT;
+        //if (fFlags & RTPATH_F_ON_LINK)
+        //    fOpenOptions |= FILE_OPEN_REPARSE_POINT;
+        NTSTATUS rcNt = NtCreateFile(&hPath,
+                                     FILE_WRITE_ATTRIBUTES | SYNCHRONIZE,
+                                     &ObjAttr,
+                                     &Ios,
+                                     NULL /*AllocationSize*/,
+                                     FILE_ATTRIBUTE_NORMAL,
+                                     FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                     FILE_OPEN,
+                                     fOpenOptions,
+                                     NULL /*EaBuffer*/,
+                                     0 /*EaLength*/);
+        if (NT_SUCCESS(rcNt))
+        {
+            rc = rtNtFileSetModeWorker(hPath, fMode);
+
+            rcNt = NtClose(hPath);
+            if (!NT_SUCCESS(rcNt) && RT_SUCCESS(rc))
+                rc = RTErrConvertFromNtStatus(rcNt);
+        }
+        else
+            rc = RTErrConvertFromNtStatus(rcNt);
+
+        RTNtPathFree(&NtName, &hRootDir);
+    }
+    return rc;
+}
+
diff --git a/src/VBox/Runtime/r3/nt/direnum-r3-nt.cpp b/src/VBox/Runtime/r3/nt/direnum-r3-nt.cpp
index f930cf8..d86f8b2 100644
--- a/src/VBox/Runtime/r3/nt/direnum-r3-nt.cpp
+++ b/src/VBox/Runtime/r3/nt/direnum-r3-nt.cpp
@@ -41,12 +41,13 @@
 #include <iprt/log.h>
 #include "internal/fs.h"
 #include "internal/dir.h"
+#include "internal/path.h"
 
 
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
-/** Whether to return a single record (TRUE) or multiple (FALSE)o. */
+/** Whether to return a single record (TRUE) or multiple (FALSE). */
 #define RTDIR_NT_SINGLE_RECORD  FALSE
 
 /** Go hard on record chaining (has slight performance impact). */
@@ -75,11 +76,11 @@ AssertCompileMembersSameSizeAndOffset(FILE_BOTH_DIR_INFORMATION, ShortName
 size_t rtDirNativeGetStructSize(const char *pszPath)
 {
     NOREF(pszPath);
-    return sizeof(RTDIR);
+    return sizeof(RTDIRINTERNAL);
 }
 
 
-int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
+int rtDirNativeOpen(PRTDIRINTERNAL pDir, char *pszPathBuf, uintptr_t hRelativeDir, void *pvNativeRelative)
 {
     /*
      * Convert the filter to UTF-16.
@@ -102,20 +103,41 @@ int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
      * Try open the directory
      */
 #ifdef IPRT_WITH_NT_PATH_PASSTHRU
-    bool fObjDir;
+    bool fObjDir = false;
 #endif
-    rc = RTNtPathOpenDir(pszPathBuf,
-                         FILE_LIST_DIRECTORY | FILE_TRAVERSE | SYNCHRONIZE,
-                         FILE_SHARE_READ | FILE_SHARE_WRITE,
-                         FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
-                         OBJ_CASE_INSENSITIVE,
-                         &pDir->hDir,
+    if (hRelativeDir == ~(uintptr_t)0 && pvNativeRelative == NULL)
+        rc = RTNtPathOpenDir(pszPathBuf,
+                             FILE_LIST_DIRECTORY | FILE_READ_ATTRIBUTES | FILE_TRAVERSE | SYNCHRONIZE,
+                             FILE_SHARE_READ | FILE_SHARE_WRITE,
+                             FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
+                             OBJ_CASE_INSENSITIVE,
+                             &pDir->hDir,
 #ifdef IPRT_WITH_NT_PATH_PASSTHRU
-                         &fObjDir
+                             &fObjDir
 #else
-                         NULL
+                             NULL
 #endif
-                         );
+                             );
+    else if (pvNativeRelative != NULL)
+        rc = RTNtPathOpenDirEx((HANDLE)hRelativeDir,
+                               (struct _UNICODE_STRING *)pvNativeRelative,
+                               FILE_LIST_DIRECTORY | FILE_READ_ATTRIBUTES | FILE_TRAVERSE | SYNCHRONIZE,
+                               FILE_SHARE_READ | FILE_SHARE_WRITE,
+                               FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
+                               OBJ_CASE_INSENSITIVE,
+                               &pDir->hDir,
+#ifdef IPRT_WITH_NT_PATH_PASSTHRU
+                               &fObjDir
+#else
+                               NULL
+#endif
+
+                               );
+    else
+    {
+        pDir->hDir = (HANDLE)hRelativeDir;
+        rc = VINF_SUCCESS;
+    }
     if (RT_SUCCESS(rc))
     {
         /*
@@ -132,8 +154,10 @@ int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
 }
 
 
-RTDECL(int) RTDirClose(PRTDIR pDir)
+RTDECL(int) RTDirClose(RTDIR hDir)
 {
+    PRTDIRINTERNAL pDir = hDir;
+
     /*
      * Validate input.
      */
@@ -173,7 +197,7 @@ RTDECL(int) RTDirClose(PRTDIR pDir)
  * @returns IPRT status code
  * @param   pThis       The directory instance data.
  */
-static int rtDirNtCheckRecord(PRTDIR pThis)
+static int rtDirNtCheckRecord(PRTDIRINTERNAL pThis)
 {
 #ifdef RTDIR_NT_STRICT
 # ifdef IPRT_WITH_NT_PATH_PASSTHRU
@@ -209,7 +233,7 @@ static int rtDirNtCheckRecord(PRTDIR pThis)
  *
  * @param   pThis       The directory instance data.
  */
-static int rtDirNtAdvanceBuffer(PRTDIR pThis)
+static int rtDirNtAdvanceBuffer(PRTDIRINTERNAL pThis)
 {
     int rc;
 
@@ -252,7 +276,7 @@ static int rtDirNtAdvanceBuffer(PRTDIR pThis)
  * @returns IPRT status code
  * @param   pThis       The directory instance data.
  */
-static int rtDirNtFetchMore(PRTDIR pThis)
+static int rtDirNtFetchMore(PRTDIRINTERNAL pThis)
 {
     Assert(!pThis->fDataUnread);
 
@@ -473,7 +497,7 @@ static int rtDirNtFetchMore(PRTDIR pThis)
  * @param   cbName      The file name length in bytes.
  * @param   pwsName     The file name, not terminated.
  */
-static int rtDirNtConvertName(PRTDIR pThis, uint32_t cbName, PCRTUTF16 pwsName)
+static int rtDirNtConvertName(PRTDIRINTERNAL pThis, uint32_t cbName, PCRTUTF16 pwsName)
 {
     int rc = RTUtf16ToUtf8Ex(pwsName, cbName / 2, &pThis->pszName, pThis->cbNameAlloc, &pThis->cchName);
     if (RT_SUCCESS(rc))
@@ -502,7 +526,7 @@ static int rtDirNtConvertName(PRTDIR pThis, uint32_t cbName, PCRTUTF16 pwsName)
  * @returns IPRT status code.
  * @param   pThis       The directory instance data.
  */
-static int rtDirNtConvertCurName(PRTDIR pThis)
+static int rtDirNtConvertCurName(PRTDIRINTERNAL pThis)
 {
     switch (pThis->enmInfoClass)
     {
@@ -521,8 +545,9 @@ static int rtDirNtConvertCurName(PRTDIR pThis)
 }
 
 
-RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
+RTDECL(int) RTDirRead(RTDIR hDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
 {
+    PRTDIRINTERNAL pDir = hDir;
     int rc;
 
     /*
@@ -619,9 +644,10 @@ RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
 }
 
 
-RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
+RTDECL(int) RTDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
                         RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
 {
+    PRTDIRINTERNAL pDir = hDir;
     int rc;
 
     /*
@@ -748,8 +774,8 @@ RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntr
 
         case RTFSOBJATTRADD_UNIX:
             pDirEntry->Info.Attr.enmAdditional          = RTFSOBJATTRADD_UNIX;
-            pDirEntry->Info.Attr.u.Unix.uid             = ~0U;
-            pDirEntry->Info.Attr.u.Unix.gid             = ~0U;
+            pDirEntry->Info.Attr.u.Unix.uid             = NIL_RTUID;
+            pDirEntry->Info.Attr.u.Unix.gid             = NIL_RTGID;
             pDirEntry->Info.Attr.u.Unix.cHardlinks      = 1;
             pDirEntry->Info.Attr.u.Unix.INodeIdDevice   = pDir->uDirDev;
             pDirEntry->Info.Attr.u.Unix.INodeId         = 0;
@@ -767,13 +793,13 @@ RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntr
 
         case RTFSOBJATTRADD_UNIX_OWNER:
             pDirEntry->Info.Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_OWNER;
-            pDirEntry->Info.Attr.u.UnixOwner.uid        = ~0U;
+            pDirEntry->Info.Attr.u.UnixOwner.uid        = NIL_RTUID;
             pDirEntry->Info.Attr.u.UnixOwner.szName[0]  = '\0'; /** @todo return something sensible here. */
             break;
 
         case RTFSOBJATTRADD_UNIX_GROUP:
             pDirEntry->Info.Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_GROUP;
-            pDirEntry->Info.Attr.u.UnixGroup.gid        = ~0U;
+            pDirEntry->Info.Attr.u.UnixGroup.gid        = NIL_RTGID;
             pDirEntry->Info.Attr.u.UnixGroup.szName[0]  = '\0';
             break;
 
@@ -798,3 +824,70 @@ RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntr
     return rtDirNtAdvanceBuffer(pDir);
 }
 
+
+
+RTR3DECL(int) RTDirQueryInfo(RTDIR hDir, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
+{
+    PRTDIRINTERNAL pDir = hDir;
+    AssertPtrReturn(pDir, VERR_INVALID_POINTER);
+    AssertReturn(pDir->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+    AssertReturn(enmAdditionalAttribs >= RTFSOBJATTRADD_NOTHING && enmAdditionalAttribs <= RTFSOBJATTRADD_LAST,
+                 VERR_INVALID_PARAMETER);
+
+    if (pDir->enmInfoClass == FileMaximumInformation)
+    {
+        /*
+         * Directory object (see similar code above and rtPathNtQueryInfoInDirectoryObject).
+         */
+        pObjInfo->cbObject    = 0;
+        pObjInfo->cbAllocated = 0;
+        RTTimeSpecSetNtTime(&pObjInfo->BirthTime,         0);
+        RTTimeSpecSetNtTime(&pObjInfo->AccessTime,        0);
+        RTTimeSpecSetNtTime(&pObjInfo->ModificationTime,  0);
+        RTTimeSpecSetNtTime(&pObjInfo->ChangeTime,        0);
+        pObjInfo->Attr.fMode = RTFS_DOS_DIRECTORY | RTFS_TYPE_DIRECTORY | 0777;
+        pObjInfo->Attr.enmAdditional = enmAdditionalAttribs;
+        switch (enmAdditionalAttribs)
+        {
+            case RTFSOBJATTRADD_NOTHING:
+            case RTFSOBJATTRADD_UNIX:
+                pObjInfo->Attr.u.Unix.uid             = NIL_RTUID;
+                pObjInfo->Attr.u.Unix.gid             = NIL_RTGID;
+                pObjInfo->Attr.u.Unix.cHardlinks      = 1;
+                pObjInfo->Attr.u.Unix.INodeIdDevice   = pDir->uDirDev;
+                pObjInfo->Attr.u.Unix.INodeId         = 0;
+                pObjInfo->Attr.u.Unix.fFlags          = 0;
+                pObjInfo->Attr.u.Unix.GenerationId    = 0;
+                pObjInfo->Attr.u.Unix.Device          = 0;
+                break;
+
+            case RTFSOBJATTRADD_EASIZE:
+                pObjInfo->Attr.u.EASize.cb            = 0;
+                break;
+
+            case RTFSOBJATTRADD_UNIX_OWNER:
+                pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_OWNER;
+                pObjInfo->Attr.u.UnixOwner.uid        = NIL_RTUID;
+                pObjInfo->Attr.u.UnixOwner.szName[0]  = '\0'; /** @todo return something sensible here. */
+                break;
+
+            case RTFSOBJATTRADD_UNIX_GROUP:
+                pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_UNIX_GROUP;
+                pObjInfo->Attr.u.UnixGroup.gid        = NIL_RTGID;
+                pObjInfo->Attr.u.UnixGroup.szName[0]  = '\0';
+                break;
+
+            default:
+                AssertMsgFailed(("Impossible!\n"));
+                return VERR_INTERNAL_ERROR_2;
+        }
+        return VINF_SUCCESS;
+    }
+
+    /*
+     * Regular directory file.
+     */
+    uint8_t abBuf[_2K];
+    return rtPathNtQueryInfoFromHandle(pDir->hDir, abBuf, sizeof(abBuf), pObjInfo, enmAdditionalAttribs, "", 0);
+}
+
diff --git a/src/VBox/Runtime/r3/nt/dirrel-r3-nt.cpp b/src/VBox/Runtime/r3/nt/dirrel-r3-nt.cpp
new file mode 100644
index 0000000..2d8f3ad
--- /dev/null
+++ b/src/VBox/Runtime/r3/nt/dirrel-r3-nt.cpp
@@ -0,0 +1,695 @@
+/* $Id: dirrel-r3-nt.cpp $ */
+/** @file
+ * IPRT - Directory relative base APIs, NT implementation
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_DIR
+#include <iprt/dir.h>
+#include "internal-r3-nt.h"
+
+#include <iprt/assert.h>
+#include <iprt/file.h>
+#include <iprt/err.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+#include <iprt/symlink.h>
+#include "internal/dir.h"
+#include "internal/file.h"
+#include "internal/fs.h"
+#include "internal/path.h"
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+/** Getst the RTNTPATHRELATIVEASCENT value for RTNtPathRelativeFromUtf8. */
+#define RTDIRREL_NT_GET_ASCENT(a_pThis) \
+    ( !(pThis->fFlags & RTDIR_F_DENY_ASCENT) ? kRTNtPathRelativeAscent_Allow : kRTNtPathRelativeAscent_Fail )
+
+
+
+/**
+ * Helper that builds a full path for a directory relative path.
+ *
+ * @returns IPRT status code.
+ * @param   pThis               The directory.
+ * @param   pszPathDst          The destination buffer.
+ * @param   cbPathDst           The size of the destination buffer.
+ * @param   pszRelPath          The relative path.
+ */
+static int rtDirRelBuildFullPath(PRTDIRINTERNAL pThis, char *pszPathDst, size_t cbPathDst, const char *pszRelPath)
+{
+    AssertMsgReturn(!RTPathStartsWithRoot(pszRelPath), ("pszRelPath='%s'\n", pszRelPath), VERR_PATH_IS_NOT_RELATIVE);
+
+    /*
+     * Let's hope we can avoid checking for ascension.
+     *
+     * Note! We don't take symbolic links into account here.  That can be
+     *       done later if desired.
+     */
+    if (   !(pThis->fFlags & RTDIR_F_DENY_ASCENT)
+        || strstr(pszRelPath, "..") == NULL)
+    {
+        size_t const cchRelPath = strlen(pszRelPath);
+        size_t const cchDirPath = pThis->cchPath;
+        if (cchDirPath + cchRelPath < cbPathDst)
+        {
+            memcpy(pszPathDst, pThis->pszPath, cchDirPath);
+            memcpy(&pszPathDst[cchDirPath], pszRelPath, cchRelPath);
+            pszPathDst[cchDirPath + cchRelPath] = '\0';
+            return VINF_SUCCESS;
+        }
+        return VERR_FILENAME_TOO_LONG;
+    }
+
+    /*
+     * Calc the absolute path using the directory as a base, then check if the result
+     * still starts with the full directory path.
+     *
+     * This ASSUMES that pThis->pszPath is an absolute path.
+     */
+    int rc = RTPathAbsEx(pThis->pszPath, pszRelPath, pszPathDst, cbPathDst);
+    if (RT_SUCCESS(rc))
+    {
+        if (RTPathStartsWith(pszPathDst, pThis->pszPath))
+            return VINF_SUCCESS;
+        return VERR_PATH_NOT_FOUND;
+    }
+    return rc;
+}
+
+
+/*
+ *
+ *
+ * RTFile stuff.
+ * RTFile stuff.
+ * RTFile stuff.
+ *
+ *
+ */
+
+
+RTDECL(int)  RTDirRelFileOpen(RTDIR hDir, const char *pszRelFilename, uint64_t fOpen, PRTFILE phFile)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    /*
+     * Validate and convert flags.
+     */
+    uint32_t    fDesiredAccess;
+    uint32_t    fObjAttribs;
+    uint32_t    fFileAttribs;
+    uint32_t    fShareAccess;
+    uint32_t    fCreateDisposition;
+    uint32_t    fCreateOptions;
+    int rc = rtFileNtValidateAndConvertFlags(fOpen, &fDesiredAccess, &fObjAttribs, &fFileAttribs,
+                                             &fShareAccess, &fCreateDisposition, &fCreateOptions);
+    if (RT_SUCCESS(rc))
+    {
+        /*
+         * Convert and normalize the path.
+         */
+        UNICODE_STRING NtName;
+        HANDLE hRoot = pThis->hDir;
+        rc = RTNtPathRelativeFromUtf8(&NtName, &hRoot, pszRelFilename, RTDIRREL_NT_GET_ASCENT(pThis),
+                                      pThis->enmInfoClass == FileMaximumInformation);
+        if (RT_SUCCESS(rc))
+        {
+            HANDLE              hFile = RTNT_INVALID_HANDLE_VALUE;
+            IO_STATUS_BLOCK     Ios   = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+            OBJECT_ATTRIBUTES   ObjAttr;
+            InitializeObjectAttributes(&ObjAttr, &NtName, fObjAttribs, hRoot, NULL /*pSecDesc*/);
+
+            NTSTATUS rcNt = NtCreateFile(&hFile,
+                                         fDesiredAccess,
+                                         &ObjAttr,
+                                         &Ios,
+                                         NULL /* AllocationSize*/,
+                                         fFileAttribs,
+                                         fShareAccess,
+                                         fCreateDisposition,
+                                         fCreateOptions,
+                                         NULL /*EaBuffer*/,
+                                         0 /*EaLength*/);
+            if (NT_SUCCESS(rcNt))
+            {
+                rc = RTFileFromNative(phFile, (uintptr_t)hFile);
+                if (RT_FAILURE(rc))
+                    NtClose(hFile);
+            }
+            else
+                rc = RTErrConvertFromNtStatus(rcNt);
+            RTNtPathFree(&NtName, NULL);
+        }
+    }
+    return rc;
+}
+
+
+
+/*
+ *
+ *
+ * RTDir stuff.
+ * RTDir stuff.
+ * RTDir stuff.
+ *
+ *
+ */
+
+
+
+RTDECL(int) RTDirRelDirOpen(RTDIR hDir, const char *pszDir, RTDIR *phDir)
+{
+    return RTDirRelDirOpenFiltered(hDir, pszDir, RTDIRFILTER_NONE, 0 /*fFlags*/, phDir);
+}
+
+
+RTDECL(int) RTDirRelDirOpenFiltered(RTDIR hDir, const char *pszDirAndFilter, RTDIRFILTER enmFilter,
+                                    uint32_t fFlags, RTDIR *phDir)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    /*
+     * Convert and normalize the path.
+     */
+    UNICODE_STRING NtName;
+    HANDLE hRoot = pThis->hDir;
+    int rc = RTNtPathRelativeFromUtf8(&NtName, &hRoot, pszDirAndFilter, RTDIRREL_NT_GET_ASCENT(pThis),
+                                      pThis->enmInfoClass == FileMaximumInformation);
+    if (RT_SUCCESS(rc))
+    {
+        rc = rtDirOpenRelativeOrHandle(phDir, pszDirAndFilter, enmFilter, fFlags, (uintptr_t)hRoot, &NtName);
+        RTNtPathFree(&NtName, NULL);
+    }
+    return rc;
+}
+
+
+RTDECL(int) RTDirRelDirCreate(RTDIR hDir, const char *pszRelPath, RTFMODE fMode, uint32_t fCreate, RTDIR *phSubDir)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+    AssertReturn(!(fCreate & ~RTDIRCREATE_FLAGS_VALID_MASK), VERR_INVALID_FLAGS);
+    fMode = rtFsModeNormalize(fMode, pszRelPath, 0);
+    AssertReturn(rtFsModeIsValidPermissions(fMode), VERR_INVALID_FMODE);
+    AssertPtrNullReturn(phSubDir, VERR_INVALID_POINTER);
+
+    /*
+     * Convert and normalize the path.
+     */
+    UNICODE_STRING NtName;
+    HANDLE hRoot = pThis->hDir;
+    int rc = RTNtPathRelativeFromUtf8(&NtName, &hRoot, pszRelPath, RTDIRREL_NT_GET_ASCENT(pThis),
+                                      pThis->enmInfoClass == FileMaximumInformation);
+    if (RT_SUCCESS(rc))
+    {
+        HANDLE              hNewDir = RTNT_INVALID_HANDLE_VALUE;
+        IO_STATUS_BLOCK     Ios     = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+        OBJECT_ATTRIBUTES   ObjAttr;
+        InitializeObjectAttributes(&ObjAttr, &NtName, 0 /*fAttrib*/, hRoot, NULL);
+
+        ULONG fDirAttribs = (fCreate & RTFS_DOS_MASK_NT) >> RTFS_DOS_SHIFT;
+        if (!(fCreate & RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_DONT_SET))
+            fDirAttribs |= FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
+        if (!fDirAttribs)
+            fDirAttribs = FILE_ATTRIBUTE_NORMAL;
+
+        NTSTATUS rcNt = NtCreateFile(&hNewDir,
+                                     phSubDir
+                                     ? FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES | FILE_LIST_DIRECTORY | FILE_TRAVERSE | SYNCHRONIZE
+                                     : SYNCHRONIZE,
+                                     &ObjAttr,
+                                     &Ios,
+                                     NULL /*AllocationSize*/,
+                                     fDirAttribs,
+                                     FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                     FILE_CREATE,
+                                     FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
+                                     NULL /*EaBuffer*/,
+                                     0 /*EaLength*/);
+
+        /* Just in case someone takes offence at FILE_ATTRIBUTE_NOT_CONTENT_INDEXED. */
+        if (   (   rcNt == STATUS_INVALID_PARAMETER
+                || rcNt == STATUS_INVALID_PARAMETER_7)
+            && (fDirAttribs & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)
+            && (fCreate & RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_NOT_CRITICAL) )
+        {
+            fDirAttribs &= ~FILE_ATTRIBUTE_NOT_CONTENT_INDEXED;
+            if (!fDirAttribs)
+                fDirAttribs = FILE_ATTRIBUTE_NORMAL;
+            rcNt = NtCreateFile(&hNewDir,
+                                phSubDir
+                                ? FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES | FILE_LIST_DIRECTORY | FILE_TRAVERSE | SYNCHRONIZE
+                                : SYNCHRONIZE,
+                                &ObjAttr,
+                                &Ios,
+                                NULL /*AllocationSize*/,
+                                fDirAttribs,
+                                FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                FILE_CREATE,
+                                FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT,
+                                NULL /*EaBuffer*/,
+                                0 /*EaLength*/);
+        }
+
+        if (NT_SUCCESS(rcNt))
+        {
+            if (!phSubDir)
+            {
+                NtClose(hNewDir);
+                rc = VINF_SUCCESS;
+            }
+            else
+            {
+                rc = rtDirOpenRelativeOrHandle(phSubDir, pszRelPath, RTDIRFILTER_NONE, 0 /*fFlags*/,
+                                               (uintptr_t)hNewDir, NULL /*pvNativeRelative*/);
+                if (RT_FAILURE(rc))
+                    NtClose(hNewDir);
+            }
+        }
+        else
+            rc = RTErrConvertFromNtStatus(rcNt);
+        RTNtPathFree(&NtName, NULL);
+    }
+    return rc;
+}
+
+
+RTDECL(int) RTDirRelDirRemove(RTDIR hDir, const char *pszRelPath)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    /*
+     * Convert and normalize the path.
+     */
+    UNICODE_STRING NtName;
+    HANDLE hRoot = pThis->hDir;
+    int rc = RTNtPathRelativeFromUtf8(&NtName, &hRoot, pszRelPath, RTDIRREL_NT_GET_ASCENT(pThis),
+                                      pThis->enmInfoClass == FileMaximumInformation);
+    if (RT_SUCCESS(rc))
+    {
+        HANDLE              hSubDir = RTNT_INVALID_HANDLE_VALUE;
+        IO_STATUS_BLOCK     Ios     = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+        OBJECT_ATTRIBUTES   ObjAttr;
+        InitializeObjectAttributes(&ObjAttr, &NtName, 0 /*fAttrib*/, hRoot, NULL);
+
+        NTSTATUS rcNt = NtCreateFile(&hSubDir,
+                                     DELETE | SYNCHRONIZE,
+                                     &ObjAttr,
+                                     &Ios,
+                                     NULL /*AllocationSize*/,
+                                     FILE_ATTRIBUTE_NORMAL,
+                                     FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                     FILE_OPEN,
+                                     FILE_DIRECTORY_FILE | FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_REPARSE_POINT,
+                                     NULL /*EaBuffer*/,
+                                     0 /*EaLength*/);
+        if (NT_SUCCESS(rcNt))
+        {
+            FILE_DISPOSITION_INFORMATION DispInfo;
+            DispInfo.DeleteFile = TRUE;
+            RTNT_IO_STATUS_BLOCK_REINIT(&Ios);
+            rcNt = NtSetInformationFile(hSubDir, &Ios, &DispInfo, sizeof(DispInfo), FileDispositionInformation);
+
+            NTSTATUS rcNt2 = NtClose(hSubDir);
+            if (!NT_SUCCESS(rcNt2) && NT_SUCCESS(rcNt))
+                rcNt = rcNt2;
+        }
+
+        if (NT_SUCCESS(rcNt))
+            rc = VINF_SUCCESS;
+        else
+            rc = RTErrConvertFromNtStatus(rcNt);
+
+        RTNtPathFree(&NtName, NULL);
+    }
+    return rc;
+}
+
+
+/*
+ *
+ * RTPath stuff.
+ * RTPath stuff.
+ * RTPath stuff.
+ *
+ *
+ */
+
+
+RTDECL(int) RTDirRelPathQueryInfo(RTDIR hDir, const char *pszRelPath, PRTFSOBJINFO pObjInfo,
+                                  RTFSOBJATTRADD enmAddAttr, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    /*
+     * Validate and convert flags.
+     */
+    UNICODE_STRING NtName;
+    HANDLE hRoot = pThis->hDir;
+    int rc = RTNtPathRelativeFromUtf8(&NtName, &hRoot, pszRelPath, RTDIRREL_NT_GET_ASCENT(pThis),
+                                      pThis->enmInfoClass == FileMaximumInformation);
+    if (RT_SUCCESS(rc))
+    {
+        rc = rtPathNtQueryInfoWorker(hRoot, &NtName, pObjInfo, enmAddAttr, fFlags, pszRelPath);
+        RTNtPathFree(&NtName, NULL);
+    }
+    return rc;
+}
+
+
+/**
+ * Changes the mode flags of a file system object relative to @a hDir.
+ *
+ * The API requires at least one of the mode flag sets (Unix/Dos) to
+ * be set. The type is ignored.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   fMode           The new file mode, see @ref grp_rt_fs for details.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathSetMode
+ */
+RTDECL(int) RTDirRelPathSetMode(RTDIR hDir, const char *pszRelPath, RTFMODE fMode, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+    fMode = rtFsModeNormalize(fMode, pszRelPath, 0);
+    AssertReturn(rtFsModeIsValidPermissions(fMode), VERR_INVALID_FMODE);
+    AssertMsgReturn(RTPATH_F_IS_VALID(fFlags, 0), ("%#x\n", fFlags), VERR_INVALID_FLAGS);
+
+    /*
+     * Convert and normalize the path.
+     */
+    UNICODE_STRING NtName;
+    HANDLE hRoot = pThis->hDir;
+    int rc = RTNtPathRelativeFromUtf8(&NtName, &hRoot, pszRelPath, RTDIRREL_NT_GET_ASCENT(pThis),
+                                      pThis->enmInfoClass == FileMaximumInformation);
+    if (RT_SUCCESS(rc))
+    {
+        HANDLE              hSubDir = RTNT_INVALID_HANDLE_VALUE;
+        IO_STATUS_BLOCK     Ios     = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+        OBJECT_ATTRIBUTES   ObjAttr;
+        InitializeObjectAttributes(&ObjAttr, &NtName, 0 /*fAttrib*/, hRoot, NULL);
+
+        ULONG fOpenOptions = FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_REPARSE_POINT;
+        if (fFlags & RTPATH_F_ON_LINK)
+            fOpenOptions |= FILE_OPEN_REPARSE_POINT;
+        NTSTATUS rcNt = NtCreateFile(&hSubDir,
+                                     FILE_WRITE_ATTRIBUTES | SYNCHRONIZE,
+                                     &ObjAttr,
+                                     &Ios,
+                                     NULL /*AllocationSize*/,
+                                     FILE_ATTRIBUTE_NORMAL,
+                                     FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                     FILE_OPEN,
+                                     fOpenOptions,
+                                     NULL /*EaBuffer*/,
+                                     0 /*EaLength*/);
+        if (NT_SUCCESS(rcNt))
+        {
+            rc = rtNtFileSetModeWorker(hSubDir, fMode);
+
+            rcNt = NtClose(hSubDir);
+            if (!NT_SUCCESS(rcNt) && RT_SUCCESS(rc))
+                rc = RTErrConvertFromNtStatus(rcNt);
+        }
+        else
+            rc = RTErrConvertFromNtStatus(rcNt);
+
+        RTNtPathFree(&NtName, NULL);
+    }
+    return rc;
+}
+
+
+/**
+ * Changes one or more of the timestamps associated of file system object
+ * relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir                The directory @a pszRelPath is relative to.
+ * @param   pszRelPath          The relative path to the file system object.
+ * @param   pAccessTime         Pointer to the new access time.
+ * @param   pModificationTime   Pointer to the new modification time.
+ * @param   pChangeTime         Pointer to the new change time. NULL if not to be changed.
+ * @param   pBirthTime          Pointer to the new time of birth. NULL if not to be changed.
+ * @param   fFlags              RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @remark  The file system might not implement all these time attributes,
+ *          the API will ignore the ones which aren't supported.
+ *
+ * @remark  The file system might not implement the time resolution
+ *          employed by this interface, the time will be chopped to fit.
+ *
+ * @remark  The file system may update the change time even if it's
+ *          not specified.
+ *
+ * @remark  POSIX can only set Access & Modification and will always set both.
+ *
+ * @sa      RTPathSetTimesEx
+ */
+RTDECL(int) RTDirRelPathSetTimes(RTDIR hDir, const char *pszRelPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
+                                 PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+    {
+RTAssertMsg2("DBG: RTDirRelPathSetTimes(%s)...\n", szPath);
+        rc = RTPathSetTimesEx(szPath, pAccessTime, pModificationTime, pChangeTime, pBirthTime, fFlags);
+    }
+    return rc;
+}
+
+
+/**
+ * Changes the owner and/or group of a file system object relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   uid             The new file owner user id.  Pass NIL_RTUID to leave
+ *                          this unchanged.
+ * @param   gid             The new group id.  Pass NIL_RTGID to leave this
+ *                          unchanged.
+ * @param   fFlags          RTPATH_F_ON_LINK or RTPATH_F_FOLLOW_LINK.
+ *
+ * @sa      RTPathSetOwnerEx
+ */
+RTDECL(int) RTDirRelPathSetOwner(RTDIR hDir, const char *pszRelPath, uint32_t uid, uint32_t gid, uint32_t fFlags)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+    {
+RTAssertMsg2("DBG: RTDirRelPathSetOwner(%s)...\n", szPath);
+#ifndef RT_OS_WINDOWS
+        rc = RTPathSetOwnerEx(szPath, uid, gid, fFlags);
+#else
+        rc = VERR_NOT_IMPLEMENTED;
+        RT_NOREF(uid, gid, fFlags);
+#endif
+    }
+    return rc;
+}
+
+
+/**
+ * Renames a directory relative path within a filesystem.
+ *
+ * This will rename symbolic links.  If RTPATHRENAME_FLAGS_REPLACE is used and
+ * pszDst is a symbolic link, it will be replaced and not its target.
+ *
+ * @returns IPRT status code.
+ * @param   hDirSrc         The directory the source path is relative to.
+ * @param   pszSrc          The source path, relative to @a hDirSrc.
+ * @param   hDirSrc         The directory the destination path is relative to.
+ * @param   pszDst          The destination path, relative to @a hDirDst.
+ * @param   fRename         Rename flags, RTPATHRENAME_FLAGS_XXX.
+ *
+ * @sa      RTPathRename
+ */
+RTDECL(int) RTDirRelPathRename(RTDIR hDirSrc, const char *pszSrc, RTDIR hDirDst, const char *pszDst, unsigned fRename)
+{
+    PRTDIRINTERNAL pThis = hDirSrc;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    PRTDIRINTERNAL pThat = hDirDst;
+    if (pThat != pThis)
+    {
+        AssertPtrReturn(pThat, VERR_INVALID_HANDLE);
+        AssertReturn(pThat->u32Magic != RTDIR_MAGIC, VERR_INVALID_HANDLE);
+    }
+
+    char szSrcPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szSrcPath, sizeof(szSrcPath), pszSrc);
+    if (RT_SUCCESS(rc))
+    {
+        char szDstPath[RTPATH_MAX];
+        rc = rtDirRelBuildFullPath(pThis, szDstPath, sizeof(szDstPath), pszDst);
+        if (RT_SUCCESS(rc))
+        {
+RTAssertMsg2("DBG: RTDirRelPathRename(%s,%s)...\n", szSrcPath, szDstPath);
+            rc = RTPathRename(szSrcPath, szDstPath, fRename);
+        }
+    }
+    return rc;
+}
+
+
+/**
+ * Removes the last component of the directory relative path.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszRelPath is relative to.
+ * @param   pszRelPath      The relative path to the file system object.
+ * @param   fUnlink         Unlink flags, RTPATHUNLINK_FLAGS_XXX.
+ *
+ * @sa      RTPathUnlink
+ */
+RTDECL(int) RTDirRelPathUnlink(RTDIR hDir, const char *pszRelPath, uint32_t fUnlink)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszRelPath);
+    if (RT_SUCCESS(rc))
+    {
+RTAssertMsg2("DBG: RTDirRelPathUnlink(%s)...\n", szPath);
+        rc = RTPathUnlink(szPath, fUnlink);
+    }
+    return rc;
+}
+
+
+/*
+ *
+ * RTSymlink stuff.
+ * RTSymlink stuff.
+ * RTSymlink stuff.
+ *
+ *
+ */
+
+
+/**
+ * Creates a symbolic link (@a pszSymlink) relative to @a hDir targeting @a
+ * pszTarget.
+ *
+ * @returns IPRT status code.
+ * @param   hDir            The directory @a pszSymlink is relative to.
+ * @param   pszSymlink      The relative path of the symbolic link.
+ * @param   pszTarget       The path to the symbolic link target.  This is
+ *                          relative to @a pszSymlink or an absolute path.
+ * @param   enmType         The symbolic link type.  For Windows compatability
+ *                          it is very important to set this correctly.  When
+ *                          RTSYMLINKTYPE_UNKNOWN is used, the API will try
+ *                          make a guess and may attempt query information
+ *                          about @a pszTarget in the process.
+ * @param   fCreate         Create flags, RTSYMLINKCREATE_FLAGS_XXX.
+ *
+ * @sa      RTSymlinkCreate
+ */
+RTDECL(int) RTDirRelSymlinkCreate(RTDIR hDir, const char *pszSymlink, const char *pszTarget,
+                                  RTSYMLINKTYPE enmType, uint32_t fCreate)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszSymlink);
+    if (RT_SUCCESS(rc))
+    {
+RTAssertMsg2("DBG: RTDirRelSymlinkCreate(%s)...\n", szPath);
+        rc = RTSymlinkCreate(szPath, pszTarget, enmType, fCreate);
+    }
+    return rc;
+}
+
+
+/**
+ * Read the symlink target relative to @a hDir.
+ *
+ * @returns IPRT status code.
+ * @retval  VERR_NOT_SYMLINK if @a pszSymlink does not specify a symbolic link.
+ * @retval  VERR_BUFFER_OVERFLOW if the link is larger than @a cbTarget.  The
+ *          buffer will contain what all we managed to read, fully terminated
+ *          if @a cbTarget > 0.
+ *
+ * @param   hDir            The directory @a pszSymlink is relative to.
+ * @param   pszSymlink      The relative path to the symbolic link that should
+ *                          be read.
+ * @param   pszTarget       The target buffer.
+ * @param   cbTarget        The size of the target buffer.
+ * @param   fRead           Read flags, RTSYMLINKREAD_FLAGS_XXX.
+ *
+ * @sa      RTSymlinkRead
+ */
+RTDECL(int) RTDirRelSymlinkRead(RTDIR hDir, const char *pszSymlink, char *pszTarget, size_t cbTarget, uint32_t fRead)
+{
+    PRTDIRINTERNAL pThis = hDir;
+    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
+    AssertReturn(pThis->u32Magic == RTDIR_MAGIC, VERR_INVALID_HANDLE);
+
+    char szPath[RTPATH_MAX];
+    int rc = rtDirRelBuildFullPath(pThis, szPath, sizeof(szPath), pszSymlink);
+    if (RT_SUCCESS(rc))
+    {
+RTAssertMsg2("DBG: RTDirRelSymlinkRead(%s)...\n", szPath);
+        rc = RTSymlinkRead(szPath, pszTarget, cbTarget, fRead);
+    }
+    return rc;
+}
+
diff --git a/src/VBox/Runtime/r3/nt/internal-r3-nt.h b/src/VBox/Runtime/r3/nt/internal-r3-nt.h
index 7e3cacb..ff36647 100644
--- a/src/VBox/Runtime/r3/nt/internal-r3-nt.h
+++ b/src/VBox/Runtime/r3/nt/internal-r3-nt.h
@@ -68,3 +68,12 @@ DECLINLINE(bool) rtNtCompWideStrAndAscii(WCHAR const *pwsz1, size_t cch1, const
 
 #endif
 
+/**
+ * Common worker for RTFileSetMode, RTPathSetMode and RTDirRelPathSetMode.
+ *
+ * @returns IPRT status code.
+ * @param   hNativeFile The NT handle to the file system object.
+ * @param   fMode       Valid and normalized file mode mask to set.
+ */
+DECLHIDDEN(int) rtNtFileSetModeWorker(HANDLE hNativeFile, RTFMODE fMode);
+
diff --git a/src/VBox/Runtime/r3/nt/pathint-nt.cpp b/src/VBox/Runtime/r3/nt/pathint-nt.cpp
index 807ff27..0f55775 100644
--- a/src/VBox/Runtime/r3/nt/pathint-nt.cpp
+++ b/src/VBox/Runtime/r3/nt/pathint-nt.cpp
@@ -32,6 +32,7 @@
 #include "internal-r3-nt.h"
 
 #include <iprt/path.h>
+#include <iprt/mem.h>
 #include <iprt/string.h>
 #include <iprt/err.h>
 #include <iprt/assert.h>
@@ -405,27 +406,323 @@ RTDECL(int) RTNtPathEnsureSpace(struct _UNICODE_STRING *pNtName, size_t cwcMin)
 
 
 /**
+ * Gets the NT path to the object represented by the given handle.
+ *
+ * @returns IPRT status code.
+ * @param   pNtName             Where to return the NT path.  Free using
+ *                              RTUtf16Alloc.
+ * @param   hHandle             The handle.
+ * @param   cwcExtra            How much extra space is needed.
+ */
+static int rtNtPathFromHandle(struct _UNICODE_STRING *pNtName, HANDLE hHandle, size_t cwcExtra)
+{
+    /*
+     * Query the name into a buffer.
+     */
+    ULONG cbBuf = _2K;
+    PUNICODE_STRING pUniStrBuf = (PUNICODE_STRING)RTMemTmpAllocZ(cbBuf);
+    if (!pUniStrBuf)
+        return VERR_NO_TMP_MEMORY;
+
+    ULONG cbNameBuf = cbBuf;
+    NTSTATUS rcNt = NtQueryObject(hHandle, ObjectNameInformation, pUniStrBuf, cbBuf, &cbNameBuf);
+    while (   rcNt == STATUS_BUFFER_OVERFLOW
+           || rcNt == STATUS_BUFFER_TOO_SMALL)
+    {
+        do
+            cbBuf *= 2;
+        while (cbBuf <= cbNameBuf);
+        RTMemTmpFree(pUniStrBuf);
+        pUniStrBuf = (PUNICODE_STRING)RTMemTmpAllocZ(cbBuf);
+        if (!pUniStrBuf)
+            return VERR_NO_TMP_MEMORY;
+
+        cbNameBuf = cbBuf;
+        rcNt = NtQueryObject(hHandle, ObjectNameInformation, pUniStrBuf, cbBuf, &cbNameBuf);
+    }
+    int rc;
+    if (NT_SUCCESS(rcNt))
+    {
+        /*
+         * Copy the result into the return string.
+         */
+        size_t cbNeeded = cwcExtra * sizeof(RTUTF16) + pUniStrBuf->Length + sizeof(RTUTF16);
+        if (cbNeeded < _64K)
+        {
+            pNtName->Length        = pUniStrBuf->Length;
+            pNtName->MaximumLength = (uint16_t)cbNeeded;
+            pNtName->Buffer        = RTUtf16Alloc(cbNeeded);
+            if (pNtName->Buffer)
+            {
+                memcpy(pNtName->Buffer, pUniStrBuf->Buffer, pUniStrBuf->Length);
+                pNtName->Buffer[pUniStrBuf->Length / sizeof(RTUTF16)] = '\0';
+                rc = VINF_SUCCESS;
+            }
+            else
+                rc = VERR_NO_UTF16_MEMORY;
+        }
+        else
+            rc = VERR_FILENAME_TOO_LONG;
+    }
+    else
+        rc = RTErrConvertFromNtStatus(rcNt);
+    RTMemTmpFree(pUniStrBuf);
+    return rc;
+}
+
+static int rtNtPathRelativeToAbs(struct _UNICODE_STRING *pNtName, HANDLE *phRootDir)
+{
+    int rc;
+    if (pNtName->Length == 0)
+    {
+        RTUtf16Free(pNtName->Buffer);
+        rc = rtNtPathFromHandle(pNtName, *phRootDir, pNtName->Length / sizeof(RTUTF16) + 2);
+        if (RT_SUCCESS(rc))
+        {
+            *phRootDir = NULL;
+            return VINF_SUCCESS;
+        }
+    }
+    else
+    {
+
+        UNICODE_STRING RootDir;
+        size_t const   cwcAppend = pNtName->Length / sizeof(RTUTF16);
+        rc = rtNtPathFromHandle(&RootDir, *phRootDir, cwcAppend + 2);
+        if (RT_SUCCESS(rc))
+        {
+            size_t cwcRoot = RootDir.Length / sizeof(RTUTF16);
+            if (RootDir.Buffer[cwcRoot - 1] != '\\')
+                RootDir.Buffer[cwcRoot++] = '\\';
+            memcpy(&RootDir.Buffer[cwcRoot], pNtName->Buffer, cwcAppend * sizeof(RTUTF16));
+            RTUtf16Free(pNtName->Buffer);
+            pNtName->Length        = (uint16_t)((cwcRoot + cwcAppend) * sizeof(RTUTF16));
+            pNtName->MaximumLength = RootDir.MaximumLength;
+            pNtName->Buffer        = RootDir.Buffer;
+
+            *phRootDir = NULL;
+            return VINF_SUCCESS;
+        }
+        RTUtf16Free(pNtName->Buffer);
+    }
+    pNtName->Length        = 0;
+    pNtName->MaximumLength = 0;
+    pNtName->Buffer        = NULL;
+    return rc;
+}
+
+
+/**
+ * Rewinds the path back to the start of the previous component.
+ *
+ * Will preserve root slash.
+ *
+ * @returns Pointer to character after the start-of-component slash, or
+ *          pwszStart.
+ * @param   pwcEnd              The current end of the path.
+ * @param   pwszStart           The start of the path.
+ */
+static PRTUTF16 rtNtPathGetPrevComponent(PRTUTF16 pwcEnd, PRTUTF16 pwszStart)
+{
+    if ((uintptr_t)pwcEnd > (uintptr_t)pwszStart)
+    {
+        RTUTF16 wc = pwcEnd[-1];
+        if (   (wc == '\\' || wc == '/')
+            && (uintptr_t)(pwcEnd - pwszStart) != 1)
+            pwcEnd--;
+
+        while (   (uintptr_t)pwcEnd > (uintptr_t)pwszStart
+               && (wc = pwcEnd[-1]) != '\\'
+               && (wc = pwcEnd[-1]) != '/')
+            pwcEnd--;
+    }
+    return pwcEnd;
+}
+
+
+/**
+ * Converts a relative windows-style path to relative NT format and encoding.
+ *
+ * @returns IPRT status code.
+ * @param   pNtName             Where to return the NT name.  Free using
+ *                              rtTNtPathToNative with phRootDir set to NULL.
+ * @param   phRootDir           On input, the handle to the directory the path
+ *                              is relative to.  On output, the handle to
+ *                              specify as root directory in the object
+ *                              attributes when accessing the path.  If
+ *                              enmAscent is kRTNtPathRelativeAscent_Allow, it
+ *                              may have been set to NULL.
+ * @param   pszPath             The relative UTF-8 path.
+ * @param   enmAscent           How to handle ascent.
+ * @param   fMustReturnAbsolute Must convert to an absolute path.  This
+ *                              is necessary if the root dir is a NT directory
+ *                              object (e.g. /Devices) since they cannot parse
+ *                              relative paths it seems.
+ */
+RTDECL(int) RTNtPathRelativeFromUtf8(struct _UNICODE_STRING *pNtName, PHANDLE phRootDir, const char *pszPath,
+                                     RTNTPATHRELATIVEASCENT enmAscent, bool fMustReturnAbsolute)
+{
+    size_t cwcMax;
+    int rc = RTStrCalcUtf16LenEx(pszPath, RTSTR_MAX, &cwcMax);
+    if (RT_FAILURE(rc))
+        return rc;
+    if (cwcMax + 2 >= _32K)
+        return VERR_FILENAME_TOO_LONG;
+
+    PRTUTF16 pwszDst;
+    pNtName->Length        = 0;
+    pNtName->MaximumLength = (uint16_t)((cwcMax + 2) * sizeof(RTUTF16));
+    pNtName->Buffer        = pwszDst = RTUtf16Alloc((cwcMax + 2) * sizeof(RTUTF16));
+    if (!pwszDst)
+        return VERR_NO_UTF16_MEMORY;
+
+    PRTUTF16 pwszDstCur  = pwszDst;
+    PRTUTF16 pwszDstComp = pwszDst;
+    for (;;)
+    {
+        RTUNICP uc;
+        rc = RTStrGetCpEx(&pszPath, &uc);
+        if (RT_SUCCESS(rc))
+        {
+            switch (uc)
+            {
+                default:
+                    pwszDstCur = RTUtf16PutCp(pwszDstCur, uc);
+                    break;
+
+                case '\\':
+                case '/':
+                    if (pwszDstCur != pwszDstComp)
+                        pwszDstComp = pwszDstCur = RTUtf16PutCp(pwszDstCur, '\\');
+                    /* else: only one slash between components. */
+                    break;
+
+                case '.':
+                    if (pwszDstCur == pwszDstComp)
+                    {
+                        /*
+                         * Single dot changes nothing.
+                         */
+                        char ch2 = *pszPath;
+                        if (ch2 == '\0')
+                        {
+                            /* Trailing single dot means we need to drop trailing slash. */
+                            if (pwszDstCur != pwszDst)
+                                pwszDstCur--;
+                            *pwszDstCur = '\0';
+                            pNtName->Length = (uint16_t)((uintptr_t)pwszDstCur - (uintptr_t)pwszDst);
+                            if (!fMustReturnAbsolute || *phRootDir == NULL)
+                                return VINF_SUCCESS;
+                            return rtNtPathRelativeToAbs(pNtName, phRootDir);
+                        }
+
+                        if (ch2 == '\\' || ch2 == '/')
+                        {
+                            pszPath++; /* Ignore lone dot followed but another component. */
+                            break;
+                        }
+
+                        /*
+                         * Two dots drops off the last directory component.  This gets complicated
+                         * when we start out without any path and we need to consult enmAscent.
+                         */
+                        if (ch2 == '.')
+                        {
+                            char ch3 = pszPath[1];
+                            if (   ch3 == '\\'
+                                || ch3 == '/'
+                                || ch3 == '\0')
+                            {
+                                /* Drop a path component. */
+                                if (pwszDstComp != pwszDst)
+                                    pwszDstComp = pwszDstCur = rtNtPathGetPrevComponent(pwszDstCur, pwszDst);
+                                /* Hit the start, which is a bit complicated. */
+                                else
+                                    switch (enmAscent)
+                                    {
+                                        case kRTNtPathRelativeAscent_Allow:
+                                            if (*phRootDir != NULL)
+                                            {
+                                                RTUtf16Free(pwszDst);
+                                                rc = rtNtPathFromHandle(pNtName, *phRootDir, cwcMax + 2);
+                                                if (RT_FAILURE(rc))
+                                                    return rc;
+
+                                                *phRootDir = NULL;
+                                                pwszDst    = pNtName->Buffer;
+                                                pwszDstCur = &pwszDst[pNtName->Length / sizeof(RTUTF16)];
+                                                if (   pwszDst != pwszDstCur
+                                                    && pwszDstCur[-1] != '\\'
+                                                    && pwszDstCur[-1] != '/')
+                                                    *pwszDstCur++ = '\\';
+                                                pwszDstComp = pwszDstCur = rtNtPathGetPrevComponent(pwszDstCur, pwszDst);
+                                            }
+                                            /* else: ignore attempt to ascend beyond the NT root (won't get here). */
+                                            break;
+
+                                        case kRTNtPathRelativeAscent_Ignore:
+                                            /* nothing to do here */
+                                            break;
+
+                                        default:
+                                        case kRTNtPathRelativeAscent_Fail:
+                                            RTUtf16Free(pwszDst);
+                                            return VERR_PATH_NOT_FOUND;
+                                    }
+
+                                if (ch3 == '\0')
+                                {
+                                    *pwszDstCur = '\0';
+                                    pNtName->Length = (uint16_t)((uintptr_t)pwszDstCur - (uintptr_t)pwszDst);
+                                    if (!fMustReturnAbsolute || *phRootDir == NULL)
+                                        return VINF_SUCCESS;
+                                    return rtNtPathRelativeToAbs(pNtName, phRootDir);
+                                }
+                                pszPath += 2;
+                                break;
+                            }
+                        }
+                    }
+
+                    /* Neither '.' nor '..'. */
+                    pwszDstCur = RTUtf16PutCp(pwszDstCur, '.');
+                    break;
+
+                case '\0':
+                    *pwszDstCur = '\0';
+                    pNtName->Length = (uint16_t)((uintptr_t)pwszDstCur - (uintptr_t)pwszDst);
+                    if (!fMustReturnAbsolute || *phRootDir == NULL)
+                        return VINF_SUCCESS;
+                    return rtNtPathRelativeToAbs(pNtName, phRootDir);
+            }
+        }
+    }
+}
+
+
+/**
  * Frees the native path and root handle.
  *
  * @param   pNtName             The NT path after a successful rtNtPathToNative
- *                              call.
- * @param   phRootDir           The root handle variable from the same call.
+ *                              call or RTNtPathRelativeFromUtf8.
+ * @param   phRootDir           The root handle variable from rtNtPathToNative,
+ *                              but NOT RTNtPathRelativeFromUtf8.
  */
 static void rtNtPathFreeNative(struct _UNICODE_STRING *pNtName, PHANDLE phRootDir)
 {
     RTUtf16Free(pNtName->Buffer);
     pNtName->Buffer = NULL;
 
-    RT_NOREF_PV(phRootDir); /* never returned by rtNtPathToNative */
+    RT_NOREF_PV(phRootDir); /* never returned by rtNtPathToNative, shouldn't be freed in connection with RTNtPathRelativeFromUtf8 */
 }
 
 
 /**
  * Frees the native path and root handle.
  *
- * @param   pNtName             The NT path from a successful RTNtPathToNative
- *                              or RTNtPathFromWinUtf16Ex call.
- * @param   phRootDir           The root handle variable from the same call.
+ * @param   pNtName             The NT path after a successful rtNtPathToNative
+ *                              call or RTNtPathRelativeFromUtf8.
+ * @param   phRootDir           The root handle variable from rtNtPathToNative,
  */
 RTDECL(void) RTNtPathFree(struct _UNICODE_STRING *pNtName, HANDLE *phRootDir)
 {
@@ -516,74 +813,159 @@ RTDECL(int) RTNtPathOpenDir(const char *pszPath, ACCESS_MASK fDesiredAccess, ULO
     int rc = rtNtPathToNative(&NtName, &hRootDir, pszPath);
     if (RT_SUCCESS(rc))
     {
-        HANDLE              hFile = RTNT_INVALID_HANDLE_VALUE;
-        IO_STATUS_BLOCK     Ios   = RTNT_IO_STATUS_BLOCK_INITIALIZER;
-        OBJECT_ATTRIBUTES   ObjAttr;
-        InitializeObjectAttributes(&ObjAttr, &NtName, fObjAttribs, hRootDir, NULL);
-
-        NTSTATUS rcNt = NtCreateFile(&hFile,
-                                     fDesiredAccess,
-                                     &ObjAttr,
-                                     &Ios,
-                                     NULL /* AllocationSize*/,
-                                     FILE_ATTRIBUTE_NORMAL,
-                                     fShareAccess,
-                                     FILE_OPEN,
-                                     fCreateOptions,
-                                     NULL /*EaBuffer*/,
-                                     0 /*EaLength*/);
-        if (NT_SUCCESS(rcNt))
+        if (pfObjDir)
         {
-            if (pfObjDir)
-                *pfObjDir = false;
-            *phHandle = hFile;
-            rc = VINF_SUCCESS;
-        }
+            *pfObjDir = false;
 #ifdef IPRT_WITH_NT_PATH_PASSTHRU
-        else if (   pfObjDir
-                 && (rcNt == STATUS_OBJECT_NAME_INVALID || rcNt == STATUS_OBJECT_TYPE_MISMATCH)
-                 && RTPATH_IS_SLASH(pszPath[0])
-                 && RTPATH_IS_SLASH(pszPath[1])
-                 && pszPath[2] == '!'
-                 && RTPATH_IS_SLASH(pszPath[3]))
-        {
-            /* Strip trailing slash. */
-            if (   NtName.Length > 2
-                && RTPATH_IS_SLASH(NtName.Buffer[(NtName.Length / 2) - 1]))
-                NtName.Length -= 2;
-
-            /* Rought conversion of the access flags. */
-            ULONG fObjDesiredAccess = 0;
-            if (fDesiredAccess & (GENERIC_ALL | STANDARD_RIGHTS_ALL))
-                fObjDesiredAccess = DIRECTORY_ALL_ACCESS;
-            else
-            {
-                if (fDesiredAccess & (FILE_GENERIC_WRITE | GENERIC_WRITE | STANDARD_RIGHTS_WRITE))
-                    fObjDesiredAccess |= DIRECTORY_CREATE_OBJECT | DIRECTORY_CREATE_OBJECT;
-                if (   (fDesiredAccess & (FILE_LIST_DIRECTORY | FILE_GENERIC_READ | GENERIC_READ | STANDARD_RIGHTS_READ))
-                    || !fObjDesiredAccess)
-                    fObjDesiredAccess |= DIRECTORY_QUERY | FILE_LIST_DIRECTORY;
-            }
+            if (   !RTPATH_IS_SLASH(pszPath[0])
+                || !RTPATH_IS_SLASH(pszPath[1])
+                || pszPath[2] != '!'
+                || RTPATH_IS_SLASH(pszPath[3]))
+#endif
+                pfObjDir = NULL;
+        }
+        rc = RTNtPathOpenDirEx(hRootDir, &NtName, fDesiredAccess, fShareAccess, fCreateOptions, fObjAttribs, phHandle, pfObjDir);
+        rtNtPathFreeNative(&NtName, &hRootDir);
+    }
+    return rc;
+}
+
 
-            rcNt = NtOpenDirectoryObject(&hFile, fObjDesiredAccess, &ObjAttr);
+
+/**
+ * Wrapper around NtCreateFile, extended version.
+ *
+ * @returns IPRT status code.
+ * @param   hRootDir            The root director the path is relative to.  NULL
+ *                              if none.
+ * @param   pNtName             The NT path.
+ * @param   fDesiredAccess      See NtCreateFile.
+ * @param   fShareAccess        See NtCreateFile.
+ * @param   fCreateOptions      See NtCreateFile.
+ * @param   fObjAttribs         The OBJECT_ATTRIBUTES::Attributes value, see
+ *                              NtCreateFile and InitializeObjectAttributes.
+ * @param   phHandle            Where to return the handle.
+ * @param   pfObjDir            If not NULL, the variable pointed to will be set
+ *                              to @c true if we opened an object directory and
+ *                              @c false if we opened an directory file (normal
+ *                              directory).
+ */
+RTDECL(int) RTNtPathOpenDirEx(HANDLE hRootDir, struct _UNICODE_STRING *pNtName, ACCESS_MASK fDesiredAccess, ULONG fShareAccess,
+                              ULONG fCreateOptions, ULONG fObjAttribs, PHANDLE phHandle, bool *pfObjDir)
+{
+    *phHandle = RTNT_INVALID_HANDLE_VALUE;
+
+    HANDLE              hFile = RTNT_INVALID_HANDLE_VALUE;
+    IO_STATUS_BLOCK     Ios   = RTNT_IO_STATUS_BLOCK_INITIALIZER;
+    OBJECT_ATTRIBUTES   ObjAttr;
+    InitializeObjectAttributes(&ObjAttr, pNtName, fObjAttribs, hRootDir, NULL);
+
+    NTSTATUS rcNt = NtCreateFile(&hFile,
+                                 fDesiredAccess,
+                                 &ObjAttr,
+                                 &Ios,
+                                 NULL /* AllocationSize*/,
+                                 FILE_ATTRIBUTE_NORMAL,
+                                 fShareAccess,
+                                 FILE_OPEN,
+                                 fCreateOptions,
+                                 NULL /*EaBuffer*/,
+                                 0 /*EaLength*/);
+    if (NT_SUCCESS(rcNt))
+    {
+        if (pfObjDir)
+            *pfObjDir = false;
+        *phHandle = hFile;
+        return VINF_SUCCESS;
+    }
+
+    /*
+     * Try add a slash in case this is a device object with a file system attached.
+     */
+    if (   rcNt == STATUS_INVALID_PARAMETER
+        && pNtName->Length < _64K - 4
+        && (   pNtName->Length == 0
+            || pNtName->Buffer[pNtName->Length / sizeof(RTUTF16)] != '\\') )
+    {
+        UNICODE_STRING NtTmp;
+        NtTmp.Length        = pNtName->Length + 2;
+        NtTmp.MaximumLength = NtTmp.Length + 2;
+        NtTmp.Buffer        = (PRTUTF16)RTMemTmpAlloc(NtTmp.MaximumLength);
+        if (NtTmp.Buffer)
+        {
+            memcpy(NtTmp.Buffer, pNtName->Buffer, pNtName->Length);
+            NtTmp.Buffer[pNtName->Length / sizeof(RTUTF16)] = '\\';
+            NtTmp.Buffer[pNtName->Length / sizeof(RTUTF16) + 1] = '\0';
+
+            hFile = RTNT_INVALID_HANDLE_VALUE;
+            Ios.Status = -1;
+            Ios.Information = 0;
+            ObjAttr.ObjectName = &NtTmp;
+
+            rcNt = NtCreateFile(&hFile,
+                                fDesiredAccess,
+                                &ObjAttr,
+                                &Ios,
+                                NULL /* AllocationSize*/,
+                                FILE_ATTRIBUTE_NORMAL,
+                                fShareAccess,
+                                FILE_OPEN,
+                                fCreateOptions,
+                                NULL /*EaBuffer*/,
+                                0 /*EaLength*/);
+            RTMemTmpFree(NtTmp.Buffer);
             if (NT_SUCCESS(rcNt))
             {
-                *pfObjDir = true;
+                if (pfObjDir)
+                    *pfObjDir = false;
                 *phHandle = hFile;
-                rc = VINF_SUCCESS;
+                return VINF_SUCCESS;
             }
-            else
-                rc = RTErrConvertFromNtStatus(rcNt);
+            ObjAttr.ObjectName = pNtName;
         }
-#endif
+    }
+
+    /*
+     * Try open it as a directory object if it makes sense.
+     */
+    if (   pfObjDir
+        && (   rcNt == STATUS_OBJECT_NAME_INVALID
+            || rcNt == STATUS_OBJECT_TYPE_MISMATCH ))
+    {
+        /* Strip trailing slash. */
+        struct _UNICODE_STRING NtName2 = *pNtName;
+        if (   NtName2.Length > 2
+            && RTPATH_IS_SLASH(NtName2.Buffer[(NtName2.Length / 2) - 1]))
+            NtName2.Length -= 2;
+        ObjAttr.ObjectName = &NtName2;
+
+        /* Rought conversion of the access flags. */
+        ULONG fObjDesiredAccess = 0;
+        if (fDesiredAccess & (GENERIC_ALL | STANDARD_RIGHTS_ALL))
+            fObjDesiredAccess = DIRECTORY_ALL_ACCESS;
         else
-            rc = RTErrConvertFromNtStatus(rcNt);
-        rtNtPathFreeNative(&NtName, &hRootDir);
+        {
+            if (fDesiredAccess & (FILE_GENERIC_WRITE | GENERIC_WRITE | STANDARD_RIGHTS_WRITE))
+                fObjDesiredAccess |= DIRECTORY_CREATE_OBJECT | DIRECTORY_CREATE_OBJECT;
+            if (   (fDesiredAccess & (FILE_LIST_DIRECTORY | FILE_GENERIC_READ | GENERIC_READ | STANDARD_RIGHTS_READ))
+                || !fObjDesiredAccess)
+                fObjDesiredAccess |= DIRECTORY_QUERY | FILE_LIST_DIRECTORY;
+        }
+
+        rcNt = NtOpenDirectoryObject(&hFile, fObjDesiredAccess, &ObjAttr);
+        if (NT_SUCCESS(rcNt))
+        {
+            *pfObjDir = true;
+            *phHandle = hFile;
+            return VINF_SUCCESS;
+        }
     }
-    return rc;
+
+    return RTErrConvertFromNtStatus(rcNt);
 }
 
 
+
 /**
  * Closes an handled open by rtNtPathOpen.
  *
diff --git a/src/VBox/Runtime/r3/posix/dir-posix.cpp b/src/VBox/Runtime/r3/posix/dir-posix.cpp
index e8b39f7..1df691e 100644
--- a/src/VBox/Runtime/r3/posix/dir-posix.cpp
+++ b/src/VBox/Runtime/r3/posix/dir-posix.cpp
@@ -214,18 +214,20 @@ size_t rtDirNativeGetStructSize(const char *pszPath)
     if (cbNameMax < _XOPEN_NAME_MAX)    /* Ditto. */
         cbNameMax = _XOPEN_NAME_MAX;
 # endif
-    size_t cbDir = RT_OFFSETOF(RTDIR, Data.d_name[cbNameMax + 1]);
-    if (cbDir < sizeof(RTDIR))          /* Ditto. */
-        cbDir = sizeof(RTDIR);
+    size_t cbDir = RT_OFFSETOF(RTDIRINTERNAL, Data.d_name[cbNameMax + 1]);
+    if (cbDir < sizeof(RTDIRINTERNAL))  /* Ditto. */
+        cbDir = sizeof(RTDIRINTERNAL);
     cbDir = RT_ALIGN_Z(cbDir, 8);
 
     return cbDir;
 }
 
 
-int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
+int rtDirNativeOpen(PRTDIRINTERNAL pDir, char *pszPathBuf, uintptr_t hRelativeDir, void *pvNativeRelative)
 {
     NOREF(pszPathBuf); /* only used on windows */
+    NOREF(hRelativeDir);
+    NOREF(pvNativeRelative);
 
     /*
      * Convert to a native path and try opendir.
@@ -252,8 +254,10 @@ int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
 }
 
 
-RTDECL(int) RTDirClose(PRTDIR pDir)
+RTDECL(int) RTDirClose(RTDIR hDir)
 {
+    PRTDIRINTERNAL pDir = hDir;
+
     /*
      * Validate input.
      */
@@ -288,7 +292,7 @@ RTDECL(int) RTDirClose(PRTDIR pDir)
  * @returns IPRT status code.
  * @param   pDir        the open directory. Fully validated.
  */
-static int rtDirReadMore(PRTDIR pDir)
+static int rtDirReadMore(PRTDIRINTERNAL pDir)
 {
     /** @todo try avoid the rematching on buffer overflow errors. */
     for (;;)
@@ -374,8 +378,10 @@ static RTDIRENTRYTYPE rtDirType(int iType)
 #endif /*HAVE_DIRENT_D_TYPE */
 
 
-RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
+RTDECL(int) RTDirRead(RTDIR hDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
 {
+    PRTDIRINTERNAL pDir = hDir;
+
     /*
      * Validate and digest input.
      */
@@ -471,8 +477,11 @@ static void rtDirSetDummyInfo(PRTFSOBJINFO pInfo, RTDIRENTRYTYPE enmType)
 }
 
 
-RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
+RTDECL(int) RTDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry,
+                        RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
 {
+    PRTDIRINTERNAL pDir = hDir;
+
     /*
      * Validate and digest input.
      */
diff --git a/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp b/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp
index 15e774f..2e43ce5 100644
--- a/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp
+++ b/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp
@@ -59,8 +59,8 @@
 # include <ucontext.h>
 #endif  /* RT_OS_SOLARIS */
 
-#include "internal/ldrELF.h"
-#include "internal/ldrELF64.h"
+#include <iprt/formats/elf.h>
+#include <iprt/formats/elf64.h>
 
 
 /*********************************************************************************************************************************
diff --git a/src/VBox/Runtime/r3/test.cpp b/src/VBox/Runtime/r3/test.cpp
index f04f0fe..be7fef5 100644
--- a/src/VBox/Runtime/r3/test.cpp
+++ b/src/VBox/Runtime/r3/test.cpp
@@ -1359,6 +1359,7 @@ RTR3DECL(int) RTTestSub(RTTEST hTest, const char *pszSubTest)
     pTest->cSubTestAtErrors = ASMAtomicUoReadU32(&pTest->cErrors);
     pTest->pszSubTest = RTStrDup(pszSubTest);
     pTest->cchSubTest = strlen(pszSubTest);
+    Assert(pTest->cchSubTest < 64 /* See g_kcchMaxTestResultName in testmanager/config.py. */);
     pTest->fSubTestSkipped  = false;
     pTest->fSubTestReported = false;
 
@@ -1599,6 +1600,8 @@ RTR3DECL(int) RTTestValue(RTTEST hTest, const char *pszName, uint64_t u64Value,
     PRTTESTINT pTest = hTest;
     RTTEST_GET_VALID_RETURN(pTest);
 
+    Assert(strlen(pszName) < 56 /* See g_kcchMaxTestValueName in testmanager/config.py. */);
+
     const char *pszUnit = rtTestUnitName(enmUnit);
 
     RTCritSectEnter(&pTest->Lock);
diff --git a/src/VBox/Runtime/r3/win/RTLocaleQueryNormalizedBaseLocaleName-win.cpp b/src/VBox/Runtime/r3/win/RTLocaleQueryNormalizedBaseLocaleName-win.cpp
index 4e1dfc4..747ee6f 100644
--- a/src/VBox/Runtime/r3/win/RTLocaleQueryNormalizedBaseLocaleName-win.cpp
+++ b/src/VBox/Runtime/r3/win/RTLocaleQueryNormalizedBaseLocaleName-win.cpp
@@ -104,4 +104,3 @@ RTDECL(int) RTLocaleQueryNormalizedBaseLocaleName(char *pszName, size_t cbName)
     return rc;
 }
 
-
diff --git a/src/VBox/Runtime/r3/win/direnum-win.cpp b/src/VBox/Runtime/r3/win/direnum-win.cpp
index 1e0f659..d6f1c71 100644
--- a/src/VBox/Runtime/r3/win/direnum-win.cpp
+++ b/src/VBox/Runtime/r3/win/direnum-win.cpp
@@ -46,12 +46,14 @@
 size_t rtDirNativeGetStructSize(const char *pszPath)
 {
     NOREF(pszPath);
-    return sizeof(RTDIR);
+    return sizeof(RTDIRINTERNAL);
 }
 
 
-int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
+int rtDirNativeOpen(PRTDIRINTERNAL pDir, char *pszPathBuf, uintptr_t hRelativeDir, void *pvNativeRelative))
 {
+    RT_NOREF(hRelativeDir, pvNativeRelative);
+
     /*
      * Setup the search expression.
      *
@@ -104,7 +106,7 @@ int rtDirNativeOpen(PRTDIR pDir, char *pszPathBuf)
 }
 
 
-RTDECL(int) RTDirClose(PRTDIR pDir)
+RTDECL(int) RTDirClose(PRTDIRINTERNAL pDir)
 {
     /*
      * Validate input.
@@ -135,8 +137,10 @@ RTDECL(int) RTDirClose(PRTDIR pDir)
 }
 
 
-RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
+RTDECL(int) RTDirRead(RTDIR hDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
 {
+    PPRTDIRINTERNAL pDir = hDir;
+
     /*
      * Validate input.
      */
@@ -219,8 +223,9 @@ RTDECL(int) RTDirRead(PRTDIR pDir, PRTDIRENTRY pDirEntry, size_t *pcbDirEntry)
 }
 
 
-RTDECL(int) RTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
+RTDECL(int) RTDirReadEx(RTDIR hDir, PRTDIRENTRYEX pDirEntry, size_t *pcbDirEntry, RTFSOBJATTRADD enmAdditionalAttribs, uint32_t fFlags)
 {
+    PPRTDIRINTERNAL pDir = hDir;
     /** @todo Symlinks: Find[First|Next]FileW will return info about
         the link, so RTPATH_F_FOLLOW_LINK is not handled correctly. */
     /*
diff --git a/src/VBox/Runtime/r3/win/fileio-win.cpp b/src/VBox/Runtime/r3/win/fileio-win.cpp
index 6e42b38..65a8ab4 100644
--- a/src/VBox/Runtime/r3/win/fileio-win.cpp
+++ b/src/VBox/Runtime/r3/win/fileio-win.cpp
@@ -495,7 +495,7 @@ RTR3DECL(int)  RTFileWrite(RTFILE hFile, const void *pvBuf, size_t cbToWrite, si
 {
     if (cbToWrite <= 0)
         return VINF_SUCCESS;
-    ULONG cbToWriteAdj = (ULONG)cbToWrite;
+    ULONG const cbToWriteAdj = (ULONG)cbToWrite;
     AssertReturn(cbToWriteAdj == cbToWrite, VERR_NUMBER_TOO_BIG);
 
     ULONG cbWritten = 0;
@@ -503,11 +503,11 @@ RTR3DECL(int)  RTFileWrite(RTFILE hFile, const void *pvBuf, size_t cbToWrite, si
     {
         if (pcbWritten)
             /* Caller can handle partial writes. */
-            *pcbWritten = cbWritten;
+            *pcbWritten = RT_MIN(cbWritten, cbToWriteAdj); /* paranoia^3 */
         else
         {
             /* Caller expects everything to be written. */
-            while (cbToWriteAdj > cbWritten)
+            while (cbWritten < cbToWriteAdj)
             {
                 ULONG cbWrittenPart = 0;
                 if (!WriteFile((HANDLE)RTFileToNative(hFile), (char*)pvBuf + cbWritten,
@@ -542,7 +542,7 @@ RTR3DECL(int)  RTFileWrite(RTFILE hFile, const void *pvBuf, size_t cbToWrite, si
             cbChunk = RT_ALIGN_32(cbChunk, 256);
 
         cbWritten = 0;
-        while (cbToWriteAdj > cbWritten)
+        while (cbWritten < cbToWriteAdj)
         {
             ULONG cbToWrite     = RT_MIN(cbChunk, cbToWriteAdj - cbWritten);
             ULONG cbWrittenPart = 0;
@@ -569,7 +569,7 @@ RTR3DECL(int)  RTFileWrite(RTFILE hFile, const void *pvBuf, size_t cbToWrite, si
                write out everything. */
             if (pcbWritten)
             {
-                *pcbWritten = cbWritten;
+                *pcbWritten = RT_MIN(cbWritten, cbToWriteAdj); /* paranoia^3 */
                 break;
             }
             if (cbWrittenPart == 0)
@@ -976,6 +976,7 @@ RTR3DECL(int) RTFileSetTimes(RTFILE hFile, PCRTTIMESPEC pAccessTime, PCRTTIMESPE
 }
 
 
+#if 0 /* RTFileSetMode is implemented by RTFileSetMode-r3-nt.cpp */
 /* This comes from a source file with a different set of system headers (DDK)
  * so it can't be declared in a common header, like internal/file.h.
  */
@@ -1002,6 +1003,7 @@ RTR3DECL(int) RTFileSetMode(RTFILE hFile, RTFMODE fMode)
     }
     return VINF_SUCCESS;
 }
+#endif
 
 
 /* RTFileQueryFsSizes is implemented by ../nt/RTFileQueryFsSizes-nt.cpp */
diff --git a/src/VBox/Runtime/r3/win/init-win.cpp b/src/VBox/Runtime/r3/win/init-win.cpp
index 313d7b9..ec6bb8b 100644
--- a/src/VBox/Runtime/r3/win/init-win.cpp
+++ b/src/VBox/Runtime/r3/win/init-win.cpp
@@ -636,4 +636,3 @@ static LONG CALLBACK rtR3WinUnhandledXcptFilter(PEXCEPTION_POINTERS pPtrs)
     return EXCEPTION_CONTINUE_SEARCH;
 }
 
-
diff --git a/src/VBox/Runtime/r3/win/krnlmod-win.cpp b/src/VBox/Runtime/r3/win/krnlmod-win.cpp
index 35aa566..01dd880 100644
--- a/src/VBox/Runtime/r3/win/krnlmod-win.cpp
+++ b/src/VBox/Runtime/r3/win/krnlmod-win.cpp
@@ -1,297 +1,297 @@
-/* $Id: krnlmod-linux.cpp $ */
-/** @file
- * IPRT - Kernel module, Windows.
- */
-
-/*
- * Copyright (C) 2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-
-/*********************************************************************************************************************************
-*   Header Files                                                                                                                 *
-*********************************************************************************************************************************/
-#define LOG_GROUP RTLOGGROUP_SYSTEM
-#include <iprt/nt/nt.h>
-
-#include <iprt/krnlmod.h>
-#include <iprt/asm.h>
-#include <iprt/assert.h>
-#include <iprt/dir.h>
-#include <iprt/err.h>
-#include <iprt/mem.h>
-#include <iprt/string.h>
-#include <iprt/types.h>
-
-
-/**
- * Internal kernel information record state.
- */
-typedef struct RTKRNLMODINFOINT
-{
-    /** Reference counter. */
-    volatile uint32_t   cRefs;
-    /** Reference count for the kernel module. */
-    uint32_t            cRefKrnlMod;
-    /** Load address of the kernel module. */
-    RTR0UINTPTR         uLoadAddr;
-    /** Size of the kernel module. */
-    size_t              cbKrnlMod;
-    /** Pointer to the driver name. */
-    const char          *pszName;
-    /** Size of the name in characters including the zero terminator. */
-    size_t              cchFilePath;
-    /** Module name - variable in size. */
-    char                achFilePath[1];
-} RTKRNLMODINFOINT;
-/** Pointer to the internal kernel module information record. */
-typedef RTKRNLMODINFOINT *PRTKRNLMODINFOINT;
-/** Pointer to a const internal kernel module information record. */
-typedef const RTKRNLMODINFOINT *PCRTKRNLMODINFOINT;
-
-
-/**
- * Destroy the given kernel module information record.
- *
- * @returns nothing.
- * @param   pThis            The record to destroy.
- */
-static void rtKrnlModInfoDestroy(PRTKRNLMODINFOINT pThis)
-{
-    RTMemFree(pThis);
-}
-
-
-/**
- * Queries the complete kernel modules structure and returns a pointer to it.
- *
- * @returns IPRT status code.
- * @param   ppKrnlMods       Where to store the pointer to the kernel module list on success.
- *                           Free with RTMemFree().
- */
-static int rtKrnlModWinQueryKrnlMods(PRTL_PROCESS_MODULES *ppKrnlMods)
-{
-    int rc = VINF_SUCCESS;
-    RTL_PROCESS_MODULES KrnlModsSize;
-
-    NTSTATUS rcNt = NtQuerySystemInformation(SystemModuleInformation, &KrnlModsSize, sizeof(KrnlModsSize), NULL);
-    if (NT_SUCCESS(rcNt) || rcNt == STATUS_INFO_LENGTH_MISMATCH)
-    {
-        ULONG cbKrnlMods = RT_OFFSETOF(RTL_PROCESS_MODULES, Modules[KrnlModsSize.NumberOfModules]);
-        PRTL_PROCESS_MODULES pKrnlMods = (PRTL_PROCESS_MODULES)RTMemAllocZ(cbKrnlMods);
-        if (RT_LIKELY(pKrnlMods))
-        {
-            rcNt = NtQuerySystemInformation(SystemModuleInformation, pKrnlMods, cbKrnlMods, NULL);
-            if (NT_SUCCESS(rcNt))
-                *ppKrnlMods = pKrnlMods;
-            else
-                rc = RTErrConvertFromNtStatus(rcNt);
-        }
-        else
-            rc = VERR_NO_MEMORY;
-    }
-    else
-        rc = RTErrConvertFromNtStatus(rcNt);
-
-    return rc;
-}
-
-/**
- * Creates a new kernel module information record for the given module.
- *
- * @returns IPRT status code.
- * @param   pModInfo         The kernel module information.
- * @param   phKrnlModInfo    Where to store the handle to the kernel module information record
- *                           on success.
- */
-static int rtKrnlModWinInfoCreate(PRTL_PROCESS_MODULE_INFORMATION pModInfo, PRTKRNLMODINFO phKrnlModInfo)
-{
-    int rc = VINF_SUCCESS;
-    RT_NOREF2(pModInfo, phKrnlModInfo);
-    size_t cchFilePath = strlen((const char *)&pModInfo->FullPathName[0]) + 1;
-    PRTKRNLMODINFOINT pThis = (PRTKRNLMODINFOINT)RTMemAllocZ(RT_OFFSETOF(RTKRNLMODINFOINT, achFilePath[cchFilePath]));
-    if (RT_LIKELY(pThis))
-    {
-        memcpy(&pThis->achFilePath[0], &pModInfo->FullPathName[0], cchFilePath);
-        pThis->cchFilePath = cchFilePath;
-        pThis->cRefs       = 1;
-        pThis->cbKrnlMod   = pModInfo->ImageSize;
-        pThis->uLoadAddr   = (RTR0UINTPTR)pModInfo->ImageBase;
-        pThis->pszName     =   pModInfo->OffsetToFileName >= cchFilePath
-                             ? NULL
-                             : pThis->achFilePath + pModInfo->OffsetToFileName;
-
-        *phKrnlModInfo = pThis;
-    }
-    else
-        rc = VERR_NO_MEMORY;
-
-    return rc;
-}
-
-
-RTDECL(int) RTKrnlModQueryLoaded(const char *pszName, bool *pfLoaded)
-{
-    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-    AssertPtrReturn(pfLoaded, VERR_INVALID_POINTER);
-
-    int rc = VERR_NOT_IMPLEMENTED;
-
-    return rc;
-}
-
-
-RTDECL(int) RTKrnlModLoadedQueryInfo(const char *pszName, PRTKRNLMODINFO phKrnlModInfo)
-{
-    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-    AssertPtrReturn(phKrnlModInfo, VERR_INVALID_POINTER);
-
-    int rc = VERR_NOT_IMPLEMENTED;
-
-    return rc;
-}
-
-
-RTDECL(uint32_t) RTKrnlModLoadedGetCount(void)
-{
-    uint32_t cKrnlMods = 0;
-    RTL_PROCESS_MODULES ProcMods;
-
-    NTSTATUS rcNt = NtQuerySystemInformation(SystemModuleInformation, &ProcMods, sizeof(ProcMods), NULL);
-    if (NT_SUCCESS(rcNt) || rcNt == STATUS_INFO_LENGTH_MISMATCH)
-        cKrnlMods = ProcMods.NumberOfModules;
-
-    return cKrnlMods;
-}
-
-
-RTDECL(int) RTKrnlModLoadedQueryInfoAll(PRTKRNLMODINFO pahKrnlModInfo, uint32_t cEntriesMax,
-                                        uint32_t *pcEntries)
-{
-    AssertReturn(VALID_PTR(pahKrnlModInfo) || cEntriesMax == 0, VERR_INVALID_PARAMETER);
-
-    PRTL_PROCESS_MODULES pKrnlMods = NULL;
-    int rc = rtKrnlModWinQueryKrnlMods(&pKrnlMods);
-    if (RT_SUCCESS(rc))
-    {
-        if (pKrnlMods->NumberOfModules <= cEntriesMax)
-        {
-            for (unsigned i = 0; i < pKrnlMods->NumberOfModules; i++)
-            {
-                pKrnlMods->Modules[i].FullPathName[255] = '\0'; /* Paranoia */
-                rc = rtKrnlModWinInfoCreate(&pKrnlMods->Modules[i], &pahKrnlModInfo[i]);
-                if (RT_FAILURE(rc))
-                {
-                    while (i-- > 0)
-                        RTKrnlModInfoRelease(pahKrnlModInfo[i]);
-                    break;
-                }
-            }
-        }
-        else
-            rc = VERR_BUFFER_OVERFLOW;
-
-        if (pcEntries)
-            *pcEntries = pKrnlMods->NumberOfModules;
-
-        RTMemFree(pKrnlMods);
-    }
-
-    return rc;
-}
-
-
-RTDECL(uint32_t) RTKrnlModInfoRetain(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    AssertPtrReturn(pThis, UINT32_MAX);
-
-    uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs);
-    AssertMsg(cRefs > 1 && cRefs < _1M, ("%#x %p\n", cRefs, pThis));
-    return cRefs;
-}
-
-
-RTDECL(uint32_t) RTKrnlModInfoRelease(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    if (!pThis)
-        return 0;
-    AssertPtrReturn(pThis, UINT32_MAX);
-
-    uint32_t cRefs = ASMAtomicDecU32(&pThis->cRefs);
-    AssertMsg(cRefs < _1M, ("%#x %p\n", cRefs, pThis));
-    if (cRefs == 0)
-        rtKrnlModInfoDestroy(pThis);
-    return cRefs;
-}
-
-
-RTDECL(uint32_t) RTKrnlModInfoGetRefCnt(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    AssertPtrReturn(pThis, 0);
-
-    return pThis->cRefKrnlMod;
-}
-
-
-RTDECL(const char *) RTKrnlModInfoGetName(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    AssertPtrReturn(pThis, NULL);
-
-    return pThis->pszName;
-}
-
-
-RTDECL(const char *) RTKrnlModInfoGetFilePath(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    AssertPtrReturn(pThis, NULL);
-
-    return &pThis->achFilePath[0];
-}
-
-
-RTDECL(size_t) RTKrnlModInfoGetSize(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    AssertPtrReturn(pThis, 0);
-
-    return pThis->cbKrnlMod;
-}
-
-
-RTDECL(RTR0UINTPTR) RTKrnlModInfoGetLoadAddr(RTKRNLMODINFO hKrnlModInfo)
-{
-    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
-    AssertPtrReturn(pThis, 0);
-
-    return pThis->uLoadAddr;
-}
-
-
-RTDECL(int) RTKrnlModInfoQueryRefModInfo(RTKRNLMODINFO hKrnlModInfo, uint32_t idx,
-                                         PRTKRNLMODINFO phKrnlModInfoRef)
-{
-    RT_NOREF3(hKrnlModInfo, idx, phKrnlModInfoRef);
-    return VERR_NOT_SUPPORTED;
-}
+/* $Id: krnlmod-win.cpp $ */
+/** @file
+ * IPRT - Kernel module, Windows.
+ */
+
+/*
+ * Copyright (C) 2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#define LOG_GROUP RTLOGGROUP_SYSTEM
+#include <iprt/nt/nt.h>
+
+#include <iprt/krnlmod.h>
+#include <iprt/asm.h>
+#include <iprt/assert.h>
+#include <iprt/dir.h>
+#include <iprt/err.h>
+#include <iprt/mem.h>
+#include <iprt/string.h>
+#include <iprt/types.h>
+
+
+/**
+ * Internal kernel information record state.
+ */
+typedef struct RTKRNLMODINFOINT
+{
+    /** Reference counter. */
+    volatile uint32_t   cRefs;
+    /** Reference count for the kernel module. */
+    uint32_t            cRefKrnlMod;
+    /** Load address of the kernel module. */
+    RTR0UINTPTR         uLoadAddr;
+    /** Size of the kernel module. */
+    size_t              cbKrnlMod;
+    /** Pointer to the driver name. */
+    const char          *pszName;
+    /** Size of the name in characters including the zero terminator. */
+    size_t              cchFilePath;
+    /** Module name - variable in size. */
+    char                achFilePath[1];
+} RTKRNLMODINFOINT;
+/** Pointer to the internal kernel module information record. */
+typedef RTKRNLMODINFOINT *PRTKRNLMODINFOINT;
+/** Pointer to a const internal kernel module information record. */
+typedef const RTKRNLMODINFOINT *PCRTKRNLMODINFOINT;
+
+
+/**
+ * Destroy the given kernel module information record.
+ *
+ * @returns nothing.
+ * @param   pThis            The record to destroy.
+ */
+static void rtKrnlModInfoDestroy(PRTKRNLMODINFOINT pThis)
+{
+    RTMemFree(pThis);
+}
+
+
+/**
+ * Queries the complete kernel modules structure and returns a pointer to it.
+ *
+ * @returns IPRT status code.
+ * @param   ppKrnlMods       Where to store the pointer to the kernel module list on success.
+ *                           Free with RTMemFree().
+ */
+static int rtKrnlModWinQueryKrnlMods(PRTL_PROCESS_MODULES *ppKrnlMods)
+{
+    int rc = VINF_SUCCESS;
+    RTL_PROCESS_MODULES KrnlModsSize;
+
+    NTSTATUS rcNt = NtQuerySystemInformation(SystemModuleInformation, &KrnlModsSize, sizeof(KrnlModsSize), NULL);
+    if (NT_SUCCESS(rcNt) || rcNt == STATUS_INFO_LENGTH_MISMATCH)
+    {
+        ULONG cbKrnlMods = RT_OFFSETOF(RTL_PROCESS_MODULES, Modules[KrnlModsSize.NumberOfModules]);
+        PRTL_PROCESS_MODULES pKrnlMods = (PRTL_PROCESS_MODULES)RTMemAllocZ(cbKrnlMods);
+        if (RT_LIKELY(pKrnlMods))
+        {
+            rcNt = NtQuerySystemInformation(SystemModuleInformation, pKrnlMods, cbKrnlMods, NULL);
+            if (NT_SUCCESS(rcNt))
+                *ppKrnlMods = pKrnlMods;
+            else
+                rc = RTErrConvertFromNtStatus(rcNt);
+        }
+        else
+            rc = VERR_NO_MEMORY;
+    }
+    else
+        rc = RTErrConvertFromNtStatus(rcNt);
+
+    return rc;
+}
+
+/**
+ * Creates a new kernel module information record for the given module.
+ *
+ * @returns IPRT status code.
+ * @param   pModInfo         The kernel module information.
+ * @param   phKrnlModInfo    Where to store the handle to the kernel module information record
+ *                           on success.
+ */
+static int rtKrnlModWinInfoCreate(PRTL_PROCESS_MODULE_INFORMATION pModInfo, PRTKRNLMODINFO phKrnlModInfo)
+{
+    int rc = VINF_SUCCESS;
+    RT_NOREF2(pModInfo, phKrnlModInfo);
+    size_t cchFilePath = strlen((const char *)&pModInfo->FullPathName[0]) + 1;
+    PRTKRNLMODINFOINT pThis = (PRTKRNLMODINFOINT)RTMemAllocZ(RT_OFFSETOF(RTKRNLMODINFOINT, achFilePath[cchFilePath]));
+    if (RT_LIKELY(pThis))
+    {
+        memcpy(&pThis->achFilePath[0], &pModInfo->FullPathName[0], cchFilePath);
+        pThis->cchFilePath = cchFilePath;
+        pThis->cRefs       = 1;
+        pThis->cbKrnlMod   = pModInfo->ImageSize;
+        pThis->uLoadAddr   = (RTR0UINTPTR)pModInfo->ImageBase;
+        pThis->pszName     =   pModInfo->OffsetToFileName >= cchFilePath
+                             ? NULL
+                             : pThis->achFilePath + pModInfo->OffsetToFileName;
+
+        *phKrnlModInfo = pThis;
+    }
+    else
+        rc = VERR_NO_MEMORY;
+
+    return rc;
+}
+
+
+RTDECL(int) RTKrnlModQueryLoaded(const char *pszName, bool *pfLoaded)
+{
+    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfLoaded, VERR_INVALID_POINTER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+
+    return rc;
+}
+
+
+RTDECL(int) RTKrnlModLoadedQueryInfo(const char *pszName, PRTKRNLMODINFO phKrnlModInfo)
+{
+    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
+    AssertPtrReturn(phKrnlModInfo, VERR_INVALID_POINTER);
+
+    int rc = VERR_NOT_IMPLEMENTED;
+
+    return rc;
+}
+
+
+RTDECL(uint32_t) RTKrnlModLoadedGetCount(void)
+{
+    uint32_t cKrnlMods = 0;
+    RTL_PROCESS_MODULES ProcMods;
+
+    NTSTATUS rcNt = NtQuerySystemInformation(SystemModuleInformation, &ProcMods, sizeof(ProcMods), NULL);
+    if (NT_SUCCESS(rcNt) || rcNt == STATUS_INFO_LENGTH_MISMATCH)
+        cKrnlMods = ProcMods.NumberOfModules;
+
+    return cKrnlMods;
+}
+
+
+RTDECL(int) RTKrnlModLoadedQueryInfoAll(PRTKRNLMODINFO pahKrnlModInfo, uint32_t cEntriesMax,
+                                        uint32_t *pcEntries)
+{
+    AssertReturn(VALID_PTR(pahKrnlModInfo) || cEntriesMax == 0, VERR_INVALID_PARAMETER);
+
+    PRTL_PROCESS_MODULES pKrnlMods = NULL;
+    int rc = rtKrnlModWinQueryKrnlMods(&pKrnlMods);
+    if (RT_SUCCESS(rc))
+    {
+        if (pKrnlMods->NumberOfModules <= cEntriesMax)
+        {
+            for (unsigned i = 0; i < pKrnlMods->NumberOfModules; i++)
+            {
+                pKrnlMods->Modules[i].FullPathName[255] = '\0'; /* Paranoia */
+                rc = rtKrnlModWinInfoCreate(&pKrnlMods->Modules[i], &pahKrnlModInfo[i]);
+                if (RT_FAILURE(rc))
+                {
+                    while (i-- > 0)
+                        RTKrnlModInfoRelease(pahKrnlModInfo[i]);
+                    break;
+                }
+            }
+        }
+        else
+            rc = VERR_BUFFER_OVERFLOW;
+
+        if (pcEntries)
+            *pcEntries = pKrnlMods->NumberOfModules;
+
+        RTMemFree(pKrnlMods);
+    }
+
+    return rc;
+}
+
+
+RTDECL(uint32_t) RTKrnlModInfoRetain(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    AssertPtrReturn(pThis, UINT32_MAX);
+
+    uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs);
+    AssertMsg(cRefs > 1 && cRefs < _1M, ("%#x %p\n", cRefs, pThis));
+    return cRefs;
+}
+
+
+RTDECL(uint32_t) RTKrnlModInfoRelease(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    if (!pThis)
+        return 0;
+    AssertPtrReturn(pThis, UINT32_MAX);
+
+    uint32_t cRefs = ASMAtomicDecU32(&pThis->cRefs);
+    AssertMsg(cRefs < _1M, ("%#x %p\n", cRefs, pThis));
+    if (cRefs == 0)
+        rtKrnlModInfoDestroy(pThis);
+    return cRefs;
+}
+
+
+RTDECL(uint32_t) RTKrnlModInfoGetRefCnt(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    AssertPtrReturn(pThis, 0);
+
+    return pThis->cRefKrnlMod;
+}
+
+
+RTDECL(const char *) RTKrnlModInfoGetName(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    AssertPtrReturn(pThis, NULL);
+
+    return pThis->pszName;
+}
+
+
+RTDECL(const char *) RTKrnlModInfoGetFilePath(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    AssertPtrReturn(pThis, NULL);
+
+    return &pThis->achFilePath[0];
+}
+
+
+RTDECL(size_t) RTKrnlModInfoGetSize(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    AssertPtrReturn(pThis, 0);
+
+    return pThis->cbKrnlMod;
+}
+
+
+RTDECL(RTR0UINTPTR) RTKrnlModInfoGetLoadAddr(RTKRNLMODINFO hKrnlModInfo)
+{
+    PRTKRNLMODINFOINT pThis = hKrnlModInfo;
+    AssertPtrReturn(pThis, 0);
+
+    return pThis->uLoadAddr;
+}
+
+
+RTDECL(int) RTKrnlModInfoQueryRefModInfo(RTKRNLMODINFO hKrnlModInfo, uint32_t idx,
+                                         PRTKRNLMODINFO phKrnlModInfoRef)
+{
+    RT_NOREF3(hKrnlModInfo, idx, phKrnlModInfoRef);
+    return VERR_NOT_SUPPORTED;
+}
diff --git a/src/VBox/Runtime/r3/win/localipc-win.cpp b/src/VBox/Runtime/r3/win/localipc-win.cpp
index b6e6933..4d2a526 100644
--- a/src/VBox/Runtime/r3/win/localipc-win.cpp
+++ b/src/VBox/Runtime/r3/win/localipc-win.cpp
@@ -1391,9 +1391,8 @@ RTDECL(int) RTLocalIpcSessionWrite(RTLOCALIPCSESSION hSession, const void *pvBuf
                     BOOL fRc = ResetEvent(pThis->Write.OverlappedIO.hEvent); Assert(fRc == TRUE);
                     RTCritSectLeave(&pThis->CritSect);
 
-                    fRc = WriteFile(pThis->hNmPipe, pvBuf,
-                                    cbToWrite <= ~(DWORD)0 ? (DWORD)cbToWrite : ~(DWORD)0,
-                                    &cbWritten, &pThis->Write.OverlappedIO);
+                    DWORD const cbToWriteInThisIteration = cbToWrite <= ~(DWORD)0 ? (DWORD)cbToWrite : ~(DWORD)0;
+                    fRc = WriteFile(pThis->hNmPipe, pvBuf, cbToWriteInThisIteration, &cbWritten, &pThis->Write.OverlappedIO);
                     if (fRc)
                         rc = VINF_SUCCESS;
                     else
@@ -1422,6 +1421,9 @@ RTDECL(int) RTLocalIpcSessionWrite(RTLOCALIPCSESSION hSession, const void *pvBuf
                             rc = RTErrConvertFromWin32(dwErr);
                     }
 
+                    if (cbWritten > cbToWriteInThisIteration) /* paranoia^3 */
+                        cbWritten = cbToWriteInThisIteration;
+
                     RTCritSectEnter(&pThis->CritSect);
                     if (RT_FAILURE(rc))
                         break;
diff --git a/src/VBox/Runtime/r3/win/pipe-win.cpp b/src/VBox/Runtime/r3/win/pipe-win.cpp
index d969e27..637c842 100644
--- a/src/VBox/Runtime/r3/win/pipe-win.cpp
+++ b/src/VBox/Runtime/r3/win/pipe-win.cpp
@@ -796,7 +796,7 @@ RTDECL(int) RTPipeWrite(RTPIPE hPipe, const void *pvBuf, size_t cbToWrite, size_
                     if (WriteFile(pThis->hPipe, pThis->pbBounceBuf, (DWORD)pThis->cbBounceBufUsed,
                                   &cbWritten, &pThis->Overlapped))
                     {
-                        *pcbWritten = cbWritten;
+                        *pcbWritten = RT_MIN(cbWritten, cbToWrite); /* paranoia^3 */
                         rc = VINF_SUCCESS;
                     }
                     else if (GetLastError() == ERROR_IO_PENDING)
@@ -878,9 +878,8 @@ RTDECL(int) RTPipeWriteBlocking(RTPIPE hPipe, const void *pvBuf, size_t cbToWrit
                     RTCritSectLeave(&pThis->CritSect);
 
                     DWORD cbWritten = 0;
-                    if (WriteFile(pThis->hPipe, pvBuf,
-                                  cbToWrite <= ~(DWORD)0 ? (DWORD)cbToWrite : ~(DWORD)0,
-                                  &cbWritten, &pThis->Overlapped))
+                    DWORD const cbToWriteInThisIteration = cbToWrite <= ~(DWORD)0 ? (DWORD)cbToWrite : ~(DWORD)0;
+                    if (WriteFile(pThis->hPipe, pvBuf, cbToWriteInThisIteration, &cbWritten, &pThis->Overlapped))
                         rc = VINF_SUCCESS;
                     else if (GetLastError() == ERROR_IO_PENDING)
                     {
@@ -901,6 +900,8 @@ RTDECL(int) RTPipeWriteBlocking(RTPIPE hPipe, const void *pvBuf, size_t cbToWrit
                         break;
 
                     /* advance */
+                    if (cbWritten > cbToWriteInThisIteration) /* paranoia^3 */
+                        cbWritten = cbToWriteInThisIteration;
                     pvBuf           = (char const *)pvBuf + cbWritten;
                     cbTotalWritten += cbWritten;
                     cbToWrite      -= cbWritten;
diff --git a/src/VBox/Runtime/r3/win/rtFileNativeSetAttributes-win.cpp b/src/VBox/Runtime/r3/win/rtFileNativeSetAttributes-win.cpp
deleted file mode 100644
index 53bda2d..0000000
--- a/src/VBox/Runtime/r3/win/rtFileNativeSetAttributes-win.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* $Id: rtFileNativeSetAttributes-win.cpp $ */
-/** @file
- * IPRT - NtSetInformationFile wrapper.
- */
-
-/*
- * Copyright (C) 2009-2017 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
- */
-
-
-/*********************************************************************************************************************************
-*   Header Files                                                                                                                 *
-*********************************************************************************************************************************/
-#include <iprt/nt/nt.h>
-#include <iprt/string.h>
-
-
-/** Windows/NT worker.
- * @todo rename to rtFileWinSetAttributes */
-int rtFileNativeSetAttributes(HANDLE hFile, ULONG fAttributes)
-{
-    IO_STATUS_BLOCK IoStatusBlock;
-    RT_ZERO(IoStatusBlock);
-
-    /*
-     * Members that are set 0 will not be modified on the file object.
-     * See http://msdn.microsoft.com/en-us/library/aa491634.aspx (the struct docs)
-     * for details.
-     */
-    FILE_BASIC_INFORMATION Info;
-    RT_ZERO(Info);
-    Info.FileAttributes = fAttributes;
-
-    /** @todo resolve dynamically to avoid dragging in NtDll? */
-    NTSTATUS rcNt = NtSetInformationFile(hFile,
-                                         &IoStatusBlock,
-                                         &Info,
-                                         sizeof(Info),
-                                         FileBasicInformation);
-    return RtlNtStatusToDosError(rcNt);
-}
-
diff --git a/src/VBox/Runtime/r3/win/vcc100-kernel32-fakesA.asm b/src/VBox/Runtime/r3/win/vcc100-kernel32-fakesA.asm
index 33fb13c..68dada6 100644
--- a/src/VBox/Runtime/r3/win/vcc100-kernel32-fakesA.asm
+++ b/src/VBox/Runtime/r3/win/vcc100-kernel32-fakesA.asm
@@ -1,3 +1,28 @@
+; $Id: vcc100-kernel32-fakesA.asm $
+;; @file
+; IPRT - Wrappers for kernel32 APIs misisng NT4.
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 
 %include "iprt/asmdefs.mac"
@@ -35,5 +60,3 @@ MAKE_IMPORT_ENTRY QueryDepthSList, 4
 MAKE_IMPORT_ENTRY VerifyVersionInfoA, 16
 MAKE_IMPORT_ENTRY VerSetConditionMask, 16
 
-
-
diff --git a/src/VBox/Runtime/r3/win/vcc100-ntdll-fakesA.asm b/src/VBox/Runtime/r3/win/vcc100-ntdll-fakesA.asm
index 6b18c8a..099da4b 100644
--- a/src/VBox/Runtime/r3/win/vcc100-ntdll-fakesA.asm
+++ b/src/VBox/Runtime/r3/win/vcc100-ntdll-fakesA.asm
@@ -1,3 +1,28 @@
+; $Id: vcc100-ntdll-fakesA.asm $
+;; @file
+; IPRT - Wrappers for ntdll APIs misisng NT4.
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 %include "iprt/asmdefs.mac"
 
diff --git a/src/VBox/Runtime/r3/win/vcc100-ws2_32-fakesA.asm b/src/VBox/Runtime/r3/win/vcc100-ws2_32-fakesA.asm
index 21a4d20..fd63022 100644
--- a/src/VBox/Runtime/r3/win/vcc100-ws2_32-fakesA.asm
+++ b/src/VBox/Runtime/r3/win/vcc100-ws2_32-fakesA.asm
@@ -1,3 +1,28 @@
+; $Id: vcc100-ws2_32-fakesA.asm $
+;; @file
+; IPRT - Wrappers for ws2_32 APIs misisng NT4.
+;
+
+;
+; Copyright (C) 2006-2017 Oracle Corporation
+;
+; This file is part of VirtualBox Open Source Edition (OSE), as
+; available from http://www.virtualbox.org. This file is free software;
+; you can redistribute it and/or modify it under the terms of the GNU
+; General Public License (GPL) as published by the Free Software
+; Foundation, in version 2 as it comes in the "COPYING" file of the
+; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+;
+; The contents of this file may alternatively be used under the terms
+; of the Common Development and Distribution License Version 1.0
+; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+; VirtualBox OSE distribution, in which case the provisions of the
+; CDDL are applicable instead of those of the GPL.
+;
+; You may elect to license modified versions of this file under the
+; terms and conditions of either the GPL or the CDDL or both.
+;
 
 %include "iprt/asmdefs.mac"
 
diff --git a/src/VBox/Runtime/r3/xml.cpp b/src/VBox/Runtime/r3/xml.cpp
index a520b32..7cb2fdd 100644
--- a/src/VBox/Runtime/r3/xml.cpp
+++ b/src/VBox/Runtime/r3/xml.cpp
@@ -1282,7 +1282,7 @@ ContentNode *ElementNode::addContent(const char *pcszContent)
 }
 
 /**
- * Changes the contents of node and appends it to the list of 
+ * Changes the contents of node and appends it to the list of
  * children
  *
  * @param pcszContent
diff --git a/src/VBox/Runtime/testcase/Makefile.kmk b/src/VBox/Runtime/testcase/Makefile.kmk
index ba660d9..6544355 100644
--- a/src/VBox/Runtime/testcase/Makefile.kmk
+++ b/src/VBox/Runtime/testcase/Makefile.kmk
@@ -156,7 +156,9 @@ PROGRAMS.win += \
 	tstRTProcWait \
 	tstFileAppendWin-1 \
 	tstRTNtPath-1 \
-	ntGetTimerResolution
+	ntGetTimerResolution \
+	tstRTDarwinMachKernel
+
 PROGRAMS.linux += \
 	tstRTProcWait \
 	tstRTProcIsRunningByName \
diff --git a/src/VBox/Runtime/testcase/tstDir-2.cpp b/src/VBox/Runtime/testcase/tstDir-2.cpp
index a97b7a5..c08a9a9 100644
--- a/src/VBox/Runtime/testcase/tstDir-2.cpp
+++ b/src/VBox/Runtime/testcase/tstDir-2.cpp
@@ -40,14 +40,14 @@ int main(int argc, char **argv)
     for (int i = 1; i < argc; i++)
     {
         /* open */
-        PRTDIR pDir;
-        int rc = RTDirOpenFiltered(&pDir, argv[i], RTDIRFILTER_WINNT, 0);
+        RTDIR hDir;
+        int rc = RTDirOpenFiltered(&hDir, argv[i], RTDIRFILTER_WINNT, 0 /*fFlags*/);
         if (RT_SUCCESS(rc))
         {
             for (;;)
             {
                 RTDIRENTRY DirEntry;
-                rc = RTDirRead(pDir, &DirEntry, NULL);
+                rc = RTDirRead(hDir, &DirEntry, NULL);
                 if (RT_FAILURE(rc))
                     break;
                 switch (DirEntry.enmType)
@@ -77,7 +77,7 @@ int main(int argc, char **argv)
             }
 
             /* close up */
-            rc = RTDirClose(pDir);
+            rc = RTDirClose(hDir);
             if (RT_FAILURE(rc))
             {
                 RTPrintf("tstDir-2: Failed to close dir! rc=%Rrc\n", rc);
diff --git a/src/VBox/Runtime/testcase/tstDir-3.cpp b/src/VBox/Runtime/testcase/tstDir-3.cpp
index 9c1d0c5..6140a52 100644
--- a/src/VBox/Runtime/testcase/tstDir-3.cpp
+++ b/src/VBox/Runtime/testcase/tstDir-3.cpp
@@ -35,14 +35,14 @@ static int tstDirOpenFiltered(const char *pszFilter, unsigned *pcFilesMatch, int
 {
     int rcRet = 0;
     unsigned cFilesMatch = 0;
-    PRTDIR pDir;
-    int rc = RTDirOpenFiltered(&pDir, pszFilter, RTDIRFILTER_WINNT, 0);
+    RTDIR hDir;
+    int rc = RTDirOpenFiltered(&hDir, pszFilter, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     if (RT_SUCCESS(rc))
     {
         for (;;)
         {
             RTDIRENTRY DirEntry;
-            rc = RTDirRead(pDir, &DirEntry, NULL);
+            rc = RTDirRead(hDir, &DirEntry, NULL);
             if (RT_FAILURE(rc))
                 break;
             cFilesMatch++;
@@ -55,7 +55,7 @@ static int tstDirOpenFiltered(const char *pszFilter, unsigned *pcFilesMatch, int
         }
 
         /* close up */
-        rc = RTDirClose(pDir);
+        rc = RTDirClose(hDir);
         if (RT_FAILURE(rc))
         {
             RTPrintf("tstDir-3: Failed to close dir '%s'! rc=%Rrc\n", pszFilter, rc);
@@ -113,7 +113,7 @@ int main(int argc, char **argv)
         RTPrintf("tstDir-3: filter '%s' failed! rc=%Rrc\n", pszFilter2, rc);
     if (!cMatch)
         RTPrintf("tstDir-3: filter '%s' gave wrong result count! cMatch=%u\n", pszFilter2, cMatch);
-    
+
     RTStrFree(pszFilter2);
     RTStrFree(pszFilter1);
 
diff --git a/src/VBox/Runtime/testcase/tstDir.cpp b/src/VBox/Runtime/testcase/tstDir.cpp
index 17100a4..08ad8b7 100644
--- a/src/VBox/Runtime/testcase/tstDir.cpp
+++ b/src/VBox/Runtime/testcase/tstDir.cpp
@@ -80,12 +80,12 @@ int main(int argc, char **argv)
         else
         {
             /* open */
-            PRTDIR pDir;
+            RTDIR hDir;
             int rc;
             if (!fFiltered)
-                rc = RTDirOpen(&pDir, argv[i]);
+                rc = RTDirOpen(&hDir, argv[i]);
             else
-                rc = RTDirOpenFiltered(&pDir, argv[i], RTDIRFILTER_WINNT, 0);
+                rc = RTDirOpenFiltered(&hDir, argv[i], RTDIRFILTER_WINNT, 0 /*fFlags*/);
             if (RT_SUCCESS(rc))
             {
                 /* list */
@@ -94,7 +94,7 @@ int main(int argc, char **argv)
                     for (;;)
                     {
                         RTDIRENTRY DirEntry;
-                        rc = RTDirRead(pDir, &DirEntry, NULL);
+                        rc = RTDirRead(hDir, &DirEntry, NULL);
                         if (RT_FAILURE(rc))
                             break;
                         if (!fQuiet)
@@ -125,7 +125,7 @@ int main(int argc, char **argv)
                     for (;;)
                     {
                         RTDIRENTRYEX DirEntry;
-                        rc = RTDirReadEx(pDir, &DirEntry, NULL, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
+                        rc = RTDirReadEx(hDir, &DirEntry, NULL, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
                         if (RT_FAILURE(rc))
                             break;
 
@@ -207,7 +207,7 @@ int main(int argc, char **argv)
                 }
 
                 /* close up */
-                rc = RTDirClose(pDir);
+                rc = RTDirClose(hDir);
                 if (RT_FAILURE(rc))
                 {
                     RTPrintf("tstDir: Failed to close dir! rc=%Rrc\n", rc);
diff --git a/src/VBox/Runtime/testcase/tstRTBigNum-div-test-data.h b/src/VBox/Runtime/testcase/tstRTBigNum-div-test-data.h
index 603c6e5..04f996b 100644
--- a/src/VBox/Runtime/testcase/tstRTBigNum-div-test-data.h
+++ b/src/VBox/Runtime/testcase/tstRTBigNum-div-test-data.h
@@ -1,3 +1,29 @@
+/* $Id: tstRTBigNum-div-test-data.h $ */
+/** @file
+ * IPRT - Big number division test data.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
     { /* i=0 cDividendBits=3048 cDivisorBits=3048 */
         "f2afd2e61c36f91635ea91bba3286b682e59b68d95b98c186a9a1c44aa356a3bf051d3759bcc8f5dbf0815e050205558410792213d9cae993c23c1554a850f8b4cdcefdb7499ba37dbf3d29cfd22ab3792abc8a001eb02dc681715ffc3dcf25c47c03396d49d6b645e5265d4acfb5cdf71cc8585431a74523358bf29b9a8484b6dbddcb042be9a6e8e28fa46934f192792eabb1e236f7429a77b06f872d040f2086e4db309c027b15d616829508605088394b50bdb74bb5b74811b4b209141cd9a1602ebd24956903cfdaf7eb82f48372de01a2fd48309f054db1aa5fa6b308dea4995b5415b59df28b9fd94c356e955846 [...]
         "f8ab534e96ccc4770e5e1d8cb0c5c800f4baf11e6a4e041912dcb5a449b91cf98f38932bc56506a402eea8fd8f8094b663e242292a4e576776fe9a19b8e70c0c07f3cc94d9dd03a4b45c89dda3f521c09d28f9487d0f3e6aa6df8e25ead89173f6c51bea46af5c6344c117656548e4f80aa4d5d25b49905851f0ae442230eb8edd65a9253bdd894a74fa77c9e036f6dbb3a6d771fc96b27eb12ec8020227233ab222f0e952f8dc2ac45798d9a3c6410872c696a2f880de97bd63f56cb90db465048c9df9be6fe3904cd7404ec75b55061453e6a61cb731bef3d59a147ab8f952854914d9f21f7e3b843c3eaa0791d028408 [...]
diff --git a/src/VBox/Runtime/testcase/tstRTBigNum-uint128-div-test-data.h b/src/VBox/Runtime/testcase/tstRTBigNum-uint128-div-test-data.h
index 8bfeb05..e64d855 100644
--- a/src/VBox/Runtime/testcase/tstRTBigNum-uint128-div-test-data.h
+++ b/src/VBox/Runtime/testcase/tstRTBigNum-uint128-div-test-data.h
@@ -1,3 +1,28 @@
+/* $Id: tstRTBigNum-uint128-div-test-data.h $ */
+/** @file
+ * IPRT - 128-bit division test data.
+ */
+
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
     { /* i=0; 30 / 30 */
         RTUINT128_INIT_C(0x0000000000000000, 0x000000000a2f6b94), RTUINT128_INIT_C(0x0000000000000000, 0x000000003501a176),
         RTUINT128_INIT_C(0x0000000000000000, 0x0000000000000000), RTUINT128_INIT_C(0x0000000000000000, 0x000000000a2f6b94)
diff --git a/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp b/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp
index 4ca2bed..12929a1 100644
--- a/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp
+++ b/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp
@@ -34,6 +34,11 @@
 #include <iprt/test.h>
 
 
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+const char *g_pszTestKernel = "/no-such-file";
+
 
 static void dotest(void)
 {
@@ -65,7 +70,7 @@ static void dotest(void)
 }
 
 
-int main()
+int main(int argc, char **argv)
 {
     RTTEST hTest;
     RTEXITCODE rcExit = RTTestInitAndCreate("tstRTDarwinMachKernel", &hTest);
@@ -73,6 +78,14 @@ int main()
         return rcExit;
     RTTestBanner(hTest);
 
+    /* Optional kernel path as argument. */
+    if (argc == 2)
+        g_pszTestKernel = argv[1];
+#ifndef RT_OS_DARWIN
+    else
+        return RTTestSkipAndDestroy(hTest, "not on darwin");
+#endif
+
     dotest();
 
     return RTTestSummaryAndDestroy(hTest);
diff --git a/src/VBox/Runtime/testcase/tstRTDvm.cpp b/src/VBox/Runtime/testcase/tstRTDvm.cpp
index deb9615..4d9aa99 100644
--- a/src/VBox/Runtime/testcase/tstRTDvm.cpp
+++ b/src/VBox/Runtime/testcase/tstRTDvm.cpp
@@ -50,14 +50,14 @@ typedef struct TSTRTDVMDISK
     union
     {
         /** File handle of the image. */
-        RTFILE      hImage;
+        RTVFSFILE   hImage;
         /** Handle of the volume. */
         RTDVMVOLUME hVol;
     };
 } TSTRTDVMDISK, *PTSTRTDVMDISK;
 
 
-
+#if 0
 static DECLCALLBACK(int) dvmDiskRead(void *pvUser, uint64_t off, void *pvBuf, size_t cbRead)
 {
     PTSTRTDVMDISK pDisk = (PTSTRTDVMDISK)pvUser;
@@ -170,6 +170,7 @@ static int tstRTDvmVolume(RTTEST hTest, PTSTRTDVMDISK pDisk, uint64_t cb, unsign
 
     return rc;
 }
+#endif
 
 int main(int argc, char **argv)
 {
@@ -191,6 +192,9 @@ int main(int argc, char **argv)
         return RTTestSkipAndDestroy(hTest, "Missing required arguments\n");
     }
 
+#if 1
+    RTTestFailed(hTest, "Needs updating to RTDvm API changes!");
+#else
     /* Open image. */
     RTFILE hFile;
     uint64_t cb = 0;
@@ -220,6 +224,7 @@ int main(int argc, char **argv)
     /*
      * Summary
      */
+#endif
     return RTTestSummaryAndDestroy(hTest);
 }
 
diff --git a/src/VBox/Runtime/testcase/tstRTMath.cpp b/src/VBox/Runtime/testcase/tstRTMath.cpp
index ae5ec76..ef3e5be 100644
--- a/src/VBox/Runtime/testcase/tstRTMath.cpp
+++ b/src/VBox/Runtime/testcase/tstRTMath.cpp
@@ -64,7 +64,7 @@ int main()
     if (rc)
         return rc;
     RTTestBanner(hTest);
-    
+
     tstCorrectness(hTest);
 
     return RTTestSummaryAndDestroy(hTest);
diff --git a/src/VBox/Runtime/testcase/tstRTNtPath-1.cpp b/src/VBox/Runtime/testcase/tstRTNtPath-1.cpp
index 9fdbaf1..543f7fa 100644
--- a/src/VBox/Runtime/testcase/tstRTNtPath-1.cpp
+++ b/src/VBox/Runtime/testcase/tstRTNtPath-1.cpp
@@ -65,7 +65,7 @@ void tstTraverse8dot3(TSTRAVERSE *pThis, size_t cchLong, size_t cchShort, uint32
     pThis->cDirs++;
 
     uint32_t cLeftToTest = 2;
-    PRTDIR  hDir;
+    RTDIR  hDir;
     int rc = RTDirOpen(&hDir, pThis->szLongPath);
     if (RT_FAILURE(rc))
         return;
diff --git a/src/VBox/Runtime/testcase/tstRTPathQueryInfo.cpp b/src/VBox/Runtime/testcase/tstRTPathQueryInfo.cpp
index 8194193..7476e73 100644
--- a/src/VBox/Runtime/testcase/tstRTPathQueryInfo.cpp
+++ b/src/VBox/Runtime/testcase/tstRTPathQueryInfo.cpp
@@ -24,6 +24,7 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Runtime/testcase/tstRTPrfA.asm b/src/VBox/Runtime/testcase/tstRTPrfA.asm
index 8f9ffd9..08c7e04 100644
--- a/src/VBox/Runtime/testcase/tstRTPrfA.asm
+++ b/src/VBox/Runtime/testcase/tstRTPrfA.asm
@@ -96,7 +96,7 @@ BEGINPROC tstRTPRfAMemoryAccess
         shr     RTCCPTR_PRE VAR_XAX, 3
         shl     RTCCPTR_PRE VAR_XAX, 1
         xor     RTCCPTR_PRE VAR_XDX, 01010101h
-              
+
         mov     eax, VAR_ECX
         add     VAR_XAX, eax
         mov     xAX, VAR_XAX
@@ -120,9 +120,9 @@ BEGINPROC tstRTPRfAMemoryAccess
 %undef VAR_XDX
 %undef VAR_ECX
 
-        leave  
         leave
-        ret     
+        leave
+        ret
 ENDPROC   tstRTPRfAMemoryAccess
 
 
diff --git a/src/VBox/Runtime/tools/Makefile.kmk b/src/VBox/Runtime/tools/Makefile.kmk
index 689f5b6..c81c5eb 100644
--- a/src/VBox/Runtime/tools/Makefile.kmk
+++ b/src/VBox/Runtime/tools/Makefile.kmk
@@ -68,26 +68,36 @@ if !defined(VBOX_ONLY_BUILD)
  PROGRAMS += RTCat
  RTCat_TEMPLATE = VBoxR3Tool
  RTCat_SOURCES = RTCat.cpp
+ RTCat_SOURCES += ../VBox/LoadVBoxDDU.cpp
+
+ # RTChMod - our chmod clone.
+ PROGRAMS += RTChMod
+ RTChMod_TEMPLATE = VBoxR3Tool
+ RTChMod_SOURCES = RTChMod.cpp
 
  # RTIsoMaker - ISO image maker - build version.
  PROGRAMS += RTIsoMaker
  RTIsoMaker_TEMPLATE = VBoxR3Tool
  RTIsoMaker_SOURCES = RTIsoMaker.cpp
+ RTIsoMaker_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  # RTLs is a tool for listing file information.
  PROGRAMS += RTLs
  RTLs_TEMPLATE = VBoxR3Tool
  RTLs_SOURCES = RTLs.cpp
+ RTLs_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  # RTRm is a tool for removing files and directories.
  PROGRAMS += RTRm
  RTRm_TEMPLATE = VBoxR3Tool
  RTRm_SOURCES = RTRm.cpp
+ RTRm_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  # RTManifest is a tool for creating and verifying manifest files.
  PROGRAMS += RTManifest
  RTManifest_TEMPLATE = VBoxR3Tool
  RTManifest_SOURCES = RTManifest.cpp
+ RTManifest_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  # RTLdrFlt is similar to c++filt, except that it's for VMMR0.r0 stacks.
  PROGRAMS += RTLdrFlt
@@ -98,14 +108,25 @@ if !defined(VBOX_ONLY_BUILD)
  PROGRAMS += RTGzip
  RTGzip_TEMPLATE = VBoxR3Tool
  RTGzip_SOURCES = RTGzip.cpp
+ RTGzip_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  ifdef VBOX_WITH_LIBCURL
- # RTHttp - our http/https fetcher (for testing the http client API).
- PROGRAMS += RTHttp
- RTHttp_TEMPLATE = VBoxR3Tool
- RTHttp_SOURCES = RTHttp.cpp
+  # RTHttp - our http/https fetcher (for testing the http client API).
+  PROGRAMS += RTHttp
+  RTHttp_TEMPLATE = VBoxR3Tool
+  RTHttp_SOURCES = RTHttp.cpp
  endif
 
+ # RTMkDir - our mkdir clone.
+ PROGRAMS += RTMkDir
+ RTMkDir_TEMPLATE = VBoxR3Tool
+ RTMkDir_SOURCES = RTMkDir.cpp
+
+ # RTRmDir - our mkdir clone.
+ PROGRAMS += RTRmDir
+ RTRmDir_TEMPLATE = VBoxR3Tool
+ RTRmDir_SOURCES = RTRmDir.cpp
+
  # RTShutdown - similar (but not identical) to a typical unix shutdown command.
  PROGRAMS += RTShutdown
  RTShutdown_TEMPLATE = VBoxR3Tool
@@ -115,11 +136,13 @@ if !defined(VBOX_ONLY_BUILD)
  PROGRAMS += RTTar
  RTTar_TEMPLATE = VBoxR3Tool
  RTTar_SOURCES = RTTar.cpp
+ RTTar_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  # RTUnzip - our unzip clone (for testing the unzip streaming code)
  PROGRAMS += RTUnzip
  RTUnzip_TEMPLATE = VBoxR3Tool
  RTUnzip_SOURCES = RTUnzip.cpp
+ RTUnzip_SOURCES += ../VBox/LoadVBoxDDU.cpp
 
  # RTNtDbgHelp - our tar clone (for testing the tar/gzip/gunzip streaming code)
  PROGRAMS.win += RTNtDbgHelp
@@ -138,10 +161,10 @@ if !defined(VBOX_ONLY_BUILD)
  RTSignTool_LIBS = $(PATH_STAGE_LIB)/SUPR3$(VBOX_SUFF_LIB)
 
  if1of ($(KBUILD_TARGET), darwin linux solaris win)
- # RTKrnlModInfo - our lsmod/kextstat clone (for testing the RTKrnlMod code).
- PROGRAMS += RTKrnlModInfo
- RTKrnlModInfo_TEMPLATE = VBoxR3Tool
- RTKrnlModInfo_SOURCES = RTKrnlModInfo.cpp
+  # RTKrnlModInfo - our lsmod/kextstat clone (for testing the RTKrnlMod code).
+  PROGRAMS += RTKrnlModInfo
+  RTKrnlModInfo_TEMPLATE = VBoxR3Tool
+  RTKrnlModInfo_SOURCES = RTKrnlModInfo.cpp
  endif
 
 endif # !VBOX_ONLY_BUILD
diff --git a/src/VBox/Runtime/tools/RTCat.cpp b/src/VBox/Runtime/tools/RTCat.cpp
index 7f280cb..b38e025 100644
--- a/src/VBox/Runtime/tools/RTCat.cpp
+++ b/src/VBox/Runtime/tools/RTCat.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/vfs.h>
 
 #include <iprt/buildconfig.h>
@@ -41,9 +41,9 @@
 #include <iprt/string.h>
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /**
  * CAT command options.
  */
@@ -194,106 +194,118 @@ RTEXITCODE RTCmdCat(unsigned cArgs, char **papszArgs)
     RTGETOPTSTATE GetState;
     rc = RTGetOptInit(&GetState, cArgs, papszArgs, s_aOptions, RT_ELEMENTS(s_aOptions), 1,
                       RTGETOPTINIT_FLAGS_OPTS_FIRST);
-    if (RT_FAILURE(rc))
-        return RTMsgErrorExit(RTEXITCODE_SYNTAX, "RTGetOptInit: %Rrc", rc);
-
-    for (;;)
+    if (RT_SUCCESS(rc))
     {
-        RTGETOPTUNION ValueUnion;
-        int chOpt = RTGetOpt(&GetState, &ValueUnion);
-        switch (chOpt)
+        bool fContinue = true;
+        do
         {
-            case 0:
-                /*
-                 * If we've processed any files we're done.  Otherwise take
-                 * input from stdin and write the output to stdout.
-                 */
-                if (cProcessed > 0)
-                    return rcExit;
-                ValueUnion.psz = "-";
-                RT_FALL_THRU();
-            case VINF_GETOPT_NOT_OPTION:
+            RTGETOPTUNION ValueUnion;
+            int chOpt = RTGetOpt(&GetState, &ValueUnion);
+            switch (chOpt)
             {
-                RTVFSIOSTREAM hVfsSrc;
-                RTEXITCODE rcExit2 = rtCmdCatOpenInput(ValueUnion.psz, &hVfsSrc);
-                if (rcExit2 == RTEXITCODE_SUCCESS)
+                case 0:
+                    /*
+                     * If we've processed any files we're done.  Otherwise take
+                     * input from stdin and write the output to stdout.
+                     */
+                    if (cProcessed > 0)
+                    {
+                        fContinue = false;
+                        break;
+                    }
+                    ValueUnion.psz = "-";
+                    RT_FALL_THRU();
+                case VINF_GETOPT_NOT_OPTION:
                 {
-                    if (   Opts.fShowEnds
-                        || Opts.fShowTabs
-                        || Opts.fShowNonPrinting
-                        || Opts.fSqueezeBlankLines
-                        || Opts.fNumberLines
-                        || Opts.fNumberNonBlankLines)
-                        rcExit2 = rtCmdCatShowComplicated(hVfsOutput, hVfsSrc, ValueUnion.psz, &Opts);
-                    else
-                        rcExit2 = rtCmdCatShowRaw(hVfsOutput, hVfsSrc, ValueUnion.psz);
-                    RTVfsIoStrmRelease(hVfsSrc);
+                    RTVFSIOSTREAM hVfsSrc;
+                    RTEXITCODE rcExit2 = rtCmdCatOpenInput(ValueUnion.psz, &hVfsSrc);
+                    if (rcExit2 == RTEXITCODE_SUCCESS)
+                    {
+                        if (   Opts.fShowEnds
+                            || Opts.fShowTabs
+                            || Opts.fShowNonPrinting
+                            || Opts.fSqueezeBlankLines
+                            || Opts.fNumberLines
+                            || Opts.fNumberNonBlankLines)
+                            rcExit2 = rtCmdCatShowComplicated(hVfsOutput, hVfsSrc, ValueUnion.psz, &Opts);
+                        else
+                            rcExit2 = rtCmdCatShowRaw(hVfsOutput, hVfsSrc, ValueUnion.psz);
+                        RTVfsIoStrmRelease(hVfsSrc);
+                    }
+                    if (rcExit2 != RTEXITCODE_SUCCESS)
+                        rcExit = rcExit2;
+                    cProcessed++;
+                    break;
                 }
-                if (rcExit2 != RTEXITCODE_SUCCESS)
-                    rcExit = rcExit2;
-                cProcessed++;
-                break;
-            }
 
-            case 'A':
-                Opts.fShowNonPrinting       = true;
-                Opts.fShowEnds              = true;
-                Opts.fShowTabs              = true;
-                break;
-
-            case 'b':
-                Opts.fNumberNonBlankLines   = true;
-                break;
-
-            case 'e':
-                Opts.fShowNonPrinting       = true;
-                RT_FALL_THRU();
-            case 'E':
-                Opts.fShowEnds              = true;
-                break;
-
-            case 'l':
-                Opts.fAdvisoryOutputLock    = true;
-                break;
-
-            case 'n':
-                Opts.fNumberLines           = true;
-                Opts.fNumberNonBlankLines   = false;
-                break;
-
-            case 's':
-                Opts.fSqueezeBlankLines     = true;
-                break;
-
-            case 't':
-                Opts.fShowNonPrinting       = true;
-                RT_FALL_THRU();
-            case 'T':
-                Opts.fShowTabs              = true;
-                break;
-
-            case 'u': /* currently ignored */
-                Opts.fUnbufferedOutput      = true;
-                break;
-
-            case 'v':
-                Opts.fShowNonPrinting       = true;
-                break;
-
-            case 'h':
-                RTPrintf("Usage: to be written\nOption dump:\n");
-                for (unsigned i = 0; i < RT_ELEMENTS(s_aOptions); i++)
-                    RTPrintf(" -%c,%s\n", s_aOptions[i].iShort, s_aOptions[i].pszLong);
-                return RTEXITCODE_SUCCESS;
-
-            case 'V':
-                RTPrintf("%sr%d\n", RTBldCfgVersion(), RTBldCfgRevision());
-                return RTEXITCODE_SUCCESS;
-
-            default:
-                return RTGetOptPrintError(chOpt, &ValueUnion);
-        }
+                case 'A':
+                    Opts.fShowNonPrinting       = true;
+                    Opts.fShowEnds              = true;
+                    Opts.fShowTabs              = true;
+                    break;
+
+                case 'b':
+                    Opts.fNumberNonBlankLines   = true;
+                    break;
+
+                case 'e':
+                    Opts.fShowNonPrinting       = true;
+                    RT_FALL_THRU();
+                case 'E':
+                    Opts.fShowEnds              = true;
+                    break;
+
+                case 'l':
+                    Opts.fAdvisoryOutputLock    = true;
+                    break;
+
+                case 'n':
+                    Opts.fNumberLines           = true;
+                    Opts.fNumberNonBlankLines   = false;
+                    break;
+
+                case 's':
+                    Opts.fSqueezeBlankLines     = true;
+                    break;
+
+                case 't':
+                    Opts.fShowNonPrinting       = true;
+                    RT_FALL_THRU();
+                case 'T':
+                    Opts.fShowTabs              = true;
+                    break;
+
+                case 'u': /* currently ignored */
+                    Opts.fUnbufferedOutput      = true;
+                    break;
+
+                case 'v':
+                    Opts.fShowNonPrinting       = true;
+                    break;
+
+                case 'h':
+                    RTPrintf("Usage: to be written\nOption dump:\n");
+                    for (unsigned i = 0; i < RT_ELEMENTS(s_aOptions); i++)
+                        RTPrintf(" -%c,%s\n", s_aOptions[i].iShort, s_aOptions[i].pszLong);
+                    fContinue = false;
+                    break;
+
+                case 'V':
+                    RTPrintf("%sr%d\n", RTBldCfgVersion(), RTBldCfgRevision());
+                    fContinue = false;
+                    break;
+
+                default:
+                    rcExit = RTGetOptPrintError(chOpt, &ValueUnion);
+                    fContinue = false;
+                    break;
+            }
+        } while (fContinue);
     }
+    else
+        rcExit = RTMsgErrorExit(RTEXITCODE_SYNTAX, "RTGetOptInit: %Rrc", rc);
+    RTVfsIoStrmRelease(hVfsOutput);
+    return rcExit;
 }
 
 
@@ -305,4 +317,3 @@ int main(int argc, char **argv)
     return RTCmdCat(argc, argv);
 }
 
-
diff --git a/src/VBox/Runtime/tools/RTChMod.cpp b/src/VBox/Runtime/tools/RTChMod.cpp
new file mode 100644
index 0000000..0e672b0
--- /dev/null
+++ b/src/VBox/Runtime/tools/RTChMod.cpp
@@ -0,0 +1,434 @@
+/* $Id: RTChMod.cpp $ */
+/** @file
+ * IPRT - Changes the mode/attributes of a file system object.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/path.h>
+#include <iprt/err.h>
+#include <iprt/initterm.h>
+#include <iprt/message.h>
+
+#include <iprt/vfs.h>
+#include <iprt/string.h>
+#include <iprt/stream.h>
+#include <iprt/getopt.h>
+#include <iprt/buildconfig.h>
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+/** What to clear we all bits are being set. */
+#define RTCHMOD_SET_ALL_MASK  (~(  RTFS_TYPE_MASK  \
+                                 | RTFS_DOS_NT_ENCRYPTED \
+                                 | RTFS_DOS_NT_COMPRESSED \
+                                 | RTFS_DOS_NT_REPARSE_POINT \
+                                 | RTFS_DOS_NT_SPARSE_FILE \
+                                 | RTFS_DOS_NT_DEVICE \
+                                 | RTFS_DOS_DIRECTORY))
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+typedef enum RTCMDCHMODNOISE
+{
+    kRTCmdChModNoise_Quiet,
+    kRTCmdChModNoise_Default,
+    kRTCmdChModNoise_Changes,
+    kRTCmdChModNoise_Verbose
+} RTCMDCHMODNOISE;
+
+typedef struct RTCMDCHMODOPTS
+{
+    /** The noise level. */
+    RTCMDCHMODNOISE enmNoiseLevel;
+    /** -R, --recursive   */
+    bool            fRecursive;
+    /** --preserve-root / --no-preserve-root (don't allow recursion from root). */
+    bool            fPreserveRoot;
+    /** Whether to always use the VFS chain API (for testing). */
+    bool            fAlwaysUseChainApi;
+    /** Which mode bits to set. */
+    RTFMODE         fModeSet;
+    /** Which mode bits to clear. */
+    RTFMODE         fModeClear;
+} RTCMDCHMODOPTS;
+
+
+
+/**
+ * Calculates the new file mode.
+ *
+ * @returns New mode mask.
+ * @param   pOpts               The chmod options.
+ * @param   fMode               The current file mode.
+ */
+static RTFMODE rtCmdMkModCalcNewMode(RTCMDCHMODOPTS const *pOpts, RTFMODE fMode)
+{
+    fMode &= ~pOpts->fModeClear;
+    fMode |= pOpts->fModeSet;
+    /** @todo do 'X'   */
+    return fMode;
+}
+
+
+/**
+ * Changes the file mode of one file system object.
+ *
+ * @returns exit code
+ * @param   pOpts               The chmod options.
+ * @param   pszPath             The path to the file system object to change the
+ *                              file mode of.
+ */
+static RTEXITCODE rtCmdChModOne(RTCMDCHMODOPTS const *pOpts, const char *pszPath)
+{
+    int         rc;
+    RTFSOBJINFO ObjInfo;
+    bool        fChanges = false;
+    if (!pOpts->fAlwaysUseChainApi && !RTVfsChainIsSpec(pszPath) )
+    {
+        rc = RTPathQueryInfoEx(pszPath, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK);
+        if (RT_SUCCESS(rc))
+        {
+            RTFMODE fNewMode = rtCmdMkModCalcNewMode(pOpts, ObjInfo.Attr.fMode);
+            fChanges = fNewMode != ObjInfo.Attr.fMode;
+            if (fChanges)
+            {
+                rc = RTPathSetMode(pszPath, fNewMode);
+                if (RT_FAILURE(rc))
+                    RTMsgError("RTPathSetMode failed on '%s' with fNewMode=%#x: %Rrc", pszPath, fNewMode, rc);
+            }
+        }
+        else
+            RTMsgError("RTPathQueryInfoEx failed on '%s': %Rrc", pszPath, rc);
+    }
+    else
+    {
+        /* Try via parent first as that's generally faster and more reliable. */
+        RTVFSDIR        hVfsDir;
+        const char     *pszChild;
+        uint32_t        offError;
+        RTERRINFOSTATIC ErrInfo;
+        rc = RTVfsChainOpenParentDir(pszPath, 0 /*fOpen*/, &hVfsDir, &pszChild, &offError, RTErrInfoInitStatic(&ErrInfo));
+        if (RT_SUCCESS(rc))
+        {
+            rc = RTVfsDirQueryPathInfo(hVfsDir, pszChild, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK);
+            if (RT_SUCCESS(rc))
+            {
+                RTFMODE fNewMode = rtCmdMkModCalcNewMode(pOpts, ObjInfo.Attr.fMode);
+                fChanges = fNewMode != ObjInfo.Attr.fMode;
+                if (fChanges)
+                {
+                    rc = VERR_NOT_IMPLEMENTED; //rc = RTVfsDirSetPathMode(hVfsDir, pszChild, fNewMode, RTPATH_F_FOLLOW_LINK);
+                    if (RT_FAILURE(rc))
+                        RTMsgError("RTVfsDirSetPathMode failed on '%s' with fNewMode=%#x: %Rrc", pszPath, fNewMode, rc);
+                }
+            }
+            RTVfsDirRelease(hVfsDir);
+        }
+        /* If we have no child part, work on the chain as a whole. */
+        else if (   rc == VERR_VFS_CHAIN_TOO_SHORT_FOR_PARENT
+                 || rc == VERR_VFS_CHAIN_NOT_PATH_ONLY)
+        {
+            rc = RTVfsChainQueryInfo(pszPath, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK,
+                                     &offError, RTErrInfoInitStatic(&ErrInfo));
+            if (RT_SUCCESS(rc))
+            {
+                RTFMODE fNewMode = rtCmdMkModCalcNewMode(pOpts, ObjInfo.Attr.fMode);
+                fChanges = fNewMode != ObjInfo.Attr.fMode;
+                if (fChanges)
+                {
+                    rc = VERR_NOT_IMPLEMENTED; //rc = RTVfsChainSetMode(pszPath, fNewMode, &offError, RTErrInfoInitStatic(&ErrInfo));
+                    if (RT_FAILURE(rc))
+                        RTMsgError("RTVfsChainSetMode failed on '%s' with fNewMode=%#x: %Rrc", pszPath, fNewMode, rc);
+                }
+            }
+            else
+                RTVfsChainMsgError("RTVfsChainQueryInfo", pszPath, rc, offError, &ErrInfo.Core);
+        }
+        else /** @todo we could implement a fallback here so we don't require a final path element. */
+            RTVfsChainMsgError("RTVfsChainOpenParentDir", pszPath, rc, offError, &ErrInfo.Core);
+    }
+
+    if (RT_SUCCESS(rc))
+    {
+        if (pOpts->enmNoiseLevel >= (fChanges ? kRTCmdChModNoise_Changes : kRTCmdChModNoise_Verbose))
+            RTPrintf("%s\n", pszPath);
+        return RTEXITCODE_SUCCESS;
+    }
+    return RTEXITCODE_FAILURE;
+}
+
+
+/**
+ * Recursively changes the file mode.
+ *
+ * @returns exit code
+ * @param   pOpts               The mkdir option.
+ * @param   pszPath             The path to start changing the mode of.
+ */
+static int rtCmdChModRecursive(RTCMDCHMODOPTS const *pOpts, const char *pszPath)
+{
+    /*
+     * Check if it's a directory first.  If not, join the non-recursive code.
+     */
+    int             rc;
+    uint32_t        offError;
+    RTFSOBJINFO     ObjInfo;
+    RTERRINFOSTATIC ErrInfo;
+    bool const      fUseChainApi = pOpts->fAlwaysUseChainApi || RTVfsChainIsSpec(pszPath);
+    if (!fUseChainApi)
+    {
+        rc = RTPathQueryInfoEx(pszPath, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK);
+        if (RT_FAILURE(rc))
+            return RTMsgErrorExitFailure("RTPathQueryInfoEx failed on '%s': %Rrc", pszPath, rc);
+    }
+    else
+    {
+        rc = RTVfsChainQueryInfo(pszPath, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK,
+                                 &offError, RTErrInfoInitStatic(&ErrInfo));
+        if (RT_FAILURE(rc))
+            return RTVfsChainMsgErrorExitFailure("RTVfsChainQueryInfo", pszPath, rc, offError, &ErrInfo.Core);
+    }
+
+    if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode))
+        return rtCmdChModOne(pOpts, pszPath);
+
+    /** @todo do root detection. */
+
+    /*
+     * For recursion we always use the VFS layer.
+     */
+    RTVFSDIR hVfsDir;
+    if (!fUseChainApi)
+    {
+        rc = RTVfsDirOpenNormal(pszPath, 0 /** @todo write attrib flag*/, &hVfsDir);
+        if (RT_FAILURE(rc))
+            return RTMsgErrorExitFailure("RTVfsDirOpenNormal failed on '%s': %Rrc", pszPath, rc);
+    }
+    else
+    {
+        rc = RTVfsChainOpenDir(pszPath, 0 /** @todo write attrib flag*/, &hVfsDir, &offError, RTErrInfoInitStatic(&ErrInfo));
+        if (RT_FAILURE(rc))
+            return RTVfsChainMsgErrorExitFailure("RTVfsChainQueryInfo", pszPath, rc, offError, &ErrInfo.Core);
+    }
+
+    RTMsgError("Recursion is not yet implemented\n");
+    RTVfsDirRelease(hVfsDir);
+    rc = VERR_NOT_IMPLEMENTED;
+
+    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
+}
+
+
+static RTEXITCODE RTCmdChMod(unsigned cArgs,  char **papszArgs)
+{
+    /*
+     * Parse the command line.
+     */
+    static const RTGETOPTDEF s_aOptions[] =
+    {
+        /* operations */
+        { "--recursive",                'R', RTGETOPT_REQ_NOTHING },
+        { "--preserve-root",            'x', RTGETOPT_REQ_NOTHING },
+        { "--no-preserve-root",         'X', RTGETOPT_REQ_NOTHING },
+        { "--changes",                  'c', RTGETOPT_REQ_NOTHING },
+        { "--quiet",                    'f', RTGETOPT_REQ_NOTHING },
+        { "--silent",                   'f', RTGETOPT_REQ_NOTHING },
+        { "--verbose",                  'v', RTGETOPT_REQ_NOTHING },
+        { "--reference",                'Z', RTGETOPT_REQ_NOTHING },
+        { "--always-use-vfs-chain-api", 'A', RTGETOPT_REQ_NOTHING },
+
+    };
+
+    RTGETOPTSTATE GetState;
+    int rc = RTGetOptInit(&GetState, cArgs, papszArgs, s_aOptions, RT_ELEMENTS(s_aOptions), 1,
+                          RTGETOPTINIT_FLAGS_OPTS_FIRST);
+    if (RT_FAILURE(rc))
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTGetOpt failed: %Rrc", rc);
+
+    RTCMDCHMODOPTS Opts;
+    Opts.enmNoiseLevel      = kRTCmdChModNoise_Default;
+    Opts.fPreserveRoot      = false;
+    Opts.fRecursive         = false;
+    Opts.fAlwaysUseChainApi = false;
+    Opts.fModeClear         = 0;
+    Opts.fModeSet           = 0;
+
+    RTGETOPTUNION ValueUnion;
+    while (   (rc = RTGetOpt(&GetState, &ValueUnion)) != 0
+           && rc != VINF_GETOPT_NOT_OPTION)
+    {
+        switch (rc)
+        {
+            case 'R':
+                Opts.fRecursive = true;
+                break;
+
+            case 'x':
+                Opts.fPreserveRoot = true;
+                break;
+            case 'X':
+                Opts.fPreserveRoot = false;
+                break;
+
+            case 'f':
+                Opts.enmNoiseLevel = kRTCmdChModNoise_Quiet;
+                break;
+            case 'c':
+                Opts.enmNoiseLevel = kRTCmdChModNoise_Changes;
+                break;
+            case 'v':
+                Opts.enmNoiseLevel = kRTCmdChModNoise_Verbose;
+                break;
+
+            case 'Z':
+            {
+                RTFSOBJINFO     ObjInfo;
+                RTERRINFOSTATIC ErrInfo;
+                uint32_t        offError;
+                rc = RTVfsChainQueryInfo(ValueUnion.psz, &ObjInfo,RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK,
+                                         &offError, RTErrInfoInitStatic(&ErrInfo));
+                if (RT_FAILURE(rc))
+                    return RTVfsChainMsgErrorExitFailure("RTVfsChainQueryInfo", ValueUnion.psz, rc, offError, &ErrInfo.Core);
+                Opts.fModeClear = RTCHMOD_SET_ALL_MASK;
+                Opts.fModeSet   = ObjInfo.Attr.fMode & RTCHMOD_SET_ALL_MASK;
+                break;
+            }
+
+            case 'A':
+                Opts.fAlwaysUseChainApi = true;
+                break;
+
+            case 'h':
+                RTPrintf("Usage: %s [options] <mode> <file> [..]\n"
+                         "\n"
+                         "Options:\n"
+                         "  -f, --silent, --quiet\n"
+                         "  -c, --changes\n"
+                         "  -v, --verbose\n"
+                         "      Noise level selection.\n"
+                         "  -R, --recursive\n"
+                         "      Recurse into directories.\n"
+                         "  --preserve-root, --no-preserve-root\n"
+                         "      Whether to allow recursion from the root (default: yes).\n"
+                         "  --reference <file>\n"
+                         "      Take mode mask to use from <file> instead of <mode>.\n"
+                         "\n"
+                         "The <mode> part isn't fully implemented, so only numerical octal notation\n"
+                         "works.  Prefix the number(s) with 0x to use hexadecimal.  There are two forms\n"
+                         "of the numerical notation: <SET> and <SET>:<CLEAR>\n"
+                         , papszArgs[0]);
+                return RTEXITCODE_SUCCESS;
+
+            case 'V':
+                RTPrintf("%sr%d\n", RTBldCfgVersion(), RTBldCfgRevision());
+                return RTEXITCODE_SUCCESS;
+
+            default:
+
+                return RTGetOptPrintError(rc, &ValueUnion);
+        }
+    }
+
+    /*
+     * The MODE.
+     */
+    if (   Opts.fModeClear == 0
+        && Opts.fModeSet   == 0)
+    {
+        if (rc != VINF_GETOPT_NOT_OPTION)
+            return RTMsgErrorExit(RTEXITCODE_SYNTAX, "No mode change specified.\n");
+
+        char *pszNext;
+        if (   ValueUnion.psz[0] == '0'
+            && (ValueUnion.psz[1] == 'x' || ValueUnion.psz[1] == 'X'))
+            rc = RTStrToUInt32Ex(ValueUnion.psz, &pszNext, 16, &Opts.fModeSet);
+        else
+            rc = RTStrToUInt32Ex(ValueUnion.psz, &pszNext, 8, &Opts.fModeSet);
+        if (   rc != VINF_SUCCESS
+            && (rc != VWRN_TRAILING_CHARS || *pszNext != ':'))
+            return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unable to parse mode mask: %s\n", ValueUnion.psz);
+        Opts.fModeSet &= RTCHMOD_SET_ALL_MASK;
+
+        if (rc == VINF_SUCCESS)
+            Opts.fModeClear = RTCHMOD_SET_ALL_MASK;
+        else
+        {
+            pszNext++;
+            if (   pszNext[0] == '0'
+                && (pszNext[1] == 'x' || pszNext[1] == 'X'))
+                rc = RTStrToUInt32Ex(pszNext, &pszNext, 16, &Opts.fModeClear);
+            else
+                rc = RTStrToUInt32Ex(pszNext, &pszNext, 8, &Opts.fModeClear);
+            if (rc != VINF_SUCCESS)
+                return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unable to parse mode mask: %s\n", ValueUnion.psz);
+            Opts.fModeClear &= RTCHMOD_SET_ALL_MASK;
+        }
+
+        rc = RTGetOpt(&GetState, &ValueUnion);
+    }
+
+    /*
+     * No files means error.
+     */
+    if (rc != VINF_GETOPT_NOT_OPTION)
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "No directories specified.\n");
+
+    /*
+     * Work thru the specified dirs.
+     */
+    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
+    while (rc == VINF_GETOPT_NOT_OPTION)
+    {
+        if (Opts.fRecursive)
+            rc = rtCmdChModRecursive(&Opts, ValueUnion.psz);
+        else
+            rc = rtCmdChModOne(&Opts, ValueUnion.psz);
+        if (RT_FAILURE(rc))
+            rcExit = RTEXITCODE_FAILURE;
+
+        /* next */
+        rc = RTGetOpt(&GetState, &ValueUnion);
+    }
+    if (rc != 0)
+        rcExit = RTGetOptPrintError(rc, &ValueUnion);
+
+    return rcExit;
+}
+
+
+int main(int argc, char **argv)
+{
+    int rc = RTR3InitExe(argc, &argv, 0);
+    if (RT_FAILURE(rc))
+        return RTMsgInitFailure(rc);
+    return RTCmdChMod(argc, argv);
+}
+
diff --git a/src/VBox/Runtime/tools/RTDbgSymCache.cpp b/src/VBox/Runtime/tools/RTDbgSymCache.cpp
index 29335c1..f267954 100644
--- a/src/VBox/Runtime/tools/RTDbgSymCache.cpp
+++ b/src/VBox/Runtime/tools/RTDbgSymCache.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/zip.h>
 
 #include <iprt/buildconfig.h>
@@ -47,9 +47,9 @@
 #include <iprt/zip.h>
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /**
  * Cache file type.
  */
@@ -80,9 +80,9 @@ typedef struct RTDBGSYMCACHEADDCFG
 typedef RTDBGSYMCACHEADDCFG const *PCRTDBGSYMCACHEADDCFG;
 
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 /** Bundle suffixes. */
 static const char * const g_apszBundleSuffixes[] =
 {
@@ -143,9 +143,9 @@ static const char * const g_apszDSymBundleSuffixes[] =
 };
 
 
-/*******************************************************************************
-*   Internal Functions                                                         *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 static int rtDbgSymCacheAddDirWorker(char *pszPath, size_t cchPath, PRTDIRENTRYEX pDirEntry, PCRTDBGSYMCACHEADDCFG pCfg);
 
 
@@ -947,7 +947,7 @@ static int rtDbgSymCacheAddDirWorker(char *pszPath, size_t cchPath, PRTDIRENTRYE
     /*
      * Open the directory.
      */
-    PRTDIR pDir;
+    RTDIR hDir;
     int rc, rc2;
     if (pCfg->pszFilter)
     {
@@ -957,10 +957,10 @@ static int rtDbgSymCacheAddDirWorker(char *pszPath, size_t cchPath, PRTDIRENTRYE
             pszPath[cchPath] = '\0';
             return RTMsgErrorRc(rc, "Filename too long (%Rrc): '%s" RTPATH_SLASH_STR "%s'", rc, pszPath, pCfg->pszFilter);
         }
-        rc = RTDirOpenFiltered(&pDir, pszPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
+        rc = RTDirOpenFiltered(&hDir, pszPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     }
     else
-        rc = RTDirOpen(&pDir, pszPath);
+        rc = RTDirOpen(&hDir, pszPath);
     if (RT_FAILURE(rc))
         return RTMsgErrorRc(rc, "RTDirOpen%s failed on '%s': %Rrc", pCfg->pszFilter ? "Filtered" : "", pszPath, rc);
 
@@ -969,7 +969,7 @@ static int rtDbgSymCacheAddDirWorker(char *pszPath, size_t cchPath, PRTDIRENTRYE
      */
     for (;;)
     {
-        rc2 = RTDirReadEx(pDir, pDirEntry, NULL, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK);
+        rc2 = RTDirReadEx(hDir, pDirEntry, NULL, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK);
         if (RT_FAILURE(rc2))
         {
             pszPath[cchPath] = '\0';
@@ -1048,7 +1048,7 @@ static int rtDbgSymCacheAddDirWorker(char *pszPath, size_t cchPath, PRTDIRENTRYE
     /*
      * Clean up.
      */
-    rc2 = RTDirClose(pDir);
+    rc2 = RTDirClose(hDir);
     if (RT_FAILURE(rc2))
     {
         RTMsgError("RTDirClose failed in '%s': %Rrc", pszPath, rc);
diff --git a/src/VBox/Runtime/tools/RTGzip.cpp b/src/VBox/Runtime/tools/RTGzip.cpp
index 97735f6..9f3fff6 100644
--- a/src/VBox/Runtime/tools/RTGzip.cpp
+++ b/src/VBox/Runtime/tools/RTGzip.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/zip.h>
 
 #include <iprt/buildconfig.h>
@@ -43,9 +43,9 @@
 #include <iprt/zip.h>
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /**
  * Gzip command options.
  */
diff --git a/src/VBox/Runtime/tools/RTHttp.cpp b/src/VBox/Runtime/tools/RTHttp.cpp
index d83b10e..2ff9de1 100644
--- a/src/VBox/Runtime/tools/RTHttp.cpp
+++ b/src/VBox/Runtime/tools/RTHttp.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/http.h>
 
 #include <iprt/assert.h>
@@ -105,7 +105,7 @@ int main(int argc, char **argv)
                 return RTEXITCODE_SUCCESS;
 
             case 'V':
-                RTPrintf("$Revision: 118412 $\n");
+                RTPrintf("$Revision: 118769 $\n");
                 return RTEXITCODE_SUCCESS;
 
             case VINF_GETOPT_NOT_OPTION:
@@ -154,4 +154,3 @@ int main(int argc, char **argv)
     return rcExit;
 }
 
-
diff --git a/src/VBox/Runtime/tools/RTIsoMaker.cpp b/src/VBox/Runtime/tools/RTIsoMaker.cpp
index 28b2b23..708894b 100644
--- a/src/VBox/Runtime/tools/RTIsoMaker.cpp
+++ b/src/VBox/Runtime/tools/RTIsoMaker.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/fsisomaker.h>
 #include <iprt/err.h>
 #include <iprt/initterm.h>
diff --git a/src/VBox/Runtime/tools/RTKrnlModInfo.cpp b/src/VBox/Runtime/tools/RTKrnlModInfo.cpp
index 0b068ba..eb9e4b4 100644
--- a/src/VBox/Runtime/tools/RTKrnlModInfo.cpp
+++ b/src/VBox/Runtime/tools/RTKrnlModInfo.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/krnlmod.h>
 
 #include <iprt/assert.h>
@@ -82,4 +82,3 @@ int main(int argc, char **argv)
     return rcExit;
 }
 
-
diff --git a/src/VBox/Runtime/tools/RTLdrFlt.cpp b/src/VBox/Runtime/tools/RTLdrFlt.cpp
index e347635..5c32241 100644
--- a/src/VBox/Runtime/tools/RTLdrFlt.cpp
+++ b/src/VBox/Runtime/tools/RTLdrFlt.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/mem.h>
 #include <iprt/assert.h>
 #include <iprt/ctype.h>
@@ -224,7 +224,7 @@ int main(int argc, char **argv)
                 return RTEXITCODE_SUCCESS;
 
             case 'V':
-                RTPrintf("$Revision: 118412 $\n");
+                RTPrintf("$Revision: 118769 $\n");
                 return RTEXITCODE_SUCCESS;
 
             case VINF_GETOPT_NOT_OPTION:
diff --git a/src/VBox/Runtime/tools/RTLs.cpp b/src/VBox/Runtime/tools/RTLs.cpp
index 971ce7b..d1531ed 100644
--- a/src/VBox/Runtime/tools/RTLs.cpp
+++ b/src/VBox/Runtime/tools/RTLs.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/vfs.h>
 
 #include <iprt/buildconfig.h>
@@ -43,9 +43,9 @@
 #include <iprt/string.h>
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /**
  * Display entry.
  */
@@ -55,6 +55,10 @@ typedef struct RTCMDLSENTRY
     RTFSOBJINFO Info;
     /** Symbolic link target (allocated after the name). */
     const char *pszTarget;
+    /** Owner if applicable(allocated after the name). */
+    const char *pszOwner;
+    /** Group if applicable (allocated after the name). */
+    const char *pszGroup;
     /** The length of szName. */
     size_t      cchName;
     /** The entry name. */
@@ -528,9 +532,42 @@ static void rtCmdLsSortCollections(PRTCMDLSOPTS pOpts)
  */
 static const char *rtCmdLsFormatSizeHumanReadable(PRTCMDLSOPTS pOpts, uint64_t cb, char *pszDst, size_t cbDst)
 {
-    /** @todo human readable size formatting (IPRT?). */
-    RT_NOREF(pOpts);
-    RTStrFormatU64(pszDst, cbDst, cb, 10, 0, 0, 0);
+    if (pOpts->fHumanReadableSizes)
+    {
+        static const struct
+        {
+            const char *pszSuffix;
+            uint64_t    cbFactor;
+            uint64_t    cbMin;
+        } s_aUnits[] =
+        {
+            {  "E", _1E, _1E + _1E/2 },
+            {  "P", _1P, _1P + _1P/2 },
+            {  "T", _1T, _1T + _1T/2 },
+            {  "G", _1G, _1G + _1G/2 },
+            {  "M", _1M, _1M + _1M/2 },
+            {  "k", _1K, _1K + _1K/2 },
+
+            {  "E", UINT64_C(1000000000000000000), UINT64_C(1010000000000000000),  },
+            {  "P", UINT64_C(1000000000000000),    UINT64_C(1010000000000000),     },
+            {  "T", UINT64_C(1000000000000),       UINT64_C(1010000000000),        },
+            {  "G", UINT64_C(1000000000),          UINT64_C(1010000000),           },
+            {  "M", UINT64_C(1000000),             UINT64_C(1010000),              },
+            {  "K", UINT64_C(1000),                UINT64_C(1010),                 },
+        };
+        unsigned const iEnd = !pOpts->fSiUnits ? 6 : 12;
+        for (unsigned i = !pOpts->fSiUnits ? 0 : 6; i < iEnd; i++)
+            if (cb >= s_aUnits[i].cbMin)
+            {
+                RTStrFormatU64(pszDst, cbDst, cb / s_aUnits[i].cbFactor, 10, 0, 0, 0);
+                RTStrCat(pszDst, cbDst, s_aUnits[i].pszSuffix);
+                return pszDst;
+            }
+    }
+    else if (pOpts->cbBlock)
+        RTStrFormatU64(pszDst, cbDst, (cb + pOpts->cbBlock - 1) / pOpts->cbBlock, 10, 0, 0, 0);
+    else
+        RTStrFormatU64(pszDst, cbDst, cb, 10, 0, 0, 0);
     return pszDst;
 }
 
@@ -615,14 +652,19 @@ DECLINLINE(size_t) rtCmdLsDecimalFormatLengthU32(uint32_t uValue)
  * @returns pszDst
  * @param   pOpts           The options and state.
  * @param   gid             The GID to format.
+ * @param   pszOwner        The owner returned by the FS.
  * @param   pszDst          The output buffer.
  * @param   cbDst           The output buffer size.
  */
-static const char *rtCmdLsDecimalFormatGroup(PRTCMDLSOPTS pOpts, RTGID gid, char *pszDst, size_t cbDst)
+static const char *rtCmdLsDecimalFormatGroup(PRTCMDLSOPTS pOpts, RTGID gid, const char *pszGroup, char *pszDst, size_t cbDst)
 {
     if (!pOpts->fNumericalIds)
     {
-        /** @todo resolve GIDs to names. */
+        if (pszGroup)
+        {
+            RTStrCopy(pszDst, cbDst, pszGroup);
+            return pszDst;
+        }
         if (gid == NIL_RTGID)
             return "<Nil>";
     }
@@ -637,14 +679,19 @@ static const char *rtCmdLsDecimalFormatGroup(PRTCMDLSOPTS pOpts, RTGID gid, char
  * @returns pszDst
  * @param   pOpts           The options and state.
  * @param   uid             The UID to format.
+ * @param   pszOwner        The owner returned by the FS.
  * @param   pszDst          The output buffer.
  * @param   cbDst           The output buffer size.
  */
-static const char *rtCmdLsDecimalFormatOwner(PRTCMDLSOPTS pOpts, RTUID uid, char *pszDst, size_t cbDst)
+static const char *rtCmdLsDecimalFormatOwner(PRTCMDLSOPTS pOpts, RTUID uid, const char *pszOwner, char *pszDst, size_t cbDst)
 {
     if (!pOpts->fNumericalIds)
     {
-        /** @todo resolve UIDs to names. */
+        if (pszOwner)
+        {
+            RTStrCopy(pszDst, cbDst, pszOwner);
+            return pszDst;
+        }
         if (uid == NIL_RTUID)
             return "<Nil>";
     }
@@ -726,7 +773,7 @@ static RTEXITCODE rtCmdLsDisplayCollectionInLongFormat(PRTCMDLSOPTS pOpts, PRTCM
 
         if (pOpts->fShowOwner)
         {
-            rtCmdLsDecimalFormatOwner(pOpts, pEntry->Info.Attr.u.Unix.uid, pszTmp, cbTmp);
+            rtCmdLsDecimalFormatOwner(pOpts, pEntry->Info.Attr.u.Unix.uid, pEntry->pszOwner, pszTmp, cbTmp);
             cchTmp = strlen(pszTmp);
             if (cchTmp > cchUidCol)
                 cchUidCol = cchTmp;
@@ -734,7 +781,7 @@ static RTEXITCODE rtCmdLsDisplayCollectionInLongFormat(PRTCMDLSOPTS pOpts, PRTCM
 
         if (pOpts->fShowGroup)
         {
-            rtCmdLsDecimalFormatGroup(pOpts, pEntry->Info.Attr.u.Unix.gid, pszTmp, cbTmp);
+            rtCmdLsDecimalFormatGroup(pOpts, pEntry->Info.Attr.u.Unix.gid, pEntry->pszGroup, pszTmp, cbTmp);
             cchTmp = strlen(pszTmp);
             if (cchTmp > cchGidCol)
                 cchGidCol = cchTmp;
@@ -819,9 +866,11 @@ static RTEXITCODE rtCmdLsDisplayCollectionInLongFormat(PRTCMDLSOPTS pOpts, PRTCM
         }
         RTPrintf(" %*u", cchLinkCol, pEntry->Info.Attr.u.Unix.cHardlinks);
         if (cchUidCol)
-            RTPrintf(" %*s", cchUidCol, rtCmdLsDecimalFormatOwner(pOpts, pEntry->Info.Attr.u.Unix.uid, pszTmp, cbTmp));
+            RTPrintf(" %*s", cchUidCol,
+                     rtCmdLsDecimalFormatOwner(pOpts, pEntry->Info.Attr.u.Unix.uid, pEntry->pszOwner, pszTmp, cbTmp));
         if (cchGidCol)
-            RTPrintf(" %*s", cchGidCol, rtCmdLsDecimalFormatGroup(pOpts, pEntry->Info.Attr.u.Unix.gid, pszTmp, cbTmp));
+            RTPrintf(" %*s", cchGidCol,
+                     rtCmdLsDecimalFormatGroup(pOpts, pEntry->Info.Attr.u.Unix.gid, pEntry->pszGroup, pszTmp, cbTmp));
         RTPrintf(" %*s", cchSizeCol, rtCmdLsFormatSize(pOpts, pEntry->Info.cbObject, pszTmp, cbTmp));
 
         PCRTTIMESPEC pTime = (PCRTTIMESPEC)((uintptr_t)pEntry + offTime);
@@ -1029,9 +1078,15 @@ static PRTCMDLSCOLLECTION rtCmdLsNewCollection(PRTCMDLSOPTS pOpts, const char *p
  * @param   pCollection         The collection.
  * @param   pszEntry            The entry name.
  * @param   pInfo               The entry info.
+ * @param   pszOwner            The owner name if available, otherwise NULL.
+ * @param   pszGroup            The group anme if available, otherwise NULL.
+ * @param   pszTarget           The symbolic link target if applicable and
+ *                              available, otherwise NULL.
  */
-static RTEXITCODE rtCmdLsAddOne(PRTCMDLSCOLLECTION pCollection, const char *pszEntry, PRTFSOBJINFO pInfo)
+static RTEXITCODE rtCmdLsAddOne(PRTCMDLSCOLLECTION pCollection, const char *pszEntry, PRTFSOBJINFO pInfo,
+                                const char *pszOwner, const char *pszGroup, const char *pszTarget)
 {
+
     /* Make sure there is space in the collection for the new entry. */
     if (pCollection->cEntries >= pCollection->cEntriesAllocated)
     {
@@ -1045,15 +1100,40 @@ static RTEXITCODE rtCmdLsAddOne(PRTCMDLSCOLLECTION pCollection, const char *pszE
 
     /* Create and insert a new entry. */
     size_t const cchEntry = strlen(pszEntry);
-    PRTCMDLSENTRY pEntry = (PRTCMDLSENTRY)RTMemAlloc(RT_OFFSETOF(RTCMDLSENTRY, szName[cchEntry + 1]));
+    size_t const cbOwner  = pszOwner  ? strlen(pszOwner)  + 1 : 0;
+    size_t const cbGroup  = pszGroup  ? strlen(pszGroup)  + 1 : 0;
+    size_t const cbTarget = pszTarget ? strlen(pszTarget) + 1 : 0;
+    size_t const cbEntry  = RT_OFFSETOF(RTCMDLSENTRY, szName[cchEntry + 1 + cbOwner + cbGroup + cbTarget]);
+    PRTCMDLSENTRY pEntry = (PRTCMDLSENTRY)RTMemAlloc(cbEntry);
     if (pEntry)
     {
         pEntry->Info      = *pInfo;
         pEntry->pszTarget = NULL; /** @todo symbolic links. */
+        pEntry->pszOwner  = NULL;
+        pEntry->pszGroup  = NULL;
         pEntry->cchName   = cchEntry;
         memcpy(pEntry->szName, pszEntry, cchEntry);
         pEntry->szName[cchEntry] = '\0';
 
+        char *psz = &pEntry->szName[cchEntry + 1];
+        if (pszTarget)
+        {
+            pEntry->pszTarget = psz;
+            memcpy(psz, pszTarget, cbTarget);
+            psz += cbTarget;
+        }
+        if (pszOwner)
+        {
+            pEntry->pszOwner = psz;
+            memcpy(psz, pszOwner, cbOwner);
+            psz += cbOwner;
+        }
+        if (pszGroup)
+        {
+            pEntry->pszGroup = psz;
+            memcpy(psz, pszGroup, cbGroup);
+        }
+
         pCollection->papEntries[pCollection->cEntries++] = pEntry;
         pCollection->cbTotalAllocated += pEntry->Info.cbAllocated;
         pCollection->cbTotalFiles     += pEntry->Info.cbObject;
@@ -1152,7 +1232,27 @@ static RTEXITCODE rtCmdLsProcessDirectory(PRTCMDLSOPTS pOpts, RTVFSDIR hVfsDir,
          */
         if (rtCmdLsIsFilteredOut(pOpts, pDirEntry->szName, &pDirEntry->Info))
             continue;
-        RTEXITCODE rcExit2 = rtCmdLsAddOne(pCollection, pDirEntry->szName, &pDirEntry->Info);
+
+
+        const char *pszOwner = NULL;
+        RTFSOBJINFO OwnerInfo;
+        if (pDirEntry->Info.Attr.u.Unix.uid != NIL_RTUID && pOpts->fShowOwner)
+        {
+            rc = RTVfsDirQueryPathInfo(hVfsDir, pDirEntry->szName, &OwnerInfo, RTFSOBJATTRADD_UNIX_OWNER, RTPATH_F_ON_LINK);
+            if (RT_SUCCESS(rc) && OwnerInfo.Attr.u.UnixOwner.szName[0])
+                pszOwner = &OwnerInfo.Attr.u.UnixOwner.szName[0];
+        }
+
+        const char *pszGroup = NULL;
+        RTFSOBJINFO GroupInfo;
+        if (pDirEntry->Info.Attr.u.Unix.gid != NIL_RTGID && pOpts->fShowGroup)
+        {
+            rc = RTVfsDirQueryPathInfo(hVfsDir, pDirEntry->szName, &GroupInfo, RTFSOBJATTRADD_UNIX_GROUP, RTPATH_F_ON_LINK);
+            if (RT_SUCCESS(rc) && GroupInfo.Attr.u.UnixGroup.szName[0])
+                pszGroup = &GroupInfo.Attr.u.UnixGroup.szName[0];
+        }
+
+        RTEXITCODE rcExit2 = rtCmdLsAddOne(pCollection, pDirEntry->szName, &pDirEntry->Info, pszOwner, pszGroup, NULL);
         if (rcExit2 != RTEXITCODE_SUCCESS)
             rcExit = rcExit2;
     }
@@ -1249,7 +1349,27 @@ static RTEXITCODE rtCmdLsProcessArgument(PRTCMDLSOPTS pOpts, const char *pszArg)
     {
         if (   pOpts->cCollections > 0
             || rtCmdLsNewCollection(pOpts, "") != NULL)
-            return rtCmdLsAddOne(pOpts->papCollections[0], pszArg, &Info);
+        {
+            const char *pszOwner = NULL;
+            RTFSOBJINFO OwnerInfo;
+            if (Info.Attr.u.Unix.uid != NIL_RTUID && pOpts->fShowOwner)
+            {
+                rc = RTVfsChainQueryInfo(pszArg, &OwnerInfo, RTFSOBJATTRADD_UNIX_OWNER, fPath, NULL, NULL);
+                if (RT_SUCCESS(rc) && OwnerInfo.Attr.u.UnixOwner.szName[0])
+                    pszOwner = &OwnerInfo.Attr.u.UnixOwner.szName[0];
+            }
+
+            const char *pszGroup = NULL;
+            RTFSOBJINFO GroupInfo;
+            if (Info.Attr.u.Unix.gid != NIL_RTGID && pOpts->fShowGroup)
+            {
+                rc = RTVfsChainQueryInfo(pszArg, &GroupInfo, RTFSOBJATTRADD_UNIX_GROUP, fPath, NULL, NULL);
+                if (RT_SUCCESS(rc) && GroupInfo.Attr.u.UnixGroup.szName[0])
+                    pszGroup = &GroupInfo.Attr.u.UnixGroup.szName[0];
+            }
+
+            return rtCmdLsAddOne(pOpts->papCollections[0], pszArg, &Info, pszOwner, pszGroup, NULL);
+        }
         return RTEXITCODE_FAILURE;
     }
 
diff --git a/src/VBox/Runtime/tools/RTManifest.cpp b/src/VBox/Runtime/tools/RTManifest.cpp
index a493063..58ddf88 100644
--- a/src/VBox/Runtime/tools/RTManifest.cpp
+++ b/src/VBox/Runtime/tools/RTManifest.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/manifest.h>
 
 #include <iprt/buildconfig.h>
diff --git a/src/VBox/Runtime/tools/RTMkDir.cpp b/src/VBox/Runtime/tools/RTMkDir.cpp
new file mode 100644
index 0000000..8da9446
--- /dev/null
+++ b/src/VBox/Runtime/tools/RTMkDir.cpp
@@ -0,0 +1,369 @@
+/* $Id: RTMkDir.cpp $ */
+/** @file
+ * IPRT - Creates directory.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/path.h>
+#include <iprt/err.h>
+#include <iprt/initterm.h>
+#include <iprt/message.h>
+
+#include <iprt/vfs.h>
+#include <iprt/string.h>
+#include <iprt/stream.h>
+#include <iprt/getopt.h>
+#include <iprt/buildconfig.h>
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+typedef struct RTCMDMKDIROPTS
+{
+    /** -v, --verbose */
+    bool        fVerbose;
+    /** -p, --parents */
+    bool        fParents;
+    /** Whether to always use the VFS chain API (for testing). */
+    bool        fAlwaysUseChainApi;
+    /** Directory creation flags (RTDIRCREATE_FLAGS_XXX).   */
+    uint32_t    fCreateFlags;
+    /** The directory mode. */
+    RTFMODE     fMode;
+} RTCMDMKDIROPTS;
+
+
+/**
+ * Create one directory and any missing parent directories.
+ *
+ * @returns exit code
+ * @param   pOpts               The mkdir option.
+ * @param   pszDir              The path to the new directory.
+ */
+static int rtCmdMkDirOneWithParents(RTCMDMKDIROPTS const *pOpts, const char *pszDir)
+{
+    int rc;
+    if (!pOpts->fAlwaysUseChainApi && !RTVfsChainIsSpec(pszDir) )
+    {
+        /*
+         * Use the API for doing the entire job.  Unfortuantely, this means we
+         * can't be very  verbose about what we're doing.
+         */
+        rc = RTDirCreateFullPath(pszDir, pOpts->fMode);
+        if (RT_FAILURE(rc))
+            RTMsgError("Failed to create directory '%s' (or a parent): %Rrc", pszDir, rc);
+        else if (pOpts->fVerbose)
+            RTPrintf("%s\n", pszDir);
+    }
+    else
+    {
+        /*
+         * Strip the final path element from the pszDir spec.
+         */
+        char *pszCopy = RTStrDup(pszDir);
+        if (!pszCopy)
+            return RTMsgErrorExitFailure("Out of string memory!");
+
+        char       *pszFinalPath;
+        char       *pszSpec;
+        uint32_t    offError;
+        rc = RTVfsChainSplitOffFinalPath(pszCopy, &pszSpec, &pszFinalPath, &offError);
+        if (RT_SUCCESS(rc))
+        {
+            const char * const pszFullFinalPath = pszFinalPath;
+
+            /*
+             * Open the root director/whatever.
+             */
+            RTERRINFOSTATIC ErrInfo;
+            RTVFSDIR hVfsCurDir;
+            if (pszSpec)
+            {
+                rc = RTVfsChainOpenDir(pszSpec, 0 /*fOpen*/, &hVfsCurDir, &offError, RTErrInfoInitStatic(&ErrInfo));
+                if (RT_FAILURE(rc))
+                    RTVfsChainMsgError("RTVfsChainOpenDir", pszSpec, rc, offError, &ErrInfo.Core);
+                else if (!pszFinalPath)
+                    pszFinalPath = RTStrEnd(pszSpec, RTSTR_MAX);
+            }
+            else if (!RTPathStartsWithRoot(pszFinalPath))
+            {
+                rc = RTVfsDirOpenNormal(".", 0 /*fOpen*/, &hVfsCurDir);
+                if (RT_FAILURE(rc))
+                    RTMsgError("Failed to open '.' (for %s): %Rrc", rc, pszFinalPath);
+            }
+            else
+            {
+                char *pszRoot = pszFinalPath;
+                pszFinalPath = RTPathSkipRootSpec(pszFinalPath);
+                char const chSaved = *pszFinalPath;
+                *pszFinalPath = '\0';
+                rc = RTVfsDirOpenNormal(pszRoot, 0 /*fOpen*/, &hVfsCurDir);
+                *pszFinalPath = chSaved;
+                if (RT_FAILURE(rc))
+                    RTMsgError("Failed to open root dir for '%s': %Rrc", rc, pszRoot);
+            }
+
+            /*
+             * Walk the path component by component.
+             */
+            while (RT_SUCCESS(rc))
+            {
+                /*
+                 * Strip leading slashes.
+                 */
+                while (RTPATH_IS_SLASH(*pszFinalPath))
+                    pszFinalPath++;
+                if (*pszFinalPath == '\0')
+                {
+                    RTVfsDirRelease(hVfsCurDir);
+                    break;
+                }
+
+                /*
+                 * Find the end of the next path component.
+                 */
+                size_t cchComponent = 0;
+                char   ch;
+                while (   (ch = pszFinalPath[cchComponent]) != '\0'
+                       && !RTPATH_IS_SLASH(ch))
+                    cchComponent++;
+
+                /*
+                 * Open or create the component.
+                 */
+                pszFinalPath[cchComponent] = '\0';
+                RTVFSDIR hVfsNextDir = NIL_RTVFSDIR;
+                for (uint32_t cTries = 0; cTries < 8; cTries++)
+                {
+                    /* Try open it. */
+                    rc = RTVfsDirOpenDir(hVfsCurDir, pszFinalPath, 0 /*fFlags*/, &hVfsNextDir);
+                    if (RT_SUCCESS(rc))
+                        break;
+                    if (   rc != VERR_FILE_NOT_FOUND
+                        && rc != VERR_PATH_NOT_FOUND)
+                    {
+                        if (ch == '\0')
+                            RTMsgError("Failed opening directory '%s': %Rrc", pszDir, rc);
+                        else
+                            RTMsgError("Failed opening dir '%s' (for creating '%s'): %Rrc", pszFullFinalPath, pszDir, rc);
+                        break;
+                    }
+
+                    /* Not found, so try create it. */
+                    rc = RTVfsDirCreateDir(hVfsCurDir, pszFinalPath, pOpts->fMode, pOpts->fCreateFlags, &hVfsNextDir);
+                    if (rc == VERR_ALREADY_EXISTS)
+                        continue; /* We lost a creation race, try again. */
+                    if (RT_SUCCESS(rc) && pOpts->fVerbose)
+                    {
+                        if (pszSpec)
+                            RTPrintf("%s:%s\n", pszSpec, pszFullFinalPath);
+                        else
+                            RTPrintf("%s\n", pszFullFinalPath);
+                    }
+                    else if (RT_FAILURE(rc))
+                    {
+                        if (ch == '\0')
+                            RTMsgError("Failed creating directory '%s': %Rrc", pszDir, rc);
+                        else
+                            RTMsgError("Failed creating dir '%s' (for '%s'): %Rrc", pszFullFinalPath, pszDir, rc);
+                    }
+                    break;
+                }
+                pszFinalPath[cchComponent] = ch;
+
+                RTVfsDirRelease(hVfsCurDir);
+                hVfsCurDir = hVfsNextDir;
+                pszFinalPath += cchComponent;
+            }
+        }
+        else
+            RTVfsChainMsgError("RTVfsChainOpenParentDir", pszCopy, rc, offError, NULL);
+        RTStrFree(pszCopy);
+    }
+    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
+}
+
+
+/**
+ * Create one directory.
+ *
+ * @returns exit code
+ * @param   pOpts               The mkdir option.
+ * @param   pszDir              The path to the new directory.
+ */
+static RTEXITCODE rtCmdMkDirOne(RTCMDMKDIROPTS const *pOpts, const char *pszDir)
+{
+    int rc;
+    if (!pOpts->fAlwaysUseChainApi && !RTVfsChainIsSpec(pszDir) )
+        rc = RTDirCreate(pszDir, pOpts->fMode, 0);
+    else
+    {
+        RTVFSDIR        hVfsDir;
+        const char     *pszChild;
+        uint32_t        offError;
+        RTERRINFOSTATIC ErrInfo;
+        rc = RTVfsChainOpenParentDir(pszDir, 0 /*fOpen*/, &hVfsDir, &pszChild, &offError, RTErrInfoInitStatic(&ErrInfo));
+        if (RT_SUCCESS(rc))
+        {
+            rc = RTVfsDirCreateDir(hVfsDir, pszChild, pOpts->fMode, 0 /*fFlags*/, NULL);
+            RTVfsDirRelease(hVfsDir);
+        }
+        else
+            return RTVfsChainMsgErrorExitFailure("RTVfsChainOpenParentDir", pszDir, rc, offError, &ErrInfo.Core);
+    }
+    if (RT_SUCCESS(rc))
+    {
+        if (pOpts->fVerbose)
+            RTPrintf("%s\n", pszDir);
+        return RTEXITCODE_SUCCESS;
+    }
+    return RTMsgErrorExitFailure("Failed to create '%s': %Rrc", pszDir, rc);
+}
+
+
+static RTEXITCODE RTCmdMkDir(unsigned cArgs,  char **papszArgs)
+{
+    /*
+     * Parse the command line.
+     */
+    static const RTGETOPTDEF s_aOptions[] =
+    {
+        /* operations */
+        { "--mode",                     'm', RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_OCT },
+        { "--parents",                  'p', RTGETOPT_REQ_NOTHING },
+        { "--always-use-vfs-chain-api", 'A', RTGETOPT_REQ_NOTHING },
+        { "--allow-content-indexing",   'i', RTGETOPT_REQ_NOTHING },
+        { "--verbose",                  'v', RTGETOPT_REQ_NOTHING },
+    };
+
+    RTGETOPTSTATE GetState;
+    int rc = RTGetOptInit(&GetState, cArgs, papszArgs, s_aOptions, RT_ELEMENTS(s_aOptions), 1,
+                          RTGETOPTINIT_FLAGS_OPTS_FIRST);
+    if (RT_FAILURE(rc))
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTGetOpt failed: %Rrc", rc);
+
+    RTCMDMKDIROPTS Opts;
+    Opts.fVerbose               = false;
+    Opts.fParents               = false;
+    Opts.fAlwaysUseChainApi     = false;
+    Opts.fCreateFlags           = RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_NOT_CRITICAL | RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_SET;
+    Opts.fMode                  = 0775 | RTFS_TYPE_DIRECTORY | RTFS_DOS_DIRECTORY;
+
+    RTGETOPTUNION ValueUnion;
+    while (   (rc = RTGetOpt(&GetState, &ValueUnion)) != 0
+           && rc != VINF_GETOPT_NOT_OPTION)
+    {
+        switch (rc)
+        {
+            case 'm':
+                /** @todo DOS+NT attributes and symbolic notation. */
+                Opts.fMode &= ~07777;
+                Opts.fMode |= ValueUnion.u32 & 07777;
+                break;
+
+            case 'p':
+                Opts.fParents = true;
+                break;
+
+            case 'v':
+                Opts.fVerbose = true;
+                break;
+
+            case 'A':
+                Opts.fAlwaysUseChainApi = true;
+                break;
+
+            case 'i':
+                Opts.fCreateFlags &= ~RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_SET;
+                Opts.fCreateFlags |= RTDIRCREATE_FLAGS_NOT_CONTENT_INDEXED_DONT_SET;
+                break;
+
+            case 'h':
+                RTPrintf("Usage: %s [options] <dir> [..]\n"
+                         "\n"
+                         "Options:\n"
+                         "  -m <mode>, --mode <mode>\n"
+                         "      The creation mode. Default is 0775.\n"
+                         "  -p, --parent\n"
+                         "      Create parent directories too. Ignore any existing directories.\n"
+                         "  -v, --verbose\n"
+                         "      Tell which directories get created.\n"
+                         "  -A, --always-use-vfs-chain-api\n"
+                         "      Always use the VFS API.\n"
+                         "  -i, --allow-content-indexing\n"
+                         "      Don't set flags to disable context indexing on windows.\n"
+                         , papszArgs[0]);
+                return RTEXITCODE_SUCCESS;
+
+            case 'V':
+                RTPrintf("%sr%d\n", RTBldCfgVersion(), RTBldCfgRevision());
+                return RTEXITCODE_SUCCESS;
+
+            default:
+                return RTGetOptPrintError(rc, &ValueUnion);
+        }
+    }
+
+
+    /*
+     * No files means error.
+     */
+    if (rc != VINF_GETOPT_NOT_OPTION)
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "No directories specified.\n");
+
+    /*
+     * Work thru the specified dirs.
+     */
+    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
+    while (rc == VINF_GETOPT_NOT_OPTION)
+    {
+        if (Opts.fParents)
+            rc = rtCmdMkDirOneWithParents(&Opts, ValueUnion.psz);
+        else
+            rc = rtCmdMkDirOne(&Opts, ValueUnion.psz);
+        if (RT_FAILURE(rc))
+            rcExit = RTEXITCODE_FAILURE;
+
+        /* next */
+        rc = RTGetOpt(&GetState, &ValueUnion);
+    }
+    if (rc != 0)
+        rcExit = RTGetOptPrintError(rc, &ValueUnion);
+
+    return rcExit;
+}
+
+
+int main(int argc, char **argv)
+{
+    int rc = RTR3InitExe(argc, &argv, 0);
+    if (RT_FAILURE(rc))
+        return RTMsgInitFailure(rc);
+    return RTCmdMkDir(argc, argv);
+}
+
diff --git a/src/VBox/Runtime/tools/RTNtDbgHelp.cpp b/src/VBox/Runtime/tools/RTNtDbgHelp.cpp
index f48a068..2d5bb94 100644
--- a/src/VBox/Runtime/tools/RTNtDbgHelp.cpp
+++ b/src/VBox/Runtime/tools/RTNtDbgHelp.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/win/windows.h>
 #include <Dbghelp.h>
 
@@ -50,9 +50,9 @@
 #include <iprt/ldrlazy.h>
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /**
  * Debug module record.
  *
@@ -73,9 +73,9 @@ typedef struct RTNTDBGHELPMOD
 typedef RTNTDBGHELPMOD *PRTNTDBGHELPMOD;
 
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 /** Verbosity level. */
 static int          g_iOptVerbose = 1;
 
@@ -361,7 +361,7 @@ int main(int argc, char **argv)
 
 
             case 'V':
-                RTPrintf("$Revision: 118412 $");
+                RTPrintf("$Revision: 118769 $");
                 break;
 
             case 'h':
diff --git a/src/VBox/Runtime/tools/RTRm.cpp b/src/VBox/Runtime/tools/RTRm.cpp
index 5443e61..5168c18 100644
--- a/src/VBox/Runtime/tools/RTRm.cpp
+++ b/src/VBox/Runtime/tools/RTRm.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/path.h>
 #include <iprt/err.h>
 #include <iprt/initterm.h>
@@ -42,4 +42,3 @@ int main(int argc, char **argv)
     return RTPathRmCmd(argc, argv);
 }
 
-
diff --git a/src/VBox/Runtime/tools/RTRmDir.cpp b/src/VBox/Runtime/tools/RTRmDir.cpp
new file mode 100644
index 0000000..04976cd
--- /dev/null
+++ b/src/VBox/Runtime/tools/RTRmDir.cpp
@@ -0,0 +1,359 @@
+/* $Id: RTRmDir.cpp $ */
+/** @file
+ * IPRT - Removes directory.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/path.h>
+#include <iprt/err.h>
+#include <iprt/initterm.h>
+#include <iprt/message.h>
+
+#include <iprt/vfs.h>
+#include <iprt/string.h>
+#include <iprt/stream.h>
+#include <iprt/getopt.h>
+#include <iprt/buildconfig.h>
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+typedef struct RTCMDRMDIROPTS
+{
+    /** -v, --verbose */
+    bool        fVerbose;
+    /** -p, --parents */
+    bool        fParents;
+    /** Don't fail if directories that aren't empty. */
+    bool        fIgnoreNotEmpty;
+    /** Don't fail a directory doesn't exist (i.e. has already been removed). */
+    bool        fIgnoreNonExisting;
+    /** Whether to always use the VFS chain API (for testing). */
+    bool        fAlwaysUseChainApi;
+} RTCMDRMDIROPTS;
+
+
+/**
+ * Create one directory and any missing parent directories.
+ *
+ * @returns exit code
+ * @param   pOpts               The mkdir option.
+ * @param   pszDir              The path to the new directory.
+ */
+static int rtCmdRmDirOneWithParents(RTCMDRMDIROPTS const *pOpts, const char *pszDir)
+{
+    /* We need a copy we can work with here. */
+    char *pszCopy = RTStrDup(pszDir);
+    if (!pszCopy)
+        return RTMsgErrorExitFailure("Out of string memory!");
+
+    int rc;
+    if (!pOpts->fAlwaysUseChainApi && !RTVfsChainIsSpec(pszDir) )
+    {
+        size_t cchCopy = strlen(pszCopy);
+        do
+        {
+            rc = RTDirRemove(pszCopy);
+            if (RT_SUCCESS(rc))
+            {
+                if (pOpts->fVerbose)
+                    RTPrintf("%s\n", pszCopy);
+            }
+            else if ((rc == VERR_PATH_NOT_FOUND || rc == VERR_FILE_NOT_FOUND) && pOpts->fIgnoreNonExisting)
+                rc = VINF_SUCCESS;
+            else
+            {
+                if ((rc == VERR_DIR_NOT_EMPTY || rc == VERR_SHARING_VIOLATION) && pOpts->fIgnoreNotEmpty)
+                    rc = VINF_SUCCESS;
+                else
+                    RTMsgError("Failed to remove directory '%s': %Rrc", pszCopy, rc);
+                break;
+            }
+
+            /* Strip off a component. */
+            while (cchCopy > 0 && RTPATH_IS_SLASH(pszCopy[cchCopy - 1]))
+                cchCopy--;
+            while (cchCopy > 0 && !RTPATH_IS_SLASH(pszCopy[cchCopy - 1]))
+                cchCopy--;
+            while (cchCopy > 0 && RTPATH_IS_SLASH(pszCopy[cchCopy - 1]))
+                cchCopy--;
+            pszCopy[cchCopy] = '\0';
+        } while (cchCopy > 0);
+    }
+    else
+    {
+        /*
+         * Strip the final path element from the pszDir spec.
+         */
+        char       *pszFinalPath;
+        char       *pszSpec;
+        uint32_t    offError;
+        rc = RTVfsChainSplitOffFinalPath(pszCopy, &pszSpec, &pszFinalPath, &offError);
+        if (RT_SUCCESS(rc))
+        {
+            /*
+             * Open the root director/whatever.
+             */
+            RTERRINFOSTATIC ErrInfo;
+            RTVFSDIR hVfsBaseDir;
+            if (pszSpec)
+            {
+                rc = RTVfsChainOpenDir(pszSpec, 0 /*fOpen*/, &hVfsBaseDir, &offError, RTErrInfoInitStatic(&ErrInfo));
+                if (RT_FAILURE(rc))
+                    RTVfsChainMsgError("RTVfsChainOpenDir", pszSpec, rc, offError, &ErrInfo.Core);
+                else if (!pszFinalPath)
+                    pszFinalPath = RTStrEnd(pszSpec, RTSTR_MAX);
+            }
+            else if (!RTPathStartsWithRoot(pszFinalPath))
+            {
+                rc = RTVfsDirOpenNormal(".", 0 /*fOpen*/, &hVfsBaseDir);
+                if (RT_FAILURE(rc))
+                    RTMsgError("Failed to open '.' (for %s): %Rrc", rc, pszFinalPath);
+            }
+            else
+            {
+                char *pszRoot = pszFinalPath;
+                pszFinalPath = RTPathSkipRootSpec(pszFinalPath);
+                char const chSaved = *pszFinalPath;
+                *pszFinalPath = '\0';
+                rc = RTVfsDirOpenNormal(pszRoot, 0 /*fOpen*/, &hVfsBaseDir);
+                *pszFinalPath = chSaved;
+                if (RT_FAILURE(rc))
+                    RTMsgError("Failed to open root dir for '%s': %Rrc", rc, pszRoot);
+            }
+
+            /*
+             * Walk the path component by component, starting at the end.
+             */
+            if (RT_SUCCESS(rc))
+            {
+                size_t cchFinalPath = strlen(pszFinalPath);
+                while (RT_SUCCESS(rc) && cchFinalPath > 0)
+                {
+                    rc = RTVfsDirRemoveDir(hVfsBaseDir, pszFinalPath, 0 /*fFlags*/);
+                    if (RT_SUCCESS(rc))
+                    {
+                        if (pOpts->fVerbose)
+                            RTPrintf("%s\n", pszCopy);
+                    }
+                    else if ((rc == VERR_PATH_NOT_FOUND || rc == VERR_FILE_NOT_FOUND) && pOpts->fIgnoreNonExisting)
+                        rc = VINF_SUCCESS;
+                    else
+                    {
+                        if ((rc == VERR_DIR_NOT_EMPTY || rc == VERR_SHARING_VIOLATION) && pOpts->fIgnoreNotEmpty)
+                            rc = VINF_SUCCESS;
+                        else if (pszSpec)
+                            RTMsgError("Failed to remove directory '%s:%s': %Rrc", pszSpec, pszFinalPath, rc);
+                        else
+                            RTMsgError("Failed to remove directory '%s': %Rrc", pszFinalPath, rc);
+                        break;
+                    }
+
+                    /* Strip off a component. */
+                    while (cchFinalPath > 0 && RTPATH_IS_SLASH(pszFinalPath[cchFinalPath - 1]))
+                        cchFinalPath--;
+                    while (cchFinalPath > 0 && !RTPATH_IS_SLASH(pszFinalPath[cchFinalPath - 1]))
+                        cchFinalPath--;
+                    while (cchFinalPath > 0 && RTPATH_IS_SLASH(pszFinalPath[cchFinalPath - 1]))
+                        cchFinalPath--;
+                    pszFinalPath[cchFinalPath] = '\0';
+                }
+
+                RTVfsDirRelease(hVfsBaseDir);
+            }
+        }
+        else
+            RTVfsChainMsgError("RTVfsChainOpenParentDir", pszCopy, rc, offError, NULL);
+    }
+    RTStrFree(pszCopy);
+    return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
+}
+
+
+/**
+ * Removes one directory.
+ *
+ * @returns exit code
+ * @param   pOpts               The mkdir option.
+ * @param   pszDir              The path to the new directory.
+ */
+static RTEXITCODE rtCmdRmDirOne(RTCMDRMDIROPTS const *pOpts, const char *pszDir)
+{
+    int rc;
+    if (!pOpts->fAlwaysUseChainApi && !RTVfsChainIsSpec(pszDir) )
+        rc = RTDirRemove(pszDir);
+    else
+    {
+        RTVFSDIR        hVfsDir;
+        const char     *pszChild;
+        uint32_t        offError;
+        RTERRINFOSTATIC ErrInfo;
+        rc = RTVfsChainOpenParentDir(pszDir, 0 /*fOpen*/, &hVfsDir, &pszChild, &offError, RTErrInfoInitStatic(&ErrInfo));
+        if (RT_SUCCESS(rc))
+        {
+            rc = RTVfsDirRemoveDir(hVfsDir, pszChild, 0 /*fFlags*/);
+            RTVfsDirRelease(hVfsDir);
+        }
+        else
+            return RTVfsChainMsgErrorExitFailure("RTVfsChainOpenParentDir", pszDir, rc, offError, &ErrInfo.Core);
+    }
+    if (RT_SUCCESS(rc))
+    {
+        if (pOpts->fVerbose)
+            RTPrintf("%s\n", pszDir);
+        return RTEXITCODE_SUCCESS;
+    }
+    if ((rc == VERR_DIR_NOT_EMPTY || rc == VERR_SHARING_VIOLATION) && pOpts->fIgnoreNotEmpty)
+        return RTEXITCODE_SUCCESS; /** @todo be verbose about this? */
+    if ((rc == VERR_PATH_NOT_FOUND || rc == VERR_FILE_NOT_FOUND) && pOpts->fIgnoreNonExisting)
+        return RTEXITCODE_SUCCESS; /** @todo be verbose about this? */
+    return RTMsgErrorExitFailure("Failed to remove '%s': %Rrc", pszDir, rc);
+}
+
+
+static RTEXITCODE RTCmdRmDir(unsigned cArgs,  char **papszArgs)
+{
+    /*
+     * Parse the command line.
+     */
+    static const RTGETOPTDEF s_aOptions[] =
+    {
+        /* operations */
+        { "--parents",                  'p', RTGETOPT_REQ_NOTHING },
+        { "--ignore-fail-on-non-empty", 'F', RTGETOPT_REQ_NOTHING },
+        { "--ignore-non-existing",      'E', RTGETOPT_REQ_NOTHING },
+        { "--always-use-vfs-chain-api", 'A', RTGETOPT_REQ_NOTHING },
+        { "--verbose",                  'v', RTGETOPT_REQ_NOTHING },
+    };
+
+    RTGETOPTSTATE GetState;
+    int rc = RTGetOptInit(&GetState, cArgs, papszArgs, s_aOptions, RT_ELEMENTS(s_aOptions), 1,
+                          RTGETOPTINIT_FLAGS_OPTS_FIRST);
+    if (RT_FAILURE(rc))
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTGetOpt failed: %Rrc", rc);
+
+    RTCMDRMDIROPTS Opts;
+    Opts.fVerbose               = false;
+    Opts.fParents               = false;
+    Opts.fIgnoreNotEmpty        = false;
+    Opts.fIgnoreNonExisting     = false;
+    Opts.fAlwaysUseChainApi     = false;
+
+    RTGETOPTUNION ValueUnion;
+    while (   (rc = RTGetOpt(&GetState, &ValueUnion)) != 0
+           && rc != VINF_GETOPT_NOT_OPTION)
+    {
+        switch (rc)
+        {
+            case 'p':
+                Opts.fParents = true;
+                break;
+
+            case 'v':
+                Opts.fVerbose = true;
+                break;
+
+            case 'A':
+                Opts.fAlwaysUseChainApi = true;
+                break;
+
+            case 'E':
+                Opts.fIgnoreNonExisting = true;
+                break;
+
+            case 'F':
+                Opts.fIgnoreNotEmpty = true;
+                break;
+
+            case 'h':
+                RTPrintf("Usage: %s [options] <dir> [..]\n"
+                         "\n"
+                         "Removes empty directories.\n"
+                         "\n"
+                         "Options:\n"
+                         "  -p, --parent\n"
+                         "      Remove specified parent directories too.\n"
+                         "  -F, --ignore-fail-on-non-empty\n"
+                         "      Do not fail if a directory is not empty, just ignore it.\n"
+                         "      This is really handy with the -p option.\n"
+                         "  -E, --ignore-non-existing\n"
+                         "      Do not fail if a specified directory is not there.\n"
+                         "  -v, --verbose\n"
+                         "      Tell which directories get remove.\n"
+                         "  -A, --always-use-vfs-chain-api\n"
+                         "      Always use the VFS API.\n"
+                         , papszArgs[0]);
+                return RTEXITCODE_SUCCESS;
+
+            case 'V':
+                RTPrintf("%sr%d\n", RTBldCfgVersion(), RTBldCfgRevision());
+                return RTEXITCODE_SUCCESS;
+
+            default:
+                return RTGetOptPrintError(rc, &ValueUnion);
+        }
+    }
+
+
+    /*
+     * No files means error.
+     */
+    if (rc != VINF_GETOPT_NOT_OPTION)
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "No directories specified.\n");
+
+    /*
+     * Work thru the specified dirs.
+     */
+    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
+    while (rc == VINF_GETOPT_NOT_OPTION)
+    {
+        if (Opts.fParents)
+            rc = rtCmdRmDirOneWithParents(&Opts, ValueUnion.psz);
+        else
+            rc = rtCmdRmDirOne(&Opts, ValueUnion.psz);
+        if (RT_FAILURE(rc))
+            rcExit = RTEXITCODE_FAILURE;
+
+        /* next */
+        rc = RTGetOpt(&GetState, &ValueUnion);
+    }
+    if (rc != 0)
+        rcExit = RTGetOptPrintError(rc, &ValueUnion);
+
+    return rcExit;
+}
+
+
+int main(int argc, char **argv)
+{
+    int rc = RTR3InitExe(argc, &argv, 0);
+    if (RT_FAILURE(rc))
+        return RTMsgInitFailure(rc);
+    return RTCmdRmDir(argc, argv);
+}
+
diff --git a/src/VBox/Runtime/tools/RTShutdown.cpp b/src/VBox/Runtime/tools/RTShutdown.cpp
index 806ed1b..44e4222 100644
--- a/src/VBox/Runtime/tools/RTShutdown.cpp
+++ b/src/VBox/Runtime/tools/RTShutdown.cpp
@@ -24,9 +24,10 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/system.h>
 
 #include <iprt/buildconfig.h>
diff --git a/src/VBox/Runtime/tools/RTSignTool.cpp b/src/VBox/Runtime/tools/RTSignTool.cpp
index 9f0b034..2157a6e 100644
--- a/src/VBox/Runtime/tools/RTSignTool.cpp
+++ b/src/VBox/Runtime/tools/RTSignTool.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/assert.h>
 #include <iprt/buildconfig.h>
 #include <iprt/err.h>
@@ -59,9 +59,9 @@
 #endif
 
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /** Help detail levels. */
 typedef enum RTSIGNTOOLHELP
 {
@@ -124,9 +124,9 @@ typedef struct SHOWEXEPKCS7 : public SIGNTOOLPKCS7EXE
 typedef SHOWEXEPKCS7 *PSHOWEXEPKCS7;
 
 
-/*******************************************************************************
-*   Internal Functions                                                         *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 static RTEXITCODE HandleHelp(int cArgs, char **papszArgs);
 static RTEXITCODE HelpHelp(PRTSTREAM pStrm, RTSIGNTOOLHELP enmLevel);
 static RTEXITCODE HandleVersion(int cArgs, char **papszArgs);
@@ -2592,4 +2592,3 @@ int main(int argc, char **argv)
     return RTEXITCODE_SYNTAX;
 }
 
-
diff --git a/src/VBox/Runtime/tools/RTTar.cpp b/src/VBox/Runtime/tools/RTTar.cpp
index 9dddc25..3d9df3d 100644
--- a/src/VBox/Runtime/tools/RTTar.cpp
+++ b/src/VBox/Runtime/tools/RTTar.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/zip.h>
 #include <iprt/err.h>
 #include <iprt/initterm.h>
diff --git a/src/VBox/Runtime/tools/RTUnzip.cpp b/src/VBox/Runtime/tools/RTUnzip.cpp
index 8adb011..ef242c8 100644
--- a/src/VBox/Runtime/tools/RTUnzip.cpp
+++ b/src/VBox/Runtime/tools/RTUnzip.cpp
@@ -25,9 +25,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/zip.h>
 #include <iprt/err.h>
 #include <iprt/initterm.h>
diff --git a/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp b/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp
index 24f521b..e89ceab 100644
--- a/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp
+++ b/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp
@@ -429,6 +429,8 @@ RTR3DECL(int)  RTErrConvertFromWin32(unsigned uNativeCode)
 
         case NTE_BAD_ALGID:         return VERR_CR_PKIX_UNKNOWN_DIGEST_TYPE;
 
+        case ERROR_SERVICE_DOES_NOT_EXIST: return VERR_NOT_FOUND;
+
 #ifndef STATUS_ELEVATION_REQUIRED
 # define STATUS_ELEVATION_REQUIRED 0xc000042c
 #endif
diff --git a/src/VBox/Storage/.scm-settings b/src/VBox/Storage/.scm-settings
new file mode 100644
index 0000000..aff6efe
--- /dev/null
+++ b/src/VBox/Storage/.scm-settings
@@ -0,0 +1,19 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the storage library.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+/testcase/*.vd:  --treat-as .c
+
diff --git a/src/VBox/Storage/DMG.cpp b/src/VBox/Storage/DMG.cpp
index 7707a92..514bfa9 100644
--- a/src/VBox/Storage/DMG.cpp
+++ b/src/VBox/Storage/DMG.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/Debug/VDDbgIoLog.cpp b/src/VBox/Storage/Debug/VDDbgIoLog.cpp
index edaf4b8..d9ff2f7 100644
--- a/src/VBox/Storage/Debug/VDDbgIoLog.cpp
+++ b/src/VBox/Storage/Debug/VDDbgIoLog.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/ISCSI.cpp b/src/VBox/Storage/ISCSI.cpp
index eb0f913..fda4d27 100644
--- a/src/VBox/Storage/ISCSI.cpp
+++ b/src/VBox/Storage/ISCSI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1618,6 +1618,7 @@ static int iscsiLogin(PISCSIIMAGE pImage)
                                     csg = 1;
                                     nsg = 3;
                                     substate = 0;
+                                    break;
                                 }
                                 rc = VERR_PARSE_ERROR;
                                 break;
@@ -1706,7 +1707,7 @@ static int iscsiLogin(PISCSIIMAGE pImage)
         iscsiTransportClose(pImage);
         pImage->state = ISCSISTATE_FREE;
     }
-    else if (RT_FAILURE(rc))
+    else if (rc == VINF_SUCCESS)
         pImage->state = ISCSISTATE_NORMAL;
 
     return rc;
@@ -2160,7 +2161,7 @@ static int iscsiSendPDU(PISCSIIMAGE pImage, PISCSIREQ paReq, uint32_t cnReq,
  *
  * @returns VBOX status
  * @param   pImage      The iSCSI connection state to be used.
- * @param   itt         The initiator task tag. 
+ * @param   itt         The initiator task tag.
  * @param   paRes       Pointer to array of iSCSI response sections.
  * @param   cnRes       Number of valid iSCSI response sections in the array.
  * @param   fRecvFlags  PDU receive flags.
diff --git a/src/VBox/Storage/Parallels.cpp b/src/VBox/Storage/Parallels.cpp
index 3de5399..9107423 100644
--- a/src/VBox/Storage/Parallels.cpp
+++ b/src/VBox/Storage/Parallels.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/QCOW.cpp b/src/VBox/Storage/QCOW.cpp
index af0e7c1..cfe601f 100644
--- a/src/VBox/Storage/QCOW.cpp
+++ b/src/VBox/Storage/QCOW.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/QED.cpp b/src/VBox/Storage/QED.cpp
index b360705..77b3bbd 100644
--- a/src/VBox/Storage/QED.cpp
+++ b/src/VBox/Storage/QED.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/RAW.cpp b/src/VBox/Storage/RAW.cpp
index 5afba5b..1c9b93b 100644
--- a/src/VBox/Storage/RAW.cpp
+++ b/src/VBox/Storage/RAW.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -355,6 +355,7 @@ static DECLCALLBACK(int) rawProbe(const char *pszFilename, PVDINTERFACE pVDIfsDi
                 /* Note that there are ISO images smaller than 1 MB; it is impossible to distinguish
                  * between raw floppy and CD images based on their size (and cannot be reliably done
                  * based on contents, either).
+                 * bird: Not sure what this comment is mumbling about, the test below is 32KB not 1MB.
                  */
                 if (cbFile % 2048)
                     rc = VERR_VD_RAW_SIZE_MODULO_2048;
@@ -406,8 +407,6 @@ static DECLCALLBACK(int) rawOpen(const char *pszFilename, unsigned uOpenFlags,
     int rc;
     PRAWIMAGE pImage;
 
-    NOREF(enmType); /**< @todo r=klaus make use of the type info. */
-
     /* Check open flags. All valid flags are supported. */
     AssertReturn(!(uOpenFlags & ~VD_OPEN_FLAGS_MASK), VERR_INVALID_PARAMETER);
     AssertReturn((VALID_PTR(pszFilename) && *pszFilename), VERR_INVALID_PARAMETER);
diff --git a/src/VBox/Storage/VCICache.cpp b/src/VBox/Storage/VCICache.cpp
index c222e9b..406a833 100644
--- a/src/VBox/Storage/VCICache.cpp
+++ b/src/VBox/Storage/VCICache.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VD.cpp b/src/VBox/Storage/VD.cpp
index 07bd547..e544763 100644
--- a/src/VBox/Storage/VD.cpp
+++ b/src/VBox/Storage/VD.cpp
@@ -4907,7 +4907,7 @@ static void vdFixupPCHSGeometry(PVDGEOMETRY pPCHS, uint64_t cbSize)
 }
 
 /**
- * internal: adjust PCHS geometry
+ * internal: adjust LCHS geometry
  */
 static void vdFixupLCHSGeometry(PVDGEOMETRY pLCHS, uint64_t cbSize)
 {
@@ -7158,6 +7158,7 @@ VBOXDDU_DECL(int) VDMerge(PVDISK pDisk, unsigned nImageFrom,
             /* Merge child state into parent. This means writing all blocks
              * which are allocated in the image up to the source image to the
              * destination image. */
+            unsigned uProgressOld = 0;
             uint64_t uOffset = 0;
             uint64_t cbRemaining = cbSize;
             do
@@ -7212,16 +7213,20 @@ VBOXDDU_DECL(int) VDMerge(PVDISK pDisk, unsigned nImageFrom,
                 uOffset += cbThisRead;
                 cbRemaining -= cbThisRead;
 
-                if (pIfProgress && pIfProgress->pfnProgress)
+                unsigned uProgressNew = uOffset * 99 / cbSize;
+                if (uProgressNew != uProgressOld)
                 {
-                    /** @todo r=klaus: this can update the progress to the same
-                     * percentage over and over again if the image format makes
-                     * relatively small increments. */
-                    rc = pIfProgress->pfnProgress(pIfProgress->Core.pvUser,
-                                                  uOffset * 99 / cbSize);
-                    if (RT_FAILURE(rc))
-                        break;
+                    uProgressOld = uProgressNew;
+
+                    if (pIfProgress && pIfProgress->pfnProgress)
+                    {
+                        rc = pIfProgress->pfnProgress(pIfProgress->Core.pvUser,
+                                                      uProgressOld);
+                        if (RT_FAILURE(rc))
+                            break;
+                    }
                 }
+
             } while (uOffset < cbSize);
 
             /* In case we set up a "write proxy" image above we must clear
diff --git a/src/VBox/Storage/VDBackends.h b/src/VBox/Storage/VDBackends.h
index 28c44ce..c2b0592 100644
--- a/src/VBox/Storage/VDBackends.h
+++ b/src/VBox/Storage/VDBackends.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VDI.cpp b/src/VBox/Storage/VDI.cpp
index 224d1e6..0372438 100644
--- a/src/VBox/Storage/VDI.cpp
+++ b/src/VBox/Storage/VDI.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VDICore.h b/src/VBox/Storage/VDICore.h
index 47e40a6..6332e5d 100644
--- a/src/VBox/Storage/VDICore.h
+++ b/src/VBox/Storage/VDICore.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VDIfVfs.cpp b/src/VBox/Storage/VDIfVfs.cpp
index eee9567..b56cc4a 100644
--- a/src/VBox/Storage/VDIfVfs.cpp
+++ b/src/VBox/Storage/VDIfVfs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VDIfVfs2.cpp b/src/VBox/Storage/VDIfVfs2.cpp
index 07bc39e..f7fd6a2 100644
--- a/src/VBox/Storage/VDIfVfs2.cpp
+++ b/src/VBox/Storage/VDIfVfs2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VDPlugin.cpp b/src/VBox/Storage/VDPlugin.cpp
index 8115093..3256097 100644
--- a/src/VBox/Storage/VDPlugin.cpp
+++ b/src/VBox/Storage/VDPlugin.cpp
@@ -53,6 +53,7 @@ typedef struct VDPLUGIN
 /** Pointer to a plugin structure. */
 typedef VDPLUGIN *PVDPLUGIN;
 
+
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
@@ -109,6 +110,7 @@ static PCVDFILTERBACKEND *g_apFilterBackends = NULL;
 static PRTLDRMOD g_pahFilterBackendPlugins = NULL;
 #endif
 
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
@@ -640,15 +642,15 @@ DECLHIDDEN(int) vdPluginLoadFromPath(const char *pszPath)
         return VERR_NO_STR_MEMORY;
 
     PRTDIRENTRYEX pPluginDirEntry = NULL;
-    PRTDIR pPluginDir = NULL;
+    RTDIR hPluginDir;
     size_t cbPluginDirEntry = sizeof(RTDIRENTRYEX);
-    int rc = RTDirOpenFiltered(&pPluginDir, pszPluginFilter, RTDIRFILTER_WINNT, 0);
+    int rc = RTDirOpenFiltered(&hPluginDir, pszPluginFilter, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     if (RT_SUCCESS(rc))
     {
         pPluginDirEntry = (PRTDIRENTRYEX)RTMemAllocZ(sizeof(RTDIRENTRYEX));
         if (pPluginDirEntry)
         {
-            while (   (rc = RTDirReadEx(pPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK))
+            while (   (rc = RTDirReadEx(hPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK))
                    != VERR_NO_MORE_FILES)
             {
                 char *pszPluginPath = NULL;
@@ -664,7 +666,7 @@ DECLHIDDEN(int) vdPluginLoadFromPath(const char *pszPath)
                         break;
                     }
                     /* Retry. */
-                    rc = RTDirReadEx(pPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+                    rc = RTDirReadEx(hPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
                     if (RT_FAILURE(rc))
                         break;
                 }
@@ -692,7 +694,7 @@ DECLHIDDEN(int) vdPluginLoadFromPath(const char *pszPath)
         else
             rc = VERR_NO_MEMORY;
 
-        RTDirClose(pPluginDir);
+        RTDirClose(hPluginDir);
     }
     else
     {
@@ -763,15 +765,15 @@ DECLHIDDEN(int) vdPluginUnloadFromPath(const char *pszPath)
         return VERR_NO_STR_MEMORY;
 
     PRTDIRENTRYEX pPluginDirEntry = NULL;
-    PRTDIR pPluginDir = NULL;
+    RTDIR hPluginDir;
     size_t cbPluginDirEntry = sizeof(RTDIRENTRYEX);
-    int rc = RTDirOpenFiltered(&pPluginDir, pszPluginFilter, RTDIRFILTER_WINNT, 0);
+    int rc = RTDirOpenFiltered(&hPluginDir, pszPluginFilter, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     if (RT_SUCCESS(rc))
     {
         pPluginDirEntry = (PRTDIRENTRYEX)RTMemAllocZ(sizeof(RTDIRENTRYEX));
         if (pPluginDirEntry)
         {
-            while ((rc = RTDirReadEx(pPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK)) != VERR_NO_MORE_FILES)
+            while ((rc = RTDirReadEx(hPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK)) != VERR_NO_MORE_FILES)
             {
                 char *pszPluginPath = NULL;
 
@@ -786,7 +788,7 @@ DECLHIDDEN(int) vdPluginUnloadFromPath(const char *pszPath)
                         break;
                     }
                     /* Retry. */
-                    rc = RTDirReadEx(pPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
+                    rc = RTDirReadEx(hPluginDir, pPluginDirEntry, &cbPluginDirEntry, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
                     if (RT_FAILURE(rc))
                         break;
                 }
@@ -814,7 +816,7 @@ DECLHIDDEN(int) vdPluginUnloadFromPath(const char *pszPath)
         else
             rc = VERR_NO_MEMORY;
 
-        RTDirClose(pPluginDir);
+        RTDirClose(hPluginDir);
     }
     else
     {
@@ -822,7 +824,7 @@ DECLHIDDEN(int) vdPluginUnloadFromPath(const char *pszPath)
          * files matching, while on other platforms enumerating the
          * files below fails. Either way: no plugins. */
     }
-    
+
     if (rc == VERR_NO_MORE_FILES)
         rc = VINF_SUCCESS;
     RTStrFree(pszPluginFilter);
diff --git a/src/VBox/Storage/VDVfs.cpp b/src/VBox/Storage/VDVfs.cpp
index 9257827..8362ddb 100644
--- a/src/VBox/Storage/VDVfs.cpp
+++ b/src/VBox/Storage/VDVfs.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -589,3 +589,133 @@ VBOXDDU_DECL(int) VDCreateVfsFileFromDisk(PVDISK pDisk, uint32_t fFlags,
     return rc;
 }
 
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnValidate}
+ */
+static DECLCALLBACK(int) vdVfsChain_Validate(PCRTVFSCHAINELEMENTREG pProviderReg, PRTVFSCHAINSPEC pSpec,
+                                             PRTVFSCHAINELEMSPEC pElement, uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(pProviderReg, pSpec);
+
+    /*
+     * Basic checks.
+     */
+    if (pElement->enmTypeIn != RTVFSOBJTYPE_INVALID)
+        return VERR_VFS_CHAIN_MUST_BE_FIRST_ELEMENT;
+    if (   pElement->enmType != RTVFSOBJTYPE_FILE
+        && pElement->enmType != RTVFSOBJTYPE_IO_STREAM)
+        return VERR_VFS_CHAIN_ONLY_FILE_OR_IOS;
+
+    if (pElement->cArgs < 1)
+        return VERR_VFS_CHAIN_AT_LEAST_ONE_ARG;
+    if (pElement->cArgs > 2)
+        return VERR_VFS_CHAIN_AT_MOST_TWO_ARGS;
+
+    /*
+     * Parse the flag if present, save in pElement->uProvider.
+     */
+    uint32_t fFlags = (pSpec->fOpenFile & RTFILE_O_ACCESS_MASK) == RTFILE_O_READ
+                    ? VD_OPEN_FLAGS_READONLY : VD_OPEN_FLAGS_NORMAL;
+    if (pElement->cArgs > 1)
+    {
+        const char *psz = pElement->paArgs[1].psz;
+        if (*psz)
+        {
+            if (   !strcmp(psz, "ro")
+                || !strcmp(psz, "r"))
+            {
+                fFlags &= ~(VD_OPEN_FLAGS_READONLY | VD_OPEN_FLAGS_NORMAL);
+                fFlags |= VD_OPEN_FLAGS_READONLY;
+            }
+            else if (!strcmp(psz, "rw"))
+            {
+                fFlags &= ~(VD_OPEN_FLAGS_READONLY | VD_OPEN_FLAGS_NORMAL);
+                fFlags |= VD_OPEN_FLAGS_NORMAL;
+            }
+            else
+            {
+                *poffError = pElement->paArgs[0].offSpec;
+                return RTErrInfoSet(pErrInfo, VERR_VFS_CHAIN_INVALID_ARGUMENT, "Expected 'ro' or 'rw' as argument");
+            }
+        }
+    }
+
+    pElement->uProvider = fFlags;
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnInstantiate}
+ */
+static DECLCALLBACK(int) vdVfsChain_Instantiate(PCRTVFSCHAINELEMENTREG pProviderReg, PCRTVFSCHAINSPEC pSpec,
+                                                PCRTVFSCHAINELEMSPEC pElement, RTVFSOBJ hPrevVfsObj,
+                                                PRTVFSOBJ phVfsObj, uint32_t *poffError, PRTERRINFO pErrInfo)
+{
+    RT_NOREF(pProviderReg, pSpec, poffError, pErrInfo);
+    AssertReturn(hPrevVfsObj == NIL_RTVFSOBJ, VERR_VFS_CHAIN_IPE);
+
+    /* Determin the format. */
+    char  *pszFormat = NULL;
+    VDTYPE enmType   = VDTYPE_INVALID;
+    int rc = VDGetFormat(NULL, NULL, pElement->paArgs[0].psz, &pszFormat, &enmType);
+    if (RT_SUCCESS(rc))
+    {
+        PVDISK pDisk = NULL;
+        rc = VDCreate(NULL, enmType, &pDisk);
+        if (RT_SUCCESS(rc))
+        {
+            rc = VDOpen(pDisk, pszFormat, pElement->paArgs[0].psz, (uint32_t)pElement->uProvider, NULL);
+            if (RT_SUCCESS(rc))
+            {
+                RTVFSFILE hVfsFile;
+                rc = VDCreateVfsFileFromDisk(pDisk, VD_VFSFILE_DESTROY_ON_RELEASE, &hVfsFile);
+                if (RT_SUCCESS(rc))
+                {
+                    RTStrFree(pszFormat);
+
+                    *phVfsObj = RTVfsObjFromFile(hVfsFile);
+                    RTVfsFileRelease(hVfsFile);
+
+                    if (*phVfsObj != NIL_RTVFSOBJ)
+                        return VINF_SUCCESS;
+                    return VERR_VFS_CHAIN_CAST_FAILED;
+                }
+            }
+            VDDestroy(pDisk);
+        }
+        RTStrFree(pszFormat);
+    }
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{RTVFSCHAINELEMENTREG,pfnCanReuseElement}
+ */
+static DECLCALLBACK(bool) vdVfsChain_CanReuseElement(PCRTVFSCHAINELEMENTREG pProviderReg,
+                                                     PCRTVFSCHAINSPEC pSpec, PCRTVFSCHAINELEMSPEC pElement,
+                                                     PCRTVFSCHAINSPEC pReuseSpec, PCRTVFSCHAINELEMSPEC pReuseElement)
+{
+    RT_NOREF(pProviderReg, pSpec, pElement, pReuseSpec, pReuseElement);
+    return false;
+}
+
+
+/** VFS chain element 'file'. */
+static RTVFSCHAINELEMENTREG g_rtVfsChainIsoFsVolReg =
+{
+    /* uVersion = */            RTVFSCHAINELEMENTREG_VERSION,
+    /* fReserved = */           0,
+    /* pszName = */             "vd",
+    /* ListEntry = */           { NULL, NULL },
+    /* pszHelp = */             "Opens a container image using the VD API.\n",
+    /* pfnValidate = */         vdVfsChain_Validate,
+    /* pfnInstantiate = */      vdVfsChain_Instantiate,
+    /* pfnCanReuseElement = */  vdVfsChain_CanReuseElement,
+    /* uEndMarker = */          RTVFSCHAINELEMENTREG_VERSION
+};
+
+RTVFSCHAIN_AUTO_REGISTER_ELEMENT_PROVIDER(&g_rtVfsChainIsoFsVolReg, rtVfsChainIsoFsVolReg);
+
diff --git a/src/VBox/Storage/VHD.cpp b/src/VBox/Storage/VHD.cpp
index fc29e05..15ed929 100644
--- a/src/VBox/Storage/VHD.cpp
+++ b/src/VBox/Storage/VHD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VHDX.cpp b/src/VBox/Storage/VHDX.cpp
index 6aac67c..7409ef8 100644
--- a/src/VBox/Storage/VHDX.cpp
+++ b/src/VBox/Storage/VHDX.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/VMDK.cpp b/src/VBox/Storage/VMDK.cpp
index 2abf726..24c6385 100644
--- a/src/VBox/Storage/VMDK.cpp
+++ b/src/VBox/Storage/VMDK.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -514,6 +514,7 @@ typedef struct VMDKRENAMESTATE
 /** Pointer to a VMDK rename state. */
 typedef VMDKRENAMESTATE *PVMDKRENAMESTATE;
 
+
 /*********************************************************************************************************************************
 *   Static Variables                                                                                                             *
 *********************************************************************************************************************************/
diff --git a/src/VBox/Storage/testcase/BuiltinTests.h b/src/VBox/Storage/testcase/BuiltinTests.h
index f177557..7640912 100644
--- a/src/VBox/Storage/testcase/BuiltinTests.h
+++ b/src/VBox/Storage/testcase/BuiltinTests.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2014-2016 Oracle Corporation
+ * Copyright (C) 2014-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDDefs.h b/src/VBox/Storage/testcase/VDDefs.h
index d09fe97..655f1bc 100644
--- a/src/VBox/Storage/testcase/VDDefs.h
+++ b/src/VBox/Storage/testcase/VDDefs.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDIoBackend.cpp b/src/VBox/Storage/testcase/VDIoBackend.cpp
index 3732a9f..d4478ad 100644
--- a/src/VBox/Storage/testcase/VDIoBackend.cpp
+++ b/src/VBox/Storage/testcase/VDIoBackend.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDIoBackend.h b/src/VBox/Storage/testcase/VDIoBackend.h
index aeda18f..2675553 100644
--- a/src/VBox/Storage/testcase/VDIoBackend.h
+++ b/src/VBox/Storage/testcase/VDIoBackend.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDIoBackendMem.cpp b/src/VBox/Storage/testcase/VDIoBackendMem.cpp
index 9ac9c75..b03a41d 100644
--- a/src/VBox/Storage/testcase/VDIoBackendMem.cpp
+++ b/src/VBox/Storage/testcase/VDIoBackendMem.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDIoBackendMem.h b/src/VBox/Storage/testcase/VDIoBackendMem.h
index eb77450..717f99b 100644
--- a/src/VBox/Storage/testcase/VDIoBackendMem.h
+++ b/src/VBox/Storage/testcase/VDIoBackendMem.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDIoRnd.cpp b/src/VBox/Storage/testcase/VDIoRnd.cpp
index c8d097d..57d56d1 100644
--- a/src/VBox/Storage/testcase/VDIoRnd.cpp
+++ b/src/VBox/Storage/testcase/VDIoRnd.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDIoRnd.h b/src/VBox/Storage/testcase/VDIoRnd.h
index e875ede..4c40984 100644
--- a/src/VBox/Storage/testcase/VDIoRnd.h
+++ b/src/VBox/Storage/testcase/VDIoRnd.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDMemDisk.cpp b/src/VBox/Storage/testcase/VDMemDisk.cpp
index bab9f79..8255630 100644
--- a/src/VBox/Storage/testcase/VDMemDisk.cpp
+++ b/src/VBox/Storage/testcase/VDMemDisk.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDMemDisk.h b/src/VBox/Storage/testcase/VDMemDisk.h
index 58e02d6..815497a 100644
--- a/src/VBox/Storage/testcase/VDMemDisk.h
+++ b/src/VBox/Storage/testcase/VDMemDisk.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScript.cpp b/src/VBox/Storage/testcase/VDScript.cpp
index 1028d6d..d8158fb 100644
--- a/src/VBox/Storage/testcase/VDScript.cpp
+++ b/src/VBox/Storage/testcase/VDScript.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScript.h b/src/VBox/Storage/testcase/VDScript.h
index 3437640..fb7a1c6 100644
--- a/src/VBox/Storage/testcase/VDScript.h
+++ b/src/VBox/Storage/testcase/VDScript.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScriptAst.cpp b/src/VBox/Storage/testcase/VDScriptAst.cpp
index dd37be7..2bbd4e3 100644
--- a/src/VBox/Storage/testcase/VDScriptAst.cpp
+++ b/src/VBox/Storage/testcase/VDScriptAst.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScriptAst.h b/src/VBox/Storage/testcase/VDScriptAst.h
index 68e049d..03e230f 100644
--- a/src/VBox/Storage/testcase/VDScriptAst.h
+++ b/src/VBox/Storage/testcase/VDScriptAst.h
@@ -3,7 +3,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScriptChecker.cpp b/src/VBox/Storage/testcase/VDScriptChecker.cpp
index 81d7363..d95932f 100644
--- a/src/VBox/Storage/testcase/VDScriptChecker.cpp
+++ b/src/VBox/Storage/testcase/VDScriptChecker.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScriptInternal.h b/src/VBox/Storage/testcase/VDScriptInternal.h
index de9e9f2..b7ba84f 100644
--- a/src/VBox/Storage/testcase/VDScriptInternal.h
+++ b/src/VBox/Storage/testcase/VDScriptInternal.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScriptInterp.cpp b/src/VBox/Storage/testcase/VDScriptInterp.cpp
index 1948838..e47e257 100644
--- a/src/VBox/Storage/testcase/VDScriptInterp.cpp
+++ b/src/VBox/Storage/testcase/VDScriptInterp.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/VDScriptStack.h b/src/VBox/Storage/testcase/VDScriptStack.h
index 9331de3..9476a7f 100644
--- a/src/VBox/Storage/testcase/VDScriptStack.h
+++ b/src/VBox/Storage/testcase/VDScriptStack.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVD-2.cpp b/src/VBox/Storage/testcase/tstVD-2.cpp
index f7326bb..778fe4a 100644
--- a/src/VBox/Storage/testcase/tstVD-2.cpp
+++ b/src/VBox/Storage/testcase/tstVD-2.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVD.cpp b/src/VBox/Storage/testcase/tstVD.cpp
index 4d01610..3f72068 100644
--- a/src/VBox/Storage/testcase/tstVD.cpp
+++ b/src/VBox/Storage/testcase/tstVD.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDCompact.vd b/src/VBox/Storage/testcase/tstVDCompact.vd
index 15c796c..27bf1b2 100644
--- a/src/VBox/Storage/testcase/tstVDCompact.vd
+++ b/src/VBox/Storage/testcase/tstVDCompact.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDCopy.vd b/src/VBox/Storage/testcase/tstVDCopy.vd
index eba1e6d..373088d 100644
--- a/src/VBox/Storage/testcase/tstVDCopy.vd
+++ b/src/VBox/Storage/testcase/tstVDCopy.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDDiscard.vd b/src/VBox/Storage/testcase/tstVDDiscard.vd
index 3af7c10..95d37a4 100644
--- a/src/VBox/Storage/testcase/tstVDDiscard.vd
+++ b/src/VBox/Storage/testcase/tstVDDiscard.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDFill.cpp b/src/VBox/Storage/testcase/tstVDFill.cpp
index ad4c529..d49a3c4 100644
--- a/src/VBox/Storage/testcase/tstVDFill.cpp
+++ b/src/VBox/Storage/testcase/tstVDFill.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2016 Oracle Corporation
+ * Copyright (C) 2016-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDIo.cpp b/src/VBox/Storage/testcase/tstVDIo.cpp
index 77940e1..a4a4e66 100644
--- a/src/VBox/Storage/testcase/tstVDIo.cpp
+++ b/src/VBox/Storage/testcase/tstVDIo.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDIo.vd b/src/VBox/Storage/testcase/tstVDIo.vd
index 3eae4f6..ac164e8 100644
--- a/src/VBox/Storage/testcase/tstVDIo.vd
+++ b/src/VBox/Storage/testcase/tstVDIo.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2013 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDMultBackends.vd b/src/VBox/Storage/testcase/tstVDMultBackends.vd
index fa3f9c3..e3137b1 100644
--- a/src/VBox/Storage/testcase/tstVDMultBackends.vd
+++ b/src/VBox/Storage/testcase/tstVDMultBackends.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2013 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDResize.vd b/src/VBox/Storage/testcase/tstVDResize.vd
index c57e3eb..3b6d9e2 100644
--- a/src/VBox/Storage/testcase/tstVDResize.vd
+++ b/src/VBox/Storage/testcase/tstVDResize.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2013 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDShareable.vd b/src/VBox/Storage/testcase/tstVDShareable.vd
index 6fdf032..3f46b75 100644
--- a/src/VBox/Storage/testcase/tstVDShareable.vd
+++ b/src/VBox/Storage/testcase/tstVDShareable.vd
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/tstVDSnap.cpp b/src/VBox/Storage/testcase/tstVDSnap.cpp
index 6474dac..9faa3fd 100644
--- a/src/VBox/Storage/testcase/tstVDSnap.cpp
+++ b/src/VBox/Storage/testcase/tstVDSnap.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/vbox-img.cpp b/src/VBox/Storage/testcase/vbox-img.cpp
index f8585d2..f6abf59 100644
--- a/src/VBox/Storage/testcase/vbox-img.cpp
+++ b/src/VBox/Storage/testcase/vbox-img.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1333,73 +1333,6 @@ static int handleInfo(HandlerArg *a)
 }
 
 
-static DECLCALLBACK(int) vboximgDvmRead(void *pvUser, uint64_t off, void *pvBuf, size_t cbRead)
-{
-    int rc = VINF_SUCCESS;
-    PVDISK pDisk = (PVDISK)pvUser;
-
-    /* Take shortcut if possible. */
-    if (   off % 512 == 0
-        && cbRead % 512 == 0)
-        rc = VDRead(pDisk, off, pvBuf, cbRead);
-    else
-    {
-        uint8_t *pbBuf = (uint8_t *)pvBuf;
-        uint8_t abBuf[512];
-
-        /* Unaligned access, make it aligned. */
-        if (off % 512 != 0)
-        {
-            uint64_t offAligned = off & ~(uint64_t)(512 - 1);
-            size_t cbToCopy = 512 - (off - offAligned);
-            rc = VDRead(pDisk, offAligned, abBuf, 512);
-            if (RT_SUCCESS(rc))
-            {
-                memcpy(pbBuf, &abBuf[off - offAligned], cbToCopy);
-                pbBuf  += cbToCopy;
-                off    += cbToCopy;
-                cbRead -= cbToCopy;
-            }
-        }
-
-        if (   RT_SUCCESS(rc)
-            && (cbRead & ~(uint64_t)(512 - 1)))
-        {
-            size_t cbReadAligned = cbRead & ~(uint64_t)(512 - 1);
-
-            Assert(!(off % 512));
-            rc = VDRead(pDisk, off, pbBuf, cbReadAligned);
-            if (RT_SUCCESS(rc))
-            {
-                pbBuf  += cbReadAligned;
-                off    += cbReadAligned;
-                cbRead -= cbReadAligned;
-            }
-        }
-
-        if (   RT_SUCCESS(rc)
-            && cbRead)
-        {
-            Assert(cbRead < 512);
-            Assert(!(off % 512));
-
-            rc = VDRead(pDisk, off, abBuf, 512);
-            if (RT_SUCCESS(rc))
-                memcpy(pbBuf, abBuf, cbRead);
-        }
-    }
-
-    return rc;
-}
-
-
-static DECLCALLBACK(int) vboximgDvmWrite(void *pvUser, uint64_t off, const void *pvBuf, size_t cbWrite)
-{
-    PVDISK pDisk = (PVDISK)pvUser;
-    return VDWrite(pDisk, off, pvBuf, cbWrite);
-}
-
-
 static DECLCALLBACK(int) vboximgQueryBlockStatus(void *pvUser, uint64_t off,
                                                  uint64_t cb, bool *pfAllocated)
 {
@@ -1488,29 +1421,27 @@ static int handleCompact(HandlerArg *a)
     if (   RT_SUCCESS(rc)
         && fFilesystemAware)
     {
-        uint64_t cbDisk = 0;
-
-        cbDisk = VDGetSize(pDisk, 0);
-        if (cbDisk > 0)
+        RTVFSFILE hVfsDisk;
+        rc = VDCreateVfsFileFromDisk(pDisk, 0 /*fFlags*/, &hVfsDisk);
+        if (RT_SUCCESS(rc))
         {
-            rc = RTDvmCreate(&hDvm, vboximgDvmRead, vboximgDvmWrite, cbDisk, 512,
-                             0 /* fFlags*/, pDisk);
+            rc = RTDvmCreate(&hDvm, hVfsDisk, 512 /*cbSector*/, 0 /*fFlags*/);
+            RTVfsFileRelease(hVfsDisk);
             if (RT_SUCCESS(rc))
             {
                 rc = RTDvmMapOpen(hDvm);
                 if (   RT_SUCCESS(rc)
-                    && RTDvmMapGetValidVolumes(hDvm))
+                    && RTDvmMapGetValidVolumes(hDvm) > 0)
                 {
-                    RTDVMVOLUME hVol;
-
                     /* Get all volumes and set the block query status callback. */
+                    RTDVMVOLUME hVol;
                     rc = RTDvmMapQueryFirstVolume(hDvm, &hVol);
                     AssertRC(rc);
 
-                    do
+                    while (RT_SUCCESS(rc))
                     {
                         RTVFSFILE hVfsFile;
-                        rc = RTDvmVolumeCreateVfsFile(hVol, &hVfsFile);
+                        rc = RTDvmVolumeCreateVfsFile(hVol, RTFILE_O_READWRITE, &hVfsFile);
                         if (RT_FAILURE(rc))
                             break;
 
@@ -1548,7 +1479,7 @@ static int handleCompact(HandlerArg *a)
                          */
                         RTDvmVolumeRelease(hVol);
                         hVol = hVolNext;
-                    } while (RT_SUCCESS(rc));
+                    }
 
                     if (rc == VERR_DVM_MAP_NO_VOLUME)
                         rc = VINF_SUCCESS;
@@ -1574,10 +1505,7 @@ static int handleCompact(HandlerArg *a)
                 errorRuntime("Error creating the volume manager: %Rrf (%Rrc)\n", rc, rc);
         }
         else
-        {
-            rc = VERR_INVALID_STATE;
-            errorRuntime("Error while getting the disk size\n");
-        }
+            errorRuntime("Error while creating VFS interface for the disk: %Rrf (%Rrc)\n", rc, rc);
     }
 
     if (RT_SUCCESS(rc))
diff --git a/src/VBox/Storage/testcase/vbox-img.rc b/src/VBox/Storage/testcase/vbox-img.rc
index 55d93d0..78a9507 100644
--- a/src/VBox/Storage/testcase/vbox-img.rc
+++ b/src/VBox/Storage/testcase/vbox-img.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/Storage/testcase/vdkeystoremgr.cpp b/src/VBox/Storage/testcase/vdkeystoremgr.cpp
new file mode 100644
index 0000000..273f8f0
--- /dev/null
+++ b/src/VBox/Storage/testcase/vdkeystoremgr.cpp
@@ -0,0 +1,280 @@
+/* $Id: vdkeystoremgr.cpp $ */
+/** @file
+ * Keystore utility for debugging.
+ */
+
+/*
+ * Copyright (C) 2016-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <VBox/vd.h>
+#include <VBox/err.h>
+#include <VBox/version.h>
+#include <iprt/initterm.h>
+#include <iprt/base64.h>
+#include <iprt/buildconfig.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+#include <iprt/uuid.h>
+#include <iprt/stream.h>
+#include <iprt/message.h>
+#include <iprt/getopt.h>
+#include <iprt/assert.h>
+
+#include "../VDKeyStore.h"
+
+/** command handler argument */
+struct HandlerArg
+{
+    int argc;
+    char **argv;
+};
+
+static const char *g_pszProgName = "";
+static void printUsage(PRTSTREAM pStrm)
+{
+    RTStrmPrintf(pStrm,
+                 "Usage: %s\n"
+                 "   create       --password <password>\n"
+                 "                --cipher <cipher>\n"
+                 "                --dek <dek in base64>\n"
+                 "\n"
+                 "   dump         --keystore <keystore data in base64>\n"
+                 "                [--password <password to decrypt the DEK inside]\n",
+                 g_pszProgName);
+}
+
+static void showLogo(PRTSTREAM pStrm)
+{
+    static bool s_fShown; /* show only once */
+
+    if (!s_fShown)
+    {
+        RTStrmPrintf(pStrm, VBOX_PRODUCT " VD Keystore Mgr " VBOX_VERSION_STRING "\n"
+                     "(C) 2016-" VBOX_C_YEAR " " VBOX_VENDOR "\n"
+                     "All rights reserved.\n"
+                     "\n");
+        s_fShown = true;
+    }
+}
+
+/**
+ * Print a usage synopsis and the syntax error message.
+ */
+static int errorSyntax(const char *pszFormat, ...)
+{
+    va_list args;
+    showLogo(g_pStdErr); // show logo even if suppressed
+    va_start(args, pszFormat);
+    RTStrmPrintf(g_pStdErr, "\nSyntax error: %N\n", pszFormat, &args);
+    va_end(args);
+    printUsage(g_pStdErr);
+    return 1;
+}
+
+static int errorRuntime(const char *pszFormat, ...)
+{
+    va_list args;
+
+    va_start(args, pszFormat);
+    RTMsgErrorV(pszFormat, args);
+    va_end(args);
+    return 1;
+}
+
+static DECLCALLBACK(int) handleCreate(HandlerArg *pArgs)
+{
+    const char *pszPassword = NULL;
+    const char *pszCipher = NULL;
+    const char *pszDek = NULL;
+
+    /* Parse the command line. */
+    static const RTGETOPTDEF s_aOptions[] =
+    {
+        { "--password", 'p', RTGETOPT_REQ_STRING },
+        { "--cipher"  , 'c', RTGETOPT_REQ_STRING },
+        { "--dek",      'd', RTGETOPT_REQ_STRING }
+    };
+
+    int ch;
+    RTGETOPTUNION ValueUnion;
+    RTGETOPTSTATE GetState;
+    RTGetOptInit(&GetState, pArgs->argc, pArgs->argv, s_aOptions, RT_ELEMENTS(s_aOptions), 0, 0 /* fFlags */);
+    while ((ch = RTGetOpt(&GetState, &ValueUnion)))
+    {
+        switch (ch)
+        {
+            case 'p':   // --password
+                pszPassword = ValueUnion.psz;
+                break;
+            case 'c':   // --cipher
+                pszCipher = ValueUnion.psz;
+                break;
+            case 'd':   // --dek
+                pszDek = ValueUnion.psz;
+                break;
+            default:
+                ch = RTGetOptPrintError(ch, &ValueUnion);
+                printUsage(g_pStdErr);
+                return ch;
+        }
+    }
+
+    /* Check for mandatory parameters. */
+    if (!pszPassword)
+        return errorSyntax("Mandatory --password option missing\n");
+    if (!pszCipher)
+        return errorSyntax("Mandatory --cipher option missing\n");
+    if (!pszDek)
+        return errorSyntax("Mandatory --dek option missing\n");
+
+    /* Get the size of the decoded DEK. */
+    ssize_t cbDekDec = RTBase64DecodedSize(pszDek, NULL);
+    if (cbDekDec == -1)
+        return errorRuntime("The encoding of the base64 DEK is bad\n");
+
+    uint8_t *pbDek = (uint8_t *)RTMemAllocZ(cbDekDec);
+    size_t cbDek = cbDekDec;
+    if (!pbDek)
+        return errorRuntime("Failed to allocate memory for the DEK\n");
+
+    int rc = RTBase64Decode(pszDek, pbDek, cbDek, &cbDek, NULL);
+    if (RT_SUCCESS(rc))
+    {
+        char *pszKeyStoreEnc = NULL;
+        rc = vdKeyStoreCreate(pszPassword, pbDek, cbDek, pszCipher, &pszKeyStoreEnc);
+        if (RT_SUCCESS(rc))
+        {
+            RTPrintf("Successfully created keystore\n"
+                     "Keystore (base64): \n"
+                     "%s\n", pszKeyStoreEnc);
+            RTMemFree(pszKeyStoreEnc);
+        }
+        else
+            errorRuntime("Failed to create keystore with %Rrc\n", rc);
+    }
+    else
+        errorRuntime("Failed to decode the DEK with %Rrc\n", rc);
+
+    RTMemFree(pbDek);
+    return VERR_NOT_IMPLEMENTED;
+}
+
+static DECLCALLBACK(int) handleDump(HandlerArg *pArgs)
+{
+    return VERR_NOT_IMPLEMENTED;
+}
+
+int main(int argc, char *argv[])
+{
+    int exitcode = 0;
+
+    int rc = RTR3InitExe(argc, &argv, RTR3INIT_FLAGS_STANDALONE_APP);
+    if (RT_FAILURE(rc))
+        return RTMsgInitFailure(rc);
+
+    g_pszProgName = RTPathFilename(argv[0]);
+
+    bool fShowLogo = false;
+    int  iCmd      = 1;
+    int  iCmdArg;
+
+    /* global options */
+    for (int i = 1; i < argc || argc <= iCmd; i++)
+    {
+        if (    argc <= iCmd
+            ||  !strcmp(argv[i], "help")
+            ||  !strcmp(argv[i], "-?")
+            ||  !strcmp(argv[i], "-h")
+            ||  !strcmp(argv[i], "-help")
+            ||  !strcmp(argv[i], "--help"))
+        {
+            showLogo(g_pStdOut);
+            printUsage(g_pStdOut);
+            return 0;
+        }
+
+        if (   !strcmp(argv[i], "-v")
+            || !strcmp(argv[i], "-version")
+            || !strcmp(argv[i], "-Version")
+            || !strcmp(argv[i], "--version"))
+        {
+            /* Print version number, and do nothing else. */
+            RTPrintf("%sr%d\n", VBOX_VERSION_STRING, RTBldCfgRevision());
+            return 0;
+        }
+
+        if (   !strcmp(argv[i], "--nologo")
+            || !strcmp(argv[i], "-nologo")
+            || !strcmp(argv[i], "-q"))
+        {
+            /* suppress the logo */
+            fShowLogo = false;
+            iCmd++;
+        }
+        else
+        {
+            break;
+        }
+    }
+
+    iCmdArg = iCmd + 1;
+
+    if (fShowLogo)
+        showLogo(g_pStdOut);
+
+    /*
+     * All registered command handlers
+     */
+    static const struct
+    {
+        const char *command;
+        DECLR3CALLBACKMEMBER(int, handler, (HandlerArg *a));
+    } s_commandHandlers[] =
+    {
+        { "create",       handleCreate       },
+        { "dump",         handleDump         },
+        { NULL,           NULL               }
+    };
+
+    HandlerArg handlerArg = { 0, NULL };
+    int commandIndex;
+    for (commandIndex = 0; s_commandHandlers[commandIndex].command != NULL; commandIndex++)
+    {
+        if (!strcmp(s_commandHandlers[commandIndex].command, argv[iCmd]))
+        {
+            handlerArg.argc = argc - iCmdArg;
+            handlerArg.argv = &argv[iCmdArg];
+
+            exitcode = s_commandHandlers[commandIndex].handler(&handlerArg);
+            break;
+        }
+    }
+    if (!s_commandHandlers[commandIndex].command)
+    {
+        errorSyntax("Invalid command '%s'", argv[iCmd]);
+        return 1;
+    }
+
+    return exitcode;
+}
+
+/* dummy stub for RuntimeR3 */
+#ifndef RT_OS_WINDOWS
+RTDECL(bool) RTAssertShouldPanic(void)
+{
+    return true;
+}
+#endif
diff --git a/src/VBox/Storage/testcase/vdkeystoremgr.rc b/src/VBox/Storage/testcase/vdkeystoremgr.rc
new file mode 100644
index 0000000..0f8b940
--- /dev/null
+++ b/src/VBox/Storage/testcase/vdkeystoremgr.rc
@@ -0,0 +1,51 @@
+/* $Id: vdkeystoremgr.rc $ */
+/** @file
+ * vdkeystoremgr - Resource file containing version info and icon.
+ */
+
+/*
+ * Copyright (C) 2016-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <windows.h>
+#include <VBox/version.h>
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION      VBOX_RC_FILE_VERSION
+  PRODUCTVERSION   VBOX_RC_FILE_VERSION
+  FILEFLAGSMASK    VS_FFI_FILEFLAGSMASK
+  FILEFLAGS        VBOX_RC_FILE_FLAGS
+  FILEOS           VBOX_RC_FILE_OS
+  FILETYPE         VBOX_RC_TYPE_APP
+  FILESUBTYPE      VFT2_UNKNOWN
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904b0" // Lang=US English, CharSet=Unicode
+    BEGIN
+      VALUE "FileDescription",  "VirtualBox VD Keystore utility\0"
+      VALUE "InternalName",     "vdkeystoremgr\0"
+      VALUE "OriginalFilename", "vdkeystoremgr.exe\0"
+      VALUE "CompanyName",      VBOX_RC_COMPANY_NAME
+      VALUE "FileVersion",      VBOX_RC_FILE_VERSION_STR
+      VALUE "LegalCopyright",   VBOX_RC_LEGAL_COPYRIGHT
+      VALUE "ProductName",      VBOX_RC_PRODUCT_NAME_STR
+      VALUE "ProductVersion",   VBOX_RC_PRODUCT_VERSION_STR
+      VBOX_RC_MORE_STRINGS
+    END
+  END
+  BLOCK "VarFileInfo"
+  BEGIN
+    VALUE "Translation", 0x409, 1200
+  END
+END
diff --git a/src/VBox/VMM/.scm-settings b/src/VBox/VMM/.scm-settings
new file mode 100644
index 0000000..9f82c13
--- /dev/null
+++ b/src/VBox/VMM/.scm-settings
@@ -0,0 +1,22 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the VMM.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/VMMAll/IEMAllInstructionsPython.py: --license-ose-dual
+
+--filter-out-files /testcase/dev.tar.gz
+
diff --git a/src/VBox/VMM/Makefile.kmk b/src/VBox/VMM/Makefile.kmk
index 5f33ea8..7ff4e36 100644
--- a/src/VBox/VMM/Makefile.kmk
+++ b/src/VBox/VMM/Makefile.kmk
@@ -327,6 +327,9 @@ VMMR3/SSM.cpp_DEFS +=	\
 	KBUILD_TARGET=\"$(KBUILD_TARGET)\" \
 	KBUILD_TARGET_ARCH=\"$(KBUILD_TARGET_ARCH)\"
 
+ifdef VBOX_WITH_GCC_SANITIZER
+ VMMR3/PGMPool.cpp_CXXFLAGS.linux += -fno-sanitize=address
+endif
 
 #ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
 # ifeq ($(KBUILD_HOST), linux)
diff --git a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
index ae46c29..e5f8fb4 100644
--- a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
+++ b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
@@ -412,9 +412,10 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Ia32MtrrPhysBaseN(PVMCPU pVCpu, uint
     Assert(pRange->uValue == (idMsr - 0x200) / 2);
     RT_NOREF_PV(pVCpu); RT_NOREF_PV(idMsr); RT_NOREF_PV(uRawValue); RT_NOREF_PV(pRange);
 
-    if ((uValue & 0xff) >= 7)
+    uint8_t uType = uValue & 0xff;
+    if ((uType >= 7) || (uType == 2) || (uType == 3))
     {
-        Log(("CPUM: Invalid type set writing MTRR PhysBase MSR %#x: %#llx (%#llx)\n", idMsr, uValue, uValue & 0xff));
+        Log(("CPUM: Invalid type set writing MTRR PhysBase MSR %#x: %#llx (%#llx)\n", idMsr, uValue, uType));
         return VERR_CPUM_RAISE_GP_0;
     }
 
@@ -489,7 +490,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Ia32MtrrFixed(PVMCPU pVCpu, uint32_t
     for (uint32_t cShift = 0; cShift < 63; cShift += 8)
     {
         uint8_t uType = (uint8_t)(uValue >> cShift);
-        if (uType >= 7)
+        if ((uType >= 7) || (uType == 2) || (uType == 3))
         {
             Log(("CPUM: Invalid MTRR type at %u:%u in fixed range (%#x/%s): %#llx (%#llx)\n",
                  cShift + 7, cShift, idMsr, pRange->szName, uValue, uType));
@@ -515,9 +516,10 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Ia32MtrrDefType(PVMCPU pVCpu, uint32
 {
     RT_NOREF_PV(idMsr); RT_NOREF_PV(pRange); RT_NOREF_PV(uRawValue);
 
-    if ((uValue & 0xff) >= 7)
+    uint8_t uType = uValue & 0xff;
+    if ((uType >= 7) || (uType == 2) || (uType == 3))
     {
-        Log(("CPUM: Invalid MTRR default type value on %s: %#llx (%#llx)\n", pRange->szName, uValue, uValue & 0xff));
+        Log(("CPUM: Invalid MTRR default type value on %s: %#llx (%#llx)\n", pRange->szName, uValue, uType));
         return VERR_CPUM_RAISE_GP_0;
     }
 
@@ -539,6 +541,19 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32Pat(PVMCPU pVCpu, uint32_t idMsr
 static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Ia32Pat(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue)
 {
     RT_NOREF_PV(idMsr); RT_NOREF_PV(pRange); RT_NOREF_PV(uRawValue);
+
+    for (uint32_t cShift = 0; cShift < 63; cShift += 8)
+    {
+        /* Check all eight bits because the top 5 bits of each byte are reserved. */
+        uint8_t uType = (uint8_t)(uValue >> cShift);
+        if ((uType >= 8) || (uType == 2) || (uType == 3))
+        {
+            Log(("CPUM: Invalid PAT type at %u:%u in IA32_PAT: %#llx (%#llx)\n",
+                 cShift + 7, cShift, uValue, uType));
+            return VERR_CPUM_RAISE_GP_0;
+        }
+    }
+
     pVCpu->cpum.s.Guest.msrPAT = uValue;
     return VINF_SUCCESS;
 }
@@ -1441,21 +1456,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Amd64Efer(PVMCPU pVCpu, uint32_t idM
     if (RT_FAILURE(rc))
         return VERR_CPUM_RAISE_GP_0;
 
-    pVCpu->cpum.s.Guest.msrEFER = uValidatedEfer;
-
-    /* AMD64 Architecture Programmer's Manual: 15.15 TLB Control; flush the TLB
-       if MSR_K6_EFER_NXE, MSR_K6_EFER_LME or MSR_K6_EFER_LMA are changed. */
-    if (   (uOldEfer                    & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA))
-        != (pVCpu->cpum.s.Guest.msrEFER & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA)))
-    {
-        /// @todo PGMFlushTLB(pVCpu, cr3, true /*fGlobal*/);
-        HMFlushTLB(pVCpu);
-
-        /* Notify PGM about NXE changes. */
-        if (   (uOldEfer                    & MSR_K6_EFER_NXE)
-            != (pVCpu->cpum.s.Guest.msrEFER & MSR_K6_EFER_NXE))
-            PGMNotifyNxeChanged(pVCpu, !(uOldEfer & MSR_K6_EFER_NXE));
-    }
+    CPUMSetGuestMsrEferNoCheck(pVCpu, uOldEfer, uValidatedEfer);
     return VINF_SUCCESS;
 }
 
@@ -6103,6 +6104,36 @@ VMMDECL(uint64_t) CPUMGetGuestScalableBusFrequency(PVM pVM)
 
 
 /**
+ * Sets the guest EFER MSR without performing any additional checks.
+ *
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
+ * @param   uOldEfer    The previous EFER MSR value.
+ * @param   uValidEfer  The new, validated EFER MSR value.
+ *
+ * @remarks One would normally call CPUMQueryValidatedGuestEfer before calling this
+ *          function to change the EFER in order to perform an EFER transition.
+ */
+VMMDECL(void) CPUMSetGuestMsrEferNoCheck(PVMCPU pVCpu, uint64_t uOldEfer, uint64_t uValidEfer)
+{
+    pVCpu->cpum.s.Guest.msrEFER = uValidEfer;
+
+    /* AMD64 Architecture Programmer's Manual: 15.15 TLB Control; flush the TLB
+       if MSR_K6_EFER_NXE, MSR_K6_EFER_LME or MSR_K6_EFER_LMA are changed. */
+    if (   (uOldEfer                    & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA))
+        != (pVCpu->cpum.s.Guest.msrEFER & (MSR_K6_EFER_NXE | MSR_K6_EFER_LME | MSR_K6_EFER_LMA)))
+    {
+        /// @todo PGMFlushTLB(pVCpu, cr3, true /*fGlobal*/);
+        HMFlushTLB(pVCpu);
+
+        /* Notify PGM about NXE changes. */
+        if (   (uOldEfer                    & MSR_K6_EFER_NXE)
+            != (pVCpu->cpum.s.Guest.msrEFER & MSR_K6_EFER_NXE))
+            PGMNotifyNxeChanged(pVCpu, !(uOldEfer & MSR_K6_EFER_NXE));
+    }
+}
+
+
+/**
  * Validates an EFER MSR write.
  *
  * @returns VBox status code.
diff --git a/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp b/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
index 6efe009..570e1e5 100644
--- a/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
+++ b/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
@@ -2560,6 +2560,7 @@ VMM_INT_DECL(bool) CPUMCanSvmNstGstTakePhysIntr(PCCPUMCTX pCtx)
 #else
     Assert(CPUMIsGuestInSvmNestedHwVirtMode(pCtx));
     Assert(pCtx->hwvirt.svm.fGif);
+    Assert(!pCtx->hwvirt.svm.fHMCachedVmcb);
 
     PCSVMVMCBCTRL pVmcbCtrl = &pCtx->hwvirt.svm.CTX_SUFF(pVmcb)->ctrl;
     X86EFLAGS fEFlags;
@@ -2627,9 +2628,10 @@ VMM_INT_DECL(uint8_t) CPUMGetSvmNstGstInterrupt(PCCPUMCTX pCtx)
 /**
  * Restores the host-state from the host-state save area as part of a \#VMEXIT.
  *
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        The guest-CPU context.
  */
-VMM_INT_DECL(void) CPUMSvmVmExitRestoreHostState(PCPUMCTX pCtx)
+VMM_INT_DECL(void) CPUMSvmVmExitRestoreHostState(PVMCPU pVCpu, PCPUMCTX pCtx)
 {
     /*
      * Reload the guest's "host state".
@@ -2641,10 +2643,10 @@ VMM_INT_DECL(void) CPUMSvmVmExitRestoreHostState(PCPUMCTX pCtx)
     pCtx->ds         = pHostState->ds;
     pCtx->gdtr       = pHostState->gdtr;
     pCtx->idtr       = pHostState->idtr;
-    pCtx->msrEFER    = pHostState->uEferMsr;
-    pCtx->cr0        = pHostState->uCr0 | X86_CR0_PE;
+    CPUMSetGuestMsrEferNoCheck(pVCpu, pCtx->msrEFER, pHostState->uEferMsr);
+    CPUMSetGuestCR0(pVCpu, pHostState->uCr0 | X86_CR0_PE);
     pCtx->cr3        = pHostState->uCr3;
-    pCtx->cr4        = pHostState->uCr4;
+    CPUMSetGuestCR4(pVCpu, pHostState->uCr4);
     pCtx->rflags     = pHostState->rflags;
     pCtx->rflags.Bits.u1VM = 0;
     pCtx->rip        = pHostState->uRip;
diff --git a/src/VBox/VMM/VMMAll/HMSVMAll.cpp b/src/VBox/VMM/VMMAll/HMSVMAll.cpp
index df225b0..16de78a 100644
--- a/src/VBox/VMM/VMMAll/HMSVMAll.cpp
+++ b/src/VBox/VMM/VMMAll/HMSVMAll.cpp
@@ -335,36 +335,39 @@ VMM_INT_DECL(bool) HMSvmIsIOInterceptActive(void *pvIoBitmap, uint16_t u16Port,
  * in IEM).
  *
  * @param   pVCpu           The cross context virtual CPU structure.
- * @param   pVmcbNstGst     Pointer to the nested-guest VM control block.
+ * @param   pCtx            Pointer to the guest-CPU context.
  *
  * @sa      hmR0SvmVmRunCacheVmcb.
  */
-VMM_INT_DECL(void) HMSvmNstGstVmExitNotify(PVMCPU pVCpu, PSVMVMCB pVmcbNstGst)
+VMM_INT_DECL(void) HMSvmNstGstVmExitNotify(PVMCPU pVCpu, PCPUMCTX pCtx)
 {
     /*
      * Restore the nested-guest VMCB fields which have been modified for executing
      * the nested-guest under SVM R0.
      */
-    PSVMNESTEDVMCBCACHE pNstGstVmcbCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
-    if (pNstGstVmcbCache->fValid)
+    if (pCtx->hwvirt.svm.fHMCachedVmcb)
     {
-        PSVMVMCBCTRL      pVmcbNstGstCtrl  = &pVmcbNstGst->ctrl;
-        PSVMVMCBSTATESAVE pVmcbNstGstState = &pVmcbNstGst->guest;
+        PSVMVMCB            pVmcbNstGst      = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
+        PSVMVMCBCTRL        pVmcbNstGstCtrl  = &pVmcbNstGst->ctrl;
+        PSVMVMCBSTATESAVE   pVmcbNstGstState = &pVmcbNstGst->guest;
+        PSVMNESTEDVMCBCACHE pNstGstVmcbCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
+
         pVmcbNstGstCtrl->u16InterceptRdCRx        = pNstGstVmcbCache->u16InterceptRdCRx;
         pVmcbNstGstCtrl->u16InterceptWrCRx        = pNstGstVmcbCache->u16InterceptWrCRx;
-        pVmcbNstGstCtrl->u16InterceptRdCRx        = pNstGstVmcbCache->u16InterceptRdCRx;
+        pVmcbNstGstCtrl->u16InterceptRdDRx        = pNstGstVmcbCache->u16InterceptRdDRx;
         pVmcbNstGstCtrl->u16InterceptWrDRx        = pNstGstVmcbCache->u16InterceptWrDRx;
         pVmcbNstGstCtrl->u32InterceptXcpt         = pNstGstVmcbCache->u32InterceptXcpt;
         pVmcbNstGstCtrl->u64InterceptCtrl         = pNstGstVmcbCache->u64InterceptCtrl;
         pVmcbNstGstState->u64CR3                  = pNstGstVmcbCache->u64CR3;
         pVmcbNstGstState->u64CR4                  = pNstGstVmcbCache->u64CR4;
+        pVmcbNstGstState->u64EFER                 = pNstGstVmcbCache->u64EFER;
         pVmcbNstGstCtrl->u64VmcbCleanBits         = pNstGstVmcbCache->u64VmcbCleanBits;
         pVmcbNstGstCtrl->u64IOPMPhysAddr          = pNstGstVmcbCache->u64IOPMPhysAddr;
         pVmcbNstGstCtrl->u64MSRPMPhysAddr         = pNstGstVmcbCache->u64MSRPMPhysAddr;
         pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking = pNstGstVmcbCache->fVIntrMasking;
         pVmcbNstGstCtrl->TLBCtrl                  = pNstGstVmcbCache->TLBCtrl;
         pVmcbNstGstCtrl->NestedPaging             = pNstGstVmcbCache->NestedPagingCtrl;
-        pNstGstVmcbCache->fValid = false;
+        pCtx->hwvirt.svm.fHMCachedVmcb = false;
     }
 }
 #endif
diff --git a/src/VBox/VMM/VMMAll/IEMAll.cpp b/src/VBox/VMM/VMMAll/IEMAll.cpp
index 882c635..c8f371f 100644
--- a/src/VBox/VMM/VMMAll/IEMAll.cpp
+++ b/src/VBox/VMM/VMMAll/IEMAll.cpp
@@ -3219,9 +3219,9 @@ DECLINLINE(uint64_t) iemOpcodeGetNextU64Jmp(PVMCPU pVCpu)
 
 /**
  * Gets the exception class for the specified exception vector.
- *  
+ *
  * @returns The class of the specified exception.
- * @param   uVector       The exception vector. 
+ * @param   uVector       The exception vector.
  */
 IEM_STATIC IEMXCPTCLASS iemGetXcptClass(uint8_t uVector)
 {
@@ -3250,8 +3250,8 @@ IEM_STATIC IEMXCPTCLASS iemGetXcptClass(uint8_t uVector)
 /**
  * Evaluates how to handle an exception caused during delivery of another event
  * (exception / interrupt).
- *  
- * @returns How to handle the recursive exception. 
+ *
+ * @returns How to handle the recursive exception.
  * @param   pVCpu               The cross context virtual CPU structure of the
  *                              calling thread.
  * @param   fPrevFlags          The flags of the previous event.
@@ -3338,7 +3338,7 @@ VMM_INT_DECL(IEMXCPTRAISE) IEMEvaluateRecursiveXcpt(PVMCPU pVCpu, uint32_t fPrev
 
     if (pfXcptRaiseInfo)
         *pfXcptRaiseInfo = fRaiseInfo;
-    return enmRaise; 
+    return enmRaise;
 }
 
 
@@ -6553,17 +6553,14 @@ IEM_STATIC void iemRegAddToRipAndClearRF(PVMCPU pVCpu, uint8_t cbInstr)
 
     AssertCompile(IEMMODE_16BIT == 0 && IEMMODE_32BIT == 1 && IEMMODE_64BIT == 2);
 #if ARCH_BITS >= 64
-    static uint64_t const s_aRipMasks[] = { UINT64_C(0xffff), UINT64_C(0xffffffff), UINT64_MAX };
+    static uint64_t const s_aRipMasks[] = { UINT64_C(0xffffffff), UINT64_C(0xffffffff), UINT64_MAX };
     Assert(pCtx->rip <= s_aRipMasks[(unsigned)pVCpu->iem.s.enmCpuMode]);
     pCtx->rip = (pCtx->rip + cbInstr) & s_aRipMasks[(unsigned)pVCpu->iem.s.enmCpuMode];
 #else
     if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT)
         pCtx->rip += cbInstr;
     else
-    {
-        static uint32_t const s_aEipMasks[] = { UINT32_C(0xffff), UINT32_MAX };
-        pCtx->eip = (pCtx->eip + cbInstr) & s_aEipMasks[(unsigned)pVCpu->iem.s.enmCpuMode];
-    }
+        pCtx->eip += cbInstr;
 #endif
 }
 
@@ -16170,7 +16167,8 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedVmrun(PVMCPU pVCpu, uint8_t cbInstr)
  */
 VMM_INT_DECL(VBOXSTRICTRC) IEMExecSvmVmexit(PVMCPU pVCpu, uint64_t uExitCode, uint64_t uExitInfo1, uint64_t uExitInfo2)
 {
-    return iemSvmVmexit(pVCpu, IEM_GET_CTX(pVCpu), uExitCode, uExitInfo1, uExitInfo2);
+    VBOXSTRICTRC rcStrict = iemSvmVmexit(pVCpu, IEM_GET_CTX(pVCpu), uExitCode, uExitInfo1, uExitInfo2);
+    return iemExecStatusCodeFiddling(pVCpu, rcStrict);
 }
 #endif /* VBOX_WITH_NESTED_HWVIRT */
 
diff --git a/src/VBox/VMM/VMMAll/IEMAllAImpl.asm b/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
index 14fba49..512f594 100644
--- a/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
+++ b/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
@@ -3,6 +3,7 @@
 ; IEM - Instruction Implementation in Assembly.
 ;
 
+;
 ; Copyright (C) 2011-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h b/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h
index fab118c..fc7d45c 100644
--- a/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h
+++ b/src/VBox/VMM/VMMAll/IEMAllCImplSvmInstr.cpp.h
@@ -71,6 +71,9 @@ DECLINLINE(VBOXSTRICTRC) iemSvmWorldSwitch(PVMCPU pVCpu, PCPUMCTX pCtx)
      * see comment in iemMemPageTranslateAndCheckAccess().
      */
     int rc = PGMChangeMode(pVCpu, pCtx->cr0 | X86_CR0_PE, pCtx->cr4, pCtx->msrEFER);
+#ifdef IN_RING3
+    Assert(rc != VINF_PGM_CHANGE_MODE);
+#endif
     AssertRCReturn(rc, rc);
 
     /* Inform CPUM (recompiler), can later be removed. */
@@ -201,10 +204,11 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmexit(PVMCPU pVCpu, PCPUMCTX pCtx, uint64_t uExit
         pVmcbCtrl->EventInject.n.u1Valid = 0;
 
         /*
-         * Notify HM in case the VMRUN was executed using SVM R0, HM would have modified some VMCB
-         * state that we need to restore on #VMEXIT before writing it back to guest memory.
+         * Notify HM in case the nested-guest was executed using hardware-assisted SVM (which
+         * would have modified some VMCB state) that need to be restored on #VMEXIT before
+         * writing the VMCB back to guest memory.
          */
-        HMSvmNstGstVmExitNotify(pVCpu, pVmcbNstGst);
+        HMSvmNstGstVmExitNotify(pVCpu, pCtx);
 
         /*
          * Write back the nested-guest's VMCB to its guest physical memory location.
@@ -238,7 +242,7 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmexit(PVMCPU pVCpu, PCPUMCTX pCtx, uint64_t uExit
             /*
              * Reload the guest's "host state".
              */
-            CPUMSvmVmExitRestoreHostState(pCtx);
+            CPUMSvmVmExitRestoreHostState(pVCpu, pCtx);
 
             /*
              * Update PGM, IEM and others of a world-switch.
@@ -287,9 +291,18 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmexit(PVMCPU pVCpu, PCPUMCTX pCtx, uint64_t uExit
  */
 IEM_STATIC VBOXSTRICTRC iemSvmVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, uint8_t cbInstr, RTGCPHYS GCPhysVmcb)
 {
-    PVM pVM = pVCpu->CTX_SUFF(pVM);
     LogFlow(("iemSvmVmrun\n"));
 
+#ifdef IN_RING0
+    /*
+     * Until PGM can handle switching the guest paging mode in ring-0,
+     * there's no point in trying to emulate VMRUN in ring-0 as we have
+     * to go back to ring-3 anyway, see @bugref{7243#c48}.
+     */
+    RT_NOREF(pVCpu, pCtx, cbInstr, GCPhysVmcb);
+    return VERR_IEM_ASPECT_NOT_IMPLEMENTED;
+#else
+
     /*
      * Cache the physical address of the VMCB for #VMEXIT exceptions.
      */
@@ -303,6 +316,7 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, uint8_t cbInstr
     /*
      * Read the guest VMCB state.
      */
+    PVM pVM = pVCpu->CTX_SUFF(pVM);
     int rc = PGMPhysSimpleReadGCPhys(pVM, pCtx->hwvirt.svm.CTX_SUFF(pVmcb), GCPhysVmcb, sizeof(SVMVMCB));
     if (RT_SUCCESS(rc))
     {
@@ -450,15 +464,21 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, uint8_t cbInstr
 
         /*
          * Continue validating guest-state and controls.
+         *
+         * We pass CR0 as 0 to CPUMQueryValidatedGuestEfer below to skip the illegal
+         * EFER.LME bit transition check. We pass the nested-guest's EFER as both the
+         * old and new EFER value to not have any guest EFER bits influence the new
+         * nested-guest EFER.
          */
-        /* EFER, CR0 and CR4. */
         uint64_t uValidEfer;
-        rc = CPUMQueryValidatedGuestEfer(pVM, pVmcbNstGst->u64CR0, pVmcbNstGst->u64EFER, pVmcbNstGst->u64EFER, &uValidEfer);
+        rc = CPUMQueryValidatedGuestEfer(pVM, 0 /* CR0 */, pVmcbNstGst->u64EFER, pVmcbNstGst->u64EFER, &uValidEfer);
         if (RT_FAILURE(rc))
         {
             Log(("iemSvmVmrun: EFER invalid uOldEfer=%#RX64 -> #VMEXIT\n", pVmcbNstGst->u64EFER));
             return iemSvmVmexit(pVCpu, pCtx, SVM_EXIT_INVALID, 0 /* uExitInfo1 */, 0 /* uExitInfo2 */);
         }
+
+        /* Validate paging and CPU mode bits. */
         bool const fSvm                     = RT_BOOL(uValidEfer & MSR_K6_EFER_SVME);
         bool const fLongModeSupported       = RT_BOOL(pVM->cpum.ro.GuestFeatures.fLongMode);
         bool const fLongModeEnabled         = RT_BOOL(uValidEfer & MSR_K6_EFER_LME);
@@ -545,7 +565,7 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, uint8_t cbInstr
         pCtx->rax        = pVmcbNstGst->u64RAX;
         pCtx->rsp        = pVmcbNstGst->u64RSP;
         pCtx->rip        = pVmcbNstGst->u64RIP;
-        pCtx->msrEFER    = uValidEfer;
+        CPUMSetGuestMsrEferNoCheck(pVCpu, pCtx->msrEFER, uValidEfer);
 
         /* Mask DR6, DR7 bits mandatory set/clear bits. */
         pCtx->dr[6] &= ~(X86_DR6_RAZ_MASK | X86_DR6_MBZ_MASK);
@@ -568,7 +588,10 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, uint8_t cbInstr
         if (rcStrict == VINF_SUCCESS)
         { /* likely */ }
         else if (RT_SUCCESS(rcStrict))
+        {
+            LogFlow(("iemSvmVmrun: iemSvmWorldSwitch returned %Rrc, setting passup status\n", VBOXSTRICTRC_VAL(rcStrict)));
             rcStrict = iemSetPassUpStatus(pVCpu, rcStrict);
+        }
         else
         {
             LogFlow(("iemSvmVmrun: iemSvmWorldSwitch unexpected failure. rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
@@ -625,20 +648,22 @@ IEM_STATIC VBOXSTRICTRC iemSvmVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, uint8_t cbInstr
             /** @todo NRIP: Software interrupts can only be pushed properly if we support
              *        NRIP for the nested-guest to calculate the instruction length
              *        below. */
-            LogFlow(("iemSvmVmrun: Injecting event: %04x:%08RX64 uVector=%#x enmType=%d uErrorCode=%u cr2=%#RX64\n",
-                     pCtx->cs.Sel, pCtx->rip, uVector, enmType, uErrorCode, pCtx->cr2));
+            LogFlow(("iemSvmVmrun: Injecting event: %04x:%08RX64 uVector=%#x enmType=%d uErrorCode=%u cr2=%#RX64 efer=%#RX64\n",
+                     pCtx->cs.Sel, pCtx->rip, uVector, enmType, uErrorCode, pCtx->cr2, pCtx->msrEFER));
             rcStrict = IEMInjectTrap(pVCpu, uVector, enmType, uErrorCode, pCtx->cr2, 0 /* cbInstr */);
         }
         else
             LogFlow(("iemSvmVmrun: Entering nested-guest: %04x:%08RX64 cr0=%#RX64 cr3=%#RX64 cr4=%#RX64 efer=%#RX64 efl=%#x\n",
                      pCtx->cs.Sel, pCtx->rip, pCtx->cr0, pCtx->cr3, pCtx->cr4, pCtx->msrEFER, pCtx->rflags.u64));
 
+        LogFlow(("iemSvmVmrun: returns %d\n", VBOXSTRICTRC_VAL(rcStrict)));
         return rcStrict;
     }
 
     /* Shouldn't really happen as the caller should've validated the physical address already. */
     Log(("iemSvmVmrun: Failed to read nested-guest VMCB at %#RGp (rc=%Rrc) -> #VMEXIT\n", GCPhysVmcb, rc));
     return rc;
+#endif
 }
 
 
diff --git a/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h b/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
index 423649b..316df98 100644
--- a/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
+++ b/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
@@ -4052,4 +4052,3 @@ IEM_STATIC const PFNIEMOP g_apfnVexMap1[] =
 AssertCompile(RT_ELEMENTS(g_apfnVexMap1) == 1024);
 /** @}  */
 
-
diff --git a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
index 22a95b5..bd59c2c 100644
--- a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
+++ b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
@@ -2523,8 +2523,7 @@ VMMDECL(VBOXSTRICTRC) PGMPhysRead(PVM pVM, RTGCPHYS GCPhys, void *pvBuf, size_t
                         PGM_PHYS_RW_DO_UPDATE_STRICT_RC(rcStrict, rcStrict2);
                     else
                     {
-                        if (enmOrigin == PGMACCESSORIGIN_DEVICE)    /* Questionable paranoia, should be removed. */
-                            memset(pvBuf, 0xff, cb);
+                        memset(pvBuf, 0xff, cb);
                         pgmUnlock(pVM);
                         return rcStrict2;
                     }
diff --git a/src/VBox/VMM/VMMR0/GMMR0.cpp b/src/VBox/VMM/VMMR0/GMMR0.cpp
index b234523..93f9491 100644
--- a/src/VBox/VMM/VMMR0/GMMR0.cpp
+++ b/src/VBox/VMM/VMMR0/GMMR0.cpp
@@ -31,7 +31,7 @@
  * by the #GMM_CHUNK_SIZE \#define.
  *
  * Each chunk is given an unique ID. Each page also has a unique ID. The
- * relation ship between the two IDs is:
+ * relationship between the two IDs is:
  * @code
  *  GMM_CHUNK_SHIFT = log2(GMM_CHUNK_SIZE / PAGE_SIZE);
  *  idPage = (idChunk << GMM_CHUNK_SHIFT) | iPage;
diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.cpp b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
index 4896828..a161f07 100644
--- a/src/VBox/VMM/VMMR0/HMSVMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
@@ -287,7 +287,6 @@ static FNSVMEXITHANDLER hmR0SvmExitShutdown;
 static FNSVMEXITHANDLER hmR0SvmExitUnexpected;
 static FNSVMEXITHANDLER hmR0SvmExitReadCRx;
 static FNSVMEXITHANDLER hmR0SvmExitWriteCRx;
-static FNSVMEXITHANDLER hmR0SvmExitSetPendingXcptUD;
 static FNSVMEXITHANDLER hmR0SvmExitMsr;
 static FNSVMEXITHANDLER hmR0SvmExitReadDRx;
 static FNSVMEXITHANDLER hmR0SvmExitWriteDRx;
@@ -315,7 +314,8 @@ static FNSVMEXITHANDLER hmR0SvmExitVmsave;
 static FNSVMEXITHANDLER hmR0SvmExitInvlpga;
 static FNSVMEXITHANDLER hmR0SvmExitVmrun;
 static FNSVMEXITHANDLER hmR0SvmNestedExitIret;
-static FNSVMEXITHANDLER hmR0SvmNestedExitVIntr;
+static FNSVMEXITHANDLER hmR0SvmNestedExitXcptDB;
+static FNSVMEXITHANDLER hmR0SvmNestedExitXcptBP;
 #endif
 /** @} */
 
@@ -324,6 +324,7 @@ static int hmR0SvmHandleExit(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PSVMTRANSIENT pSv
 static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient);
 #endif
 
+
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
@@ -901,6 +902,13 @@ static void hmR0SvmFlushTaggedTlb(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMVMCB pVmcb)
         fNewAsid = true;
     }
 
+#ifdef VBOX_WITH_NESTED_HWVIRT
+    if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
+        fNewAsid = true;
+#else
+    RT_NOREF(pCtx);
+#endif
+
     /* Set TLB flush state as checked until we return from the world switch. */
     ASMAtomicWriteBool(&pVCpu->hm.s.fCheckedTLBFlush, true);
 
@@ -931,24 +939,7 @@ static void hmR0SvmFlushTaggedTlb(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMVMCB pVmcb)
     }
     else
     {
-#ifdef VBOX_WITH_NESTED_HWVIRT
-        /*
-         * Only if the nested hypervisor says it does not need to flush anything in the TLB,
-         * can we possibly apply it on the host. Otherwise, the nested-guest TLB flush setting
-         * should be used and then the host settings be added on top.
-         */
-        if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
-        {
-            PCSVMNESTEDVMCBCACHE pVmcbNstGstCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
-            if (pVmcbNstGstCache->TLBCtrl.n.u8TLBFlush == SVM_TLB_FLUSH_NOTHING)
-                pVmcb->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_NOTHING;
-            else
-                pVmcb->ctrl.TLBCtrl.n.u8TLBFlush = pVmcbNstGstCache->TLBCtrl.n.u8TLBFlush;
-        }
-#else
-        RT_NOREF(pCtx);
         pVmcb->ctrl.TLBCtrl.n.u8TLBFlush = SVM_TLB_FLUSH_NOTHING;
-#endif
         if (pVCpu->hm.s.fForceTLBFlush)
         {
             /* Clear the VMCB Clean Bit for NP while flushing the TLB. See @bugref{7152}. */
@@ -996,10 +987,6 @@ static void hmR0SvmFlushTaggedTlb(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMVMCB pVmcb)
         pVmcb->ctrl.u64VmcbCleanBits &= ~HMSVM_VMCB_CLEAN_ASID;
     }
 
-#ifdef VBOX_WITH_NESTED_HWVIRT
-    Assert(CPUMIsGuestInSvmNestedHwVirtMode(pCtx) || pVmcb->ctrl.TLBCtrl.n.u8TLBFlush != SVM_TLB_FLUSH_NOTHING);
-#endif
-
     AssertMsg(pVCpu->hm.s.idLastCpu == pCpu->idCpu,
               ("vcpu idLastCpu=%u pcpu idCpu=%u\n", pVCpu->hm.s.idLastCpu, pCpu->idCpu));
     AssertMsg(pVCpu->hm.s.cTlbFlushes == pCpu->cTlbFlushes,
@@ -1778,9 +1765,20 @@ static void hmR0SvmLoadGuestXcptInterceptsNested(PVMCPU pVCpu, PSVMVMCB pVmcbNst
         pVmcbNstGst->ctrl.u32InterceptXcpt  |= pVmcb->ctrl.u32InterceptXcpt;
         pVmcbNstGst->ctrl.u64InterceptCtrl  |= pVmcb->ctrl.u64InterceptCtrl
                                             |  HMSVM_MANDATORY_NESTED_GUEST_CTRL_INTERCEPTS;
-
+        /*
+         * Remove control intercepts that we don't need while executing the nested-guest.
+         *
+         * VMMCALL when not intercepted raises a \#UD exception in the guest. However,
+         * other SVM instructions like VMSAVE when not intercept can cause havoc on the
+         * host as they can write to any location in physical memory, hence they always
+         * need to be intercepted (they are included in HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS).
+         */
         Assert(   (pVmcbNstGst->ctrl.u64InterceptCtrl & HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS)
                == HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS);
+        pVmcbNstGst->ctrl.u64InterceptCtrl  &= ~SVM_CTRL_INTERCEPT_VMMCALL;
+
+        /* Remove exception intercepts that we don't need while executing the nested-guest. */
+        pVmcbNstGst->ctrl.u32InterceptXcpt  &= ~RT_BIT(X86_XCPT_UD);
 
         Assert(!HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS));
     }
@@ -1981,10 +1979,10 @@ static int hmR0SvmLoadGuestState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
                           | HM_CHANGED_GUEST_SYSENTER_EIP_MSR
                           | HM_CHANGED_GUEST_SYSENTER_ESP_MSR
                           | HM_CHANGED_GUEST_LAZY_MSRS            /* Unused. */
-                          | HM_CHANGED_SVM_NESTED_GUEST
                           | HM_CHANGED_SVM_RESERVED1              /* Reserved. */
                           | HM_CHANGED_SVM_RESERVED2
-                          | HM_CHANGED_SVM_RESERVED3);
+                          | HM_CHANGED_SVM_RESERVED3
+                          | HM_CHANGED_SVM_RESERVED4);
 
     /* All the guest state bits should be loaded except maybe the host context and/or shared host/guest bits. */
     AssertMsg(   !HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_ALL_GUEST)
@@ -2003,32 +2001,48 @@ static int hmR0SvmLoadGuestState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Caches the nested-guest VMCB fields before we modify them for execution using
  * hardware-assisted SVM.
  *
+ * @returns true if the VMCB was previously already cached, false otherwise.
  * @param   pCtx            Pointer to the guest-CPU context.
  *
  * @sa      HMSvmNstGstVmExitNotify.
  */
-static void hmR0SvmVmRunCacheVmcb(PVMCPU pVCpu, PCPUMCTX pCtx)
+static bool hmR0SvmVmRunCacheVmcb(PVMCPU pVCpu, PCPUMCTX pCtx)
 {
     PSVMVMCB            pVmcbNstGst      = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     PCSVMVMCBCTRL       pVmcbNstGstCtrl  = &pVmcbNstGst->ctrl;
     PCSVMVMCBSTATESAVE  pVmcbNstGstState = &pVmcbNstGst->guest;
     PSVMNESTEDVMCBCACHE pNstGstVmcbCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
 
-    pNstGstVmcbCache->u16InterceptRdCRx = pVmcbNstGstCtrl->u16InterceptRdCRx;
-    pNstGstVmcbCache->u16InterceptWrCRx = pVmcbNstGstCtrl->u16InterceptWrCRx;
-    pNstGstVmcbCache->u16InterceptRdDRx = pVmcbNstGstCtrl->u16InterceptRdDRx;
-    pNstGstVmcbCache->u16InterceptWrCRx = pVmcbNstGstCtrl->u16InterceptWrDRx;
-    pNstGstVmcbCache->u32InterceptXcpt  = pVmcbNstGstCtrl->u32InterceptXcpt;
-    pNstGstVmcbCache->u64InterceptCtrl  = pVmcbNstGstCtrl->u64InterceptCtrl;
-    pNstGstVmcbCache->u64CR3            = pVmcbNstGstState->u64CR3;
-    pNstGstVmcbCache->u64CR4            = pVmcbNstGstState->u64CR4;
-    pNstGstVmcbCache->u64IOPMPhysAddr   = pVmcbNstGstCtrl->u64IOPMPhysAddr;
-    pNstGstVmcbCache->u64MSRPMPhysAddr  = pVmcbNstGstCtrl->u64MSRPMPhysAddr;
-    pNstGstVmcbCache->u64VmcbCleanBits  = pVmcbNstGstCtrl->u64VmcbCleanBits;
-    pNstGstVmcbCache->fVIntrMasking     = pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking;
-    pNstGstVmcbCache->TLBCtrl           = pVmcbNstGstCtrl->TLBCtrl;
-    pNstGstVmcbCache->NestedPagingCtrl  = pVmcbNstGstCtrl->NestedPaging;
-    pNstGstVmcbCache->fValid            = true;
+    /*
+     * Cache the nested-guest programmed VMCB fields if we have not cached it yet.
+     * Otherwise we risk re-caching the values we may have modified, see @bugref{7243#c44}.
+     *
+     * Nested-paging CR3 is not saved back into the VMCB on #VMEXIT, hence no need to
+     * cache and restore it, see AMD spec. 15.25.4 "Nested Paging and VMRUN/#VMEXIT".
+     */
+    bool const fWasCached = pCtx->hwvirt.svm.fHMCachedVmcb;
+    if (!fWasCached)
+    {
+        pNstGstVmcbCache->u16InterceptRdCRx = pVmcbNstGstCtrl->u16InterceptRdCRx;
+        pNstGstVmcbCache->u16InterceptWrCRx = pVmcbNstGstCtrl->u16InterceptWrCRx;
+        pNstGstVmcbCache->u16InterceptRdDRx = pVmcbNstGstCtrl->u16InterceptRdDRx;
+        pNstGstVmcbCache->u16InterceptWrDRx = pVmcbNstGstCtrl->u16InterceptWrDRx;
+        pNstGstVmcbCache->u32InterceptXcpt  = pVmcbNstGstCtrl->u32InterceptXcpt;
+        pNstGstVmcbCache->u64InterceptCtrl  = pVmcbNstGstCtrl->u64InterceptCtrl;
+        pNstGstVmcbCache->u64CR3            = pVmcbNstGstState->u64CR3;
+        pNstGstVmcbCache->u64CR4            = pVmcbNstGstState->u64CR4;
+        pNstGstVmcbCache->u64EFER           = pVmcbNstGstState->u64EFER;
+        pNstGstVmcbCache->u64IOPMPhysAddr   = pVmcbNstGstCtrl->u64IOPMPhysAddr;
+        pNstGstVmcbCache->u64MSRPMPhysAddr  = pVmcbNstGstCtrl->u64MSRPMPhysAddr;
+        pNstGstVmcbCache->u64VmcbCleanBits  = pVmcbNstGstCtrl->u64VmcbCleanBits;
+        pNstGstVmcbCache->fVIntrMasking     = pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking;
+        pNstGstVmcbCache->TLBCtrl           = pVmcbNstGstCtrl->TLBCtrl;
+        pNstGstVmcbCache->NestedPagingCtrl  = pVmcbNstGstCtrl->NestedPaging;
+        pCtx->hwvirt.svm.fHMCachedVmcb      = true;
+        Log4(("hmR0SvmVmRunCacheVmcb: Cached VMCB fields\n"));
+    }
+
+    return fWasCached;
 }
 
 
@@ -2047,42 +2061,34 @@ static void hmR0SvmVmRunSetupVmcb(PVMCPU pVCpu, PCPUMCTX pCtx)
     /*
      * First cache the nested-guest VMCB fields we may potentially modify.
      */
-    hmR0SvmVmRunCacheVmcb(pVCpu, pCtx);
-
-    /*
-     * The IOPM of the nested-guest can be ignored because the the guest always
-     * intercepts all IO port accesses. Thus, we'll swap to the guest IOPM rather
-     * into the nested-guest one and swap it back on the #VMEXIT.
-     */
-    pVmcbNstGstCtrl->u64IOPMPhysAddr = g_HCPhysIOBitmap;
-
-    /*
-     * Load the host-physical address into the MSRPM rather than the nested-guest
-     * physical address (currently we trap all MSRs in the nested-guest).
-     */
-    pVmcbNstGstCtrl->u64MSRPMPhysAddr = g_HCPhysNstGstMsrBitmap;
-
-    /*
-     * Use the same nested-paging as the "outer" guest. We can't dynamically
-     * switch off nested-paging suddenly while executing a VM (see assertion at the
-     * end of Trap0eHandler in PGMAllBth.h).
-     */
-    pVmcbNstGstCtrl->NestedPaging.n.u1NestedPaging = pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging;
-}
+    bool const fVmcbCached = hmR0SvmVmRunCacheVmcb(pVCpu, pCtx);
+    if (!fVmcbCached)
+    {
+        /*
+         * The IOPM of the nested-guest can be ignored because the the guest always
+         * intercepts all IO port accesses. Thus, we'll swap to the guest IOPM rather
+         * into the nested-guest one and swap it back on the #VMEXIT.
+         */
+        pVmcbNstGstCtrl->u64IOPMPhysAddr = g_HCPhysIOBitmap;
 
+        /*
+         * Load the host-physical address into the MSRPM rather than the nested-guest
+         * physical address (currently we trap all MSRs in the nested-guest).
+         */
+        pVmcbNstGstCtrl->u64MSRPMPhysAddr = g_HCPhysNstGstMsrBitmap;
 
-/**
- * Sets up the nested-guest for hardware-assisted SVM execution.
- *
- * @param   pVCpu           The cross context virtual CPU structure.
- * @param   pCtx            Pointer to the guest-CPU context.
- */
-static void hmR0SvmLoadGuestVmcbNested(PVMCPU pVCpu, PCPUMCTX pCtx)
-{
-    if (HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_SVM_NESTED_GUEST))
+        /*
+         * Use the same nested-paging as the "outer" guest. We can't dynamically
+         * switch off nested-paging suddenly while executing a VM (see assertion at the
+         * end of Trap0eHandler in PGMAllBth.h).
+         */
+        pVmcbNstGstCtrl->NestedPaging.n.u1NestedPaging = pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging;
+    }
+    else
     {
-        hmR0SvmVmRunSetupVmcb(pVCpu, pCtx);
-        HMCPU_CF_CLEAR(pVCpu, HM_CHANGED_SVM_NESTED_GUEST);
+        Assert(pVmcbNstGstCtrl->u64IOPMPhysAddr == g_HCPhysIOBitmap);
+        Assert(pVmcbNstGstCtrl->u64MSRPMPhysAddr = g_HCPhysNstGstMsrBitmap);
+        Assert(pVmcbNstGstCtrl->NestedPaging.n.u1NestedPaging == pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     }
 }
 
@@ -2103,9 +2109,6 @@ static int hmR0SvmLoadGuestStateNested(PVMCPU pVCpu, PCPUMCTX pCtx)
     PSVMVMCB pVmcbNstGst = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     Assert(pVmcbNstGst);
 
-    /* First, we need to setup the nested-guest VMCB for hardware-assisted SVM execution. */
-    hmR0SvmLoadGuestVmcbNested(pVCpu, pCtx);
-
     hmR0SvmLoadGuestSegmentRegs(pVCpu, pVmcbNstGst, pCtx);
     hmR0SvmLoadGuestMsrs(pVCpu, pVmcbNstGst, pCtx);
 
@@ -2133,7 +2136,8 @@ static int hmR0SvmLoadGuestStateNested(PVMCPU pVCpu, PCPUMCTX pCtx)
                           | HM_CHANGED_GUEST_LAZY_MSRS            /* Unused. */
                           | HM_CHANGED_SVM_RESERVED1              /* Reserved. */
                           | HM_CHANGED_SVM_RESERVED2
-                          | HM_CHANGED_SVM_RESERVED3);
+                          | HM_CHANGED_SVM_RESERVED3
+                          | HM_CHANGED_SVM_RESERVED4);
 
     /* All the guest state bits should be loaded except maybe the host context and/or shared host/guest bits. */
     AssertMsg(   !HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_ALL_GUEST)
@@ -2546,7 +2550,8 @@ static int hmR0SvmExitToRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rcExit)
 
     /* Please, no longjumps here (any logging shouldn't flush jump back to ring-3). NO LOGGING BEFORE THIS POINT! */
     VMMRZCallRing3Disable(pVCpu);
-    Log4(("hmR0SvmExitToRing3: rcExit=%d\n", rcExit));
+    Log4(("hmR0SvmExitToRing3: VCPU[%u]: rcExit=%d LocalFF=%#RX32 GlobalFF=%#RX32\n", pVCpu->idCpu, rcExit,
+          pVCpu->fLocalForcedActions, pVM->fGlobalForcedActions));
 
     /* We need to do this only while truly exiting the "inner loop" back to ring-3 and -not- for any longjmp to ring3. */
     if (pVCpu->hm.s.Event.fPending)
@@ -2576,6 +2581,16 @@ static int hmR0SvmExitToRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rcExit)
     if (rcExit != VINF_EM_RAW_INTERRUPT)
         HMCPU_CF_SET(pVCpu, HM_CHANGED_ALL_GUEST);
 
+#ifdef VBOX_WITH_NESTED_HWVIRT
+    /*
+     * We may inspect the nested-guest VMCB state in ring-3 (e.g. for injecting interrupts)
+     * and thus we need to restore any modifications we may have made to it here if we're
+     * still executing the nested-guest.
+     */
+    if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
+        HMSvmNstGstVmExitNotify(pVCpu, pCtx);
+#endif
+
     STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchExitToR3);
 
     /* We do -not- want any longjmp notifications after this! We must return to ring-3 ASAP. */
@@ -3027,6 +3042,31 @@ DECLINLINE(void) hmR0SvmClearIretIntercept(PSVMVMCB pVmcb)
 
 #ifdef VBOX_WITH_NESTED_HWVIRT
 /**
+ * Checks whether the SVM nested-guest is in a state to receive physical (APIC)
+ * interrupts.
+ *
+ * @returns true if it's ready, false otherwise.
+ * @param   pCtx        The guest-CPU context.
+ *
+ * @remarks This function looks at the VMCB cache rather than directly at the
+ *          nested-guest VMCB which may have been suitably modified for executing
+ *          using hardware-assisted SVM.
+ */
+static bool hmR0SvmCanNstGstTakePhysIntr(PVMCPU pVCpu, PCCPUMCTX pCtx)
+{
+    Assert(pCtx->hwvirt.svm.fHMCachedVmcb);
+    PCSVMNESTEDVMCBCACHE pVmcbNstGstCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
+    X86EFLAGS fEFlags;
+    if (pVmcbNstGstCache->fVIntrMasking)
+        fEFlags.u = pCtx->hwvirt.svm.HostState.rflags.u;
+    else
+        fEFlags.u = pCtx->eflags.u;
+
+    return fEFlags.Bits.u1IF;
+}
+
+
+/**
  * Evaluates the event to be delivered to the nested-guest and sets it as the
  * pending event.
  *
@@ -3040,12 +3080,10 @@ static VBOXSTRICTRC hmR0SvmEvaluatePendingEventNested(PVMCPU pVCpu, PCPUMCTX pCt
 
     Assert(!pVCpu->hm.s.Event.fPending);
 
-    bool const fIntrEnabled = pCtx->hwvirt.svm.fGif && CPUMCanSvmNstGstTakePhysIntr(pCtx);
-    if (fIntrEnabled)
+    bool const fGif = pCtx->hwvirt.svm.fGif;
+    if (fGif)
     {
         PSVMVMCB pVmcbNstGst = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
-        SVMEVENT Event;
-        Event.u = 0;
 
         bool const fIntShadow = hmR0SvmIsIntrShadowActive(pVCpu, pCtx);
 
@@ -3069,6 +3107,8 @@ static VBOXSTRICTRC hmR0SvmEvaluatePendingEventNested(PVMCPU pVCpu, PCPUMCTX pCt
             {
                 Log4(("Pending NMI\n"));
 
+                SVMEVENT Event;
+                Event.u = 0;
                 Event.n.u1Valid  = 1;
                 Event.n.u8Vector = X86_XCPT_NMI;
                 Event.n.u3Type   = SVM_EVENT_NMI;
@@ -3081,42 +3121,69 @@ static VBOXSTRICTRC hmR0SvmEvaluatePendingEventNested(PVMCPU pVCpu, PCPUMCTX pCt
         }
 
         /*
-         * Check if the nested-guest can receive external interrupts (PIC/APIC).
+         * Check if the nested-guest can receive external interrupts (generated by
+         * the guest's PIC/APIC).
          *
-         * Physical (from the nested-guest's point of view) intercepts are -always-
-         * intercepted, see HMSVM_MANDATORY_NESTED_GUEST_CTRL_INTERCEPTS.
+         * External intercepts from the physical CPU are -always- intercepted when
+         * executing using hardware-assisted SVM, see HMSVM_MANDATORY_NESTED_GUEST_CTRL_INTERCEPTS.
          *
-         * Physical interrupts take priority over virtual interrupts,
-         * see AMD spec. 15.21.4 "Injecting Virtual (INTR) Interrupts".
+         * External interrupts that are generated for the outer guest may be intercepted
+         * depending on how the nested-guest VMCB was programmed by guest software.
          *
-         * We must be careful that the call to CPUMCanSvmNstGstTakePhysIntr below
-         * happens -before- modifying the nested-guests's V_INTR_MASKING bit,
-         * which is currently set later in hmR0SvmLoadGuestApicStateNested.
+         * Physical interrupts always take priority over virtual interrupts,
+         * see AMD spec. 15.21.4 "Injecting Virtual (INTR) Interrupts".
          */
+        PCSVMNESTEDVMCBCACHE pVmcbNstGstCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
+        Assert(pCtx->hwvirt.svm.fHMCachedVmcb);
         if (   VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)
             && !fIntShadow
             && !pVCpu->hm.s.fSingleInstruction
-            && CPUMCanSvmNstGstTakePhysIntr(pCtx))
+            && hmR0SvmCanNstGstTakePhysIntr(pVCpu, pCtx))
         {
-            return IEMExecSvmVmexit(pVCpu, SVM_EXIT_INTR, 0, 0);
+            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_INTR)
+            {
+                Log4(("Intercepting external interrupt -> #VMEXIT\n"));
+                return IEMExecSvmVmexit(pVCpu, SVM_EXIT_INTR, 0, 0);
+            }
+
+            uint8_t u8Interrupt;
+            int rc = PDMGetInterrupt(pVCpu, &u8Interrupt);
+            if (RT_SUCCESS(rc))
+            {
+                Log4(("Injecting external interrupt u8Interrupt=%#x\n", u8Interrupt));
+
+                SVMEVENT Event;
+                Event.u = 0;
+                Event.n.u1Valid  = 1;
+                Event.n.u8Vector = u8Interrupt;
+                Event.n.u3Type   = SVM_EVENT_EXTERNAL_IRQ;
+
+                hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
+            }
+            else if (rc == VERR_APIC_INTR_MASKED_BY_TPR)
+            {
+                /*
+                 * AMD-V has no TPR thresholding feature. We just avoid posting the interrupt.
+                 * We just avoid delivering the TPR-masked interrupt here. TPR will be updated
+                 * always via hmR0SvmLoadGuestState() -> hmR0SvmLoadGuestApicState().
+                 */
+                STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchTprMaskedIrq);
+            }
+            else
+                STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchGuestIrq);
         }
 
         /*
-         * Check if the nested-guest can receive virtual interrupts.
+         * Check if the nested-guest can receive virtual (injected by VMRUN) interrupts.
+         * We can safely call CPUMCanSvmNstGstTakeVirtIntr here as we don't cache/modify any
+         * nested-guest VMCB interrupt control fields besides V_INTR_MASKING, see hmR0SvmVmRunCacheVmcb.
          */
-        if (   VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_NESTED_GUEST)
+        if (   (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VINTR)
+            && VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_NESTED_GUEST)
             && CPUMCanSvmNstGstTakeVirtIntr(pCtx))
         {
-            uint8_t const u8Interrupt = CPUMGetSvmNstGstInterrupt(pCtx);
-            Log4(("Injecting virtual interrupt u8Interrupt=%#x\n", u8Interrupt));
-
-            Event.n.u1Valid  = 1;
-            Event.n.u8Vector = u8Interrupt;
-            Event.n.u3Type   = SVM_EVENT_EXTERNAL_IRQ;
-
-            VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INTERRUPT_NESTED_GUEST);
-            hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
-            return VINF_SUCCESS;
+            Log4(("Intercepting virtual interrupt -> #VMEXIT\n"));
+            return IEMExecSvmVmexit(pVCpu, SVM_EXIT_VINTR, 0, 0);
         }
     }
 
@@ -3153,9 +3220,6 @@ static void hmR0SvmEvaluatePendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
         bool const fBlockNmi  = VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_BLOCK_NMIS);
         PSVMVMCB pVmcb        = pVCpu->hm.s.svm.pVmcb;
 
-        SVMEVENT Event;
-        Event.u = 0;
-
         Log4Func(("fGif=%RTbool fBlockInt=%RTbool fIntShadow=%RTbool APIC/PIC_Pending=%RTbool\n", fGif, fBlockInt, fIntShadow,
                   VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC)));
 
@@ -3170,6 +3234,8 @@ static void hmR0SvmEvaluatePendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
             {
                 Log4(("Pending NMI\n"));
 
+                SVMEVENT Event;
+                Event.u = 0;
                 Event.n.u1Valid  = 1;
                 Event.n.u8Vector = X86_XCPT_NMI;
                 Event.n.u3Type   = SVM_EVENT_NMI;
@@ -3196,6 +3262,8 @@ static void hmR0SvmEvaluatePendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
                 {
                     Log4(("Injecting external interrupt u8Interrupt=%#x\n", u8Interrupt));
 
+                    SVMEVENT Event;
+                    Event.u = 0;
                     Event.n.u1Valid  = 1;
                     Event.n.u8Vector = u8Interrupt;
                     Event.n.u3Type   = SVM_EVENT_EXTERNAL_IRQ;
@@ -3259,6 +3327,8 @@ static void hmR0SvmInjectPendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMVMCB pVmc
         else if (Event.n.u3Type == SVM_EVENT_NMI)
             Assert(!fIntShadow);
         NOREF(fBlockInt);
+#else
+        Assert(!pVmcb->ctrl.EventInject.n.u1Valid);
 #endif
 
         Log4(("Injecting pending HM event\n"));
@@ -3531,19 +3601,23 @@ static int hmR0SvmPreRunGuestNested(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTR
 {
     HMSVM_ASSERT_PREEMPT_SAFE();
 
-#ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
     if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
     {
+#ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
         Log2(("hmR0SvmPreRunGuest: Rescheduling to IEM due to nested-hwvirt or forced IEM exec -> VINF_EM_RESCHEDULE_REM\n"));
         return VINF_EM_RESCHEDULE_REM;
-    }
 #endif
+    }
+    else
+        return VINF_SVM_VMEXIT;
 
     /* Check force flag actions that might require us to go back to ring-3. */
     int rc = hmR0SvmCheckForceFlags(pVM, pVCpu, pCtx);
     if (rc != VINF_SUCCESS)
         return rc;
 
+    hmR0SvmVmRunSetupVmcb(pVCpu, pCtx);
+
     if (TRPMHasTrap(pVCpu))
         hmR0SvmTrpmTrapToPendingEvent(pVCpu);
     else if (!pVCpu->hm.s.Event.fPending)
@@ -3573,6 +3647,8 @@ static int hmR0SvmPreRunGuestNested(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTR
     /** @todo Get new STAM counter for this? */
     STAM_COUNTER_INC(&pVCpu->hm.s.StatLoadFull);
 
+    Assert(pCtx->hwvirt.svm.fHMCachedVmcb);
+
     /*
      * No longjmps to ring-3 from this point on!!!
      * Asserts() will still longjmp to ring-3 (but won't return), which is intentional, better than a kernel panic.
@@ -3659,9 +3735,10 @@ static int hmR0SvmPreRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIEN
     HMSVM_ASSERT_PREEMPT_SAFE();
     Assert(!CPUMIsGuestInSvmNestedHwVirtMode(pCtx));
 
-#if defined(VBOX_WITH_NESTED_HWVIRT) && defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM)
-
+#ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
     /* IEM only for executing nested guest, we shouldn't get here. */
+    /** @todo Make this into an assertion since HMR3CanExecuteGuest already checks
+     *        for it? */
     if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
     {
         Log2(("hmR0SvmPreRunGuest: Rescheduling to IEM due to nested-hwvirt or forced IEM exec -> VINF_EM_RESCHEDULE_REM\n"));
@@ -4105,6 +4182,8 @@ static void hmR0SvmPostRunGuestNested(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx,
     Assert(!pVCpu->hm.s.svm.fSyncVTpr);
     hmR0SvmSaveGuestState(pVCpu, pMixedCtx, pVmcbNstGst);       /* Save the nested-guest state from the VMCB to the
                                                                    guest-CPU context. */
+
+    HMSvmNstGstVmExitNotify(pVCpu, pMixedCtx);                  /* Restore modified VMCB fields for now, see @bugref{7243#c52} .*/
 }
 #endif
 
@@ -4517,7 +4596,7 @@ static bool hmR0SvmIsIoInterceptActive(void *pvIoBitmap, PSVMIOIOEXITINFO pIoExi
     const uint16_t    u16Port       = pIoExitInfo->n.u16Port;
     const SVMIOIOTYPE enmIoType     = (SVMIOIOTYPE)pIoExitInfo->n.u1Type;
     const uint8_t     cbReg         = (pIoExitInfo->u >> SVM_IOIO_OP_SIZE_SHIFT) & 7;
-    const uint8_t     cAddrSizeBits = (pIoExitInfo->u >> SVM_IOIO_ADDR_SIZE_SHIFT) << 4;
+    const uint8_t     cAddrSizeBits = ((pIoExitInfo->u >> SVM_IOIO_ADDR_SIZE_SHIFT) & 7) << 4;
     const uint8_t     iEffSeg       = pIoExitInfo->n.u3SEG;
     const bool        fRep          = pIoExitInfo->n.u1REP;
     const bool        fStrIo        = pIoExitInfo->n.u1STR;
@@ -4541,20 +4620,14 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
     Assert(pSvmTransient->u64ExitCode != SVM_EXIT_INVALID);
     Assert(pSvmTransient->u64ExitCode <= SVM_EXIT_MAX);
 
-#define HM_SVM_RET_VMEXIT_NESTED(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2) \
-    do \
-    { \
-        return VBOXSTRICTRC_TODO(IEMExecSvmVmexit(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2)); \
-    } while (0) \
-
-#define HM_SVM_HANDLE_XCPT_EXIT_NESTED(a_uXcpt, a_XcptExitFn) \
-    do \
-    { \
-        if (pVmcbNstGstCache->u32InterceptXcpt & RT_BIT(a_uXcpt)) \
-            HM_SVM_RET_VMEXIT_NESTED(pVCpu, pVmcbNstGst->ctrl.u64ExitCode, pVmcbNstGst->ctrl.u64ExitInfo1, \
-                                     pVmcbNstGst->ctrl.u64ExitInfo2); \
-        return a_XcptExitFn(pVCpu, pCtx, pSvmTransient); \
-    } while (0) \
+#define HM_SVM_VMEXIT_NESTED(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2) \
+            VBOXSTRICTRC_TODO(IEMExecSvmVmexit(a_pVCpu, a_uExitCode, a_uExitInfo1, a_uExitInfo2))
+#define HM_SVM_IS_CTRL_INTERCEPT_SET(a_pCtx, a_Intercept)       CPUMIsGuestSvmCtrlInterceptSet(a_pCtx, (a_Intercept))
+#define HM_SVM_IS_XCPT_INTERCEPT_SET(a_pCtx, a_Xcpt)            CPUMIsGuestSvmXcptInterceptSet(a_pCtx, (a_Xcpt))
+#define HM_SVM_IS_READ_CR_INTERCEPT_SET(a_pCtx, a_uCr)          CPUMIsGuestSvmReadCRxInterceptSet(a_pCtx, (a_uCr))
+#define HM_SVM_IS_READ_DR_INTERCEPT_SET(a_pCtx, a_uDr)          CPUMIsGuestSvmReadDRxInterceptSet(a_pCtx, (a_uDr))
+#define HM_SVM_IS_WRITE_CR_INTERCEPT_SET(a_pCtx, a_uCr)         CPUMIsGuestSvmWriteCRxInterceptSet(a_pCtx, (a_uCr))
+#define HM_SVM_IS_WRITE_DR_INTERCEPT_SET(a_pCtx, a_uDr)         CPUMIsGuestSvmWriteDRxInterceptSet(a_pCtx, (a_uDr))
 
     /*
      * For all the #VMEXITs here we primarily figure out if the #VMEXIT is expected
@@ -4562,59 +4635,59 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
      */
     PSVMVMCB            pVmcbNstGst      = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
     PSVMVMCBCTRL        pVmcbNstGstCtrl  = &pVmcbNstGst->ctrl;
-    PSVMNESTEDVMCBCACHE pVmcbNstGstCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
     uint64_t const      uExitCode        = pVmcbNstGstCtrl->u64ExitCode;
     uint64_t const      uExitInfo1       = pVmcbNstGstCtrl->u64ExitInfo1;
     uint64_t const      uExitInfo2       = pVmcbNstGstCtrl->u64ExitInfo2;
 
-    switch (pSvmTransient->u64ExitCode)
+    Assert(uExitCode == pVmcbNstGstCtrl->u64ExitCode);
+    switch (uExitCode)
     {
         case SVM_EXIT_CPUID:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_CPUID)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_CPUID))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitCpuid(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_RDTSC:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_RDTSC)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_RDTSC))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitRdtsc(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_RDTSCP:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_RDTSCP)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_RDTSCP))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitRdtscp(pVCpu, pCtx, pSvmTransient);
         }
 
 
         case SVM_EXIT_MONITOR:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_MONITOR)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_MONITOR))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitMonitor(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_MWAIT:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_MWAIT)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_MWAIT))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitMwait(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_HLT:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_HLT)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_HLT))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitHlt(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_MSR:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_MSR_PROT)
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_MSR_PROT))
             {
                 uint32_t const idMsr = pCtx->ecx;
                 uint16_t offMsrpm;
@@ -4629,7 +4702,7 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
                     if (   (fInterceptWrite && pVmcbNstGstCtrl->u64ExitInfo1 == SVM_EXIT1_MSR_WRITE)
                         || (fInterceptRead  && pVmcbNstGstCtrl->u64ExitInfo1 == SVM_EXIT1_MSR_READ))
                     {
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     }
                 }
                 else
@@ -4639,7 +4712,7 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
                      * See AMD-V spec. "15.11 MSR Intercepts".
                      */
                     Assert(rc == VERR_OUT_OF_RANGE);
-                    HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                 }
             }
             return hmR0SvmExitMsr(pVCpu, pCtx, pSvmTransient);
@@ -4650,14 +4723,14 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
             /*
              * Figure out if the IO port access is intercepted by the nested-guest.
              */
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_IOIO_PROT)
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_IOIO_PROT))
             {
                 void *pvIoBitmap = pCtx->hwvirt.svm.CTX_SUFF(pvIoBitmap);
                 SVMIOIOEXITINFO IoExitInfo;
                 IoExitInfo.u = pVmcbNstGst->ctrl.u64ExitInfo1;
                 bool const fIntercept = hmR0SvmIsIoInterceptActive(pvIoBitmap, &IoExitInfo);
                 if (fIntercept)
-                    HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             }
             return hmR0SvmExitIOInstr(pVCpu, pCtx, pSvmTransient);
         }
@@ -4671,8 +4744,8 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
                 uint64_t const uFaultAddress = pVmcbNstGstCtrl->u64ExitInfo2;
 
                 /* If the nested-guest is intercepting #PFs, cause a #PF #VMEXIT. */
-                if (pVmcbNstGstCache->u32InterceptXcpt & RT_BIT(X86_XCPT_PF))
-                    HM_SVM_RET_VMEXIT_NESTED(pVCpu, SVM_EXIT_EXCEPTION_14, u32ErrCode, uFaultAddress);
+                if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_PF))
+                    return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, u32ErrCode, uFaultAddress);
 
                 /* If the nested-guest is not intercepting #PFs, forward the #PF to the nested-guest. */
                 hmR0SvmSetPendingXcptPF(pVCpu, pCtx, u32ErrCode, uFaultAddress);
@@ -4682,29 +4755,56 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
         }
 
         case SVM_EXIT_EXCEPTION_7:   /* X86_XCPT_NM */
-            HM_SVM_HANDLE_XCPT_EXIT_NESTED(X86_XCPT_NM, hmR0SvmExitXcptNM);
+        {
+            if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_NM))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            hmR0SvmSetPendingXcptNM(pVCpu);
+            return VINF_SUCCESS;
+        }
 
         case SVM_EXIT_EXCEPTION_6:   /* X86_XCPT_UD */
-            HM_SVM_HANDLE_XCPT_EXIT_NESTED(X86_XCPT_UD, hmR0SvmExitXcptUD);
+        {
+            if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_UD))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            hmR0SvmSetPendingXcptUD(pVCpu);
+            return VINF_SUCCESS;
+        }
 
         case SVM_EXIT_EXCEPTION_16:  /* X86_XCPT_MF */
-            HM_SVM_HANDLE_XCPT_EXIT_NESTED(X86_XCPT_MF, hmR0SvmExitXcptMF);
+        {
+            if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_MF))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            hmR0SvmSetPendingXcptMF(pVCpu);
+            return VINF_SUCCESS;
+        }
 
         case SVM_EXIT_EXCEPTION_1:   /* X86_XCPT_DB */
-            HM_SVM_HANDLE_XCPT_EXIT_NESTED(X86_XCPT_DB, hmR0SvmExitXcptDB);
+        {
+            if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_DB))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            return hmR0SvmNestedExitXcptDB(pVCpu, pCtx, pSvmTransient);
+        }
 
         case SVM_EXIT_EXCEPTION_17:  /* X86_XCPT_AC */
-            HM_SVM_HANDLE_XCPT_EXIT_NESTED(X86_XCPT_AC, hmR0SvmExitXcptAC);
+        {
+            if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_AC))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            return hmR0SvmExitXcptAC(pVCpu, pCtx, pSvmTransient);
+        }
 
         case SVM_EXIT_EXCEPTION_3:   /* X86_XCPT_BP */
-            HM_SVM_HANDLE_XCPT_EXIT_NESTED(X86_XCPT_BP, hmR0SvmExitXcptBP);
+        {
+            if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, X86_XCPT_BP))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            return hmR0SvmNestedExitXcptBP(pVCpu, pCtx, pSvmTransient);
+        }
 
         case SVM_EXIT_READ_CR0:
         case SVM_EXIT_READ_CR3:
         case SVM_EXIT_READ_CR4:
         {
-            if (pVmcbNstGstCache->u16InterceptRdCRx & (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_READ_CR0)))
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_READ_CR_INTERCEPT_SET(pCtx, (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_READ_CR0))))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitReadCRx(pVCpu, pCtx, pSvmTransient);
         }
 
@@ -4713,23 +4813,27 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
         case SVM_EXIT_WRITE_CR4:
         case SVM_EXIT_WRITE_CR8:   /** @todo Shouldn't writes to CR8 go to V_TPR instead since we run with V_INTR_MASKING set?? */
         {
-            if (pVmcbNstGstCache->u16InterceptWrCRx & (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_WRITE_CR0)))
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            Log4(("hmR0SvmHandleExitNested: Write CRx: u16InterceptWrCRx=%#x u64ExitCode=%#RX64 %#x\n",
+                  pVmcbNstGstCtrl->u16InterceptWrCRx, pSvmTransient->u64ExitCode,
+                  (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_WRITE_CR0))));
+
+            if (HM_SVM_IS_WRITE_CR_INTERCEPT_SET(pCtx, (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_WRITE_CR0))))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitWriteCRx(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_PAUSE:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_PAUSE)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_PAUSE))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitPause(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_VINTR:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VINTR)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
-            return hmR0SvmNestedExitVIntr(pVCpu, pCtx, pSvmTransient);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_VINTR))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            return hmR0SvmExitUnexpected(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_INTR:
@@ -4740,43 +4844,43 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
 
         case SVM_EXIT_FERR_FREEZE:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_FERR_FREEZE)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_FERR_FREEZE))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_NMI:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_NMI)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_NMI))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitIntr(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_INVLPG:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_INVLPG)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_INVLPG))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitInvlpg(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_WBINVD:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_WBINVD)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_WBINVD))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitWbinvd(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_INVD:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_INVD)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_INVD))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitInvd(pVCpu, pCtx, pSvmTransient);
         }
 
         case SVM_EXIT_RDPMC:
         {
-            if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_RDPMC)
-                HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+            if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_RDPMC))
+                return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
             return hmR0SvmExitRdpmc(pVCpu, pCtx, pSvmTransient);
         }
 
@@ -4789,8 +4893,8 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
                 case SVM_EXIT_READ_DR10:    case SVM_EXIT_READ_DR11:    case SVM_EXIT_READ_DR12:    case SVM_EXIT_READ_DR13:
                 case SVM_EXIT_READ_DR14:    case SVM_EXIT_READ_DR15:
                 {
-                    if (pVmcbNstGstCache->u16InterceptRdDRx & (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_READ_DR0)))
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_READ_DR_INTERCEPT_SET(pCtx, (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_READ_DR0))))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitReadDRx(pVCpu, pCtx, pSvmTransient);
                 }
 
@@ -4799,8 +4903,8 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
                 case SVM_EXIT_WRITE_DR10:   case SVM_EXIT_WRITE_DR11:   case SVM_EXIT_WRITE_DR12:   case SVM_EXIT_WRITE_DR13:
                 case SVM_EXIT_WRITE_DR14:   case SVM_EXIT_WRITE_DR15:
                 {
-                    if (pVmcbNstGstCache->u16InterceptWrDRx & (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_WRITE_DR0)))
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_WRITE_DR_INTERCEPT_SET(pCtx, (1U << (uint16_t)(pSvmTransient->u64ExitCode - SVM_EXIT_WRITE_DR0))))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitWriteDRx(pVCpu, pCtx, pSvmTransient);
                 }
 
@@ -4817,115 +4921,117 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
                 case SVM_EXIT_EXCEPTION_27:      case SVM_EXIT_EXCEPTION_28:    case SVM_EXIT_EXCEPTION_29:
                 case SVM_EXIT_EXCEPTION_30:      case SVM_EXIT_EXCEPTION_31:
                 {
-                    if (pVmcbNstGstCache->u32InterceptXcpt & (1U << (uint32_t)(pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0)))
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_XCPT_INTERCEPT_SET(pCtx, (uint32_t)(pSvmTransient->u64ExitCode - SVM_EXIT_EXCEPTION_0)))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     /** @todo Write hmR0SvmExitXcptGeneric! */
                     return VERR_NOT_IMPLEMENTED;
                 }
 
                 case SVM_EXIT_XSETBV:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_XSETBV)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_XSETBV))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitXsetbv(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_TASK_SWITCH:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_TASK_SWITCH)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_TASK_SWITCH))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitTaskSwitch(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_IRET:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_IRET)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_IRET))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmNestedExitIret(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_SHUTDOWN:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_SHUTDOWN)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_SHUTDOWN))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitShutdown(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_SMI:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_SMI)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_SMI))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitUnexpected(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_INIT:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_INIT)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_INIT))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitUnexpected(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_VMMCALL:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMMCALL)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_VMMCALL))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitVmmCall(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_CLGI:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_CLGI)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_CLGI))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                      return hmR0SvmExitClgi(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_STGI:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_STGI)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_STGI))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                      return hmR0SvmExitStgi(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_VMLOAD:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMLOAD)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_VMLOAD))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitVmload(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_VMSAVE:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMSAVE)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_VMSAVE))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitVmsave(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_INVLPGA:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_INVLPGA)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_INVLPGA))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitInvlpga(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_VMRUN:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_VMRUN)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_VMRUN))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
                     return hmR0SvmExitVmrun(pVCpu, pCtx, pSvmTransient);
                 }
 
                 case SVM_EXIT_RSM:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_RSM)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
-                    return hmR0SvmExitSetPendingXcptUD(pVCpu, pCtx, pSvmTransient);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_RSM))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    hmR0SvmSetPendingXcptUD(pVCpu);
+                    return VINF_SUCCESS;
                 }
 
                 case SVM_EXIT_SKINIT:
                 {
-                    if (pVmcbNstGstCache->u64InterceptCtrl & SVM_CTRL_INTERCEPT_SKINIT)
-                        HM_SVM_RET_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
-                    return hmR0SvmExitSetPendingXcptUD(pVCpu, pCtx, pSvmTransient);
+                    if (HM_SVM_IS_CTRL_INTERCEPT_SET(pCtx, SVM_CTRL_INTERCEPT_SKINIT))
+                        return HM_SVM_VMEXIT_NESTED(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
+                    hmR0SvmSetPendingXcptUD(pVCpu);
+                    return VINF_SUCCESS;
                 }
 
                 case SVM_EXIT_NPF:
@@ -4946,8 +5052,13 @@ static int hmR0SvmHandleExitNested(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
     }
     /* not reached */
 
-#undef HM_SVM_HANDLE_XCPT_EXIT_NESTED
-#undef HM_SVM_RET_VMEXIT_NESTED
+#undef HM_SVM_VMEXIT_NESTED
+#undef HM_SVM_IS_CTRL_INTERCEPT_SET
+#undef HM_SVM_IS_XCPT_INTERCEPT_SET
+#undef HM_SVM_IS_READ_CR_INTERCEPT_SET
+#undef HM_SVM_IS_READ_DR_INTERCEPT_SET
+#undef HM_SVM_IS_WRITE_CR_INTERCEPT_SET
+#undef HM_SVM_IS_WRITE_DR_INTERCEPT_SET
 }
 #endif
 
@@ -5112,7 +5223,10 @@ static int hmR0SvmHandleExit(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTran
 #endif
                 case SVM_EXIT_RSM:
                 case SVM_EXIT_SKINIT:
-                    return hmR0SvmExitSetPendingXcptUD(pVCpu, pCtx, pSvmTransient);
+                {
+                    hmR0SvmSetPendingXcptUD(pVCpu);
+                    return VINF_SUCCESS;
+                }
 
 #ifdef HMSVM_ALWAYS_TRAP_ALL_XCPTS
                 case SVM_EXIT_EXCEPTION_0:             /* X86_XCPT_DE */
@@ -6091,6 +6205,7 @@ HMSVM_EXIT_DECL hmR0SvmExitWriteCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
         {
             uint8_t const cbInstr = pVmcb->ctrl.u64NextRIP - pCtx->rip;
             uint8_t const iGReg   = pVmcb->ctrl.u64ExitInfo1 & SVM_EXIT1_MOV_CRX_GPR_NUMBER;
+            Log4(("hmR0SvmExitWriteCRx: Mov CR%u w/ iGReg=%#x\n", iCrReg, iGReg));
             rcStrict = IEMExecDecodedMovCRxWrite(pVCpu, cbInstr, iCrReg, iGReg);
             fDecodedInstr = true;
         }
@@ -6099,6 +6214,7 @@ HMSVM_EXIT_DECL hmR0SvmExitWriteCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
 
     if (!fDecodedInstr)
     {
+        Log4(("hmR0SvmExitWriteCRx: iCrReg=%#x\n", iCrReg));
         rcStrict = IEMExecOneBypassEx(pVCpu, CPUMCTX2CORE(pCtx), NULL);
         if (RT_UNLIKELY(   rcStrict == VERR_IEM_ASPECT_NOT_IMPLEMENTED
                         || rcStrict == VERR_IEM_INSTR_NOT_IMPLEMENTED))
@@ -6140,18 +6256,6 @@ HMSVM_EXIT_DECL hmR0SvmExitWriteCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
 
 
 /**
- * \#VMEXIT handler for instructions that result in a \#UD exception delivered
- * to the guest.
- */
-HMSVM_EXIT_DECL hmR0SvmExitSetPendingXcptUD(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
-{
-    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
-    hmR0SvmSetPendingXcptUD(pVCpu);
-    return VINF_SUCCESS;
-}
-
-
-/**
  * \#VMEXIT handler for MSR read and writes (SVM_EXIT_MSR). Conditional
  * \#VMEXIT.
  */
@@ -6281,7 +6385,11 @@ HMSVM_EXIT_DECL hmR0SvmExitReadDRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
     /*
      * Lazy DR0-3 loading.
      */
-    if (!pSvmTransient->fWasHyperDebugStateActive)
+    if (   !pSvmTransient->fWasHyperDebugStateActive
+#ifdef VBOX_WITH_NESTED_HWVIRT
+           && !CPUMIsGuestInSvmNestedHwVirtMode(pCtx) /** @todo implement single-stepping when executing a nested-guest. */
+#endif
+       )
     {
         Assert(!DBGFIsStepping(pVCpu)); Assert(!pVCpu->hm.s.fSingleInstruction);
         Log5(("hmR0SvmExitReadDRx: Lazy loading guest debug registers\n"));
@@ -7119,6 +7227,8 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptAC(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 {
     HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
 
+    /** @todo if triple-fault is returned in nested-guest scenario convert to a
+     *        shutdown VMEXIT. */
     HMSVM_CHECK_EXIT_DUE_TO_EVENT_DELIVERY();
 
     SVMEVENT Event;
@@ -7150,7 +7260,6 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptBP(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
         Event.n.u1Valid  = 1;
         Event.n.u3Type   = SVM_EVENT_EXCEPTION;
         Event.n.u8Vector = X86_XCPT_BP;
-        Event.n.u1ErrorCodeValid = 0;
         hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
     }
 
@@ -7272,6 +7381,13 @@ HMSVM_EXIT_DECL hmR0SvmExitVmload(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
     /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitVmload); */
     uint8_t const cbInstr = hmR0SvmGetInstrLengthHwAssist(pVCpu, pCtx, 3);
     VBOXSTRICTRC rcStrict = IEMExecDecodedVmload(pVCpu, cbInstr);
+    if (rcStrict == VINF_SUCCESS)
+    {
+        /* We skip flagging changes made to LSTAR, STAR, SFMASK and other MSRs as they are always re-loaded. */
+        HMCPU_CF_SET(pVCpu,   HM_CHANGED_GUEST_SEGMENT_REGS
+                            | HM_CHANGED_GUEST_TR
+                            | HM_CHANGED_GUEST_LDTR);
+    }
     return VBOXSTRICTRC_VAL(rcStrict);
 }
 
@@ -7313,17 +7429,22 @@ HMSVM_EXIT_DECL hmR0SvmExitVmrun(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvm
     HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
     /** @todo Stat. */
     /* STAM_COUNTER_INC(&pVCpu->hm.s.StatExitVmrun); */
+#if 0
     VBOXSTRICTRC rcStrict;
     uint8_t const cbInstr = hmR0SvmGetInstrLengthHwAssist(pVCpu, pCtx, 3);
     rcStrict = IEMExecDecodedVmrun(pVCpu, cbInstr);
+    Log4(("IEMExecDecodedVmrun: returned %d\n", VBOXSTRICTRC_VAL(rcStrict)));
     if (rcStrict == VINF_SUCCESS)
     {
         rcStrict = VINF_SVM_VMRUN;
         HMCPU_CF_SET(pVCpu, HM_CHANGED_ALL_GUEST);
     }
     return VBOXSTRICTRC_VAL(rcStrict);
+#endif
+    return VERR_EM_INTERPRETER;
 }
 
+
 /**
  * Nested-guest \#VMEXIT handler for IRET (SVM_EXIT_VMRUN). Conditional \#VMEXIT.
  */
@@ -7344,24 +7465,46 @@ HMSVM_EXIT_DECL hmR0SvmNestedExitIret(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT
 
 
 /**
- * \#VMEXIT handler for virtual interrupt (SVM_EXIT_VINTR). Conditional
- * \#VMEXIT.
+ * Nested-guest \#VMEXIT handler for debug exceptions (SVM_EXIT_EXCEPTION_1).
+ * Unconditional \#VMEXIT.
  */
-HMSVM_EXIT_DECL hmR0SvmNestedExitVIntr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
+HMSVM_EXIT_DECL hmR0SvmNestedExitXcptDB(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
     HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
 
-    /* No virtual interrupts pending, we'll inject the current one/NMI before reentry. */
-    PSVMVMCB pVmcbNstGst = pCtx->hwvirt.svm.CTX_SUFF(pVmcb);
-    pVmcbNstGst->ctrl.IntCtrl.n.u1VIrqPending = 0;
-    pVmcbNstGst->ctrl.IntCtrl.n.u8VIntrVector = 0;
+    /* If this #DB is the result of delivering an event, go back to the interpreter. */
+    /** @todo if triple-fault is returned in nested-guest scenario convert to a
+     *        shutdown VMEXIT. */
+    HMSVM_CHECK_EXIT_DUE_TO_EVENT_DELIVERY();
+    if (RT_UNLIKELY(pVCpu->hm.s.Event.fPending))
+    {
+        STAM_COUNTER_INC(&pVCpu->hm.s.StatInjectPendingInterpret);
+        return VINF_EM_RAW_INJECT_TRPM_EVENT;
+    }
 
-    /* Indicate that we no longer need to #VMEXIT when the nested-guest is ready to receive interrupts/NMIs, it is now ready. */
-    pVmcbNstGst->ctrl.u64InterceptCtrl &= ~SVM_CTRL_INTERCEPT_VINTR;
-    pVmcbNstGst->ctrl.u64VmcbCleanBits &= ~(HMSVM_VMCB_CLEAN_INTERCEPTS | HMSVM_VMCB_CLEAN_TPR);
+    hmR0SvmSetPendingXcptDB(pVCpu);
+    return VINF_SUCCESS;
+}
 
-    /* Deliver the pending interrupt/NMI via hmR0SvmEvaluatePendingEventNested() and resume guest execution. */
-    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIntWindow);
+
+/**
+ * Nested-guest \#VMEXIT handler for breakpoint exceptions (SVM_EXIT_EXCEPTION_3).
+ * Conditional \#VMEXIT.
+ */
+HMSVM_EXIT_DECL hmR0SvmNestedExitXcptBP(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
+{
+    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
+
+    /** @todo if triple-fault is returned in nested-guest scenario convert to a
+     *        shutdown VMEXIT. */
+    HMSVM_CHECK_EXIT_DUE_TO_EVENT_DELIVERY();
+
+    SVMEVENT Event;
+    Event.u          = 0;
+    Event.n.u1Valid  = 1;
+    Event.n.u3Type   = SVM_EVENT_EXCEPTION;
+    Event.n.u8Vector = X86_XCPT_BP;
+    hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
     return VINF_SUCCESS;
 }
 
diff --git a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
index 3bb22ba..66d030a 100644
--- a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
@@ -2674,7 +2674,7 @@ static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig)
         LogRel(("CPUM: Failed to query microcode revision. rc=%Rrc\n", rc));
     }
 
-    /* Mask out the VME capability on certain CPUs, unless overridden by fForceVme. 
+    /* Mask out the VME capability on certain CPUs, unless overridden by fForceVme.
      * VME bug was fixed in AGESA 1.0.0.6, microcode patch level 8001126.
      */
     if ( (pVM->cpum.s.GuestFeatures.enmMicroarch == kCpumMicroarch_AMD_Zen_Ryzen)
@@ -3258,12 +3258,12 @@ static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig)
     /* Update the max and current feature sizes to shut up annoying Linux kernels. */
     if (cbXSaveMaxReport != cbXSaveMaxActual && fGuestXcr0Mask)
     {
-        pCurLeaf = cpumR3CpuIdGetExactLeaf(pCpum, 13, 0); 
+        pCurLeaf = cpumR3CpuIdGetExactLeaf(pCpum, 13, 0);
         if (pCurLeaf)
         {
             LogRel(("CPUM: Changing leaf 13[0]: EBX=%#RX32 -> %#RX32, ECX=%#RX32 -> %#RX32\n",
                     pCurLeaf->uEbx, cbXSaveMaxReport, pCurLeaf->uEcx, cbXSaveMaxReport));
-            pCurLeaf->uEbx = cbXSaveMaxReport; 
+            pCurLeaf->uEbx = cbXSaveMaxReport;
             pCurLeaf->uEcx = cbXSaveMaxReport;
         }
     }
diff --git a/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp b/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp
index 5f02a59..174ef02 100644
--- a/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp
@@ -52,6 +52,7 @@
 #include <iprt/param.h>
 #include <iprt/file.h>
 #include <iprt/mem.h>
+#include <iprt/formats/elf64.h>
 
 #include "DBGFInternal.h"
 
@@ -68,8 +69,6 @@
 #include <VBox/log.h>
 #include <VBox/version.h>
 
-#include "../../Runtime/include/internal/ldrELF64.h"
-
 
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
diff --git a/src/VBox/VMM/VMMR3/DBGFR3Flow.cpp b/src/VBox/VMM/VMMR3/DBGFR3Flow.cpp
index 334d5a7..7e9c5f7 100644
--- a/src/VBox/VMM/VMMR3/DBGFR3Flow.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFR3Flow.cpp
@@ -43,6 +43,7 @@
 #include <iprt/sort.h>
 #include <iprt/strcache.h>
 
+
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
@@ -195,6 +196,7 @@ typedef struct DBGFFLOWBRANCHTBLITINT
 /** Pointer to the internal control flow graph branch table iterator state. */
 typedef DBGFFLOWBRANCHTBLITINT *PDBGFFLOWBRANCHTBLITINT;
 
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
@@ -596,7 +598,7 @@ static int dbgfR3FlowBbSplit(PDBGFFLOWINT pThis, PDBGFFLOWBBINT pFlowBb, PDBGFAD
             rc = VERR_NO_MEMORY;
     }
     else
-        AssertFailedStmt(rc = VERR_INVALID_STATE); /** @todo: Proper status code. */
+        AssertFailedStmt(rc = VERR_INVALID_STATE); /** @todo Proper status code. */
 
     return rc;
 }
@@ -772,7 +774,7 @@ static bool dbgfR3FlowSearchMovWithConstantPtrSizeBackwards(PDBGFFLOWBBINT pFlow
 
     for (;;)
     {
-        /** @todo: Avoid to disassemble again. */
+        /** @todo Avoid to disassemble again. */
         PDBGFFLOWBBINSTR pInstr = &pFlowBb->aInstr[idxInstrCur];
         DBGFDISSTATE DisState;
         char szOutput[_4K];
@@ -1092,7 +1094,7 @@ static int dbgfR3FlowBbCheckBranchTblCandidate(PDBGFFLOWINT pThis, PDBGFFLOWBBIN
                 pFlowBb->pFlowBranchTbl = NULL;
                 rc = dbgfR3FlowTryResolveIndirectBranch(pThis, pFlowBb, pUVM, idCpu, pDisParam, fFlagsDisasm);
             }
-            /** @todo: else check that the base register is not modified in this basic block. */
+            /** @todo else check that the base register is not modified in this basic block. */
         }
         else
             dbgfR3FlowBbSetError(pFlowBb, VERR_INVALID_STATE,
diff --git a/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp b/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp
index 847680c..72ee9f3 100644
--- a/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp
@@ -470,15 +470,15 @@ VMMR3DECL(void) DBGFR3PlugInLoadAll(PUVM pUVM)
     AssertRCReturnVoid(rc);
     strcat(szPath, pszSuff);
 
-    PRTDIR pDir;
-    rc = RTDirOpenFiltered(&pDir, szPath, RTDIRFILTER_WINNT, 0);
+    RTDIR hDir;
+    rc = RTDirOpenFiltered(&hDir, szPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     if (RT_SUCCESS(rc))
     {
         /*
          * Now read it and try load each of the plug-in modules.
          */
         RTDIRENTRY DirEntry;
-        while (RT_SUCCESS(RTDirRead(pDir, &DirEntry, NULL)))
+        while (RT_SUCCESS(RTDirRead(hDir, &DirEntry, NULL)))
         {
             szPath[offDir] = '\0';
             rc = RTPathAppend(szPath, sizeof(szPath), DirEntry.szName);
@@ -495,7 +495,7 @@ VMMR3DECL(void) DBGFR3PlugInLoadAll(PUVM pUVM)
             }
         }
 
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
 }
 
diff --git a/src/VBox/VMM/VMMR3/EM.cpp b/src/VBox/VMM/VMMR3/EM.cpp
index bec2bad..e5e6c0b 100644
--- a/src/VBox/VMM/VMMR3/EM.cpp
+++ b/src/VBox/VMM/VMMR3/EM.cpp
@@ -1989,10 +1989,11 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc)
                         if (CPUMIsGuestSvmCtrlInterceptSet(pCtx, SVM_CTRL_INTERCEPT_INTR))
                         {
                             VBOXSTRICTRC rcStrict = IEMExecSvmVmexit(pVCpu, SVM_EXIT_INTR, 0, 0);
-                            if (rcStrict == VINF_SVM_VMEXIT)
+                            if (RT_SUCCESS(rcStrict))
                                 rc2 = VINF_EM_RESCHEDULE;
                             else
                             {
+                                AssertMsgFailed(("INTR #VMEXIT failed! rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
                                 Log(("EM: SVM Nested-guest INTR #VMEXIT failed! rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
                                 /** @todo should we call iemInitiateCpuShutdown? Should this
                                  *        result in trapping triple-fault intercepts? */
@@ -2028,10 +2029,11 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc)
                             if (CPUMIsGuestSvmCtrlInterceptSet(pCtx, SVM_CTRL_INTERCEPT_VINTR))
                             {
                                 VBOXSTRICTRC rcStrict = IEMExecSvmVmexit(pVCpu, SVM_EXIT_VINTR, 0, 0);
-                                if (rcStrict == VINF_SVM_VMEXIT)
+                                if (RT_SUCCESS(rcStrict))
                                     rc2 = VINF_EM_RESCHEDULE;
                                 else
                                 {
+                                    AssertMsgFailed(("VINTR #VMEXIT failed! rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
                                     Log(("EM: SVM Nested-guest VINTR #VMEXIT failed! rc=%Rrc\n", VBOXSTRICTRC_VAL(rcStrict)));
                                     /** @todo should we call iemInitiateCpuShutdown? Should this
                                      *        result in trapping triple-fault intercepts? */
diff --git a/src/VBox/VMM/VMMR3/HM.cpp b/src/VBox/VMM/VMMR3/HM.cpp
index 4d79d62..021a369 100644
--- a/src/VBox/VMM/VMMR3/HM.cpp
+++ b/src/VBox/VMM/VMMR3/HM.cpp
@@ -1801,12 +1801,10 @@ VMMR3_INT_DECL(void) HMR3PagingModeChanged(PVM pVM, PVMCPU pVCpu, PGMMODE enmSha
      * extra careful if/when the guest switches back to protected mode.
      */
     if (enmGuestMode == PGMMODE_REAL)
-    {
-        Log(("HMR3PagingModeChanged indicates real mode execution\n"));
         pVCpu->hm.s.vmx.fWasInRealMode = true;
-    }
-    else
-        Log(("HMR3PagingModeChanged indicates %d mode execution\n", enmGuestMode));
+
+    Log4(("HMR3PagingModeChanged: Guest paging mode '%s', shadow paging mode '%s'\n", PGMGetModeName(enmGuestMode),
+          PGMGetModeName(enmShadowMode)));
 }
 
 
@@ -2691,7 +2689,7 @@ VMMR3DECL(bool) HMR3CanExecuteGuest(PVM pVM, PCPUMCTX pCtx)
 
     Assert(HMIsEnabled(pVM));
 
-#if defined(VBOX_WITH_NESTED_HWVIRT) && defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM)
+#ifdef VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM
     if (CPUMIsGuestInNestedHwVirtMode(pCtx))
     {
         Log(("HMR3CanExecuteGuest: In nested-guest mode - returning false"));
diff --git a/src/VBox/VMM/VMMR3/MM.cpp b/src/VBox/VMM/VMMR3/MM.cpp
index 4639e2b..c28e1e8 100644
--- a/src/VBox/VMM/VMMR3/MM.cpp
+++ b/src/VBox/VMM/VMMR3/MM.cpp
@@ -854,4 +854,3 @@ VMMR3DECL(uint32_t) MMR3PhysGet4GBRamHoleSize(PVM pVM)
     return pVM->mm.s.cbRamHole;
 }
 
-
diff --git a/src/VBox/VMM/VMMR3/PATMA.asm b/src/VBox/VMM/VMMR3/PATMA.asm
index 2a1943c..5c9969d 100644
--- a/src/VBox/VMM/VMMR3/PATMA.asm
+++ b/src/VBox/VMM/VMMR3/PATMA.asm
@@ -3,6 +3,7 @@
 ; PATM Assembly Routines.
 ;
 
+;
 ; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/VMM/VMMR3/PDMThread.cpp b/src/VBox/VMM/VMMR3/PDMThread.cpp
index 06bfc3c..4c2fa5c 100644
--- a/src/VBox/VMM/VMMR3/PDMThread.cpp
+++ b/src/VBox/VMM/VMMR3/PDMThread.cpp
@@ -185,7 +185,7 @@ static int pdmR3ThreadInit(PVM pVM, PPPDMTHREAD ppThread, size_t cbStack, RTTHRE
         RTSemEventMultiDestroy(pThread->Internal.s.BlockEvent);
         pThread->Internal.s.BlockEvent = NIL_RTSEMEVENTMULTI;
     }
-    MMHyperFree(pVM, pThread);
+    MMR3HeapFree(pThread);
     *ppThread = NULL;
 
     return rc;
diff --git a/src/VBox/VMM/VMMR3/cpus/Intel_Core2_X6800_2_93GHz.h b/src/VBox/VMM/VMMR3/cpus/Intel_Core2_X6800_2_93GHz.h
new file mode 100644
index 0000000..957d18c
--- /dev/null
+++ b/src/VBox/VMM/VMMR3/cpus/Intel_Core2_X6800_2_93GHz.h
@@ -0,0 +1,257 @@
+/* $Id: Intel_Core2_X6800_2_93GHz.h $ */
+/** @file
+ * CPU database entry "Intel Core2 X6800 2.93GHz".
+ * Generated at 2017-11-04T22:32:41Z by VBoxCpuReport v5.2.1r118907 on linux.amd64.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef VBOX_CPUDB_Intel_Core2_X6800_2_93GHz
+#define VBOX_CPUDB_Intel_Core2_X6800_2_93GHz
+
+
+#ifndef CPUM_DB_STANDALONE
+/**
+ * CPUID leaves for Intel(R) Core(TM)2 CPU         X6800  @ 2.93GHz.
+ */
+static CPUMCPUIDLEAF const g_aCpuIdLeaves_Intel_Core2_X6800_2_93GHz[] =
+{
+    { 0x00000000, 0x00000000, 0x00000000, 0x0000000a, 0x756e6547, 0x6c65746e, 0x49656e69, 0 },
+    { 0x00000001, 0x00000000, 0x00000000, 0x000006f6, 0x00020800, 0x0000e3bd, 0xbfebfbff, 0 | CPUMCPUIDLEAF_F_CONTAINS_APIC_ID | CPUMCPUIDLEAF_F_CONTAINS_APIC },
+    { 0x00000002, 0x00000000, 0x00000000, 0x05b0b101, 0x005657f0, 0x00000000, 0x2cb43049, 0 },
+    { 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000004, 0x00000000, UINT32_MAX, 0x04000121, 0x01c0003f, 0x0000003f, 0x00000001, 0 },
+    { 0x00000004, 0x00000001, UINT32_MAX, 0x04000122, 0x01c0003f, 0x0000003f, 0x00000001, 0 },
+    { 0x00000004, 0x00000002, UINT32_MAX, 0x04004143, 0x03c0003f, 0x00000fff, 0x00000001, 0 },
+    { 0x00000004, 0x00000003, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000005, 0x00000000, 0x00000000, 0x00000040, 0x00000040, 0x00000003, 0x00000020, 0 },
+    { 0x00000006, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000001, 0x00000000, 0 },
+    { 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000008, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000a, 0x00000000, 0x00000000, 0x07280202, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000000, 0x00000000, 0x00000000, 0x80000008, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x20100800, 0 },
+    { 0x80000002, 0x00000000, 0x00000000, 0x65746e49, 0x2952286c, 0x726f4320, 0x4d542865, 0 },
+    { 0x80000003, 0x00000000, 0x00000000, 0x43203229, 0x20205550, 0x20202020, 0x58202020, 0 },
+    { 0x80000004, 0x00000000, 0x00000000, 0x30303836, 0x20402020, 0x33392e32, 0x007a4847, 0 },
+    { 0x80000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10008040, 0x00000000, 0 },
+    { 0x80000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000008, 0x00000000, 0x00000000, 0x00003024, 0x00000000, 0x00000000, 0x00000000, 0 },
+};
+#endif /* !CPUM_DB_STANDALONE */
+
+
+#ifndef CPUM_DB_STANDALONE
+/**
+ * MSR ranges for Intel(R) Core(TM)2 CPU         X6800  @ 2.93GHz.
+ */
+static CPUMMSRRANGE const g_aMsrRanges_Intel_Core2_X6800_2_93GHz[] =
+{
+    MFX(0x00000000, "IA32_P5_MC_ADDR", Ia32P5McAddr, Ia32P5McAddr, 0, UINT64_C(0xfffffffffffbffff), 0), /* value=0x1398780 */
+    MFI(0x00000001, "IA32_P5_MC_TYPE", Ia32P5McType), /* value=0x0 */
+    MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x40 */
+    MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* Villain? value=0x11d1`f468a982 */
+    MFX(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT32_C(0x88040b27), 0, 0), /* value=0x88040b27 */
+    MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00900), 0x600, UINT64_C(0xfffffff0000000ff)),
+    MVX(0x00000021, "C2_UNK_0000_0021", 0, ~(uint64_t)UINT32_MAX, UINT32_C(0xffffffe0)),
+    MFX(0x0000002a, "EBL_CR_POWERON", IntelEblCrPowerOn, IntelEblCrPowerOn, 0x41880000, UINT64_C(0xffffffffdff7ffbe), 0), /* value=0x41880000 */
+    MVI(0x0000002f, "P6_UNK_0000_002f", 0),
+    MVX(0x00000032, "P6_UNK_0000_0032", 0, UINT64_C(0xffffffff01fe0000), 0),
+    MVX(0x00000033, "TEST_CTL", 0, UINT64_C(0xffffffff7fffffff), 0),
+    MFO(0x0000003a, "IA32_FEATURE_CONTROL", Ia32FeatureControl), /* value=0x5 */
+    MVO(0x0000003f, "P6_UNK_0000_003f", 0xea),
+    RFN(0x00000040, 0x00000043, "MSR_LASTBRANCH_n_FROM_IP", IntelLastBranchToN, IntelLastBranchToN),
+    MVX(0x0000004a, "P6_UNK_0000_004a", 0, UINT64_C(0xffffff0000000000), 0), /* value=0x0 */
+    MVX(0x0000004b, "P6_UNK_0000_004b", 0, UINT64_C(0xffffff0000000000), 0), /* value=0x0 */
+    MVX(0x0000004c, "P6_UNK_0000_004c", 0, UINT64_C(0xffffff0000000000), 0), /* value=0x0 */
+    MVX(0x0000004d, "P6_UNK_0000_004d", 0, 0, 0), /* value=0xf53ed6ff`f9f9e16e */
+    MVX(0x0000004e, "P6_UNK_0000_004e", 0, 0, 0), /* value=0xf7ffbdfb`bfbfabeb */
+    MVX(0x0000004f, "P6_UNK_0000_004f", 0, UINT64_C(0xffffffffffffff00), 0), /* value=0xff */
+    RFN(0x00000060, 0x00000063, "MSR_LASTBRANCH_n_TO_IP", IntelLastBranchFromN, IntelLastBranchFromN),
+    MVX(0x0000006c, "P6_UNK_0000_006c", 0, UINT64_C(0xffffffff00000080), 0),
+    MVX(0x0000006d, "P6_UNK_0000_006d", 0, UINT64_C(0xffffffff00000080), 0),
+    MVX(0x0000006e, "P6_UNK_0000_006e", 0, UINT64_C(0xffffffff00000080), 0),
+    MVO(0x0000006f, "P6_UNK_0000_006f", 0xadb),
+    MFN(0x00000079, "IA32_BIOS_UPDT_TRIG", WriteOnly, IgnoreWrite),
+    MFX(0x0000008b, "BBL_CR_D3|BIOS_SIGN", Ia32BiosSignId, Ia32BiosSignId, 0, UINT32_MAX, 0), /* value=0xc6`00000000 */
+    MFO(0x0000009b, "IA32_SMM_MONITOR_CTL", Ia32SmmMonitorCtl), /* value=0x0 */
+    MFX(0x000000a8, "C2_EMTTM_CR_TABLES_0", IntelCore2EmttmCrTablesN, IntelCore2EmttmCrTablesN, 0x61b, UINT64_MAX, 0), /* value=0x61b */
+    MFX(0x000000a9, "C2_EMTTM_CR_TABLES_1", IntelCore2EmttmCrTablesN, IntelCore2EmttmCrTablesN, 0x61b, UINT64_MAX, 0), /* value=0x61b */
+    MFX(0x000000aa, "C2_EMTTM_CR_TABLES_2", IntelCore2EmttmCrTablesN, IntelCore2EmttmCrTablesN, 0x61b, UINT64_MAX, 0), /* value=0x61b */
+    MFX(0x000000ab, "C2_EMTTM_CR_TABLES_3", IntelCore2EmttmCrTablesN, IntelCore2EmttmCrTablesN, 0x61b, UINT64_MAX, 0), /* value=0x61b */
+    MFX(0x000000ac, "C2_EMTTM_CR_TABLES_4", IntelCore2EmttmCrTablesN, IntelCore2EmttmCrTablesN, 0x61b, UINT64_MAX, 0), /* value=0x61b */
+    MFX(0x000000ad, "C2_EMTTM_CR_TABLES_5", IntelCore2EmttmCrTablesN, IntelCore2EmttmCrTablesN, UINT32_C(0x8000061b), UINT64_MAX, 0), /* value=0x8000061b */
+    RSN(0x000000c1, 0x000000c2, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, ~(uint64_t)UINT32_MAX, 0),
+    MVI(0x000000c7, "P6_UNK_0000_00c7", UINT64_C(0x3200000058000000)),
+    MFX(0x000000cd, "MSR_FSB_FREQ", IntelP6FsbFrequency, ReadOnly, 0x800, 0, 0), /* value=0x800 */
+    MVO(0x000000ce, "P6_UNK_0000_00ce", UINT64_C(0x1b0b277f7f071b)),
+    MVO(0x000000e0, "C2_UNK_0000_00e0", 0x7820f0),
+    MVO(0x000000e1, "C2_UNK_0000_00e1", UINT32_C(0xf0f00000)),
+    MFX(0x000000e2, "MSR_PKG_CST_CONFIG_CONTROL", IntelPkgCStConfigControl, IntelPkgCStConfigControl, 0, UINT64_C(0xffffffff0000ffff), UINT32_C(0xff000000)), /* value=0x26b204 */
+    MFX(0x000000e3, "C2_SMM_CST_MISC_INFO", IntelCore2SmmCStMiscInfo, IntelCore2SmmCStMiscInfo, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x0 */
+    MFX(0x000000e4, "MSR_PMG_IO_CAPTURE_BASE", IntelPmgIoCaptureBase, IntelPmgIoCaptureBase, 0, ~(uint64_t)UINT32_MAX, UINT32_C(0xff800000)), /* value=0x0 */
+    MVO(0x000000e5, "C2_UNK_0000_00e5", UINT32_C(0xd00201c8)),
+    MFN(0x000000e7, "IA32_MPERF", Ia32MPerf, Ia32MPerf), /* value=0xa0`16e07631 */
+    MFN(0x000000e8, "IA32_APERF", Ia32APerf, Ia32APerf), /* value=0x7e`79c4e805 */
+    MFX(0x000000ee, "C1_EXT_CONFIG", IntelCore1ExtConfig, IntelCore1ExtConfig, 0, UINT64_C(0xffffffffefc5ffff), 0), /* value=0xa8000000`c17d4300 */
+    MFX(0x000000fe, "IA32_MTRRCAP", Ia32MtrrCap, ReadOnly, 0x508, 0, 0), /* value=0x508 */
+    MVX(0x00000116, "BBL_CR_ADDR", 0, UINT64_C(0xffffff000000001f), 0),
+    MVX(0x00000118, "BBL_CR_DECC", 0xffdfe, UINT64_C(0xfffffffffff00000), 0),
+    MFN(0x0000011a, "BBL_CR_TRIG", WriteOnly, IgnoreWrite),
+    MVI(0x0000011b, "P6_UNK_0000_011b", 0),
+    MVX(0x0000011c, "C2_UNK_0000_011c", UINT32_C(0xe003cf6f), UINT64_C(0xffffffff07f80000), 0),
+    MFX(0x0000011e, "BBL_CR_CTL3", IntelBblCrCtl3, IntelBblCrCtl3, UINT32_C(0xbf702109), UINT64_C(0xfffffffffff3fe9f), 0), /* value=0xbf702109 */
+    MVX(0x0000014a, "TODO_0000_014a", 0, ~(uint64_t)UINT32_MAX, 0),
+    MVX(0x0000014b, "TODO_0000_014b", 0, ~(uint64_t)UINT32_MAX, 0),
+    MVX(0x0000014c, "TODO_0000_014c", 0, ~(uint64_t)UINT32_MAX, 0),
+    MVX(0x0000014e, "P6_UNK_0000_014e", 0x7ab9f777, UINT64_C(0xffffffff00000080), 0),
+    MVI(0x0000014f, "P6_UNK_0000_014f", 0xf000),
+    MVX(0x00000151, "P6_UNK_0000_0151", 0x42100400, ~(uint64_t)UINT32_MAX, 0),
+    MFX(0x0000015f, "C1_DTS_CAL_CTRL", IntelCore1DtsCalControl, IntelCore1DtsCalControl, 0, UINT64_C(0xffffffffffc0ffff), 0), /* value=0x230820 */
+    MFX(0x00000174, "IA32_SYSENTER_CS", Ia32SysEnterCs, Ia32SysEnterCs, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x10 */
+    MFN(0x00000175, "IA32_SYSENTER_ESP", Ia32SysEnterEsp, Ia32SysEnterEsp), /* value=0x0 */
+    MFN(0x00000176, "IA32_SYSENTER_EIP", Ia32SysEnterEip, Ia32SysEnterEip), /* value=0xffffffff`81846c20 */
+    MFX(0x00000179, "IA32_MCG_CAP", Ia32McgCap, ReadOnly, 0x6, 0, 0), /* value=0x6 */
+    MFX(0x0000017a, "IA32_MCG_STATUS", Ia32McgStatus, Ia32McgStatus, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x0 */
+    RSN(0x00000186, 0x00000187, "IA32_PERFEVTSELn", Ia32PerfEvtSelN, Ia32PerfEvtSelN, 0x0, ~(uint64_t)UINT32_MAX, 0),
+    MVO(0x00000193, "C2_UNK_0000_0193", 0),
+    MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio, IntelFlexRatio, 0, UINT64_C(0xfffffffffffee0c0), 0), /* value=0x0 */
+    MFX(0x00000198, "IA32_PERF_STATUS", Ia32PerfStatus, ReadOnly, UINT64_C(0xb270b2786320620), 0, 0), /* value=0xb270b27`86320620 */
+    MFX(0x00000199, "IA32_PERF_CTL", Ia32PerfCtl, Ia32PerfCtl, 0x820, 0, 0), /* Might bite. value=0x820 */
+    MFX(0x0000019a, "IA32_CLOCK_MODULATION", Ia32ClockModulation, Ia32ClockModulation, 0x2, UINT64_C(0xffffffffffffffe1), 0), /* value=0x2 */
+    MFX(0x0000019b, "IA32_THERM_INTERRUPT", Ia32ThermInterrupt, Ia32ThermInterrupt, 0x3, UINT64_C(0xffffffff00010100), UINT32_C(0xff0000e0)), /* value=0x3 */
+    MFX(0x0000019c, "IA32_THERM_STATUS", Ia32ThermStatus, Ia32ThermStatus, UINT32_C(0x881c0000), UINT64_C(0xfffffffff87f017f), 0x780fc00), /* value=0x881c0000 */
+    MFX(0x0000019d, "IA32_THERM2_CTL", Ia32Therm2Ctl, ReadOnly, 0x61b, 0, 0), /* value=0x61b */
+    MVX(0x0000019e, "P6_UNK_0000_019e", 0x6930000, UINT64_C(0xffffffffffff0000), 0),
+    MVI(0x0000019f, "P6_UNK_0000_019f", 0),
+    MFX(0x000001a0, "IA32_MISC_ENABLE", Ia32MiscEnable, Ia32MiscEnable, UINT64_C(0x4062972489), UINT64_C(0x52603199f6), 0), /* value=0x40`62972489 */
+    MVX(0x000001a1, "P6_UNK_0000_01a1", 0, UINT64_C(0xffff000000000000), 0),
+    MFX(0x000001a2, "I7_MSR_TEMPERATURE_TARGET", IntelI7TemperatureTarget, ReadOnly, 0x1000, 0, 0), /* value=0x1000 */
+    MVX(0x000001aa, "P6_PIC_SENS_CFG", 0x7e1f042f, ~(uint64_t)UINT32_MAX, 0),
+    MVX(0x000001bf, "C2_UNK_0000_01bf", 0x404, UINT64_C(0xffffffffffff0000), 0),
+    MFX(0x000001c9, "MSR_LASTBRANCH_TOS", IntelLastBranchTos, IntelLastBranchTos, 0, UINT64_C(0xfffffffffffffffe), 0), /* value=0x3 */
+    MVX(0x000001d3, "P6_UNK_0000_01d3", 0x8000, UINT64_C(0xffffffffffff7fff), 0),
+    MFX(0x000001d9, "IA32_DEBUGCTL", Ia32DebugCtl, Ia32DebugCtl, 0, 0, UINT64_C(0xffffffffffffe03c)), /* value=0x1 */
+    MFO(0x000001db, "P6_LAST_BRANCH_FROM_IP", P6LastBranchFromIp), /* value=0xffffffff`8142d5f6 */
+    MFO(0x000001dc, "P6_LAST_BRANCH_TO_IP", P6LastBranchToIp), /* value=0xffffffff`810644e0 */
+    MFN(0x000001dd, "P6_LAST_INT_FROM_IP", P6LastIntFromIp, P6LastIntFromIp), /* value=0xffffffff`81039669 */
+    MFN(0x000001de, "P6_LAST_INT_TO_IP", P6LastIntToIp, P6LastIntToIp), /* value=0xffffffff`81039020 */
+    MVO(0x000001e0, "MSR_ROB_CR_BKUPTMPDR6", 0xff0),
+    MFX(0x000001f8, "IA32_PLATFORM_DCA_CAP", Ia32PlatformDcaCap, Ia32PlatformDcaCap, 0, UINT64_C(0xfffffffffffffffe), 0), /* value=0x0 */
+    MFO(0x000001f9, "IA32_CPU_DCA_CAP", Ia32CpuDcaCap), /* value=0x0 */
+    MFX(0x000001fa, "IA32_DCA_0_CAP", Ia32Dca0Cap, Ia32Dca0Cap, 0, UINT64_C(0xfffffffffefe17ff), 0), /* value=0xc01e488 */
+    MFX(0x00000200, "IA32_MTRR_PHYS_BASE0", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x0, 0, UINT64_C(0xfffffff000000ff8)), /* value=0x6 */
+    MFX(0x00000201, "IA32_MTRR_PHYS_MASK0", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x0, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xf`80000800 */
+    MFX(0x00000202, "IA32_MTRR_PHYS_BASE1", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x1, 0, UINT64_C(0xfffffff000000ff8)), /* value=0x80000006 */
+    MFX(0x00000203, "IA32_MTRR_PHYS_MASK1", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x1, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xf`c0000800 */
+    MFX(0x00000204, "IA32_MTRR_PHYS_BASE2", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x2, 0, UINT64_C(0xfffffff000000ff8)), /* value=0xc0000006 */
+    MFX(0x00000205, "IA32_MTRR_PHYS_MASK2", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x2, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xf`f0000800 */
+    MFX(0x00000206, "IA32_MTRR_PHYS_BASE3", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x3, 0, UINT64_C(0xfffffff000000ff8)), /* value=0xcff00000 */
+    MFX(0x00000207, "IA32_MTRR_PHYS_MASK3", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x3, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xf`fff00800 */
+    MFX(0x00000208, "IA32_MTRR_PHYS_BASE4", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x4, 0, UINT64_C(0xfffffff000000ff8)), /* value=0x1`00000006 */
+    MFX(0x00000209, "IA32_MTRR_PHYS_MASK4", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x4, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xf`e0000800 */
+    MFX(0x0000020a, "IA32_MTRR_PHYS_BASE5", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x5, 0, UINT64_C(0xfffffff000000ff8)), /* value=0x1`20000006 */
+    MFX(0x0000020b, "IA32_MTRR_PHYS_MASK5", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x5, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xf`f0000800 */
+    MFX(0x0000020c, "IA32_MTRR_PHYS_BASE6", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x6, 0, UINT64_C(0xfffffff000000ff8)), /* value=0x0 */
+    MFX(0x0000020d, "IA32_MTRR_PHYS_MASK6", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x6, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x0 */
+    MFX(0x0000020e, "IA32_MTRR_PHYS_BASE7", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x7, 0, UINT64_C(0xfffffff000000ff8)), /* value=0x0 */
+    MFX(0x0000020f, "IA32_MTRR_PHYS_MASK7", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x7, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x0 */
+    MFS(0x00000250, "IA32_MTRR_FIX64K_00000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix64K_00000),
+    MFS(0x00000258, "IA32_MTRR_FIX16K_80000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix16K_80000),
+    MFS(0x00000259, "IA32_MTRR_FIX16K_A0000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix16K_A0000),
+    MFS(0x00000268, "IA32_MTRR_FIX4K_C0000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_C0000),
+    MFS(0x00000269, "IA32_MTRR_FIX4K_C8000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_C8000),
+    MFS(0x0000026a, "IA32_MTRR_FIX4K_D0000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_D0000),
+    MFS(0x0000026b, "IA32_MTRR_FIX4K_D8000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_D8000),
+    MFS(0x0000026c, "IA32_MTRR_FIX4K_E0000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_E0000),
+    MFS(0x0000026d, "IA32_MTRR_FIX4K_E8000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_E8000),
+    MFS(0x0000026e, "IA32_MTRR_FIX4K_F0000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_F0000),
+    MFS(0x0000026f, "IA32_MTRR_FIX4K_F8000", Ia32MtrrFixed, Ia32MtrrFixed, GuestMsrs.msr.MtrrFix4K_F8000),
+    MFS(0x00000277, "IA32_PAT", Ia32Pat, Ia32Pat, Guest.msrPAT),
+    MFZ(0x000002ff, "IA32_MTRR_DEF_TYPE", Ia32MtrrDefType, Ia32MtrrDefType, GuestMsrs.msr.MtrrDefType, 0, UINT64_C(0xfffffffffffff3f8)),
+    MFX(0x00000309, "IA32_FIXED_CTR0", Ia32FixedCtrN, Ia32FixedCtrN, 0x0, UINT64_C(0xffffff0000000000), 0), /* value=0xc4e */
+    MFX(0x0000030a, "IA32_FIXED_CTR1", Ia32FixedCtrN, Ia32FixedCtrN, 0x1, UINT64_C(0xffffff0000000c00), 0), /* value=0xff`9dd0e550 */
+    MFX(0x0000030b, "IA32_FIXED_CTR2", Ia32FixedCtrN, Ia32FixedCtrN, 0x2, UINT64_C(0xffffff0000000000), 0), /* value=0x205b */
+    MFX(0x00000345, "IA32_PERF_CAPABILITIES", Ia32PerfCapabilities, ReadOnly, 0x82, 0, 0), /* value=0x82 */
+    MFX(0x0000038d, "IA32_FIXED_CTR_CTRL", Ia32FixedCtrCtrl, Ia32FixedCtrCtrl, 0, UINT64_C(0xfffffffffffff000), 0), /* value=0xf0 */
+    MFX(0x0000038e, "IA32_PERF_GLOBAL_STATUS", Ia32PerfGlobalStatus, ReadOnly, 0, 0, 0), /* value=0x0 */
+    MFN(0x0000038f, "IA32_PERF_GLOBAL_CTRL", Ia32PerfGlobalCtrl, Ia32PerfGlobalCtrl), /* value=0x7`00000003 */
+    MFI(0x00000390, "IA32_PERF_GLOBAL_OVF_CTRL", Ia32PerfGlobalOvfCtrl), /* value=0x7`00000007 */
+    MFX(0x000003f1, "IA32_PEBS_ENABLE", Ia32PebsEnable, Ia32PebsEnable, 0, UINT64_C(0xfffffffffffffffe), 0), /* value=0x0 */
+    RFN(0x00000400, 0x00000417, "IA32_MCi_CTL_STATUS_ADDR_MISC", Ia32McCtlStatusAddrMiscN, Ia32McCtlStatusAddrMiscN),
+    MVX(0x00000478, "TODO_0000_0478", 0, 0, 0),
+    MFX(0x00000480, "IA32_VMX_BASIC", Ia32VmxBase, ReadOnly, UINT64_C(0x1a040000000007), 0, 0), /* value=0x1a0400`00000007 */
+    MFX(0x00000481, "IA32_VMX_PINBASED_CTLS", Ia32VmxPinbasedCtls, ReadOnly, UINT64_C(0x1f00000016), 0, 0), /* value=0x1f`00000016 */
+    MFX(0x00000482, "IA32_VMX_PROCBASED_CTLS", Ia32VmxProcbasedCtls, ReadOnly, UINT64_C(0x77b9fffe0401e172), 0, 0), /* value=0x77b9fffe`0401e172 */
+    MFX(0x00000483, "IA32_VMX_EXIT_CTLS", Ia32VmxExitCtls, ReadOnly, UINT64_C(0x3efff00036dff), 0, 0), /* value=0x3efff`00036dff */
+    MFX(0x00000484, "IA32_VMX_ENTRY_CTLS", Ia32VmxEntryCtls, ReadOnly, UINT64_C(0x1fff000011ff), 0, 0), /* value=0x1fff`000011ff */
+    MFX(0x00000485, "IA32_VMX_MISC", Ia32VmxMisc, ReadOnly, 0x403c0, 0, 0), /* value=0x403c0 */
+    MFX(0x00000486, "IA32_VMX_CR0_FIXED0", Ia32VmxCr0Fixed0, ReadOnly, UINT32_C(0x80000021), 0, 0), /* value=0x80000021 */
+    MFX(0x00000487, "IA32_VMX_CR0_FIXED1", Ia32VmxCr0Fixed1, ReadOnly, UINT32_MAX, 0, 0), /* value=0xffffffff */
+    MFX(0x00000488, "IA32_VMX_CR4_FIXED0", Ia32VmxCr4Fixed0, ReadOnly, 0x2000, 0, 0), /* value=0x2000 */
+    MFX(0x00000489, "IA32_VMX_CR4_FIXED1", Ia32VmxCr4Fixed1, ReadOnly, 0x27ff, 0, 0), /* value=0x27ff */
+    MFX(0x0000048a, "IA32_VMX_VMCS_ENUM", Ia32VmxVmcsEnum, ReadOnly, 0x2c, 0, 0), /* value=0x2c */
+    MVX(0x000004f8, "C2_UNK_0000_04f8", UINT64_C(0xf5d5fc5e567f6a8e), 0, 0),
+    MVX(0x000004f9, "C2_UNK_0000_04f9", UINT64_C(0xb595ed5afff3a8ff), 0, 0),
+    MVX(0x000004fa, "C2_UNK_0000_04fa", UINT64_C(0xfddfae7f5bfb7c47), 0, 0),
+    MVX(0x000004fb, "C2_UNK_0000_04fb", UINT64_C(0xf7ffbc5f93fd6fde), 0, 0),
+    MVX(0x000004fc, "C2_UNK_0000_04fc", UINT64_C(0xb7c5c95891fb71c6), 0, 0),
+    MVX(0x000004fd, "C2_UNK_0000_04fd", UINT64_C(0xb5d5cc5c95799df6), 0, 0),
+    MVX(0x000004fe, "C2_UNK_0000_04fe", UINT64_C(0xba95c85ad1fb3973), 0, 0),
+    MVX(0x000004ff, "C2_UNK_0000_04ff", UINT64_C(0xf5bdda4f9aff3943), 0, 0),
+    MVX(0x00000590, "C2_UNK_0000_0590", 0, 0, 0),
+    MVX(0x00000591, "C2_UNK_0000_0591", 0, ~(uint64_t)UINT32_MAX, 0),
+    MFN(0x000005a0, "C2_PECI_CTL", IntelCore2PeciControl, IntelCore2PeciControl), /* Might bite. value=0x1 */
+    MVI(0x000005a1, "C2_UNK_0000_05a1", 0), /* Might bite. */
+    MFN(0x00000600, "IA32_DS_AREA", Ia32DsArea, Ia32DsArea), /* value=0xffff8801`2aaeba00 */
+    MFX(0xc0000080, "AMD64_EFER", Amd64Efer, Amd64Efer, 0xd01, 0x400, UINT64_C(0xfffffffffffff2fe)),
+    MFN(0xc0000081, "AMD64_STAR", Amd64SyscallTarget, Amd64SyscallTarget), /* Might bite. value=0x230010`00000000 */
+    MFN(0xc0000082, "AMD64_STAR64", Amd64LongSyscallTarget, Amd64LongSyscallTarget), /* Might bite. value=0xffffffff`81844650 */
+    MFN(0xc0000083, "AMD64_STARCOMPAT", Amd64CompSyscallTarget, Amd64CompSyscallTarget), /* Might bite. value=0xffffffff`81846c90 */
+    MFN(0xc0000084, "AMD64_SYSCALL_FLAG_MASK", Amd64SyscallFlagMask, Amd64SyscallFlagMask), /* Might bite. value=0x47700 */
+    MFN(0xc0000100, "AMD64_FS_BASE", Amd64FsBase, Amd64FsBase), /* Might bite. value=0x7fb5`e58d0740 */
+    MFN(0xc0000101, "AMD64_GS_BASE", Amd64GsBase, Amd64GsBase), /* Might bite. value=0xffff8801`2fc00000 */
+    MFN(0xc0000102, "AMD64_KERNEL_GS_BASE", Amd64KernelGsBase, Amd64KernelGsBase), /* Might bite. value=0x0 */
+};
+#endif /* !CPUM_DB_STANDALONE */
+
+
+/**
+ * Database entry for Intel(R) Core(TM)2 CPU         X6800  @ 2.93GHz.
+ */
+static CPUMDBENTRY const g_Entry_Intel_Core2_X6800_2_93GHz =
+{
+    /*.pszName          = */ "Intel Core2 X6800 2.93GHz",
+    /*.pszFullName      = */ "Intel(R) Core(TM)2 CPU         X6800  @ 2.93GHz",
+    /*.enmVendor        = */ CPUMCPUVENDOR_INTEL,
+    /*.uFamily          = */ 6,
+    /*.uModel           = */ 15,
+    /*.uStepping        = */ 6,
+    /*.enmMicroarch     = */ kCpumMicroarch_Intel_Core2_Merom,
+    /*.uScalableBusFreq = */ CPUM_SBUSFREQ_267MHZ,
+    /*.fFlags           = */ 0,
+    /*.cMaxPhysAddrWidth= */ 36,
+    /*.fMxCsrMask       = */ 0x0000ffff,
+    /*.paCpuIdLeaves    = */ NULL_ALONE(g_aCpuIdLeaves_Intel_Core2_X6800_2_93GHz),
+    /*.cCpuIdLeaves     = */ ZERO_ALONE(RT_ELEMENTS(g_aCpuIdLeaves_Intel_Core2_X6800_2_93GHz)),
+    /*.enmUnknownCpuId  = */ CPUMUNKNOWNCPUID_LAST_STD_LEAF,
+    /*.DefUnknownCpuId  = */ { 0x07280202, 0x00000000, 0x00000000, 0x00000000 },
+    /*.fMsrMask         = */ UINT32_MAX,
+    /*.cMsrRanges       = */ ZERO_ALONE(RT_ELEMENTS(g_aMsrRanges_Intel_Core2_X6800_2_93GHz)),
+    /*.paMsrRanges      = */ NULL_ALONE(g_aMsrRanges_Intel_Core2_X6800_2_93GHz),
+};
+
+#endif /* !VBOX_DB_Intel_Core2_X6800_2_93GHz */
+
diff --git a/src/VBox/VMM/VMMRC/CPUMRCPatchHlp.asm b/src/VBox/VMM/VMMRC/CPUMRCPatchHlp.asm
index 98a9843..d9faf0d 100644
--- a/src/VBox/VMM/VMMRC/CPUMRCPatchHlp.asm
+++ b/src/VBox/VMM/VMMRC/CPUMRCPatchHlp.asm
@@ -3,6 +3,7 @@
 ; CPUM - Patch Helpers.
 ;
 
+;
 ; Copyright (C) 2015-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/VMM/VMMRC/VMMRC99.asm b/src/VBox/VMM/VMMRC/VMMRC99.asm
index 43e03bc..62e90a7 100644
--- a/src/VBox/VMM/VMMRC/VMMRC99.asm
+++ b/src/VBox/VMM/VMMRC/VMMRC99.asm
@@ -3,6 +3,7 @@
 ; VMMRC99 - The last object module in the link.
 ;
 
+;
 ; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/VMM/VMMRC/VMMRCBuiltin.def b/src/VBox/VMM/VMMRC/VMMRCBuiltin.def
index d2a0f50..0291fe3 100644
--- a/src/VBox/VMM/VMMRC/VMMRCBuiltin.def
+++ b/src/VBox/VMM/VMMRC/VMMRCBuiltin.def
@@ -3,6 +3,7 @@
 ; VMM Raw-mode Context Builtin DLL - Definition file for generating import library.
 ;
 
+;
 ; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/VMM/VMMSwitcher/AMD64To32Bit.asm b/src/VBox/VMM/VMMSwitcher/AMD64To32Bit.asm
index c49732d..2e0ddc4 100644
--- a/src/VBox/VMM/VMMSwitcher/AMD64To32Bit.asm
+++ b/src/VBox/VMM/VMMSwitcher/AMD64To32Bit.asm
@@ -33,4 +33,3 @@
 %include "VBox/asmdefs.mac"
 %include "VMMSwitcher/AMD64andLegacy.mac"
 
-
diff --git a/src/VBox/VMM/VMMSwitcher/X86Stub.asm b/src/VBox/VMM/VMMSwitcher/X86Stub.asm
index 8072c11..35392eb 100644
--- a/src/VBox/VMM/VMMSwitcher/X86Stub.asm
+++ b/src/VBox/VMM/VMMSwitcher/X86Stub.asm
@@ -108,4 +108,3 @@ GLOBALNAME Def
 
     iend
 
-
diff --git a/src/VBox/VMM/dtrace/lib/amd64/vbox-arch-types.d b/src/VBox/VMM/dtrace/lib/amd64/vbox-arch-types.d
index fd9448a..d5637d3 100644
--- a/src/VBox/VMM/dtrace/lib/amd64/vbox-arch-types.d
+++ b/src/VBox/VMM/dtrace/lib/amd64/vbox-arch-types.d
@@ -12,15 +12,6 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
@@ -46,4 +37,3 @@ typedef struct uint128_t
     uint64_t    au64[2];
 } uint128_t;
 
-
diff --git a/src/VBox/VMM/dtrace/lib/vbox-types.d b/src/VBox/VMM/dtrace/lib/vbox-types.d
index 4ee13d2..d79f4fa 100644
--- a/src/VBox/VMM/dtrace/lib/vbox-types.d
+++ b/src/VBox/VMM/dtrace/lib/vbox-types.d
@@ -12,15 +12,6 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
diff --git a/src/VBox/VMM/dtrace/lib/x86/vbox-arch-types.d b/src/VBox/VMM/dtrace/lib/x86/vbox-arch-types.d
index 4287010..3889dda 100644
--- a/src/VBox/VMM/dtrace/lib/x86/vbox-arch-types.d
+++ b/src/VBox/VMM/dtrace/lib/x86/vbox-arch-types.d
@@ -12,15 +12,6 @@
  * Foundation, in version 2 as it comes in the "COPYING" file of the
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- *
- * The contents of this file may alternatively be used under the terms
- * of the Common Development and Distribution License Version 1.0
- * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
- * VirtualBox OSE distribution, in which case the provisions of the
- * CDDL are applicable instead of those of the GPL.
- *
- * You may elect to license modified versions of this file under the
- * terms and conditions of either the GPL or the CDDL or both.
  */
 
 
@@ -29,4 +20,3 @@ typedef uint32_t    RTR3PTR;
 typedef uint32_t    RTHCPTR;
 typedef void       *RTR0PTR;
 
-
diff --git a/src/VBox/VMM/include/CPUMInternal.mac b/src/VBox/VMM/include/CPUMInternal.mac
index d285d0c..be7244d 100644
--- a/src/VBox/VMM/include/CPUMInternal.mac
+++ b/src/VBox/VMM/include/CPUMInternal.mac
@@ -243,7 +243,7 @@ struc CPUMCPU
     .Guest.hwvirt.svm.cPauseFilter           resw         1
     .Guest.hwvirt.svm.cPauseFilterThreshold  resw         1
     .Guest.hwvirt.svm.fInterceptEvents       resb         1
-    .Guest.hwvirt.svm.u8Padding1             resb         1
+    .Guest.hwvirt.svm.fHMCachedVmcb          resb         1
     .Guest.hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES  1
     .Guest.hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES  1
     .Guest.hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES  1
@@ -529,7 +529,7 @@ struc CPUMCPU
     .Hyper.hwvirt.svm.cPauseFilter           resw         1
     .Hyper.hwvirt.svm.cPauseFilterThreshold  resw         1
     .Hyper.hwvirt.svm.fInterceptEvents       resb         1
-    .Hyper.hwvirt.svm.u8Padding1             resb         1
+    .Hyper.hwvirt.svm.fHMCachedVmcb          resb         1
     .Hyper.hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES  1
     .Hyper.hwvirt.svm.pvMsrBitmapR3          RTR3PTR_RES  1
     .Hyper.hwvirt.svm.pvIoBitmapR0           RTR0PTR_RES  1
diff --git a/src/VBox/VMM/include/HMInternal.h b/src/VBox/VMM/include/HMInternal.h
index de214a6..2f7c748 100644
--- a/src/VBox/VMM/include/HMInternal.h
+++ b/src/VBox/VMM/include/HMInternal.h
@@ -185,7 +185,7 @@ RT_C_DECLS_BEGIN
 #define HM_CHANGED_SVM_RESERVED1                 RT_BIT(20)
 #define HM_CHANGED_SVM_RESERVED2                 RT_BIT(21)
 #define HM_CHANGED_SVM_RESERVED3                 RT_BIT(22)
-#define HM_CHANGED_SVM_NESTED_GUEST              RT_BIT(23)
+#define HM_CHANGED_SVM_RESERVED4                 RT_BIT(23)
 
 #define HM_CHANGED_ALL_GUEST                     (  HM_CHANGED_GUEST_CR0                \
                                                   | HM_CHANGED_GUEST_CR3                \
diff --git a/src/VBox/VMM/testcase/mkdsk.sh b/src/VBox/VMM/testcase/mkdsk.sh
index b09f8fd..60a78dd 100755
--- a/src/VBox/VMM/testcase/mkdsk.sh
+++ b/src/VBox/VMM/testcase/mkdsk.sh
@@ -1,4 +1,8 @@
 #!/bin/sh
+## @file
+# Obsolete?
+#
+
 #
 # Copyright (C) 2006-2017 Oracle Corporation
 #
diff --git a/src/VBox/VMM/testcase/tstAsmStructsAsm-lst.sed b/src/VBox/VMM/testcase/tstAsmStructsAsm-lst.sed
index 4bbb5dd..2f813e8 100644
--- a/src/VBox/VMM/testcase/tstAsmStructsAsm-lst.sed
+++ b/src/VBox/VMM/testcase/tstAsmStructsAsm-lst.sed
@@ -1,3 +1,20 @@
+# $Id: tstAsmStructsAsm-lst.sed $
+## @file
+# For testing assembly struct when using yasm.
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
 #
 # Strip stuff lines and spaces we don't care about.
 #
diff --git a/src/VBox/VMM/testcase/tstMicroRC.def b/src/VBox/VMM/testcase/tstMicroRC.def
index b4ad0e1..e12413a 100644
--- a/src/VBox/VMM/testcase/tstMicroRC.def
+++ b/src/VBox/VMM/testcase/tstMicroRC.def
@@ -2,6 +2,7 @@
 ;
 ; VMM Guest Context Micro Benchmark - Definition file.
 
+;
 ; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/VMM/testcase/tstVMStruct.h b/src/VBox/VMM/testcase/tstVMStruct.h
index 1fc032f..962cdcd 100644
--- a/src/VBox/VMM/testcase/tstVMStruct.h
+++ b/src/VBox/VMM/testcase/tstVMStruct.h
@@ -140,6 +140,7 @@
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.cPauseFilter);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.cPauseFilterThreshold);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.fInterceptEvents);
+    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.fHMCachedVmcb);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pvMsrBitmapR0);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pvMsrBitmapR3);
     GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pvIoBitmapR0);
diff --git a/src/VBox/VMM/tools/Makefile.kmk b/src/VBox/VMM/tools/Makefile.kmk
index 310cac5..5a39fa0 100644
--- a/src/VBox/VMM/tools/Makefile.kmk
+++ b/src/VBox/VMM/tools/Makefile.kmk
@@ -59,7 +59,11 @@ VBoxCpuReport_DEFS      = IN_VMM_R3 IN_VBOX_CPU_REPORT
 VBoxCpuReport_INCS      = ../include
 VBoxCpuReport_SOURCES   = \
 	VBoxCpuReport.cpp \
-       ../VMMR3/CPUMR3CpuId.cpp
+	VBoxCpuReportMsrSup.cpp \
+	../VMMR3/CPUMR3CpuId.cpp
+VBoxCpuReport_SOURCES.linux = \
+	VBoxCpuReportMsrLinux.cpp
+VBoxCpuReport_DEFS.linux    = VBCR_HAVE_PLATFORM_MSR_PROBER
 VBoxCpuReport_LIBS      = \
 	$(PATH_STAGE_LIB)/SUPR3Static$(VBOX_SUFF_LIB) \
        $(VBOX_LIB_RUNTIME_STATIC)
diff --git a/src/VBox/VMM/tools/VBoxCpuReport.cpp b/src/VBox/VMM/tools/VBoxCpuReport.cpp
index 89f8bea..89a7ae2 100644
--- a/src/VBox/VMM/tools/VBoxCpuReport.cpp
+++ b/src/VBox/VMM/tools/VBoxCpuReport.cpp
@@ -16,9 +16,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/asm.h>
 #include <iprt/asm-amd64-x86.h>
 #include <iprt/buildconfig.h>
@@ -39,10 +39,12 @@
 #include <VBox/vmm/cpum.h>
 #include <VBox/sup.h>
 
+#include "VBoxCpuReport.h"
 
-/*******************************************************************************
-*   Structures and Typedefs                                                    *
-*******************************************************************************/
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 /** Write only register. */
 #define VBCPUREPMSR_F_WRITE_ONLY      RT_BIT(0)
 
@@ -57,9 +59,9 @@ typedef struct VBCPUREPMSR
 } VBCPUREPMSR;
 
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 /** The CPU vendor.  Used by the MSR code. */
 static CPUMCPUVENDOR    g_enmVendor = CPUMCPUVENDOR_INVALID;
 /** The CPU microarchitecture.  Used by the MSR code. */
@@ -76,8 +78,12 @@ static bool             g_fNoMsrs = false;
 /** Snooping info storage for vbCpuRepGuessScalableBusFrequencyName. */
 static uint64_t         g_uMsrIntelP6FsbFrequency = UINT64_MAX;
 
+/** The MSR accessors interface. */
+static VBCPUREPMSRACCESSORS g_MsrAcc;
+
 
-static void vbCpuRepDebug(const char *pszMsg, ...)
+
+void vbCpuRepDebug(const char *pszMsg, ...)
 {
     va_list va;
 
@@ -101,7 +107,7 @@ static void vbCpuRepDebug(const char *pszMsg, ...)
 }
 
 
-static void vbCpuRepPrintf(const char *pszMsg, ...)
+void vbCpuRepPrintf(const char *pszMsg, ...)
 {
     va_list va;
 
@@ -218,7 +224,7 @@ static bool vbCpuRepSupportsX2Apic(void)
 static bool msrProberWrite(uint32_t uMsr, uint64_t uValue)
 {
     bool fGp;
-    int rc = SUPR3MsrProberWrite(uMsr, NIL_RTCPUID, uValue, &fGp);
+    int rc = g_MsrAcc.pfnMsrWrite(uMsr, NIL_RTCPUID, uValue, &fGp);
     AssertRC(rc);
     return RT_SUCCESS(rc) && !fGp;
 }
@@ -229,7 +235,7 @@ static bool msrProberRead(uint32_t uMsr, uint64_t *puValue)
 {
     *puValue = 0;
     bool fGp;
-    int rc = SUPR3MsrProberRead(uMsr, NIL_RTCPUID, puValue, &fGp);
+    int rc = g_MsrAcc.pfnMsrProberRead(uMsr, NIL_RTCPUID, puValue, &fGp);
     AssertRC(rc);
     return RT_SUCCESS(rc) && !fGp;
 }
@@ -239,7 +245,7 @@ static bool msrProberRead(uint32_t uMsr, uint64_t *puValue)
 static bool msrProberModifyNoChange(uint32_t uMsr)
 {
     SUPMSRPROBERMODIFYRESULT Result;
-    int rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, UINT64_MAX, 0, &Result);
+    int rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, UINT64_MAX, 0, &Result);
     return RT_SUCCESS(rc)
         && !Result.fBeforeGp
         && !Result.fModifyGp
@@ -252,7 +258,7 @@ static bool msrProberModifyNoChange(uint32_t uMsr)
 static bool msrProberModifyZero(uint32_t uMsr)
 {
     SUPMSRPROBERMODIFYRESULT Result;
-    int rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, 0, 0, &Result);
+    int rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, 0, 0, &Result);
     return RT_SUCCESS(rc)
         && !Result.fBeforeGp
         && !Result.fModifyGp
@@ -280,15 +286,15 @@ static int msrProberModifyBitChanges(uint32_t uMsr, uint64_t *pfIgnMask, uint64_
 
         /* Set it. */
         SUPMSRPROBERMODIFYRESULT ResultSet;
-        int rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, fBitMask, &ResultSet);
+        int rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, fBitMask, &ResultSet);
         if (RT_FAILURE(rc))
-            return RTMsgErrorRc(rc, "SUPR3MsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, fBitMask, rc);
+            return RTMsgErrorRc(rc, "pfnMsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, fBitMask, rc);
 
         /* Clear it. */
         SUPMSRPROBERMODIFYRESULT ResultClear;
-        rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, 0, &ResultClear);
+        rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, 0, &ResultClear);
         if (RT_FAILURE(rc))
-            return RTMsgErrorRc(rc, "SUPR3MsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, 0, rc);
+            return RTMsgErrorRc(rc, "pfnMsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, 0, rc);
 
         if (ResultSet.fModifyGp || ResultClear.fModifyGp)
             *pfGpMask |= fBitMask;
@@ -323,15 +329,15 @@ static int msrProberModifyBit(uint32_t uMsr, unsigned iBit)
 
     /* Set it. */
     SUPMSRPROBERMODIFYRESULT ResultSet;
-    int rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, fBitMask, &ResultSet);
+    int rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, fBitMask, &ResultSet);
     if (RT_FAILURE(rc))
-        return RTMsgErrorRc(-2, "SUPR3MsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, fBitMask, rc);
+        return RTMsgErrorRc(-2, "pfnMsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, fBitMask, rc);
 
     /* Clear it. */
     SUPMSRPROBERMODIFYRESULT ResultClear;
-    rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, 0, &ResultClear);
+    rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, ~fBitMask, 0, &ResultClear);
     if (RT_FAILURE(rc))
-        return RTMsgErrorRc(-2, "SUPR3MsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, 0, rc);
+        return RTMsgErrorRc(-2, "pfnMsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, ~fBitMask, 0, rc);
 
     if (ResultSet.fModifyGp || ResultClear.fModifyGp)
         return -1;
@@ -362,10 +368,10 @@ static int msrProberModifyBit(uint32_t uMsr, unsigned iBit)
 static bool msrProberModifySimpleGp(uint32_t uMsr, uint64_t fAndMask, uint64_t fOrMask)
 {
     SUPMSRPROBERMODIFYRESULT Result;
-    int rc = SUPR3MsrProberModify(uMsr, NIL_RTCPUID, fAndMask, fOrMask, &Result);
+    int rc = g_MsrAcc.pfnMsrProberModify(uMsr, NIL_RTCPUID, fAndMask, fOrMask, &Result);
     if (RT_FAILURE(rc))
     {
-        RTMsgError("SUPR3MsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, fAndMask, fOrMask, rc);
+        RTMsgError("g_MsrAcc.pfnMsrProberModify(%#x,,%#llx,%#llx,): %Rrc", uMsr, fAndMask, fOrMask, rc);
         return false;
     }
     return !Result.fBeforeGp
@@ -530,12 +536,12 @@ static int findMsrs(VBCPUREPMSR **ppaMsrs, uint32_t *pcMsrs, uint32_t fMsrMask)
                 /* Read probing normally does it. */
                 uint64_t uValue = 0;
                 bool     fGp    = true;
-                int rc = SUPR3MsrProberRead(uMsr, NIL_RTCPUID, &uValue, &fGp);
+                int rc = g_MsrAcc.pfnMsrProberRead(uMsr, NIL_RTCPUID, &uValue, &fGp);
                 if (RT_FAILURE(rc))
                 {
                     RTMemFree(*ppaMsrs);
                     *ppaMsrs = NULL;
-                    return RTMsgErrorRc(rc, "SUPR3MsrProberRead failed on %#x: %Rrc\n", uMsr, rc);
+                    return RTMsgErrorRc(rc, "pfnMsrProberRead failed on %#x: %Rrc\n", uMsr, rc);
                 }
 
                 uint32_t fFlags;
@@ -561,12 +567,12 @@ static int findMsrs(VBCPUREPMSR **ppaMsrs, uint32_t *pcMsrs, uint32_t fMsrMask)
                     }
 #endif
                     fGp = true;
-                    rc = SUPR3MsrProberWrite(uMsr, NIL_RTCPUID, 0, &fGp);
+                    rc = g_MsrAcc.pfnMsrProberWrite(uMsr, NIL_RTCPUID, 0, &fGp);
                     if (RT_FAILURE(rc))
                     {
                         RTMemFree(*ppaMsrs);
                         *ppaMsrs = NULL;
-                        return RTMsgErrorRc(rc, "SUPR3MsrProberWrite failed on %#x: %Rrc\n", uMsr, rc);
+                        return RTMsgErrorRc(rc, "pfnMsrProberWrite failed on %#x: %Rrc\n", uMsr, rc);
                     }
                     uValue = 0;
                     fFlags = VBCPUREPMSR_F_WRITE_ONLY;
@@ -2539,9 +2545,48 @@ static VBCPUREPBADNESS queryMsrWriteBadness(uint32_t uMsr)
                 return VBCPUREPBADNESS_MIGHT_BITE;
             break;
 
+        /* KVM MSRs that are unsafe to touch. */
+        case 0x00000011: /* KVM */
+        case 0x00000012: /* KVM */
+            return VBCPUREPBADNESS_BOND_VILLAIN;
+
+        /*
+         * The TSC is tricky -- writing it isn't a problem, but if we put back the original
+         * value, we'll throw it out of whack. If we're on an SMP OS that uses the TSC for timing,
+         * we'll likely kill it, especially if we can't do the modification very quickly.
+         */
+        case 0x00000010: /* IA32_TIME_STAMP_COUNTER */
+            if (!g_MsrAcc.fAtomic)
+                return VBCPUREPBADNESS_BOND_VILLAIN;
+            break;
+
+        /*
+         * The following MSRs are not safe to modify in a typical OS if we can't do it atomically,
+         * i.e. read/modify/restore without allowing any other code to execute. Everything related
+         * to syscalls will blow up in our face if we go back to userland with modified MSRs.
+         */
+//        case 0x0000001b: /* IA32_APIC_BASE */
+        case 0xc0000081: /* MSR_K6_STAR */
+        case 0xc0000082: /* AMD64_STAR64 */
+        case 0xc0000083: /* AMD64_STARCOMPAT */
+        case 0xc0000084: /* AMD64_SYSCALL_FLAG_MASK */
+        case 0xc0000100: /* AMD64_FS_BASE */
+        case 0xc0000101: /* AMD64_GS_BASE */
+        case 0xc0000102: /* AMD64_KERNEL_GS_BASE */
+            if (!g_MsrAcc.fAtomic)
+                return VBCPUREPBADNESS_MIGHT_BITE;
+            break;
+
         case 0x000001a0: /* IA32_MISC_ENABLE */
         case 0x00000199: /* IA32_PERF_CTL */
             return VBCPUREPBADNESS_MIGHT_BITE;
+
+        case 0x000005a0: /* C2_PECI_CTL */
+        case 0x000005a1: /* C2_UNK_0000_05a1 */
+            if (g_enmVendor == CPUMCPUVENDOR_INTEL)
+                return VBCPUREPBADNESS_MIGHT_BITE;
+            break;
+
         case 0x00002000: /* P6_CR0. */
         case 0x00002003: /* P6_CR3. */
         case 0x00002004: /* P6_CR4. */
@@ -3315,6 +3360,11 @@ static int reportMsr_Ia32ApicBase(uint32_t uMsr, uint64_t uValue)
     /* For some reason, twiddling this bit kills a Tualatin PIII-S. */
     if (g_enmMicroarch == kCpumMicroarch_Intel_P6_III)
         fSkipMask |= RT_BIT(9);
+
+    /* If the OS uses the APIC, we have to be super careful. */
+    if (!g_MsrAcc.fAtomic)
+        fSkipMask |= UINT64_C(0x0000000ffffff000);
+
     return reportMsr_GenFunctionEx(uMsr, "Ia32ApicBase", uValue, fSkipMask, 0, NULL);
 }
 
@@ -3341,6 +3391,10 @@ static int reportMsr_Ia32MiscEnable(uint32_t uMsr, uint64_t uValue)
         RTThreadSleep(128);
     }
 
+    /* If the OS is using MONITOR/MWAIT we'd better not disable it! */
+    if (!g_MsrAcc.fAtomic)
+        fSkipMask |= RT_BIT(18);
+
     /* The no execute related flag is deadly if clear.  */
     if (   !(uValue & MSR_IA32_MISC_ENABLE_XD_DISABLE)
         && (   g_enmMicroarch <  kCpumMicroarch_Intel_First
@@ -3634,7 +3688,11 @@ static int reportMsr_Amd64Efer(uint32_t uMsr, uint64_t uValue)
 {
     uint64_t fSkipMask = 0;
     if (vbCpuRepSupportsLongMode())
+    {
         fSkipMask |= MSR_K6_EFER_LME;
+        if (!g_MsrAcc.fAtomic && (uValue & MSR_K6_EFER_SCE))
+            fSkipMask |= MSR_K6_EFER_SCE;
+    }
     if (   (uValue & MSR_K6_EFER_NXE)
         || vbCpuRepSupportsNX())
         fSkipMask |= MSR_K6_EFER_NXE;
@@ -4342,24 +4400,32 @@ static int probeMsrs(bool fHacking, const char *pszNameC, const char *pszCpuDesc
     }
 
     /*
-     * Initialize the support library and check if we can read MSRs.
+     * First try the the support library (also checks if we can really read MSRs).
      */
-    int rc = SUPR3Init(NULL);
+    int rc = VbCpuRepMsrProberInitSupDrv(&g_MsrAcc);
     if (RT_FAILURE(rc))
     {
-        vbCpuRepDebug("warning: Unable to initialize the support library (%Rrc), skipping MSR detection.\n", rc);
-        return VINF_SUCCESS;
+#ifdef VBCR_HAVE_PLATFORM_MSR_PROBER
+        /* Next try a platform-specific interface. */
+        rc = VbCpuRepMsrProberInitPlatform(&g_MsrAcc);
+#endif
+        if (RT_FAILURE(rc))
+        {
+            vbCpuRepDebug("warning: Unable to initialize any MSR access interface (%Rrc), skipping MSR detection.\n", rc);
+            return VINF_SUCCESS;
+        }
     }
+
     uint64_t uValue;
     bool     fGp;
-    rc = SUPR3MsrProberRead(MSR_IA32_TSC, NIL_RTCPUID, &uValue, &fGp);
+    rc = g_MsrAcc.pfnMsrProberRead(MSR_IA32_TSC, NIL_RTCPUID, &uValue, &fGp);
     if (RT_FAILURE(rc))
     {
         vbCpuRepDebug("warning: MSR probing not supported by the support driver (%Rrc), skipping MSR detection.\n", rc);
         return VINF_SUCCESS;
     }
     vbCpuRepDebug("MSR_IA32_TSC: %#llx fGp=%RTbool\n", uValue, fGp);
-    rc = SUPR3MsrProberRead(0xdeadface, NIL_RTCPUID, &uValue, &fGp);
+    rc = g_MsrAcc.pfnMsrProberRead(0xdeadface, NIL_RTCPUID, &uValue, &fGp);
     vbCpuRepDebug("0xdeadface: %#llx fGp=%RTbool rc=%Rrc\n", uValue, fGp, rc);
 
     /*
@@ -4417,6 +4483,9 @@ static int probeMsrs(bool fHacking, const char *pszNameC, const char *pszCpuDesc
         RTMemFree(paMsrs);
         paMsrs = NULL;
     }
+    if (g_MsrAcc.pfnTerm)
+        g_MsrAcc.pfnTerm();
+    RT_ZERO(g_MsrAcc);
     return rc;
 }
 
diff --git a/src/VBox/VMM/tools/VBoxCpuReport.h b/src/VBox/VMM/tools/VBoxCpuReport.h
new file mode 100644
index 0000000..94cd089
--- /dev/null
+++ b/src/VBox/VMM/tools/VBoxCpuReport.h
@@ -0,0 +1,51 @@
+/* $Id: VBoxCpuReport.h $ */
+/** @file
+ * VBoxCpuReport internal header file.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+#ifndef ___VBoxCpuReport_h___
+#define ___VBoxCpuReport_h___
+
+#include <VBox/sup.h>
+
+RT_C_DECLS_BEGIN
+
+typedef struct VBCPUREPMSRACCESSORS
+{
+    /** Wheter MSR prober can read/modify/restore MSRs more or less
+     *  atomically, without allowing other code to be executed. */
+    bool                    fAtomic;
+    /** @copydoc SUPR3MsrProberRead  */
+    DECLCALLBACKMEMBER(int, pfnMsrProberRead)(uint32_t uMsr, RTCPUID idCpu, uint64_t *puValue, bool *pfGp);
+    /** @copydoc SUPR3MsrProberWrite  */
+    DECLCALLBACKMEMBER(int, pfnMsrProberWrite)(uint32_t uMsr, RTCPUID idCpu, uint64_t uValue, bool *pfGp);
+    /** @copydoc SUPR3MsrProberModify */
+    DECLCALLBACKMEMBER(int, pfnMsrProberModify)(uint32_t uMsr, RTCPUID idCpu, uint64_t fAndMask, uint64_t fOrMask,
+                                                PSUPMSRPROBERMODIFYRESULT pResult);
+    /** Termination callback, optional. */
+    DECLCALLBACKMEMBER(void, pfnTerm)(void);
+} VBCPUREPMSRACCESSORS;
+typedef VBCPUREPMSRACCESSORS *PVBCPUREPMSRACCESSORS;
+
+extern void vbCpuRepDebug(const char *pszMsg, ...);
+extern void vbCpuRepPrintf(const char *pszMsg, ...);
+extern int  VbCpuRepMsrProberInitSupDrv(PVBCPUREPMSRACCESSORS pMsrAccessors);
+extern int  VbCpuRepMsrProberInitPlatform(PVBCPUREPMSRACCESSORS pMsrAccessors);
+
+RT_C_DECLS_END
+
+#endif
+
diff --git a/src/VBox/VMM/tools/VBoxCpuReportMsrLinux.cpp b/src/VBox/VMM/tools/VBoxCpuReportMsrLinux.cpp
new file mode 100644
index 0000000..d05173c
--- /dev/null
+++ b/src/VBox/VMM/tools/VBoxCpuReportMsrLinux.cpp
@@ -0,0 +1,169 @@
+/* $Id: VBoxCpuReportMsrLinux.cpp $ */
+/** @file
+ * MsrLinux - Linux-specific MSR access.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include "VBoxCpuReport.h"
+
+#include <iprt/file.h>
+#include <iprt/thread.h>
+
+#ifndef RT_OS_WINDOWS
+# include <unistd.h>
+#else /* RT_OS_WINDOWS: for test compiling this file on windows */
+# include <io.h>
+int pread(int, void *, size_t, off_t);
+int pwrite(int, void const *, size_t, off_t);
+#endif
+#include <fcntl.h>
+#include <errno.h>
+
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
+#define MSR_DEV_NAME    "/dev/cpu/0/msr"
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+/** The /dev/xxx/msr file descriptor. */
+static int              g_fdMsr;
+
+
+/**
+ * @interface_method_impl{VBCPUREPMSRACCESSORS,pfnMsrProberRead}
+ */
+static DECLCALLBACK(int) linuxMsrProberRead(uint32_t uMsr, RTCPUID idCpu, uint64_t *puValue, bool *pfGp)
+{
+    int  rc = VINF_SUCCESS;
+
+    if (idCpu != NIL_RTCPUID)
+        return VERR_INVALID_PARAMETER;
+
+    if (g_fdMsr < 0)
+        return VERR_INVALID_STATE;
+
+    *pfGp = true;
+    if (pread(g_fdMsr, puValue, sizeof(*puValue), uMsr) != sizeof(*puValue))
+        rc = VERR_READ_ERROR;
+    else
+        *pfGp = false;
+
+    return RT_SUCCESS(rc) && !pfGp;
+}
+
+
+/**
+ * @interface_method_impl{VBCPUREPMSRACCESSORS,pfnMsrProberWrite}
+ */
+static DECLCALLBACK(int) linuxMsrProberWrite(uint32_t uMsr, RTCPUID idCpu, uint64_t uValue, bool *pfGp)
+{
+    int  rc = VINF_SUCCESS;
+
+    if (idCpu != NIL_RTCPUID)
+        return VERR_INVALID_PARAMETER;
+
+    if (g_fdMsr < 0)
+        return VERR_INVALID_STATE;
+
+    *pfGp = true;
+    if (pwrite(g_fdMsr, &uValue, sizeof(uValue), uMsr) != sizeof(uValue))
+        rc = VERR_WRITE_ERROR;
+    else
+        *pfGp = false;
+
+    return RT_SUCCESS(rc) && !pfGp;
+}
+
+/**
+ * @interface_method_impl{VBCPUREPMSRACCESSORS,pfnMsrProberModify}
+ */
+static DECLCALLBACK(int) linuxMsrProberModify(uint32_t uMsr, RTCPUID idCpu, uint64_t fAndMask, uint64_t fOrMask,
+                                              PSUPMSRPROBERMODIFYRESULT pResult)
+{
+    int         rc = VINF_SUCCESS;
+    uint64_t    uBefore, uWrite, uAfter;
+    int         rcBefore, rcWrite, rcAfter, rcRestore;
+
+    if (idCpu != NIL_RTCPUID)
+        return VERR_INVALID_PARAMETER;
+
+    if (g_fdMsr < 0)
+        return VERR_INVALID_STATE;
+
+#if 0
+    vbCpuRepDebug("MSR %#x\n", uMsr);
+    RTThreadSleep(10);
+#endif
+    rcBefore = pread(g_fdMsr, &uBefore, sizeof(uBefore), uMsr);
+    uWrite = (uBefore & fAndMask) | fOrMask;
+    rcWrite = pwrite(g_fdMsr, &uWrite, sizeof(uWrite), uMsr);
+    rcAfter = pread(g_fdMsr, &uAfter, sizeof(uAfter), uMsr);
+    rcRestore = pwrite(g_fdMsr, &uBefore, sizeof(uBefore), uMsr);
+
+#if 0
+    vbCpuRepDebug("MSR: %#x, %#llx -> %#llx -> %#llx (%d/%d/%d/%d)\n",
+                  uMsr, uBefore, uWrite, uAfter,
+                  rcBefore, rcWrite != sizeof(uWrite), rcAfter, rcRestore);
+#endif
+    pResult->uBefore    = uBefore;
+    pResult->uWritten   = uWrite;
+    pResult->uAfter     = uAfter;
+    pResult->fBeforeGp  = rcBefore  != sizeof(uBefore);
+    pResult->fModifyGp  = rcWrite   != sizeof(uWrite);
+    pResult->fAfterGp   = rcAfter   != sizeof(uAfter);
+    pResult->fRestoreGp = rcRestore != sizeof(uBefore);
+
+    return rc;
+}
+
+
+/**
+ * @interface_method_impl{VBCPUREPMSRACCESSORS,pfnTerm}
+ */
+static DECLCALLBACK(void) linuxMsrProberTerm(void)
+{
+    if (g_fdMsr >= 0)
+    {
+        close(g_fdMsr);
+        g_fdMsr = -1;
+    }
+}
+
+int VbCpuRepMsrProberInitPlatform(PVBCPUREPMSRACCESSORS pMsrAccessors)
+{
+    RTFILE hFile;
+    int rc = RTFileOpen(&hFile, MSR_DEV_NAME, RTFILE_O_READWRITE | RTFILE_O_DENY_NONE | RTFILE_O_OPEN);
+    if (RT_SUCCESS(rc))
+    {
+        g_fdMsr = RTFileToNative(hFile);
+        Assert(g_fdMsr != -1);
+
+        pMsrAccessors->fAtomic             = false; /* Can't modify/restore MSRs without trip to R3. */
+        pMsrAccessors->pfnMsrProberRead    = linuxMsrProberRead;
+        pMsrAccessors->pfnMsrProberWrite   = linuxMsrProberWrite;
+        pMsrAccessors->pfnMsrProberModify  = linuxMsrProberModify;
+        pMsrAccessors->pfnTerm             = linuxMsrProberTerm;
+        return VINF_SUCCESS;
+    }
+    vbCpuRepDebug("warning: Failed to open " MSR_DEV_NAME ": %Rrc\n", rc);
+    return rc;
+}
diff --git a/src/VBox/VMM/tools/VBoxCpuReportMsrSup.cpp b/src/VBox/VMM/tools/VBoxCpuReportMsrSup.cpp
new file mode 100644
index 0000000..072b24a
--- /dev/null
+++ b/src/VBox/VMM/tools/VBoxCpuReportMsrSup.cpp
@@ -0,0 +1,53 @@
+/* $Id: VBoxCpuReportMsrSup.cpp $ */
+/** @file
+ * MsrSup - SupDrv-specific MSR access.
+ */
+
+/*
+ * Copyright (C) 2013-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include "VBoxCpuReport.h"
+#include <iprt/x86.h>
+
+
+int VbCpuRepMsrProberInitSupDrv(PVBCPUREPMSRACCESSORS pMsrFunctions)
+{
+    int rc = SUPR3Init(NULL);
+    if (RT_SUCCESS(rc))
+    {
+        /* Test if the MSR prober is available, since the interface is optional. The TSC MSR will exist on any supported CPU. */
+        uint64_t uValue;
+        bool     fGp;
+        rc = SUPR3MsrProberRead(MSR_IA32_TSC, NIL_RTCPUID, &uValue, &fGp);
+        if (   rc != VERR_NOT_IMPLEMENTED
+            && rc != VERR_INVALID_FUNCTION)
+        {
+            pMsrFunctions->fAtomic            = true;
+            pMsrFunctions->pfnMsrProberRead   = SUPR3MsrProberRead;
+            pMsrFunctions->pfnMsrProberWrite  = SUPR3MsrProberWrite;
+            pMsrFunctions->pfnMsrProberModify = SUPR3MsrProberModify;
+
+            pMsrFunctions->pfnTerm            = NULL;
+            return VINF_SUCCESS;
+
+        }
+        vbCpuRepDebug("warning: MSR probing not supported by the support driver (%Rrc).\n", rc);
+    }
+    else
+        vbCpuRepDebug("warning: Unable to initialize the support library (%Rrc).\n", rc);
+    return rc;
+}
+
diff --git a/src/VBox/VMM/tools/VBoxVMMPreload.cpp b/src/VBox/VMM/tools/VBoxVMMPreload.cpp
index 92ab27f..90060eb 100644
--- a/src/VBox/VMM/tools/VBoxVMMPreload.cpp
+++ b/src/VBox/VMM/tools/VBoxVMMPreload.cpp
@@ -16,9 +16,9 @@
  */
 
 
-/*******************************************************************************
-*   Header Files                                                               *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <iprt/buildconfig.h>
 #include <iprt/getopt.h>
 #include <iprt/initterm.h>
@@ -32,9 +32,9 @@
 #include <VBox/version.h>
 
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 /**
  * Known modules and their associated data (there are only known modules!).
  */
diff --git a/src/VBox/ValidationKit/.scm-settings b/src/VBox/ValidationKit/.scm-settings
new file mode 100644
index 0000000..56f2b4a
--- /dev/null
+++ b/src/VBox/ValidationKit/.scm-settings
@@ -0,0 +1,60 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the Validation Kit.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+
+# The validation kit is dual licensed.
+--license-ose-dual
+
+*.c16:                                  --treat-as .c
+*.c32:                                  --treat-as .c
+*.c64:                                  --treat-as .c
+
+*.css:                                  --treat-as .h
+*.js:                                   --treat-as .h
+
+/testdriver/*.ps1:                      --treat-as Makefile
+/testmanager/apache-template-*.conf:    --treat-as Makefile
+
+# Skip stuff without licenses and such.
+--filter-out-files *.txt
+--filter-out-files *.html
+--filter-out-files *.svg
+--filter-out-files /testmanager/misc/htpasswd-logout
+--filter-out-files /testmanager/misc/htpasswd-sample
+
+# Skip the XML for database diagrams.
+--filter-out-files /testmanager/db/TestManagerDatabase/*.xml
+--filter-out-files /testmanager/db/TestManagerDatabase.dmd
+
+# Skip ova test data
+--filter-out-files *.ova
+--filter-out-files *.pem
+
+# Skip some plain config files
+--filter-out-files /utils/TestExecServ/linux/vboxtxs.service
+--filter-out-files /utils/TestExecServ/win/*.reg
+--filter-out-files /utils/usb/linux/usbtest.service
+
diff --git a/src/VBox/ValidationKit/ValidationKitCodingGuidelines.cpp b/src/VBox/ValidationKit/ValidationKitCodingGuidelines.cpp
index ee99c6b..1688940 100644
--- a/src/VBox/ValidationKit/ValidationKitCodingGuidelines.cpp
+++ b/src/VBox/ValidationKit/ValidationKitCodingGuidelines.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/ValidationKit/bootsectors/bootsector-empty.asm b/src/VBox/ValidationKit/bootsectors/bootsector-empty.asm
index d201fae..834d0ce 100644
--- a/src/VBox/ValidationKit/bootsectors/bootsector-empty.asm
+++ b/src/VBox/ValidationKit/bootsectors/bootsector-empty.asm
@@ -58,4 +58,3 @@ padding:
 times 510 - (padding - start) db 0
     db 055h, 0aah
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bootsector-pae.asm b/src/VBox/ValidationKit/bootsectors/bootsector-pae.asm
index 13ada2a..93ba7fa 100644
--- a/src/VBox/ValidationKit/bootsectors/bootsector-pae.asm
+++ b/src/VBox/ValidationKit/bootsectors/bootsector-pae.asm
@@ -163,4 +163,3 @@ padding:
 times 510 - (padding - start) db 0
     db 055h, 0aah
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bootsector2-boot-registers-1.asm b/src/VBox/ValidationKit/bootsectors/bootsector2-boot-registers-1.asm
index 9f94dea..75a5ad1 100644
--- a/src/VBox/ValidationKit/bootsectors/bootsector2-boot-registers-1.asm
+++ b/src/VBox/ValidationKit/bootsectors/bootsector2-boot-registers-1.asm
@@ -74,4 +74,3 @@ main:
 BS2_PAD_IMAGE
 the_end:
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bootsector2-cpu-instr-1-template.mac b/src/VBox/ValidationKit/bootsectors/bootsector2-cpu-instr-1-template.mac
index 5d41670..051ce59 100644
--- a/src/VBox/ValidationKit/bootsectors/bootsector2-cpu-instr-1-template.mac
+++ b/src/VBox/ValidationKit/bootsectors/bootsector2-cpu-instr-1-template.mac
@@ -312,4 +312,3 @@ BITS TMPL_BITS
 
 %include "bootsector2-template-footer.mac"
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py b/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py
index 71558fa..d5a139a 100755
--- a/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py
+++ b/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py
@@ -30,7 +30,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 115735 $"
+__version__ = "$Revision: 118535 $"
 
 # Standard python imports.
 import os;
@@ -642,4 +642,3 @@ class Bs3CpuGenerated1Generator(object):
 if __name__ == '__main__':
     sys.exit(Bs3CpuGenerated1Generator().main(sys.argv));
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-asm.asm b/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-asm.asm
index a1c84fb..88ba8e1 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-asm.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-asm.asm
@@ -60,4 +60,3 @@ BS3_PROC_END   _bs3CpuInstr2_imul_bl_ud2
 BS3_INSTANTIATE_COMMON_TEMPLATE          "bs3-cpu-instr-2-template.mac"
 BS3_INSTANTIATE_TEMPLATE_WITH_WEIRD_ONES "bs3-cpu-instr-2-template.mac"
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.mac b/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.mac
index 0baeb07..3732c9c 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.mac
+++ b/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.mac
@@ -167,4 +167,3 @@ times (348) db 0cch ; fudge to avoid 'rderr' during boot.
 
 %include "bs3kit-template-footer.mac"   ; reset environment
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-SwitchFromV86To16BitAndCallC.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-SwitchFromV86To16BitAndCallC.asm
index 8ae7629..10bbf08 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-SwitchFromV86To16BitAndCallC.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-SwitchFromV86To16BitAndCallC.asm
@@ -97,4 +97,3 @@ BS3_PROC_BEGIN_CMN Bs3SwitchFromV86To16BitAndCallC, BS3_PBC_HYBRID
         BS3_HYBRID_RET
 BS3_PROC_END_CMN   Bs3SwitchFromV86To16BitAndCallC
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm
index 134c299..80d29c1 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm
@@ -708,4 +708,3 @@ CPU 286
         jmp     Bs3Trap16DoubleFaultHandler80386.common
 BS3_PROC_END   Bs3Trap16DoubleFaultHandler80286
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToProtFar16.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToProtFar16.asm
index 02e0262..9fa50b7 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToProtFar16.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToProtFar16.asm
@@ -116,5 +116,3 @@ BS3_PROC_END_CMN   Bs3SelFlatCodeToProtFar16
 ;
 BS3_CMN_FAR_STUB   Bs3SelFlatCodeToProtFar16, 4
 
-
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToRealMode.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToRealMode.asm
index de44f8a..4307d1c 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToRealMode.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatCodeToRealMode.asm
@@ -151,4 +151,3 @@ BS3_PROC_END_CMN   Bs3SelFlatCodeToRealMode
 ;
 BS3_CMN_FAR_STUB   Bs3SelFlatCodeToRealMode, 4
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatDataToProtFar16.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatDataToProtFar16.asm
index 4cc0ded..e6efc4b 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatDataToProtFar16.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SelFlatDataToProtFar16.asm
@@ -130,4 +130,3 @@ TONLY64 mov     rax, rcx
         BS3_HYBRID_RET
 BS3_PROC_END_CMN   Bs3SelFlatDataToProtFar16
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchHlpConvProtModeRetfPopBpDecBpAndReturn.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchHlpConvProtModeRetfPopBpDecBpAndReturn.asm
index a39a7fe..61fc986 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchHlpConvProtModeRetfPopBpDecBpAndReturn.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchHlpConvProtModeRetfPopBpDecBpAndReturn.asm
@@ -114,4 +114,3 @@ BS3_PROC_BEGIN_CMN Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn, BS3_PBC_NEAR
 %endif
 BS3_PROC_END_CMN   Bs3SwitchHlpConvProtModeRetfPopBpDecBpAndReturn
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-instantiate.c64 b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-instantiate.c64
index fd724f2..ab0f36b 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-instantiate.c64
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-instantiate.c64
@@ -27,4 +27,3 @@
 
 #include "bs3-cmn-instantiate-common.h"
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-dosexe.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-dosexe.asm
index c7e368d..4d8260f 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-dosexe.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-first-dosexe.asm
@@ -31,4 +31,3 @@
 ;
 %include "bs3-first-common.mac"
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesStub.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesStub.asm
index a972e62..dffc293 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesStub.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModesStub.asm
@@ -51,4 +51,3 @@ BS3_PROC_BEGIN_MODE Bs3TestDoModes, BS3_PBC_NEAR
 BS3_PROC_END_MODE   Bs3TestDoModes
 %endif
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-wc32-U8RS.asm b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-wc32-U8RS.asm
index 1fb74f7..280c1c1 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-wc32-U8RS.asm
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-wc32-U8RS.asm
@@ -58,4 +58,3 @@ $??U8RS:
         xor     edx, edx
         jmp     .return
 
-
diff --git a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac
index a81bc56..8f15b86 100644
--- a/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac
+++ b/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-template-header.mac
@@ -520,4 +520,3 @@
 %endif
 TMPL_BEGIN_TEXT
 
-
diff --git a/src/VBox/ValidationKit/common/utils.py b/src/VBox/ValidationKit/common/utils.py
index 9ae69f0..94e0ae2 100755
--- a/src/VBox/ValidationKit/common/utils.py
+++ b/src/VBox/ValidationKit/common/utils.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118928 $"
 
 
 # Standard Python imports.
@@ -44,10 +44,14 @@ import unittest;
 
 if sys.platform == 'win32':
     import ctypes;
+    import msvcrt;              # pylint: disable=import-error
     import win32api;            # pylint: disable=import-error
     import win32con;            # pylint: disable=import-error
     import win32console;        # pylint: disable=import-error
+    import win32file;           # pylint: disable=import-error
     import win32process;        # pylint: disable=import-error
+    import winerror;            # pylint: disable=import-error
+    import pywintypes;          # pylint: disable=import-error
 else:
     import signal;
 
@@ -287,6 +291,71 @@ def openNoInherit(sFile, sMode = 'r'):
             if offComma < 0:
                 return open(sFile, sMode + 'N');
             return open(sFile, sMode[:offComma] + 'N' + sMode[offComma:]);
+
+        # Just in case.
+        return open(sFile, sMode);
+
+    oFile = open(sFile, sMode)
+    #try:
+    fcntl(oFile, F_SETFD, fcntl(oFile, F_GETFD) | FD_CLOEXEC);
+    #except:
+    #    pass;
+    return oFile;
+
+def openNoDenyDeleteNoInherit(sFile, sMode = 'r'):
+    """
+    Wrapper around open() that tries it's best to make sure the file isn't
+    inherited by child processes.
+
+    This is a best effort thing at the moment as it doesn't synchronizes with
+    child process spawning in any way.  Thus it can be subject to races in
+    multithreaded programs.
+    """
+
+    try:
+        from fcntl import FD_CLOEXEC, F_GETFD, F_SETFD, fcntl; # pylint: disable=F0401
+    except:
+        if getHostOs() == 'win':
+            # Need to use CreateFile directly to open the file so we can feed it FILE_SHARE_DELETE.
+            fAccess = 0;
+            fDisposition = win32file.OPEN_EXISTING;                                                 # pylint: disable=no-member
+            if 'r' in sMode or '+' in sMode:
+                fAccess |= win32file.GENERIC_READ;                                                  # pylint: disable=no-member
+            if 'a' in sMode:
+                fAccess |= win32file.GENERIC_WRITE;                                                 # pylint: disable=no-member
+                fDisposition = win32file.OPEN_ALWAYS;                                               # pylint: disable=no-member
+            elif 'w' in sMode:
+                fAccess = win32file.GENERIC_WRITE;                                                  # pylint: disable=no-member
+                if '+' in sMode:
+                    fDisposition = win32file.OPEN_ALWAYS;                                           # pylint: disable=no-member
+                    fAccess |= win32file.GENERIC_READ;                                              # pylint: disable=no-member
+                else:
+                    fDisposition = win32file.CREATE_ALWAYS;                                         # pylint: disable=no-member
+            if not fAccess:
+                fAccess |= win32file.GENERIC_READ;                                                  # pylint: disable=no-member
+            fSharing = (win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE                      # pylint: disable=no-member
+                        | win32file.FILE_SHARE_DELETE);                                             # pylint: disable=no-member
+            hFile = win32file.CreateFile(sFile, fAccess, fSharing, None, fDisposition, 0, None);    # pylint: disable=no-member
+            if 'a' in sMode:
+                win32file.SetFilePointer(hFile, 0, win32file.FILE_END);                             # pylint: disable=no-member
+
+            # Turn the NT handle into a CRT file descriptor.
+            hDetachedFile = hFile.Detach();
+            if fAccess == win32file.GENERIC_READ:                                                   # pylint: disable=no-member
+                fOpen = os.O_RDONLY;
+            elif fAccess == win32file.GENERIC_WRITE:                                                # pylint: disable=no-member
+                fOpen = os.O_WRONLY;
+            else:
+                fOpen = os.O_RDWR;
+            if 'a' in sMode:
+                fOpen |= os.O_APPEND;
+            if 'b' in sMode or 't' in sMode:
+                fOpen |= os.O_TEXT;                                                                 # pylint: disable=no-member
+            fdFile = msvcrt.open_osfhandle(hDetachedFile, fOpen);
+
+            # Tell python to use this handle.
+            return os.fdopen(fdFile, sMode);
+
         # Just in case.
         return open(sFile, sMode);
 
@@ -669,7 +738,7 @@ def processTerminate(uPid):
                 fRc = True;
             except:
                 pass;
-            win32api.CloseHandle(hProcess)                                                      # pylint: disable=no-member
+            hProcess.Close(); #win32api.CloseHandle(hProcess)
     else:
         try:
             os.kill(uPid, signal.SIGTERM);
@@ -715,18 +784,22 @@ def processExists(uPid):
     """
     if sys.platform == 'win32':
         fRc = False;
+        # We try open the process for waiting since this is generally only forbidden in a very few cases.
         try:
-            hProcess = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION, False, uPid);   # pylint: disable=no-member
-        except:
+            hProcess = win32api.OpenProcess(win32con.SYNCHRONIZE, False, uPid);     # pylint: disable=no-member
+        except pywintypes.error as oXcpt:                                           # pylint: disable=no-member
+            if oXcpt.winerror == winerror.ERROR_ACCESS_DENIED:
+                fRc = True;
+        except Exception as oXcpt:
             pass;
         else:
-            win32api.CloseHandle(hProcess);                                                     # pylint: disable=no-member
+            hProcess.Close();
             fRc = True;
     else:
         try:
             os.kill(uPid, 0);
             fRc = True;
-        except:
+        except: ## @todo check error code.
             fRc = False;
     return fRc;
 
@@ -1529,6 +1602,35 @@ def getXcptInfo(cFrames = 1):
     return asRet;
 
 
+def getObjectTypeName(oObject):
+    """
+    Get the type name of the given object.
+    """
+    if oObject is None:
+        return 'None';
+
+    # Get the type object.
+    try:
+        oType = type(oObject);
+    except:
+        return 'type-throws-exception';
+
+    # Python 2.x only: Handle old-style object wrappers.
+    if sys.version_info[0] < 3:
+        try:
+            from types import InstanceType;
+            if oType == InstanceType:
+                oType = oObject.__class__;
+        except:
+            pass;
+
+    # Get the name.
+    try:
+        return oType.__name__;
+    except:
+        return '__type__-throws-exception';
+
+
 #
 # TestSuite stuff.
 #
diff --git a/src/VBox/ValidationKit/docs/Makefile.kmk b/src/VBox/ValidationKit/docs/Makefile.kmk
index 2208496..f82af94 100644
--- a/src/VBox/ValidationKit/docs/Makefile.kmk
+++ b/src/VBox/ValidationKit/docs/Makefile.kmk
@@ -54,4 +54,3 @@ $(foreach html,$(GENERATED_FILES), $(eval $(basename $(html)).o:: $(html)))  # e
 clean:
 	kmk_builtin_rm -f -- $(GENERATED_FILES)
 
-
diff --git a/src/VBox/ValidationKit/docs/WindbgPython.txt b/src/VBox/ValidationKit/docs/WindbgPython.txt
new file mode 100644
index 0000000..198ec91
--- /dev/null
+++ b/src/VBox/ValidationKit/docs/WindbgPython.txt
@@ -0,0 +1,10 @@
+$Id: WindbgPython.txt $
+
+Just a couple of useful windbg commands:
+
+Show python filenames + frame line number (not statement) up the call stack:
+!for_each_frame ".block { dt python27!_frame qwo(!f) f_lineno; da qwo(qwo(qwo(!f)+0x20) + 50) + 20 } "
+
+Same, alternative version:
+!for_each_frame .if ( $spat("${@#FunctionName}","*PyEval_EvalFrameEx*") ) { .printf "python frame: line     %d\npython frame: filename %ma\n", @@c++(f->f_lineno), qwo(qwo(qwo(!f)+0x20) + 50) + 20 }
+
diff --git a/src/VBox/ValidationKit/jshintrc.js b/src/VBox/ValidationKit/jshintrc.js
index c4e4e3d..77f0b21 100644
--- a/src/VBox/ValidationKit/jshintrc.js
+++ b/src/VBox/ValidationKit/jshintrc.js
@@ -2,6 +2,28 @@
 /** @file
  * JSHint configuration file.
  */
+
+/*
+ * Copyright (C) 2012-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
 {
     "laxbreak": true
 }
diff --git a/src/VBox/ValidationKit/td-dummy.py b/src/VBox/ValidationKit/td-dummy.py
index 7e6a6eb..ffa8c27 100755
--- a/src/VBox/ValidationKit/td-dummy.py
+++ b/src/VBox/ValidationKit/td-dummy.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 
 """
-Copyright (C) 2010-2016 Oracle Corporation
+Copyright (C) 2010-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
 available from http://www.virtualbox.org. This file is free software;
diff --git a/src/VBox/ValidationKit/testboxscript/TestBoxHelper.cpp b/src/VBox/ValidationKit/testboxscript/TestBoxHelper.cpp
index 0794adb..0d9794a 100644
--- a/src/VBox/ValidationKit/testboxscript/TestBoxHelper.cpp
+++ b/src/VBox/ValidationKit/testboxscript/TestBoxHelper.cpp
@@ -561,6 +561,24 @@ static RTEXITCODE handlerCpuNestedPaging(int argc, char **argv)
             RTFileClose(hFileCpu);
         }
     }
+# elif defined(RT_OS_DARWIN)
+    else if (enmHwVirt == HWVIRTTYPE_VTX)
+    {
+        /*
+         * The kern.hv_support parameter indicates support for the hypervisor API in the
+         * kernel, which in turn is documented require nested paging and unrestricted
+         * guest mode.  So, if it's there and set we've got nested paging.  Howeber, if
+         * it's there and clear we have not definite answer as it might be due to lack
+         * of unrestricted guest mode support.
+         */
+        int32_t fHvSupport = 0;
+        size_t  cbOld = sizeof(fHvSupport);
+        if (sysctlbyname("kern.hv_support", &fHvSupport, &cbOld, NULL, 0) == 0)
+        {
+            if (fHvSupport != 0)
+                fSupported = true;
+        }
+    }
 # endif
 #endif
 
diff --git a/src/VBox/ValidationKit/testboxscript/solaris/setup-routines.sh b/src/VBox/ValidationKit/testboxscript/solaris/setup-routines.sh
index 2daf13e..aebeb46 100644
--- a/src/VBox/ValidationKit/testboxscript/solaris/setup-routines.sh
+++ b/src/VBox/ValidationKit/testboxscript/solaris/setup-routines.sh
@@ -122,7 +122,7 @@ os_load_config() {
         XMLARGS=`"${MY_SVCCFG}" "export" "${MY_SVC_FMRI}" \
                  | ${MY_TR} '\n' ' ' \
                 `;
-        case "${XMLARGS}" in 
+        case "${XMLARGS}" in
             *exec_method*)
                 XMLARGS=`echo "${XMLARGS} " \
                          | ${MY_SED} \
diff --git a/src/VBox/ValidationKit/testboxscript/win/autoexec-testbox.cmd b/src/VBox/ValidationKit/testboxscript/win/autoexec-testbox.cmd
index 0cb9351..420aabc 100644
--- a/src/VBox/ValidationKit/testboxscript/win/autoexec-testbox.cmd
+++ b/src/VBox/ValidationKit/testboxscript/win/autoexec-testbox.cmd
@@ -1,3 +1,30 @@
+ at echo off
+REM $Id: autoexec-testbox.cmd $
+REM REM @file
+REM VirtualBox Validation Kit - testbox script, automatic execution wrapper.
+REM
+
+REM
+REM Copyright (C) 2006-2017 Oracle Corporation
+REM
+REM This file is part of VirtualBox Open Source Edition (OSE), as
+REM available from http://www.virtualbox.org. This file is free software;
+REM you can redistribute it and/or modify it under the terms of the GNU
+REM General Public License (GPL) as published by the Free Software
+REM Foundation, in version 2 as it comes in the "COPYING" file of the
+REM VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+REM hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+REM
+REM The contents of this file may alternatively be used under the terms
+REM of the Common Development and Distribution License Version 1.0
+REM (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+REM VirtualBox OSE distribution, in which case the provisions of the
+REM CDDL are applicable instead of those of the GPL.
+REM
+REM You may elect to license modified versions of this file under the
+REM terms and conditions of either the GPL or the CDDL or both.
+REM
+
 @echo "$Id: autoexec-testbox.cmd $"
 @echo on
 setlocal EnableExtensions
diff --git a/src/VBox/ValidationKit/testboxscript/win/fix_stale_refs.py b/src/VBox/ValidationKit/testboxscript/win/fix_stale_refs.py
new file mode 100755
index 0000000..5a17161
--- /dev/null
+++ b/src/VBox/ValidationKit/testboxscript/win/fix_stale_refs.py
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+# $Id: fix_stale_refs.py $
+
+"""
+This module must be used interactively!
+Use with caution as it will delete some values from the regisry!
+
+It tries to locate client references to products that no longer exist.
+"""
+
+__copyright__ = \
+"""
+Copyright (C) 2012-2017 Oracle Corporation
+
+This file is part of VirtualBox Open Source Edition (OSE), as
+available from http://www.virtualbox.org. This file is free software;
+you can redistribute it and/or modify it under the terms of the GNU
+General Public License (GPL) as published by the Free Software
+Foundation, in version 2 as it comes in the "COPYING" file of the
+VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+The contents of this file may alternatively be used under the terms
+of the Common Development and Distribution License Version 1.0
+(CDDL) only, as it comes in the "COPYING.CDDL" file of the
+VirtualBox OSE distribution, in which case the provisions of the
+CDDL are applicable instead of those of the GPL.
+
+You may elect to license modified versions of this file under the
+terms and conditions of either the GPL or the CDDL or both.
+"""
+__version__ = "$Revision: 118781 $"
+
+
+from _winreg import HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS
+from _winreg import OpenKey, CloseKey, EnumKey, QueryInfoKey, EnumValue, DeleteValue, QueryValueEx
+from distutils.util import strtobool
+
+def reverse_bytes(hex_string):
+    """
+    This function reverses the order of bytes in the provided string.
+    Each byte is represented by two characters which are reversed as well.
+    """
+    #print 'reverse_bytes(' + hex_string + ')'
+    chars = len(hex_string)
+    if chars > 2:
+        return reverse_bytes(hex_string[chars/2:]) + reverse_bytes(hex_string[:chars/2])
+    else:
+        return hex_string[1] + hex_string[0]
+
+def transpose_guid(guid):
+    """
+    Windows Installer uses different way to present GUID string. This function converts GUID
+    from installer's presentation to more conventional form.
+    """
+    return '{' + reverse_bytes(guid[0:8]) + '-' + reverse_bytes(guid[8:12]) + \
+        '-' + reverse_bytes(guid[12:16]) + \
+        '-' + reverse_bytes(guid[16:18]) + reverse_bytes(guid[18:20]) + \
+        '-' + ''.join([reverse_bytes(guid[i:i+2]) for i in range(20, 32, 2)]) + '}'
+
+PRODUCTS_KEY   = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products'
+COMPONENTS_KEY = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components'
+
+def get_installed_products():
+    """
+    Enumerate all installed products.
+    """
+    products = {}
+    hkey_products = OpenKey(HKEY_LOCAL_MACHINE, PRODUCTS_KEY, 0, KEY_ALL_ACCESS)
+
+    try:
+        product_index = 0
+        while True:
+            product_guid = EnumKey(hkey_products, product_index)
+            hkey_product_properties = OpenKey(hkey_products, product_guid + r'\InstallProperties', 0, KEY_ALL_ACCESS)
+            try:
+                value = QueryValueEx(hkey_product_properties, 'DisplayName')[0]
+            except WindowsError, exception:
+                if exception.winerror != 2:
+                    raise
+                value = '<unknown>'
+            CloseKey(hkey_product_properties)
+            products[product_guid] = value
+            product_index += 1
+    except WindowsError, exceptione:
+        if exceptione.winerror != 259:
+            print exceptione.strerror + '.', 'error', exceptione.winerror
+    CloseKey(hkey_products)
+
+    print 'Installed products:'
+    for product_key in sorted(products.keys()):
+        print transpose_guid(product_key), '=', products[product_key]
+
+    print
+    return products
+
+def get_missing_products(hkey_components):
+    """
+    Detect references to missing products.
+    """
+    products = get_installed_products()
+
+    missing_products = {}
+
+    for component_index in xrange(0, QueryInfoKey(hkey_components)[0]):
+        component_guid = EnumKey(hkey_components, component_index)
+        hkey_component = OpenKey(hkey_components, component_guid, 0, KEY_ALL_ACCESS)
+        clients = []
+        for value_index in xrange(0, QueryInfoKey(hkey_component)[1]):
+            client_guid, client_path = EnumValue(hkey_component, value_index)[:2]
+            clients.append((client_guid, client_path))
+            if not client_guid in products:
+                if client_guid in missing_products:
+                    missing_products[client_guid].append((component_guid, client_path))
+                else:
+                    missing_products[client_guid] = [(component_guid, client_path)]
+        CloseKey(hkey_component)
+    return missing_products
+
+def main():
+    """
+    Enumerate all installed products, go through all components and check if client refences
+    point to valid products. Remove references to non-existing products if the user allowed it.
+    """
+    hkey_components = OpenKey(HKEY_LOCAL_MACHINE, COMPONENTS_KEY, 0, KEY_ALL_ACCESS)
+
+    missing_products = get_missing_products(hkey_components)
+
+    print 'Missing products refer the following components:'
+    for product_guid in sorted(missing_products.keys()):
+        if product_guid[1:] == '0'*31:
+            continue
+        print 'Product', transpose_guid(product_guid) + ':'
+        for component_guid, component_file in missing_products[product_guid]:
+            print ' ' + transpose_guid(component_guid), '=', component_file
+
+        print 'Remove all references to product', transpose_guid(product_guid) + '? [y/n]'
+        if strtobool(raw_input().lower()):
+            for component_guid, component_file in missing_products[product_guid]:
+                hkey_component = OpenKey(hkey_components, component_guid, 0, KEY_ALL_ACCESS)
+                print 'Removing reference in ' + transpose_guid(component_guid), '=', component_file
+                DeleteValue(hkey_component, product_guid)
+                CloseKey(hkey_component)
+        else:
+            print 'Cancelled removal of product', transpose_guid(product_guid)
+
+    CloseKey(hkey_components)
+
+if __name__ == "__main__":
+    main()
diff --git a/src/VBox/ValidationKit/testdriver/base.py b/src/VBox/ValidationKit/testdriver/base.py
index b3e6dfd..e65d5fd 100755
--- a/src/VBox/ValidationKit/testdriver/base.py
+++ b/src/VBox/ValidationKit/testdriver/base.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118920 $"
 
 
 # Standard Python imports.
@@ -594,7 +594,8 @@ class Process(TdTaskBase):
                     try:
                         (uPid, uStatus) = os.waitpid(self.hWin, 0);
                         if uPid == self.hWin or uPid == self.uPid:
-                            self.hWin = None; # waitpid closed it, so it's now invalid.
+                            self.hWin.Detach(); # waitpid closed it, so it's now invalid.
+                            self.hWin = None;
                             uPid = self.uPid;
                     except:
                         reporter.logXcpt();
diff --git a/src/VBox/ValidationKit/testdriver/btresolver.py b/src/VBox/ValidationKit/testdriver/btresolver.py
index a643b1f..ba0939c 100755
--- a/src/VBox/ValidationKit/testdriver/btresolver.py
+++ b/src/VBox/ValidationKit/testdriver/btresolver.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# $Id$
+# $Id: btresolver.py $
 # pylint: disable=C0302
 
 """
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision$"
+__version__ = "$Revision: 118538 $"
 
 
 # Standard Python imports.
diff --git a/src/VBox/ValidationKit/testdriver/reporter.py b/src/VBox/ValidationKit/testdriver/reporter.py
index 6345769..35af5fb 100755
--- a/src/VBox/ValidationKit/testdriver/reporter.py
+++ b/src/VBox/ValidationKit/testdriver/reporter.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118779 $"
 
 
 # Standard Python imports.
@@ -390,11 +390,11 @@ class LocalReporter(ReporterBase):
         try:
             sLogDir = os.path.abspath(os.environ.get('TESTBOX_REPORTER_LOG_DIR', self.sDefLogDir));
             if not os.path.isdir(sLogDir):
-                os.makedirs(sLogDir, 0750);
+                os.makedirs(sLogDir, 0x1e8); # 0750 = 0x1e8
         except:
             sLogDir = self.sDefLogDir;
             if not os.path.isdir(sLogDir):
-                os.makedirs(sLogDir, 0750);
+                os.makedirs(sLogDir, 0x1e8); # 0750 = 0x1e8
 
         #
         # Make a subdirectory for this test run.
@@ -402,10 +402,10 @@ class LocalReporter(ReporterBase):
         sTs = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H-%M-%S.log');
         self.sLogDir = sLogDir = os.path.join(sLogDir, '%s-%s' % (sTs, self.sName));
         try:
-            os.makedirs(self.sLogDir, 0750);
+            os.makedirs(self.sLogDir, 0x1e8); # 0750 = 0x1e8
         except:
             self.sLogDir = '%s-%s' % (self.sLogDir, os.getpid());
-            os.makedirs(self.sLogDir, 0750);
+            os.makedirs(self.sLogDir, 0x1e8); # 0750 = 0x1e8
 
         #
         # Open the log file and write a header.
diff --git a/src/VBox/ValidationKit/testdriver/vbox.py b/src/VBox/ValidationKit/testdriver/vbox.py
index b13908a..6524482 100755
--- a/src/VBox/ValidationKit/testdriver/vbox.py
+++ b/src/VBox/ValidationKit/testdriver/vbox.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118993 $"
 
 
 # Standard Python imports.
@@ -583,7 +583,7 @@ class EventHandlerBase(object):
                 else:
                     if not fPassive:
                         if sys.platform == 'win32':
-                            from win32com.server.util import unwrap # pylint: disable=F0401
+                            from win32com.server.util import unwrap # pylint: disable=import-error
                             oRet = unwrap(oRet);
                         oRet.oListener = oListener;
                     else:
@@ -842,6 +842,7 @@ class TestDriver(base.TestDriver):
         if self.oBuild is not None:
             self.oBuild.dump();
 
+
     def _detectBuild(self, fQuiet = False):
         """
         This is used internally to try figure a locally installed build when
@@ -1254,24 +1255,30 @@ class TestDriver(base.TestDriver):
         sys.path.insert(0, self.oBuild.sInstallPath);
         if self.oBuild.sSdkPath is not None:
             sys.path.insert(0, os.path.join(self.oBuild.sSdkPath, 'installer'))
-            sys.path.insert(1, os.path.join(self.oBuild.sSdkPath, 'bindings', 'xpcom', 'python'))
+            sys.path.insert(1, os.path.join(self.oBuild.sSdkPath, 'install')); # stupid stupid windows installer!
+            sys.path.insert(2, os.path.join(self.oBuild.sSdkPath, 'bindings', 'xpcom', 'python'))
         os.environ['VBOX_PROGRAM_PATH'] = self.oBuild.sInstallPath;
         reporter.log("sys.path: %s" % (sys.path));
 
         try:
-            # pylint: disable=F0401
-            from vboxapi import VirtualBoxManager
+            from vboxapi import VirtualBoxManager # pylint: disable=import-error
+        except:
+            reporter.logXcpt('Error importing vboxapi');
+            return False;
+
+        # Exception and error hacks.
+        try:
+            # pylint: disable=import-error
             if self.sHost == 'win':
                 from pythoncom import com_error as NativeComExceptionClass  # pylint: disable=E0611
                 import winerror                 as NativeComErrorClass
             else:
                 from xpcom import Exception     as NativeComExceptionClass
                 from xpcom import nsError       as NativeComErrorClass
-            # pylint: enable=F0401
+            # pylint: enable=import-error
         except:
-            traceback.print_exc();
+            reporter.logXcpt('Error importing (XP)COM related stuff for exception hacks and errors');
             return False;
-
         __deployExceptionHacks__(NativeComExceptionClass)
         ComError.copyErrors(NativeComErrorClass);
 
@@ -1353,7 +1360,7 @@ class TestDriver(base.TestDriver):
             _ = oSelf;
             if oXcpt is None: oXcpt = sys.exc_info()[1];
             if sys.platform == 'win32':
-                import winerror;                                            # pylint: disable=F0401
+                import winerror;                                            # pylint: disable=import-error
                 hrXcpt = oXcpt.hresult;
                 if hrXcpt == winerror.DISP_E_EXCEPTION:
                     hrXcpt = oXcpt.excepinfo[5];
@@ -1378,9 +1385,9 @@ class TestDriver(base.TestDriver):
             _ = oSelf;
             if oXcpt is None: oXcpt = sys.exc_info()[1];
             if sys.platform == 'win32':
-                from pythoncom import com_error as NativeComExceptionClass  # pylint: disable=F0401,E0611
+                from pythoncom import com_error as NativeComExceptionClass  # pylint: disable=import-error,E0611
             else:
-                from xpcom import Exception     as NativeComExceptionClass  # pylint: disable=F0401
+                from xpcom import Exception     as NativeComExceptionClass  # pylint: disable=import-error
             return isinstance(oXcpt, NativeComExceptionClass);
 
         def _xcptIsEqual(oSelf, oXcpt, hrStatus):
@@ -1404,65 +1411,137 @@ class TestDriver(base.TestDriver):
             self.oVBoxMgr.xcptToString          = types.MethodType(_xcptToString,        self.oVBoxMgr);
 
 
-    def _teardownVBoxApi(self):
+    def _teardownVBoxApi(self):  # pylint: disable=too-many-statements
         """
         Drop all VBox object references and shutdown com/xpcom.
         """
         if not self.fImportedVBoxApi:
             return True;
+        import gc;
 
+        # Drop all references we've have to COM objects.
         self.aoRemoteSessions = [];
         self.aoVMs            = [];
         self.oVBoxMgr         = None;
         self.oVBox            = None;
         vboxcon.goHackModuleClass.oVBoxMgr = None; # VBoxConstantWrappingHack.
 
+        # Do garbage collection to try get rid of those objects.
         try:
-            import gc
             gc.collect();
-            objects = gc.get_objects()
-            try:
-                try:
-                    from types import InstanceType
-                except ImportError:
-                    InstanceType = None # Python 3.x compatibility
-                for o in objects:
-                    objtype = type(o)
-                    if objtype == InstanceType: # Python 2.x codepath
-                        objtype = o.__class__
-                    if objtype.__name__ == 'VirtualBoxManager':
-                        reporter.log('actionCleanupAfter: CAUTION, there is still a VirtualBoxManager object, GC trouble')
-                        break
-            finally:
-                del objects
         except:
             reporter.logXcpt();
         self.fImportedVBoxApi = False;
 
+        # Check whether the python is still having any COM objects/interfaces around.
+        cVBoxMgrs = 0;
+        aoObjsLeftBehind = [];
         if self.sHost == 'win':
-            pass; ## TODO shutdown COM if possible/necessary?
+            import pythoncom;                                   # pylint: disable=import-error
+            try:
+                cIfs  = pythoncom._GetInterfaceCount();         # pylint: disable=no-member,protected-access
+                cObjs = pythoncom._GetGatewayCount();           # pylint: disable=no-member,protected-access
+                if cObjs == 0 and cIfs == 0:
+                    reporter.log('_teardownVBoxApi: no interfaces or objects left behind.');
+                else:
+                    reporter.log('_teardownVBoxApi: Python COM still has %s objects and %s interfaces...' % ( cObjs, cIfs));
+
+                from win32com.client import DispatchBaseClass;  # pylint: disable=import-error
+                for oObj in gc.get_objects():
+                    if isinstance(oObj, DispatchBaseClass):
+                        reporter.log('_teardownVBoxApi:   %s' % (oObj,));
+                        aoObjsLeftBehind.append(oObj);
+                    elif utils.getObjectTypeName(oObj) == 'VirtualBoxManager':
+                        reporter.log('_teardownVBoxApi:   %s' % (oObj,));
+                        cVBoxMgrs += 1;
+                        aoObjsLeftBehind.append(oObj);
+                oObj = None;
+            except:
+                reporter.logXcpt();
+
+            # If not being used, we can safely uninitialize COM.
+            if cIfs == 0 and cObjs == 0 and cVBoxMgrs == 0 and len(aoObjsLeftBehind) == 0:
+                reporter.log('_teardownVBoxApi:   Calling CoUninitialize...');
+                try:    pythoncom.CoUninitialize();             # pylint: disable=no-member
+                except: reporter.logXcpt();
+                else:
+                    reporter.log('_teardownVBoxApi:   Returned from CoUninitialize.');
         else:
             try:
-                from xpcom import _xpcom as _xpcom;     # pylint: disable=F0401
-                hrc   = _xpcom.NS_ShutdownXPCOM();
-                cIfs  = _xpcom._GetInterfaceCount();    # pylint: disable=W0212
-                cObjs = _xpcom._GetGatewayCount();      # pylint: disable=W0212
+                # XPCOM doesn't crash and burn like COM if you shut it down with interfaces and objects around.
+                # Also, it keeps a number of internal objects and interfaces around to do its job, so shutting
+                # it down before we go looking for dangling interfaces is more or less required.
+                from xpcom import _xpcom as _xpcom;             # pylint: disable=import-error
+                hrc   = _xpcom.DeinitCOM();
+                cIfs  = _xpcom._GetInterfaceCount();            # pylint: disable=W0212
+                cObjs = _xpcom._GetGatewayCount();              # pylint: disable=W0212
+
                 if cObjs == 0 and cIfs == 0:
-                    reporter.log('actionCleanupAfter: NS_ShutdownXPCOM -> %s, nothing left behind.' % (hrc, ));
+                    reporter.log('_teardownVBoxApi: No XPCOM interfaces or objects active. (hrc=%#x)' % (hrc,));
                 else:
-                    reporter.log('actionCleanupAfter: NS_ShutdownXPCOM -> %s, leaving %s objects and %s interfaces behind...' \
-                                 % (hrc, cObjs, cIfs));
+                    reporter.log('_teardownVBoxApi: %s XPCOM objects and %s interfaces still around! (hrc=%#x)'
+                                 % (cObjs, cIfs, hrc));
                     if hasattr(_xpcom, '_DumpInterfaces'):
+                        try:    _xpcom._DumpInterfaces();       # pylint: disable=W0212
+                        except: reporter.logXcpt('_teardownVBoxApi: _DumpInterfaces failed');
+
+                from xpcom.client import Component;             # pylint: disable=import-error
+                for oObj in gc.get_objects():
+                    if isinstance(oObj, Component):
+                        reporter.log('_teardownVBoxApi:   %s' % (oObj,));
+                        aoObjsLeftBehind.append(oObj);
+                    if utils.getObjectTypeName(oObj) == 'VirtualBoxManager':
+                        reporter.log('_teardownVBoxApi:   %s' % (oObj,));
+                        cVBoxMgrs += 1;
+                        aoObjsLeftBehind.append(oObj);
+                oObj = None;
+            except:
+                reporter.logXcpt();
+
+        # Try get the referrers to (XP)COM interfaces and objects that was left behind.
+        for iObj in range(len(aoObjsLeftBehind)): # pylint: disable=consider-using-enumerate
+            try:
+                aoReferrers = gc.get_referrers(aoObjsLeftBehind[iObj]);
+                reporter.log('_teardownVBoxApi:   Found %u referrers to %s:' % (len(aoReferrers), aoObjsLeftBehind[iObj],));
+                for oReferrer in aoReferrers:
+                    oMyFrame = sys._getframe(0);  # pylint: disable=protected-access
+                    if oReferrer is oMyFrame:
+                        reporter.log('_teardownVBoxApi:     - frame of this function');
+                    elif oReferrer is aoObjsLeftBehind:
+                        reporter.log('_teardownVBoxApi:     - aoObjsLeftBehind');
+                    else:
+                        fPrinted = False;
+                        if isinstance(oReferrer, dict) or isinstance(oReferrer, list) or isinstance(oReferrer, tuple):
+                            try:
+                                aoSubReferreres = gc.get_referrers(oReferrer);
+                                for oSubRef in aoSubReferreres:
+                                    if    not isinstance(oSubRef, list) \
+                                      and not isinstance(oSubRef, dict) \
+                                      and oSubRef is not oMyFrame \
+                                      and oSubRef is not aoSubReferreres:
+                                        reporter.log('_teardownVBoxApi:     - %s :: %s:'
+                                                     % (utils.getObjectTypeName(oSubRef), utils.getObjectTypeName(oReferrer)));
+                                        fPrinted = True;
+                                        break;
+                                del aoSubReferreres;
+                            except:
+                                reporter.logXcpt('subref');
+                        if not fPrinted:
+                            reporter.log('_teardownVBoxApi:     - %s:' % (utils.getObjectTypeName(oReferrer),));
                         try:
-                            _xpcom._DumpInterfaces();   # pylint: disable=W0212
+                            import pprint;
+                            for sLine in pprint.pformat(oReferrer, width = 130).split('\n'):
+                                reporter.log('_teardownVBoxApi:       %s' % (sLine,));
                         except:
-                            reporter.logXcpt('actionCleanupAfter: _DumpInterfaces failed');
+                            reporter.log('_teardownVBoxApi:       %s' % (oReferrer,));
             except:
                 reporter.logXcpt();
+        del aoObjsLeftBehind;
 
+        # Force garbage collection again, just for good measure.
         try:
             gc.collect();
-            time.sleep(0.5); # fudge factory
+            time.sleep(0.5); # fudge factor
         except:
             reporter.logXcpt();
         return True;
@@ -2244,7 +2323,7 @@ class TestDriver(base.TestDriver):
             if self.fpApiVer >= 4.0:
                 oVM = self.oVBox.findMachine(sNameOrId);
             else:
-                reporter.error('Port me!'); ## @todo Add support for older version < 4.0.
+                reporter.error('fpApiVer=%s - did you remember to initialize the API' % (self.fpApiVer,));
         except:
             reporter.errorXcpt('could not find vm "%s"' % (sNameOrId,));
             return None;
diff --git a/src/VBox/ValidationKit/testdriver/vboxcon.py b/src/VBox/ValidationKit/testdriver/vboxcon.py
index 54644f8..e2ad742 100755
--- a/src/VBox/ValidationKit/testdriver/vboxcon.py
+++ b/src/VBox/ValidationKit/testdriver/vboxcon.py
@@ -28,7 +28,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118538 $"
 
 
 # Standard Python imports.
@@ -45,7 +45,7 @@ class VBoxConstantWrappingHack(object):
         if self.o.machine.state == vboxcon.MachineState_Running:
             do stuff;
 
-    For our own convenience there's a vboxcon attribute set up in vbox.py, 
+    For our own convenience there's a vboxcon attribute set up in vbox.py,
     class TestDriver which is the basis for the VirtualBox testcases. It takes
     care of setting things up properly through the global variable
     'goHackModuleClass' that refers to the instance of this class(if we didn't
diff --git a/src/VBox/ValidationKit/testdriver/win-vbox-net-drvstore-cleanup.ps1 b/src/VBox/ValidationKit/testdriver/win-vbox-net-drvstore-cleanup.ps1
index 2088b25..468f10d 100644
--- a/src/VBox/ValidationKit/testdriver/win-vbox-net-drvstore-cleanup.ps1
+++ b/src/VBox/ValidationKit/testdriver/win-vbox-net-drvstore-cleanup.ps1
@@ -1,34 +1,61 @@
-param([switch]$confirm)
-
-Function AskForConfirmation ($title_text, $message_text, $yes_text, $no_text)
-{
-   if ($confirm) {
-      $title = $title_text
-      $message = $message_text
-
-      $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", $yes_text
-
-      $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", $no_text
-
-      $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
-
-      $result = $host.ui.PromptForChoice($title, $message, $options, 0)
-   } else {
-      $result = 0
-   }
-
-   return $result
-}
-
-pnputil -e | ForEach-Object { if ($_ -match "Published name :.*(oem\d+\.inf)") {$inf=$matches[1]} elseif ($_ -match "Driver package provider :.*Oracle") {$inf + " " + $_} }
-
-$result = AskForConfirmation "Clean up the driver store" `
-        "Do you want to delete all VirtualBox drivers from the driver store?" `
-        "Deletes all VirtualBox drivers from the driver store." `
-        "No modifications to the driver store will be made."
-
-switch ($result)
-    {
-        0 {pnputil -e | ForEach-Object { if ($_ -match "Published name :.*(oem\d+\.inf)") {$inf=$matches[1]} elseif ($_ -match "Driver package provider :.*Oracle") {$inf} } | ForEach-Object { pnputil -d $inf } }
-        1 {"Removal cancelled."}
-    }
+# $Id: win-vbox-net-drvstore-cleanup.ps1 $
+## @file
+# VirtualBox Validation Kit - network cleanup script (powershell).
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+param([switch]$confirm)
+
+Function AskForConfirmation ($title_text, $message_text, $yes_text, $no_text)
+{
+   if ($confirm) {
+      $title = $title_text
+      $message = $message_text
+
+      $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", $yes_text
+
+      $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", $no_text
+
+      $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
+
+      $result = $host.ui.PromptForChoice($title, $message, $options, 0)
+   } else {
+      $result = 0
+   }
+
+   return $result
+}
+
+pnputil -e | ForEach-Object { if ($_ -match "Published name :.*(oem\d+\.inf)") {$inf=$matches[1]} elseif ($_ -match "Driver package provider :.*Oracle") {$inf + " " + $_} }
+
+$result = AskForConfirmation "Clean up the driver store" `
+        "Do you want to delete all VirtualBox drivers from the driver store?" `
+        "Deletes all VirtualBox drivers from the driver store." `
+        "No modifications to the driver store will be made."
+
+switch ($result)
+    {
+        0 {pnputil -e | ForEach-Object { if ($_ -match "Published name :.*(oem\d+\.inf)") {$inf=$matches[1]} elseif ($_ -match "Driver package provider :.*Oracle") {$inf} } | ForEach-Object { pnputil -d $inf } }
+        1 {"Removal cancelled."}
+    }
+
diff --git a/src/VBox/ValidationKit/testdriver/win-vbox-net-uninstall.ps1 b/src/VBox/ValidationKit/testdriver/win-vbox-net-uninstall.ps1
index c21cc2f..88a54fa 100644
--- a/src/VBox/ValidationKit/testdriver/win-vbox-net-uninstall.ps1
+++ b/src/VBox/ValidationKit/testdriver/win-vbox-net-uninstall.ps1
@@ -1,217 +1,243 @@
-param([switch]$confirm)
-
-Function AskForConfirmation ($title_text, $message_text, $yes_text, $no_text)
-{
-   if ($confirm) {
-      $title = $title_text
-      $message = $message_text
-
-      $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", $yes_text
-
-      $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", $no_text
-
-      $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
-
-      $result = $host.ui.PromptForChoice($title, $message, $options, 0)
-   } else {
-      $result = 0
-   }
-
-   return $result
-}
-
-Function DeleteUnmatchingKeys ($title_text, $reg_key)
-{
-   $ghostcon = @(Get-ChildItem ($reg_key) | Where-Object { !$connections.ContainsKey($_.PSChildName) } )
-   if ($ghostcon.count -eq 0) {
-      Write-Host "`nNo ghost connections has been found -- nothing to do"
-   } else {
-         Write-Host "`nParameter keys for the following connections will be removed:"
-         Write-Host ($ghostcon | Out-String)
-
-      $result = AskForConfirmation $title_text `
-          "Do you want to delete the keys listed above?" `
-          "Deletes all ghost connection keys from the registry." `
-          "No modifications to the registry will be made."
-
-      switch ($result)
-         {
-            0 {$ghostcon.GetEnumerator() | ForEach-Object { Remove-Item -Path $_ -Recurse }}
-            1 {"Removal cancelled."}
-         }
-   }
-}
-
-
-Push-Location
-cd "Registry::"
-Write-Host "Retrieving valid connections:"
-$iftypes = @{}
-$connections = @{}
-$ghostcon_names = @{}
-Get-Item ".\HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0*" | `
-   ForEach-Object {
-      $prop = (Get-ItemProperty $_.PSPath)
-      $conn = $null
-      if (Test-Path ("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + $prop.NetCfgInstanceId + "\Connection")) {
-         $conn = (Get-ItemProperty ("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + $prop.NetCfgInstanceId + "\Connection"))
-      }
-      $iftype = $prop."*IfType"
-      if ($iftypes.ContainsKey($iftype)) {
-         $iftypes[$iftype] = $iftypes[$iftype] + [Math]::pow(2,$prop.NetLuidIndex)
-      } else {
-         $iftypes[$iftype] = [Math]::pow(2,$prop.NetLuidIndex)
-      }
-      if ($conn -ne $null) {
-         $connections[$prop.NetCfgInstanceId] = $conn.Name
-         Write-Host $prop.NetCfgInstanceId $conn.Name "|" $prop."*IfType" $prop.NetLuidIndex $prop.DriverDesc
-      } else {
-         Write-Host $prop.NetCfgInstanceId [MISSING] "|" $prop."*IfType" $prop.NetLuidIndex $prop.DriverDesc
-      }
-   }
-
-# Someday we may want to process other types than Ethernet as well: $iftypes.GetEnumerator() | ForEach-Object {
-if ($iftypes[6] -gt 9223372036854775808) {
-   Write-Host "Found more than 63 interfaces (mask=" $iftypes[6] ") -- bailing out"
-   exit
-}
-Write-Host "`nChecking if the used LUID index mask is correct:"
-$correctmask = [BitConverter]::GetBytes([int64]($iftypes[6]))
-$actualmask = (Get-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\6" -Name "IfUsedNetLuidIndices").IfUsedNetLuidIndices
-$needcorrection = $FALSE
-$ai = 0
-$lastnonzero = 0
-for ($ci = 0; $ci -lt $correctmask.Length; $ci++) {
-   if ($ai -lt $actualmask.Length) {
-      $aval = $actualmask[$ai++]
-   } else {
-      $aval = 0
-   }
-   if ($correctmask[$ci] -ne 0) {
-      $lastnonzero = $ci
-   }
-   if ($correctmask[$ci] -eq $aval) {
-      Write-Host "DEBUG: " $correctmask[$ci].ToString("X2") " == " $aval.ToString("X2")
-   } else {
-      Write-Host "DEBUG: " $correctmask[$ci].ToString("X2") " != " $aval.ToString("X2")
-      $needcorrection = $TRUE
-   }
-}
-if ($ai -lt $actualmask.Length) {
-   for (; $ai -lt $actualmask.Length; $ai++) {
-      if ($actualmask[$ai] -eq 0) {
-         Write-Host "DEBUG: 0 == 0"
-      } else {
-         Write-Host "DEBUG: " $actualmask[$ai].ToString("X2") " != 0"
-         $needcorrection = $TRUE
-      }
-   }
-}
-if ($needcorrection) {
-   Write-Host "Current mask is " ($actualmask|foreach {$_.ToString("X2")}) ", while it should be" ($correctmask|foreach {$_.ToString("X2")})
-   if ($confirm) {
-      Set-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\6" -Name "IfUsedNetLuidIndices" -Value $correctmask -Type Binary -Confirm
-   } else {
-      Set-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\6" -Name "IfUsedNetLuidIndices" -Value $correctmask -Type Binary
-   }
-} else {
-   Write-Host "The used LUID index mask is correct -- nothing to do"
-}
-
-#Write-Host ($connections | Out-String)
-$ghostcon = @(Get-ChildItem ("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}") | Where-Object { !$connections.ContainsKey($_.PSChildName) -and $_.PSChildName -ne "Descriptions" } )
-if ($ghostcon -eq $null) {
-   Write-Host "`nNo ghost connections has been found -- nothing to do"
-} else {
-   Write-Host "`nThe following connections will be removed:"
-   #Write-Host ($ghostcon | Out-String)
-
-   $ghostcon.GetEnumerator() | ForEach-Object {
-      $prop = (Get-ItemProperty "$_\Connection")
-      if ($prop.PnPInstanceId -eq $null) {
-         Write-Host "WARNING! PnPInstanceId does not exist for" $_.PSChildName
-      } elseif (!($prop.PnPInstanceId.ToString() -match "SUN_VBOXNETFLTMP")) {
-         Write-Host "WARNING! PnPInstanceId (" $prop.PnPInstanceId.ToString() ") does not match ROOT\SUN_VBOXNETFLTMP for" $_.PSChildName
-      }
-      if ($prop.Name -eq $null) {
-         Write-Host "WARNING! Name does not exist for" $_.PSChildName
-      } else {
-         $ghostcon_names.Add($_.PSChildName, $prop.Name)
-         Write-Host $_.PSChildName -nonewline
-         Write-Host "  " -nonewline
-         Write-Host $prop.Name
-      }
-   }
-
-   $result = AskForConfirmation "Delete Registry Keys" `
-          "Do you want to delete the keys listed above?" `
-          "Deletes all ghost connection keys from the registry." `
-          "No modifications to the registry will be made."
-
-   switch ($result)
-       {
-           0 {$ghostcon.GetEnumerator() | ForEach-Object { Remove-Item -Path $_.PSPath -Recurse }}
-           1 {"Removal cancelled."}
-       }
-}
-
-# Delete WFPLWFS parameter keys
-DeleteUnmatchingKeys "Delete WFPLWFS Parameter Keys (Adapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\WFPLWFS\Parameters\Adapters"
-DeleteUnmatchingKeys "Delete WFPLWFS Parameter Keys (NdisAdapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\WFPLWFS\Parameters\NdisAdapters"
-# Delete Psched parameter keys
-DeleteUnmatchingKeys "Delete Psched Parameter Keys (Adapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\Psched\Parameters\Adapters"
-DeleteUnmatchingKeys "Delete Psched Parameter Keys (NdisAdapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\Psched\Parameters\NdisAdapters"
-
-# Clean up NSI entries
-$nsi_obsolete = New-Object System.Collections.ArrayList
-$nsi_path = "HKLM\SYSTEM\CurrentControlSet\Control\Nsi\{EB004A11-9B1A-11D4-9123-0050047759BC}\10"
-$nsi = (Get-Item $nsi_path) | Select-Object -ExpandProperty property
-$nsi | ForEach-Object {
-   $value = (Get-ItemProperty -Path $nsi_path -Name $_).$_
-   [byte[]]$guid_bytes = $value[1040..1055]
-   $guid = New-Object -TypeName System.Guid -ArgumentList (,$guid_bytes)
-   $guid_string = $guid.ToString("B").ToUpper()
-   $nsi_conn_name_last = 6 + $value[4] + $value[5]*256
-   $nsi_conn_name = [Text.Encoding]::Unicode.GetString($value[6..$nsi_conn_name_last])
-   $nsi_if_name_last = 522 + $value[520] + $value[521]*256
-   $nsi_if_name = [Text.Encoding]::Unicode.GetString($value[522..$nsi_if_name_last])
-   Write-Host $_ -nonewline
-   Write-Host "  " -nonewline
-   Write-Host $guid_string -nonewline
-   Write-Host "  " -nonewline
-   if ($connections.ContainsKey($guid_string)) {
-      Write-Host $nsi_if_name
-   } else {
-      [void] $nsi_obsolete.Add($_)
-      Write-Host "[OBSOLETE] " $nsi_if_name -foregroundcolor red
-   }
-}
-
-$result = AskForConfirmation "Delete NSI Entries" `
-        "Do you want to delete the entries marked in red above?" `
-        "Deletes all marked entries from the NSI registry key." `
-        "No modifications to the registry will be made."
-
-switch ($result)
-    {
-        0 {$nsi_obsolete.GetEnumerator() | ForEach-Object { Remove-ItemProperty -Path $nsi_path -Name $_ }}
-        1 {"Removal cancelled."}
-    }
-
-# Clean up uninstalled connections
-if ( (Get-ChildItem "HKLM\SYSTEM\CurrentControlSet\Control\Network\Uninstalled" | Measure-Object).Count -gt 10 ) {
-   $result = AskForConfirmation "Delete Uninstalled Network Connection Registry Keys" `
-          "There are over 10 uninstalled network connections accumulated in the registry. Do you want to delete them?" `
-          "Deletes uninstalled connection keys from the registry." `
-          "No modifications to the registry will be made."
-
-   switch ($result)
-       {
-           0 {Remove-Item -Path "HKLM\SYSTEM\CurrentControlSet\Control\Network\Uninstalled\*" -Recurse}
-           1 {"Removal cancelled."}
-       }
-} else {
-   Write-Host "Less than 10 uninstalled connections -- no action yet required."
-}
-
-Pop-Location
\ No newline at end of file
+# $Id: win-vbox-net-uninstall.ps1 $
+## @file
+# VirtualBox Validation Kit - network cleanup script (powershell).
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+param([switch]$confirm)
+
+Function AskForConfirmation ($title_text, $message_text, $yes_text, $no_text)
+{
+   if ($confirm) {
+      $title = $title_text
+      $message = $message_text
+
+      $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", $yes_text
+
+      $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", $no_text
+
+      $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
+
+      $result = $host.ui.PromptForChoice($title, $message, $options, 0)
+   } else {
+      $result = 0
+   }
+
+   return $result
+}
+
+Function DeleteUnmatchingKeys ($title_text, $reg_key)
+{
+   $ghostcon = @(Get-ChildItem ($reg_key) | Where-Object { !$connections.ContainsKey($_.PSChildName) } )
+   if ($ghostcon.count -eq 0) {
+      Write-Host "`nNo ghost connections has been found -- nothing to do"
+   } else {
+         Write-Host "`nParameter keys for the following connections will be removed:"
+         Write-Host ($ghostcon | Out-String)
+
+      $result = AskForConfirmation $title_text `
+          "Do you want to delete the keys listed above?" `
+          "Deletes all ghost connection keys from the registry." `
+          "No modifications to the registry will be made."
+
+      switch ($result)
+         {
+            0 {$ghostcon.GetEnumerator() | ForEach-Object { Remove-Item -Path $_ -Recurse }}
+            1 {"Removal cancelled."}
+         }
+   }
+}
+
+
+Push-Location
+cd "Registry::"
+Write-Host "Retrieving valid connections:"
+$iftypes = @{}
+$connections = @{}
+$ghostcon_names = @{}
+Get-Item ".\HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0*" | `
+   ForEach-Object {
+      $prop = (Get-ItemProperty $_.PSPath)
+      $conn = $null
+      if (Test-Path ("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + $prop.NetCfgInstanceId + "\Connection")) {
+         $conn = (Get-ItemProperty ("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + $prop.NetCfgInstanceId + "\Connection"))
+      }
+      $iftype = $prop."*IfType"
+      if ($iftypes.ContainsKey($iftype)) {
+         $iftypes[$iftype] = $iftypes[$iftype] + [Math]::pow(2,$prop.NetLuidIndex)
+      } else {
+         $iftypes[$iftype] = [Math]::pow(2,$prop.NetLuidIndex)
+      }
+      if ($conn -ne $null) {
+         $connections[$prop.NetCfgInstanceId] = $conn.Name
+         Write-Host $prop.NetCfgInstanceId $conn.Name "|" $prop."*IfType" $prop.NetLuidIndex $prop.DriverDesc
+      } else {
+         Write-Host $prop.NetCfgInstanceId [MISSING] "|" $prop."*IfType" $prop.NetLuidIndex $prop.DriverDesc
+      }
+   }
+
+# Someday we may want to process other types than Ethernet as well: $iftypes.GetEnumerator() | ForEach-Object {
+if ($iftypes[6] -gt 9223372036854775808) {
+   Write-Host "Found more than 63 interfaces (mask=" $iftypes[6] ") -- bailing out"
+   exit
+}
+Write-Host "`nChecking if the used LUID index mask is correct:"
+$correctmask = [BitConverter]::GetBytes([int64]($iftypes[6]))
+$actualmask = (Get-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\6" -Name "IfUsedNetLuidIndices").IfUsedNetLuidIndices
+$needcorrection = $FALSE
+$ai = 0
+$lastnonzero = 0
+for ($ci = 0; $ci -lt $correctmask.Length; $ci++) {
+   if ($ai -lt $actualmask.Length) {
+      $aval = $actualmask[$ai++]
+   } else {
+      $aval = 0
+   }
+   if ($correctmask[$ci] -ne 0) {
+      $lastnonzero = $ci
+   }
+   if ($correctmask[$ci] -eq $aval) {
+      Write-Host "DEBUG: " $correctmask[$ci].ToString("X2") " == " $aval.ToString("X2")
+   } else {
+      Write-Host "DEBUG: " $correctmask[$ci].ToString("X2") " != " $aval.ToString("X2")
+      $needcorrection = $TRUE
+   }
+}
+if ($ai -lt $actualmask.Length) {
+   for (; $ai -lt $actualmask.Length; $ai++) {
+      if ($actualmask[$ai] -eq 0) {
+         Write-Host "DEBUG: 0 == 0"
+      } else {
+         Write-Host "DEBUG: " $actualmask[$ai].ToString("X2") " != 0"
+         $needcorrection = $TRUE
+      }
+   }
+}
+if ($needcorrection) {
+   Write-Host "Current mask is " ($actualmask|foreach {$_.ToString("X2")}) ", while it should be" ($correctmask|foreach {$_.ToString("X2")})
+   if ($confirm) {
+      Set-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\6" -Name "IfUsedNetLuidIndices" -Value $correctmask -Type Binary -Confirm
+   } else {
+      Set-ItemProperty -Path "HKLM\SYSTEM\CurrentControlSet\Services\NDIS\IfTypes\6" -Name "IfUsedNetLuidIndices" -Value $correctmask -Type Binary
+   }
+} else {
+   Write-Host "The used LUID index mask is correct -- nothing to do"
+}
+
+#Write-Host ($connections | Out-String)
+$ghostcon = @(Get-ChildItem ("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}") | Where-Object { !$connections.ContainsKey($_.PSChildName) -and $_.PSChildName -ne "Descriptions" } )
+if ($ghostcon -eq $null) {
+   Write-Host "`nNo ghost connections has been found -- nothing to do"
+} else {
+   Write-Host "`nThe following connections will be removed:"
+   #Write-Host ($ghostcon | Out-String)
+
+   $ghostcon.GetEnumerator() | ForEach-Object {
+      $prop = (Get-ItemProperty "$_\Connection")
+      if ($prop.PnPInstanceId -eq $null) {
+         Write-Host "WARNING! PnPInstanceId does not exist for" $_.PSChildName
+      } elseif (!($prop.PnPInstanceId.ToString() -match "SUN_VBOXNETFLTMP")) {
+         Write-Host "WARNING! PnPInstanceId (" $prop.PnPInstanceId.ToString() ") does not match ROOT\SUN_VBOXNETFLTMP for" $_.PSChildName
+      }
+      if ($prop.Name -eq $null) {
+         Write-Host "WARNING! Name does not exist for" $_.PSChildName
+      } else {
+         $ghostcon_names.Add($_.PSChildName, $prop.Name)
+         Write-Host $_.PSChildName -nonewline
+         Write-Host "  " -nonewline
+         Write-Host $prop.Name
+      }
+   }
+
+   $result = AskForConfirmation "Delete Registry Keys" `
+          "Do you want to delete the keys listed above?" `
+          "Deletes all ghost connection keys from the registry." `
+          "No modifications to the registry will be made."
+
+   switch ($result)
+       {
+           0 {$ghostcon.GetEnumerator() | ForEach-Object { Remove-Item -Path $_.PSPath -Recurse }}
+           1 {"Removal cancelled."}
+       }
+}
+
+# Delete WFPLWFS parameter keys
+DeleteUnmatchingKeys "Delete WFPLWFS Parameter Keys (Adapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\WFPLWFS\Parameters\Adapters"
+DeleteUnmatchingKeys "Delete WFPLWFS Parameter Keys (NdisAdapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\WFPLWFS\Parameters\NdisAdapters"
+# Delete Psched parameter keys
+DeleteUnmatchingKeys "Delete Psched Parameter Keys (Adapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\Psched\Parameters\Adapters"
+DeleteUnmatchingKeys "Delete Psched Parameter Keys (NdisAdapter subkey)" "HKLM\SYSTEM\CurrentControlSet\Services\Psched\Parameters\NdisAdapters"
+
+# Clean up NSI entries
+$nsi_obsolete = New-Object System.Collections.ArrayList
+$nsi_path = "HKLM\SYSTEM\CurrentControlSet\Control\Nsi\{EB004A11-9B1A-11D4-9123-0050047759BC}\10"
+$nsi = (Get-Item $nsi_path) | Select-Object -ExpandProperty property
+$nsi | ForEach-Object {
+   $value = (Get-ItemProperty -Path $nsi_path -Name $_).$_
+   [byte[]]$guid_bytes = $value[1040..1055]
+   $guid = New-Object -TypeName System.Guid -ArgumentList (,$guid_bytes)
+   $guid_string = $guid.ToString("B").ToUpper()
+   $nsi_conn_name_last = 6 + $value[4] + $value[5]*256
+   $nsi_conn_name = [Text.Encoding]::Unicode.GetString($value[6..$nsi_conn_name_last])
+   $nsi_if_name_last = 522 + $value[520] + $value[521]*256
+   $nsi_if_name = [Text.Encoding]::Unicode.GetString($value[522..$nsi_if_name_last])
+   Write-Host $_ -nonewline
+   Write-Host "  " -nonewline
+   Write-Host $guid_string -nonewline
+   Write-Host "  " -nonewline
+   if ($connections.ContainsKey($guid_string)) {
+      Write-Host $nsi_if_name
+   } else {
+      [void] $nsi_obsolete.Add($_)
+      Write-Host "[OBSOLETE] " $nsi_if_name -foregroundcolor red
+   }
+}
+
+$result = AskForConfirmation "Delete NSI Entries" `
+        "Do you want to delete the entries marked in red above?" `
+        "Deletes all marked entries from the NSI registry key." `
+        "No modifications to the registry will be made."
+
+switch ($result)
+    {
+        0 {$nsi_obsolete.GetEnumerator() | ForEach-Object { Remove-ItemProperty -Path $nsi_path -Name $_ }}
+        1 {"Removal cancelled."}
+    }
+
+# Clean up uninstalled connections
+if ( (Get-ChildItem "HKLM\SYSTEM\CurrentControlSet\Control\Network\Uninstalled" | Measure-Object).Count -gt 10 ) {
+   $result = AskForConfirmation "Delete Uninstalled Network Connection Registry Keys" `
+          "There are over 10 uninstalled network connections accumulated in the registry. Do you want to delete them?" `
+          "Deletes uninstalled connection keys from the registry." `
+          "No modifications to the registry will be made."
+
+   switch ($result)
+       {
+           0 {Remove-Item -Path "HKLM\SYSTEM\CurrentControlSet\Control\Network\Uninstalled\*" -Recurse}
+           1 {"Removal cancelled."}
+       }
+} else {
+   Write-Host "Less than 10 uninstalled connections -- no action yet required."
+}
+
+Pop-Location
diff --git a/src/VBox/ValidationKit/testdriver/winbase.py b/src/VBox/ValidationKit/testdriver/winbase.py
index f9c60f9..c1cb71d 100755
--- a/src/VBox/ValidationKit/testdriver/winbase.py
+++ b/src/VBox/ValidationKit/testdriver/winbase.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118928 $"
 
 
 # Standard Python imports.
@@ -40,6 +40,8 @@ import win32con;            # pylint: disable=import-error
 import win32console;        # pylint: disable=import-error
 import win32event;          # pylint: disable=import-error
 import win32process;        # pylint: disable=import-error
+import winerror;            # pylint: disable=import-error
+import pywintypes;          # pylint: disable=import-error
 
 # Validation Kit imports.
 from testdriver import reporter;
@@ -102,7 +104,7 @@ def processTerminate(uPid):
             fRc = True;
         except:
             reporter.logXcpt('uPid=%s' % (uPid,));
-        win32api.CloseHandle(hProcess)
+        hProcess.Close(); #win32api.CloseHandle(hProcess)
     return fRc;
 
 def processKill(uPid):
@@ -111,16 +113,22 @@ def processKill(uPid):
 
 def processExists(uPid):
     """ The Windows version of base.processExists """
-    # pylint: disable=no-member
-    fRc = False;
+    # We try open the process for waiting since this is generally only forbidden in a very few cases.
     try:
-        hProcess = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION, False, uPid);
-    except:
+        hProcess = win32api.OpenProcess(win32con.SYNCHRONIZE, False, uPid);     # pylint: disable=no-member
+    except pywintypes.error as oXcpt:                                           # pylint: disable=no-member
+        if oXcpt.winerror == winerror.ERROR_INVALID_PARAMETER:
+            return False;
+        if oXcpt.winerror != winerror.ERROR_ACCESS_DENIED:
+            reporter.logXcpt('uPid=%s oXcpt=%s' % (uPid, oXcpt));
+            return False;
+        reporter.logXcpt('uPid=%s oXcpt=%s' % (uPid, oXcpt));
+    except Exception as oXcpt:
         reporter.logXcpt('uPid=%s' % (uPid,));
+        return False;
     else:
-        win32api.CloseHandle(hProcess)
-        fRc = True;
-    return fRc;
+        hProcess.Close(); #win32api.CloseHandle(hProcess)
+    return True;
 
 def processCheckPidAndName(uPid, sName):
     """ The Windows version of base.processCheckPidAndName """
@@ -186,7 +194,7 @@ def processCreate(sName, asArgs):
 
     # Dispense with the thread handle.
     try:
-        win32api.CloseHandle(hThread);
+        hThread.Close(); # win32api.CloseHandle(hThread);
     except:
         reporter.logXcpt();
 
@@ -202,7 +210,7 @@ def processCreate(sName, asArgs):
             | win32con.DELETE,
             False,
             0);
-        win32api.CloseHandle(hProcess);
+        hProcess.Close(); # win32api.CloseHandle(hProcess);
         hProcess = hProcessFullAccess;
     except:
         reporter.logXcpt();
@@ -271,3 +279,40 @@ def logMemoryStats():
         reporter.log('  %32s: %s' % (sField, getattr(oStats, sField)));
     return True;
 
+def checkProcessHeap():
+    """
+    Calls HeapValidate(GetProcessHeap(), 0, NULL);
+    """
+
+    # Get the process heap.
+    try:
+        hHeap = ctypes.windll.kernel32.GetProcessHeap();
+    except:
+        reporter.logXcpt();
+        return False;
+
+    # Check it.
+    try:
+        fIsOkay = ctypes.windll.kernel32.HeapValidate(hHeap, 0, None);
+    except:
+        reporter.logXcpt();
+        return False;
+
+    if fIsOkay == 0:
+        reporter.log('HeapValidate failed!');
+
+        # Try trigger a dump using c:\utils\procdump64.exe.
+        from common import utils;
+
+        iPid = os.getpid();
+        asArgs = [ 'e:\\utils\\procdump64.exe', '-ma', '%s' % (iPid,), 'c:\\CrashDumps\\python.exe-%u-heap.dmp' % (iPid,)];
+        if utils.getHostArch() != 'amd64':
+            asArgs[0] = 'c:\\utils\\procdump.exe'
+        reporter.log('Trying to dump this process using: %s' % (asArgs,));
+        utils.processCall(asArgs);
+
+        # Generate a crash exception.
+        ctypes.windll.msvcrt.strcpy(None, None, 1024);
+
+    return True;
+
diff --git a/src/VBox/ValidationKit/testmanager/core/testbox.pgsql b/src/VBox/ValidationKit/testmanager/core/testbox.pgsql
index e9bfe0a..2b583ad 100644
--- a/src/VBox/ValidationKit/testmanager/core/testbox.pgsql
+++ b/src/VBox/ValidationKit/testmanager/core/testbox.pgsql
@@ -623,4 +623,3 @@ CREATE OR REPLACE function TestBoxLogic_setCommand(a_uidAuthor          INTEGER,
     END;
 $$ LANGUAGE plpgsql;
 
-
diff --git a/src/VBox/ValidationKit/testmanager/core/testcase.pgsql b/src/VBox/ValidationKit/testmanager/core/testcase.pgsql
index 6648b4c..e68e006 100644
--- a/src/VBox/ValidationKit/testmanager/core/testcase.pgsql
+++ b/src/VBox/ValidationKit/testmanager/core/testcase.pgsql
@@ -59,7 +59,7 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_checkUniqueName(a_sName TEXT, a_idTestC
         END IF;
     END;
 $$ LANGUAGE plpgsql;
-              
+
 ---
 -- Check that the test case exists.
 -- Raises exception if it doesn't.
@@ -82,7 +82,7 @@ $$ LANGUAGE plpgsql;
 -- Historize a row.
 -- @internal
 --
-CREATE OR REPLACE FUNCTION TestCaseLogic_historizeEntry(a_idTestCase INTEGER, a_tsExpire TIMESTAMP WITH TIME ZONE) 
+CREATE OR REPLACE FUNCTION TestCaseLogic_historizeEntry(a_idTestCase INTEGER, a_tsExpire TIMESTAMP WITH TIME ZONE)
     RETURNS VOID AS $$
     DECLARE
         v_cUpdatedRows INTEGER;
@@ -102,19 +102,19 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_historizeEntry(a_idTestCase INTEGER, a_
 $$ LANGUAGE plpgsql;
 
 
-CREATE OR REPLACE function TestCaseLogic_addEntry(a_uidAuthor INTEGER, a_sName TEXT, a_sDescription TEXT, 
-                                                  a_fEnabled BOOL, a_cSecTimeout INTEGER,  a_sTestBoxReqExpr TEXT, 
+CREATE OR REPLACE function TestCaseLogic_addEntry(a_uidAuthor INTEGER, a_sName TEXT, a_sDescription TEXT,
+                                                  a_fEnabled BOOL, a_cSecTimeout INTEGER,  a_sTestBoxReqExpr TEXT,
                                                   a_sBuildReqExpr TEXT, a_sBaseCmd TEXT, a_sTestSuiteZips TEXT,
                                                   a_sComment TEXT)
     RETURNS INTEGER AS $$
-    DECLARE 
+    DECLARE
          v_idTestCase INTEGER;
     BEGIN
         PERFORM TestCaseLogic_checkUniqueName(a_sName, -1);
 
-        INSERT INTO TestCases (uidAuthor, sName, sDescription, fEnabled, cSecTimeout, 
+        INSERT INTO TestCases (uidAuthor, sName, sDescription, fEnabled, cSecTimeout,
                                sTestBoxReqExpr, sBuildReqExpr, sBaseCmd, sTestSuiteZips, sComment)
-            VALUES (a_uidAuthor, a_sName, a_sDescription, a_fEnabled, a_cSecTimeout, 
+            VALUES (a_uidAuthor, a_sName, a_sDescription, a_fEnabled, a_cSecTimeout,
                     a_sTestBoxReqExpr, a_sBuildReqExpr, a_sBaseCmd, a_sTestSuiteZips, a_sComment)
             RETURNING idTestcase INTO v_idTestCase;
         RETURN v_idTestCase;
@@ -122,21 +122,21 @@ CREATE OR REPLACE function TestCaseLogic_addEntry(a_uidAuthor INTEGER, a_sName T
 $$ LANGUAGE plpgsql;
 
 
-CREATE OR REPLACE function TestCaseLogic_editEntry(a_uidAuthor INTEGER, a_idTestCase INTEGER, a_sName TEXT, a_sDescription TEXT, 
-                                                   a_fEnabled BOOL, a_cSecTimeout INTEGER,  a_sTestBoxReqExpr TEXT, 
+CREATE OR REPLACE function TestCaseLogic_editEntry(a_uidAuthor INTEGER, a_idTestCase INTEGER, a_sName TEXT, a_sDescription TEXT,
+                                                   a_fEnabled BOOL, a_cSecTimeout INTEGER,  a_sTestBoxReqExpr TEXT,
                                                    a_sBuildReqExpr TEXT, a_sBaseCmd TEXT, a_sTestSuiteZips TEXT,
                                                    a_sComment TEXT)
     RETURNS INTEGER AS $$
-    DECLARE 
+    DECLARE
          v_idGenTestCase INTEGER;
     BEGIN
         PERFORM TestCaseLogic_checkExists(a_idTestCase);
         PERFORM TestCaseLogic_checkUniqueName(a_sName, a_idTestCase);
 
         PERFORM TestCaseLogic_historizeEntry(a_idTestCase, CURRENT_TIMESTAMP);
-        INSERT INTO TestCases (idTestCase, uidAuthor, sName, sDescription, fEnabled, cSecTimeout, 
+        INSERT INTO TestCases (idTestCase, uidAuthor, sName, sDescription, fEnabled, cSecTimeout,
                                sTestBoxReqExpr, sBuildReqExpr, sBaseCmd, sTestSuiteZips, sComment)
-            VALUES (a_idTestCase, a_uidAuthor, a_sName, a_sDescription, a_fEnabled, a_cSecTimeout, 
+            VALUES (a_idTestCase, a_uidAuthor, a_sName, a_sDescription, a_fEnabled, a_cSecTimeout,
                     a_sTestBoxReqExpr, a_sBuildReqExpr, a_sBaseCmd, a_sTestSuiteZips, a_sComment)
             RETURNING idGenTestCase INTO v_idGenTestCase;
        RETURN v_idGenTestCase;
@@ -144,7 +144,7 @@ CREATE OR REPLACE function TestCaseLogic_editEntry(a_uidAuthor INTEGER, a_idTest
 $$ LANGUAGE plpgsql;
 
 
-CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestCase INTEGER, a_fCascade BOOLEAN) 
+CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestCase INTEGER, a_fCascade BOOLEAN)
     RETURNS VOID AS $$
     DECLARE
         v_Row           TestCases%ROWTYPE;
@@ -155,14 +155,14 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestC
         --
         -- Check preconditions.
         --
-        IF a_fCascade <> TRUE THEN   
+        IF a_fCascade <> TRUE THEN
             IF EXISTS(  SELECT  *
                         FROM    TestCaseDeps
                         WHERE   idTestCasePreReq = a_idTestCase
                             AND tsExpire         = 'infinity'::TIMESTAMP ) THEN
                 v_sErrors := '';
-                FOR v_Rec IN    
-                    SELECT  TestCases.idTestCase AS idTestCase, 
+                FOR v_Rec IN
+                    SELECT  TestCases.idTestCase AS idTestCase,
                             TestCases.sName AS sName
                     FROM    TestCaseDeps, TestCases
                     WHERE   TestCaseDeps.idTestCasePreReq   = a_idTestCase
@@ -177,14 +177,14 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestC
                 END LOOP;
                 RAISE EXCEPTION 'Other test cases depends on test case with ID %: % ', a_idTestCase, v_sErrors;
             END IF;
-            
+
             IF EXISTS(  SELECT  *
                         FROM    TestGroupMembers
                         WHERE   idTestCase = a_idTestCase
                             AND tsExpire   = 'infinity'::TIMESTAMP ) THEN
                 v_sErrors := '';
-                FOR v_Rec IN    
-                    SELECT  TestGroups.idTestGroup AS idTestGroup, 
+                FOR v_Rec IN
+                    SELECT  TestGroups.idTestGroup AS idTestGroup,
                             TestGroups.sName AS sName
                     FROM    TestGroupMembers, TestGroups
                     WHERE   TestGroupMembers.idTestCase     = a_idTestCase
@@ -203,7 +203,7 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestC
 
         --
         -- To preserve the information about who deleted the record, we try to
-        -- add a dummy record which expires immediately.  I say try because of 
+        -- add a dummy record which expires immediately.  I say try because of
         -- the primary key, we must let the new record be valid for 1 us. :-(
         --
         SELECT  * INTO STRICT v_Row
@@ -225,7 +225,7 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestC
 
         --
         -- Delete arguments, test case dependencies and resource dependencies.
-        -- (We don't bother recording who deleted the records here since it's 
+        -- (We don't bother recording who deleted the records here since it's
         -- a lot of work and sufficiently covered in the TestCases table.)
         --
         UPDATE  TestCaseArgs
@@ -248,7 +248,7 @@ CREATE OR REPLACE FUNCTION TestCaseLogic_delEntry(a_uidAuthor INTEGER, a_idTestC
             SET     tsExpire         = CURRENT_TIMESTAMP
             WHERE   idTestCasePreReq = a_idTestCase
                 AND tsExpire         = 'infinity'::TIMESTAMP;
-            
+
             UPDATE  TestGroupMembers
             SET     tsExpire   = CURRENT_TIMESTAMP
             WHERE   idTestCase = a_idTestCase
diff --git a/src/VBox/ValidationKit/testmanager/core/useraccount.pgsql b/src/VBox/ValidationKit/testmanager/core/useraccount.pgsql
index c55f55e..287825a 100644
--- a/src/VBox/ValidationKit/testmanager/core/useraccount.pgsql
+++ b/src/VBox/ValidationKit/testmanager/core/useraccount.pgsql
@@ -59,7 +59,7 @@ CREATE OR REPLACE FUNCTION UserAccountLogic_checkUniqueUser(a_sUsername TEXT, a_
         END IF;
     END;
 $$ LANGUAGE plpgsql;
-              
+
 ---
 -- Check that the user account exists.
 -- Raises exception if it doesn't.
@@ -83,7 +83,7 @@ $$ LANGUAGE plpgsql;
 -- Historize a row.
 -- @internal
 --
-CREATE OR REPLACE FUNCTION UserAccountLogic_historizeEntry(a_uid INTEGER, a_tsExpire TIMESTAMP WITH TIME ZONE) 
+CREATE OR REPLACE FUNCTION UserAccountLogic_historizeEntry(a_uid INTEGER, a_tsExpire TIMESTAMP WITH TIME ZONE)
     RETURNS VOID AS $$
     DECLARE
         v_cUpdatedRows INTEGER;
@@ -106,7 +106,7 @@ $$ LANGUAGE plpgsql;
 ---
 -- Adds a new user.
 --
-CREATE OR REPLACE FUNCTION UserAccountLogic_addEntry(a_uidAuthor INTEGER, a_sUsername TEXT, a_sEmail TEXT, a_sFullName TEXT, 
+CREATE OR REPLACE FUNCTION UserAccountLogic_addEntry(a_uidAuthor INTEGER, a_sUsername TEXT, a_sEmail TEXT, a_sFullName TEXT,
                                                      a_sLoginName TEXT, a_fReadOnly BOOLEAN)
     RETURNS VOID AS $$
     DECLARE
@@ -118,7 +118,7 @@ CREATE OR REPLACE FUNCTION UserAccountLogic_addEntry(a_uidAuthor INTEGER, a_sUse
     END;
 $$ LANGUAGE plpgsql;
 
-CREATE OR REPLACE FUNCTION UserAccountLogic_editEntry(a_uidAuthor INTEGER, a_uid INTEGER, a_sUsername TEXT, a_sEmail TEXT, 
+CREATE OR REPLACE FUNCTION UserAccountLogic_editEntry(a_uidAuthor INTEGER, a_uid INTEGER, a_sUsername TEXT, a_sEmail TEXT,
                                                       a_sFullName TEXT, a_sLoginName TEXT, a_fReadOnly BOOLEAN)
     RETURNS VOID AS $$
     BEGIN
@@ -139,7 +139,7 @@ CREATE OR REPLACE FUNCTION UserAccountLogic_delEntry(a_uidAuthor INTEGER, a_uid
     BEGIN
         --
         -- To preserve the information about who deleted the record, we try to
-        -- add a dummy record which expires immediately.  I say try because of 
+        -- add a dummy record which expires immediately.  I say try because of
         -- the primary key, we must let the new record be valid for 1 us. :-(
         --
 
diff --git a/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseComments.pgsql b/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseComments.pgsql
index 71a075f..0044bd6 100644
--- a/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseComments.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseComments.pgsql
@@ -1,17 +1,41 @@
+-- $Id: TestManagerDatabaseComments.pgsql $
+--- @file
+-- Autogenerated from TestManagerDatabaseInit.pgsql.  Do not edit!
+--
+
+--
+-- Copyright (C) 2012-2017 Oracle Corporation
+--
+-- This file is part of VirtualBox Open Source Edition (OSE), as
+-- available from http://www.virtualbox.org. This file is free software;
+-- you can redistribute it and/or modify it under the terms of the GNU
+-- General Public License (GPL) as published by the Free Software
+-- Foundation, in version 2 as it comes in the "COPYING" file of the
+-- VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+-- hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+--
+-- The contents of this file may alternatively be used under the terms
+-- of the Common Development and Distribution License Version 1.0
+-- (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+-- VirtualBox OSE distribution, in which case the provisions of the
+-- CDDL are applicable instead of those of the GPL.
+--
+-- You may elect to license modified versions of this file under the
+-- terms and conditions of either the GPL or the CDDL or both.
+--
+
+
 COMMENT ON COLUMN SystemLog.tsCreated IS
   'When this was logged.';
 
-
 COMMENT ON COLUMN SystemLog.sEvent IS
   'The event type.
 This is a 8 character string identifier so that we don''t need to change
 some enum type everytime we introduce a new event type.';
 
-
 COMMENT ON COLUMN SystemLog.sLogText IS
   'The log text.';
 
-
 COMMENT ON TABLE Users IS
   'Test manager users.
 
@@ -26,40 +50,31 @@ analysis data.
          equivalent of deleting is done by setting the ''tsExpire'' field to
          current_timestamp.';
 
-
 COMMENT ON COLUMN Users.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN Users.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN Users.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN Users.sUsername IS
   'User name.';
 
-
 COMMENT ON COLUMN Users.sEmail IS
   'The email address of the user.';
 
-
 COMMENT ON COLUMN Users.sFullName IS
   'The full name.';
 
-
 COMMENT ON COLUMN Users.sLoginName IS
   'The login name used by apache.';
 
-
 COMMENT ON COLUMN Users.fReadOnly IS
   'Read access only.';
 
-
 COMMENT ON TABLE GlobalResources IS
   'Global resource configuration.
 
@@ -69,32 +84,25 @@ For example an iSCSI target.
          equivalent of deleting is done by setting the ''tsExpire'' field to
          current_timestamp.';
 
-
 COMMENT ON COLUMN GlobalResources.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN GlobalResources.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN GlobalResources.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN GlobalResources.sName IS
   'The name of the resource.';
 
-
 COMMENT ON COLUMN GlobalResources.sDescription IS
   'Optional resource description.';
 
-
 COMMENT ON COLUMN GlobalResources.fEnabled IS
   'Indicates whether this resource is currently enabled (online).';
 
-
 COMMENT ON TABLE BuildSources IS
   'Build sources.
 
@@ -108,43 +116,34 @@ Validation Kit from the Builds table.
 @todo Any better way of representing this so we could more easily
       join/whatever when searching for builds?';
 
-
 COMMENT ON COLUMN BuildSources.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN BuildSources.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN BuildSources.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN BuildSources.sName IS
   'The name of the build source.';
 
-
 COMMENT ON COLUMN BuildSources.sDescription IS
   'Description.';
 
-
 COMMENT ON COLUMN BuildSources.sProduct IS
   'Which product.
 ASSUME that it is okay to limit a build source to a single product.';
 
-
 COMMENT ON COLUMN BuildSources.sBranch IS
   'Which branch.
 ASSUME that it is okay to limit a build source to a branch.';
 
-
 COMMENT ON COLUMN BuildSources.asTypes IS
   'Build types to include, all matches if NULL.
 @todo Weighting the types would be nice in a later version.';
 
-
 COMMENT ON COLUMN BuildSources.asOsArches IS
   'Array of the ''sOs.sCpuArch'' to match, all matches if NULL.
 See KBUILD_OSES in kBuild for a list of standard target OSes, and
@@ -152,19 +151,15 @@ KBUILD_ARCHES for a list of standard architectures.
 
 @remarks See marks on ''os-agnostic'' and ''noarch'' in BuildCategories.';
 
-
 COMMENT ON COLUMN BuildSources.iFirstRevision IS
   'The first subversion tree revision to match, no lower limit if NULL.';
 
-
 COMMENT ON COLUMN BuildSources.iLastRevision IS
   'The last subversion tree revision to match, no upper limit if NULL.';
 
-
 COMMENT ON COLUMN BuildSources.cSecMaxAge IS
   'The maximum age of the builds in seconds, unlimited if NULL.';
 
-
 COMMENT ON TABLE TestCases IS
   'Test case configuration.
 
@@ -172,57 +167,46 @@ COMMENT ON TABLE TestCases IS
          equivalent of deleting is done by setting the ''tsExpire'' field to
          current_timestamp.';
 
-
 COMMENT ON COLUMN TestCases.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestCases.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestCases.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestCases.sName IS
   'The name of the test case.';
 
-
 COMMENT ON COLUMN TestCases.sDescription IS
   'Optional test case description.';
 
-
 COMMENT ON COLUMN TestCases.fEnabled IS
   'Indicates whether this test case is currently enabled.';
 
-
 COMMENT ON COLUMN TestCases.cSecTimeout IS
   'Default test case timeout given in seconds.';
 
-
 COMMENT ON COLUMN TestCases.sTestBoxReqExpr IS
   'Default TestBox requirement expression (python boolean expression).
 All the scheduler properties are available for use with the same names
 as in that table.
 If NULL everything matches.';
 
-
 COMMENT ON COLUMN TestCases.sBuildReqExpr IS
   'Default build requirement expression (python boolean expression).
 The following build properties are available: sProduct, sBranch,
 sType, asOsArches, sVersion, iRevision, uidAuthor and idBuild.
 If NULL everything matches.';
 
-
 COMMENT ON COLUMN TestCases.sBaseCmd IS
   'The base command.
 String suitable for executing in bourne shell with space as separator
 (IFS). References to @BUILD_BINARIES@ will be replaced WITH the content
 of the Builds(sBinaries) field.';
 
-
 COMMENT ON COLUMN TestCases.sTestSuiteZips IS
   'Comma separated list of test suite zips (or tars) that the testbox will
 need to download and expand prior to testing.
@@ -233,7 +217,6 @@ with it).  The current test suite can also be referenced by
 uploaded to the test manager download area, in which case the
 @DOWNLOAD_BASE_URL@ prefix can be used to refer to this area.';
 
-
 COMMENT ON TABLE TestCaseArgs IS
   'Test case argument list variations.
 
@@ -279,39 +262,32 @@ simplified by just checking tsExpire date:
          equivalent of deleting is done by setting the ''tsExpire'' field to
          current_timestamp.';
 
-
 COMMENT ON COLUMN TestCaseArgs.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestCaseArgs.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestCaseArgs.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestCaseArgs.sArgs IS
   'The additional arguments.
 String suitable for bourne shell style argument parsing with space as
 separator (IFS).  References to @BUILD_BINARIES@ will be replaced with
 the content of the Builds(sBinaries) field.';
 
-
 COMMENT ON COLUMN TestCaseArgs.cSecTimeout IS
   'Optional test case timeout given in seconds.
 If NULL, the TestCases.cSecTimeout field is used instead.';
 
-
 COMMENT ON COLUMN TestCaseArgs.sTestBoxReqExpr IS
   'Additional TestBox requirement expression (python boolean expression).
 All the scheduler properties are available for use with the same names
 as in that table.  This is checked after first checking the requirements
 in the TestCases.sTestBoxReqExpr field.';
 
-
 COMMENT ON COLUMN TestCaseArgs.sBuildReqExpr IS
   'Additional build requirement expression (python boolean expression).
 The following build properties are available: sProduct, sBranch,
@@ -319,15 +295,12 @@ sType, asOsArches, sVersion, iRevision, uidAuthor and idBuild. This is
 checked after first checking the requirements in the
 TestCases.sBuildReqExpr field.';
 
-
 COMMENT ON COLUMN TestCaseArgs.cGangMembers IS
   'Number of testboxes required (gang scheduling).';
 
-
 COMMENT ON COLUMN TestCaseArgs.sSubName IS
   'Optional variation sub-name.';
 
-
 COMMENT ON INDEX TestCaseArgsLookupIdx IS
   'The arguments are part of the primary key for several reasons.
 No duplicate argument lists (makes no sense - if you want to prioritize
@@ -335,7 +308,6 @@ argument lists, we add that explicitly).  This may hopefully enable us
 to more easily check coverage later on, even when the test case is
 reconfigured with more/less permutations.';
 
-
 COMMENT ON TABLE TestCaseDeps IS
   'Test case dependencies (N:M)
 
@@ -352,20 +324,16 @@ in the scheduling queue.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestCaseDeps.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestCaseDeps.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestCaseDeps.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON TABLE TestCaseGlobalRsrcDeps IS
   'Test case dependencies on global resources (N:M)
 
@@ -374,20 +342,16 @@ COMMENT ON TABLE TestCaseGlobalRsrcDeps IS
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestCaseGlobalRsrcDeps.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestCaseGlobalRsrcDeps.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestCaseGlobalRsrcDeps.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON TABLE TestGroups IS
   'Test Group - A collection of test cases.
 
@@ -403,57 +367,46 @@ A test case can be member of any number of test groups.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestGroups.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestGroups.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestGroups.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestGroups.sName IS
   'The name of the scheduling group.';
 
-
 COMMENT ON COLUMN TestGroups.sDescription IS
   'Optional group description.';
 
-
 COMMENT ON TABLE TestGroupMembers IS
-  'The N:M relation ship between test case configurations and test groups.
+  'The N:M relationship between test case configurations and test groups.
 
 @remarks This table stores history.  Never update or delete anything.  The
          equivalent of deleting is done by setting the ''tsExpire'' field to
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestGroupMembers.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestGroupMembers.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestGroupMembers.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestGroupMembers.iSchedPriority IS
   'Test case scheduling priority.
 Higher number causes the test case to be run more frequently.
 @sa SchedGroupMembers.iSchedPriority, TestBoxesInSchedGroups.iSchedPriority
 @todo Not sure we want to keep this...';
 
-
 COMMENT ON TABLE SchedGroups IS
   'Scheduling group (aka. testbox partitioning) configuration.
 
@@ -477,44 +430,35 @@ VBoxTestSuite) as well as scheduling options.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN SchedGroups.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN SchedGroups.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN SchedGroups.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)
 @note This is NULL for the default group.';
 
-
 COMMENT ON COLUMN SchedGroups.sName IS
   'The name of the scheduling group.';
 
-
 COMMENT ON COLUMN SchedGroups.sDescription IS
   'Optional group description.';
 
-
 COMMENT ON COLUMN SchedGroups.fEnabled IS
   'Indicates whether this group is currently enabled.';
 
-
 COMMENT ON COLUMN SchedGroups.enmScheduler IS
   'The scheduler to use.
 This is for when we later desire different scheduling that the best
 effort stuff provided by the initial implementation.';
 
-
 COMMENT ON COLUMN SchedGroups.sComment IS
   'The Validation Kit build source (@VALIDATIONKIT_ZIP@).
 Non-unique foreign key: BuildSources(idBuildSrc)';
 
-
 COMMENT ON TABLE SchedGroupMembers IS
   'N:M relationship between scheduling groups and test groups.
 
@@ -531,33 +475,27 @@ test case in it.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN SchedGroupMembers.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN SchedGroupMembers.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN SchedGroupMembers.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN SchedGroupMembers.iSchedPriority IS
   'The scheduling priority of the test group.
 Higher number causes the test case to be run more frequently.
 @sa TestGroupMembers.iSchedPriority, TestBoxesInSchedGroups.iSchedPriority';
 
-
 COMMENT ON COLUMN SchedGroupMembers.bmHourlySchedule IS
   'When during the week this group is allowed to start running, NULL means
 there are no constraints.
 Each bit in the bitstring represents one hour, with bit 0 indicating the
 midnight hour on a monday.';
 
-
 COMMENT ON TABLE TestBoxStrTab IS
   'String table for the test boxes.
 
@@ -589,23 +527,18 @@ After conversion:
      Average row cost boxes:     144375808 / 400558 =       360 bytes/row
      Average row cost strings:       5709824 / 1292 =      4420 bytes/row';
 
-
 COMMENT ON COLUMN TestBoxStrTab.sValue IS
   'The string value.';
 
-
 COMMENT ON COLUMN TestBoxStrTab.tsCreated IS
   'Creation time stamp.';
 
-
 COMMENT ON TYPE TestBoxCmd_T IS
   'Testbox commands.';
 
-
 COMMENT ON TYPE LomKind_T IS
   'The kind of lights out management on a testbox.';
 
-
 COMMENT ON TABLE TestBoxes IS
   'Testbox configurations.
 
@@ -624,101 +557,80 @@ To query the currently valid configuration:
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestBoxes.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestBoxes.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestBoxes.uidAuthor IS
   'The user id of the one who created/modified this entry.
 When modified automatically by the testbox, NULL is used.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestBoxes.uuidSystem IS
   'The system or firmware UUID.
 This uniquely identifies the testbox when talking to the server.  After
 SIGNON though, the testbox will also provide idTestBox and ip to
 establish its identity beyond doubt.';
 
-
 COMMENT ON COLUMN TestBoxes.sName IS
   'The testbox name.
 Usually similar to the DNS name.';
 
-
 COMMENT ON COLUMN TestBoxes.fEnabled IS
   'Indicates whether this testbox is enabled.
 A testbox gets disabled when we''re doing maintenance, debugging a issue
 that happens only on that testbox, or some similar stuff.  This is an
 alternative to deleting the testbox.';
 
-
 COMMENT ON COLUMN TestBoxes.enmLomKind IS
   'The kind of lights-out-management.';
 
-
 COMMENT ON COLUMN TestBoxes.lCpuRevision IS
   'Number identifying the CPU family/model/stepping/whatever.
 For x86 and AMD64 type CPUs, this will on the following format:
   (EffFamily << 24) | (EffModel << 8) | Stepping.';
 
-
 COMMENT ON COLUMN TestBoxes.cCpus IS
   'Number of CPUs, CPU cores and CPU threads.';
 
-
 COMMENT ON COLUMN TestBoxes.fCpuHwVirt IS
   'Set if capable of hardware virtualization.';
 
-
 COMMENT ON COLUMN TestBoxes.fCpuNestedPaging IS
   'Set if capable of nested paging.';
 
-
 COMMENT ON COLUMN TestBoxes.fCpu64BitGuest IS
   'Set if CPU capable of 64-bit (VBox) guests.';
 
-
 COMMENT ON COLUMN TestBoxes.fChipsetIoMmu IS
   'Set if chipset with usable IOMMU (VT-d / AMD-Vi).';
 
-
 COMMENT ON COLUMN TestBoxes.fRawMode IS
   'Set if the test box does raw-mode tests.';
 
-
 COMMENT ON COLUMN TestBoxes.cMbMemory IS
   'The (approximate) memory size in megabytes (rounded down to nearest 4 MB).';
 
-
 COMMENT ON COLUMN TestBoxes.cMbScratch IS
   'The amount of scratch space in megabytes (rounded down to nearest 64 MB).';
 
-
 COMMENT ON COLUMN TestBoxes.iTestBoxScriptRev IS
   'The testbox script revision number, serves the purpose of a version number.
 Probably good to have when scheduling upgrades as well for status purposes.';
 
-
 COMMENT ON COLUMN TestBoxes.iPythonHexVersion IS
   'The python sys.hexversion (layed out as of 2.7).
 Good to know which python versions we need to support.';
 
-
 COMMENT ON COLUMN TestBoxes.enmPendingCmd IS
   'Pending command.
 @note We put it here instead of in TestBoxStatuses to get history.';
 
-
 COMMENT ON INDEX TestBoxesUuidIdx IS
   'Nested paging requires hardware virtualization.';
 
-
 COMMENT ON TABLE TestBoxesInSchedGroups IS
   'N:M relationship between test boxes and scheduling groups.
 
@@ -729,26 +641,21 @@ We associate a priority with this relationship.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestBoxesInSchedGroups.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestBoxesInSchedGroups.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestBoxesInSchedGroups.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestBoxesInSchedGroups.iSchedPriority IS
   'The scheduling priority of the scheduling group for the test box.
 Higher number causes the scheduling group to be serviced more frequently.
 @sa TestGroupMembers.iSchedPriority, SchedGroups.iSchedPriority';
 
-
 COMMENT ON TABLE FailureCategories IS
   'Failure categories.
 
@@ -759,30 +666,24 @@ This is for organizing the failure reasons.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN FailureCategories.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN FailureCategories.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN FailureCategories.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN FailureCategories.sShort IS
   'The short category description.
 For combo boxes and other selection lists.';
 
-
 COMMENT ON COLUMN FailureCategories.sFull IS
   'Full description
 For cursor-over-poppups for instance.';
 
-
 COMMENT ON TABLE FailureReasons IS
   'Failure reasons.
 
@@ -796,37 +697,29 @@ test results in any way.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN FailureReasons.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN FailureReasons.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN FailureReasons.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN FailureReasons.sShort IS
   'The short failure description.
 For combo boxes and other selection lists.';
 
-
 COMMENT ON COLUMN FailureReasons.sFull IS
   'Full failure description.';
 
-
 COMMENT ON COLUMN FailureReasons.iTicket IS
   'Ticket number in the primary bugtracker.';
 
-
 COMMENT ON COLUMN FailureReasons.asUrls IS
   'Other URLs to reports or discussions of the observed symptoms.';
 
-
 COMMENT ON TABLE TestResultFailures IS
   'This is for tracking/discussing test result failures.
 
@@ -838,24 +731,19 @@ this while TestResults does not.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN TestResultFailures.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN TestResultFailures.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN TestResultFailures.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN TestResultFailures.sComment IS
   'Optional comment.';
 
-
 COMMENT ON TABLE BuildBlacklist IS
   'Table used to blacklist sets of builds.
 
@@ -880,34 +768,27 @@ fix has been committed.
       Any better representation is welcome, but this is low prioirty for
       now, as it''s relatively easy to change this later one.';
 
-
 COMMENT ON COLUMN BuildBlacklist.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN BuildBlacklist.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN BuildBlacklist.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)';
 
-
 COMMENT ON COLUMN BuildBlacklist.sProduct IS
   'Which product.
 ASSUME that it is okay to limit a blacklisting to a single product.';
 
-
 COMMENT ON COLUMN BuildBlacklist.sBranch IS
   'Which branch.
 ASSUME that it is okay to limit a blacklisting to a branch.';
 
-
 COMMENT ON COLUMN BuildBlacklist.asTypes IS
   'Build types to include, all matches if NULL.';
 
-
 COMMENT ON COLUMN BuildBlacklist.asOsArches IS
   'Array of the ''sOs.sCpuArch'' to match, all matches if NULL.
 See KBUILD_OSES in kBuild for a list of standard target OSes, and
@@ -915,15 +796,12 @@ KBUILD_ARCHES for a list of standard architectures.
 
 @remarks See marks on ''os-agnostic'' and ''noarch'' in BuildCategories.';
 
-
 COMMENT ON COLUMN BuildBlacklist.iFirstRevision IS
   'The first subversion tree revision to blacklist.';
 
-
 COMMENT ON COLUMN BuildBlacklist.iLastRevision IS
   'The last subversion tree revision to blacklist, no upper limit if NULL.';
 
-
 COMMENT ON TABLE BuildCategories IS
   'Build categories.
 
@@ -933,25 +811,20 @@ text fields in the much larger Builds table).
 
 Insert only table, no update, no delete.  History is not needed.';
 
-
 COMMENT ON COLUMN BuildCategories.sProduct IS
   'Product.
 The product name.  For instance ''VBox'' or ''VBoxTestSuite''.';
 
-
 COMMENT ON COLUMN BuildCategories.sRepository IS
   'The version control repository name.';
 
-
 COMMENT ON COLUMN BuildCategories.sBranch IS
   'The branch name (in the version control system).';
 
-
 COMMENT ON COLUMN BuildCategories.sType IS
   'The build type.
 See KBUILD_BLD_TYPES in kBuild for a list of standard build types.';
 
-
 COMMENT ON COLUMN BuildCategories.asOsArches IS
   'Array of the ''sOs.sCpuArch'' supported by the build.
 See KBUILD_OSES in kBuild for a list of standard target OSes, and
@@ -965,7 +838,6 @@ KBUILD_ARCHES for a list of standard architectures.
 
 @note    The array shall be sorted ascendingly to prevent unnecessary duplicates!';
 
-
 COMMENT ON TABLE Builds IS
   'The builds table contains builds from the tinderboxes and oaccasionally from
 developers.
@@ -988,47 +860,37 @@ SchedGroups.idBuildSrcTestSuite links to.
          current_timestamp.  To select the currently valid entries use
          tsExpire = TIMESTAMP WITH TIME ZONE ''infinity''.';
 
-
 COMMENT ON COLUMN Builds.tsCreated IS
   'When this build was created or entered into the database.
 This remains unchanged';
 
-
 COMMENT ON COLUMN Builds.tsEffective IS
   'When this row starts taking effect (inclusive).';
 
-
 COMMENT ON COLUMN Builds.tsExpire IS
   'When this row stops being tsEffective (exclusive).';
 
-
 COMMENT ON COLUMN Builds.uidAuthor IS
   'The user id of the one who created/modified this entry.
 Non-unique foreign key: Users(uid)
 @note This is NULL if added by a batch job / tinderbox.';
 
-
 COMMENT ON COLUMN Builds.iRevision IS
   'The subversion tree revision of the build.';
 
-
 COMMENT ON COLUMN Builds.sVersion IS
   'The product version number (suitable for RTStrVersionCompare).';
 
-
 COMMENT ON COLUMN Builds.sLogUrl IS
   'The link to the tinderbox log of this build.';
 
-
 COMMENT ON COLUMN Builds.sBinaries IS
   'Comma separated list of binaries.
 The binaries have paths relative to the TESTBOX_PATH_BUILDS or full URLs.';
 
-
 COMMENT ON COLUMN Builds.fBinariesDeleted IS
   'Set when the binaries gets deleted by the build quota script.';
 
-
 COMMENT ON TABLE VcsRevisions IS
   'This table is for translating build revisions into commit details.
 
@@ -1045,28 +907,22 @@ here, the batch job is allowed to update/replace existing records.
       a separate table with a M:1 relationship to this table), or try
       associate a commit to a branch.';
 
-
 COMMENT ON COLUMN VcsRevisions.sRepository IS
   'The version control tree name.';
 
-
 COMMENT ON COLUMN VcsRevisions.iRevision IS
   'The version control tree revision number.';
 
-
 COMMENT ON COLUMN VcsRevisions.tsCreated IS
   'When the revision was created (committed).';
 
-
 COMMENT ON COLUMN VcsRevisions.sAuthor IS
   'The name of the committer.
 @note Not to be confused with uidAuthor and test manager users.';
 
-
 COMMENT ON COLUMN VcsRevisions.sMessage IS
   'The commit message.';
 
-
 COMMENT ON TABLE TestResultStrTab IS
   'String table for the test results.
 
@@ -1081,19 +937,15 @@ Nothing is ever deleted from this table.
 
 @note Should use a stored procedure to query/insert a string.';
 
-
 COMMENT ON COLUMN TestResultStrTab.sValue IS
   'The string value.';
 
-
 COMMENT ON COLUMN TestResultStrTab.tsCreated IS
   'Creation time stamp.';
 
-
 COMMENT ON TYPE TestStatus_T IS
   'The status of a test (set / result).';
 
-
 COMMENT ON TABLE TestResults IS
   'Test results - a recursive bundle of joy!
 
@@ -1113,30 +965,24 @@ Nothing is ever deleted from this table.
          test result, and the top most test result is referenced by the
          test set.';
 
-
 COMMENT ON COLUMN TestResults.tsCreated IS
   'Creation time stamp.  This may also be the timestamp of when the test started.';
 
-
 COMMENT ON COLUMN TestResults.tsElapsed IS
   'The elapsed time for this test.
 This is either reported by the directly (with some sanity checking) or
 calculated (current_timestamp - created_ts).
 @todo maybe use a nanosecond field here, check with what';
 
-
 COMMENT ON COLUMN TestResults.cErrors IS
   'The error count.';
 
-
 COMMENT ON COLUMN TestResults.enmStatus IS
   'The test status.';
 
-
 COMMENT ON COLUMN TestResults.iNestingDepth IS
   'Nesting depth.';
 
-
 COMMENT ON TABLE TestResultValues IS
   'Test result values.
 
@@ -1146,21 +992,17 @@ associates.
 
 This is an insert only table, no deletes, no updates.';
 
-
 COMMENT ON COLUMN TestResultValues.tsCreated IS
   'Creation time stamp.';
 
-
 COMMENT ON COLUMN TestResultValues.lValue IS
   'The value.';
 
-
 COMMENT ON COLUMN TestResultValues.iUnit IS
   'The unit.
 @todo This is currently not defined properly. Will fix/correlate this
       with the other places we use unit (IPRT/testdriver/VMMDev).';
 
-
 COMMENT ON TABLE TestResultFiles IS
   'Test result files.
 
@@ -1173,11 +1015,9 @@ files with a .gz/.bz2 suffix first and then without a suffix.
 
 This is an insert only table, no deletes, no updates.';
 
-
 COMMENT ON COLUMN TestResultFiles.tsCreated IS
   'Creation time stamp.';
 
-
 COMMENT ON INDEX TestResultFilesIdx IS
   'The mime type for the file.
 For instance: ''text/plain'',
@@ -1185,7 +1025,6 @@ For instance: ''text/plain'',
               ''video/webm'',
               ''text/xml''';
 
-
 COMMENT ON TABLE TestResultMsgs IS
   'Test result message.
 
@@ -1197,15 +1036,12 @@ of the logs.
 
 This is an insert only table, no deletes, no updates.';
 
-
 COMMENT ON COLUMN TestResultMsgs.tsCreated IS
   'Creation time stamp.';
 
-
 COMMENT ON COLUMN TestResultMsgs.enmLevel IS
   'The message level.';
 
-
 COMMENT ON TABLE TestSets IS
   'Test sets / Test case runs.
 
@@ -1214,24 +1050,19 @@ This is where we collect data about test runs.
 @todo Not entirely sure where the ''test set'' term came from.  Consider
       finding something more appropriate.';
 
-
 COMMENT ON COLUMN TestSets.tsConfig IS
   'The test config timestamp, used when reading test config.';
 
-
 COMMENT ON COLUMN TestSets.tsCreated IS
   'When this test set was scheduled.
 idGenTestBox is valid at this point.';
 
-
 COMMENT ON COLUMN TestSets.tsDone IS
   'When this test completed, i.e. testing stopped.  This should only be set once.';
 
-
 COMMENT ON COLUMN TestSets.enmStatus IS
   'The current status.';
 
-
 COMMENT ON COLUMN TestSets.sBaseFilename IS
   'The base filename used for storing files related to this test set.
 This is a path relative to wherever TM is dumping log files.  In order
@@ -1248,37 +1079,30 @@ The files in the testresultfile table gets their full names like this:
 @remarks We store this explicitly in case we change the directly layout
          at some later point.';
 
-
 COMMENT ON COLUMN TestSets.iGangMemberNo IS
   'The gang member number number, 0 is the leader.';
 
-
 COMMENT ON INDEX TestSetsGangIdx IS
   'The test set of the gang leader, NULL if no gang involved.
 @note This is set by the gang leader as well, so that we can find all
       gang members by WHERE idTestSetGangLeader = :id.';
 
-
 COMMENT ON INDEX TestSetsDoneCreatedBuildCatIdx IS
   'The TestSetsDoneCreatedBuildCatIdx is for testbox results, graph options and such.';
 
-
 COMMENT ON INDEX TestSetsGraphBoxIdx IS
   'For graphs.';
 
-
 COMMENT ON TYPE TestBoxState_T IS
   'TestBox state.
 
 @todo Consider drawing a state diagram for this.';
 
-
 COMMENT ON TABLE TestBoxStatuses IS
   'Testbox status table.
 
 History is not planned on this table.';
 
-
 COMMENT ON COLUMN TestBoxStatuses.tsUpdated IS
   'When this status was last updated.
 This is updated everytime the testbox talks to the test manager, thus it
@@ -1287,26 +1111,21 @@ can easily be used to find testboxes which has stopped responding.
 This is used for timeout calculation during gang-gathering, so in that
 scenario it won''t be updated until the gang is gathered or we time out.';
 
-
 COMMENT ON COLUMN TestBoxStatuses.enmState IS
   'The current state.';
 
-
 COMMENT ON COLUMN TestBoxStatuses.iWorkItem IS
   'Interal work item number.
 This is used to pick and prioritize between multiple scheduling groups.';
 
-
 COMMENT ON TABLE GlobalResourceStatuses IS
   'Global resource status, tracks which test set resources are allocated by.
 
 History is not planned on this table.';
 
-
 COMMENT ON COLUMN GlobalResourceStatuses.tsAllocated IS
   'When the allocation took place.';
 
-
 COMMENT ON TABLE SchedQueues IS
   'Scheduler queue.
 
@@ -1336,23 +1155,19 @@ Manually moving a test to the end of the queue is easy, just get a new
 
 History is not planned on this table.';
 
-
 COMMENT ON COLUMN SchedQueues.bmHourlySchedule IS
   'The scheduling time constraints (see SchedGroupMembers.bmHourlySchedule).';
 
-
 COMMENT ON COLUMN SchedQueues.tsConfig IS
   'When the queue entry was created and for which config is valid.
 This is the timestamp that should be used when reading config info.';
 
-
 COMMENT ON COLUMN SchedQueues.tsLastScheduled IS
   'When this status was last scheduled.
 This is set to current_timestamp when moving the entry to the end of the
 queue.  It''s initial value is unix-epoch.  Not entirely sure if it''s
 useful beyond introspection and non-unique foreign key hacking.';
 
-
 COMMENT ON COLUMN SchedQueues.cMissingGangMembers IS
   'The number of gang members still missing.
 
@@ -1362,4 +1177,3 @@ and
     SELECT cGangMembers FROM TestCaseArgs WHERE idGenTestCaseArgs = :idTest;
 to figure out whether to remain in ''gather-gang''::TestBoxState_T.';
 
-
diff --git a/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql b/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql
index 9b9ff81..61ff70d 100644
--- a/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/TestManagerDatabaseInit.pgsql
@@ -527,7 +527,7 @@ CREATE INDEX TestGroups_id_index ON TestGroups (idTestGroup, tsExpire DESC, tsEf
 
 
 --- @table TestGroupMembers
--- The N:M relation ship between test case configurations and test groups.
+-- The N:M relationship between test case configurations and test groups.
 --
 -- @remarks This table stores history.  Never update or delete anything.  The
 --          equivalent of deleting is done by setting the 'tsExpire' field to
@@ -692,11 +692,11 @@ CREATE TABLE SchedGroupMembers (
 -- String table for the test boxes.
 --
 -- This is a string cache for all string members in TestBoxes except the name.
--- The rational is to avoid duplicating large strings like sReport when the 
--- testbox reports a new cMbScratch value or the box when the test sheriff 
--- sends a reboot command or similar.  
--- 
--- At the time this table was introduced, we had 400558 TestBoxes rows,  where 
+-- The rational is to avoid duplicating large strings like sReport when the
+-- testbox reports a new cMbScratch value or the box when the test sheriff
+-- sends a reboot command or similar.
+--
+-- At the time this table was introduced, we had 400558 TestBoxes rows,  where
 -- the SUM(LENGTH(sReport)) was 993MB.  There were really just 1066 distinct
 -- sReport values, with a total length of 0x3 MB.
 --
@@ -1170,7 +1170,7 @@ CREATE TABLE BuildBlacklist (
 
     PRIMARY KEY (idBlacklisting, tsExpire)
 );
-CREATE INDEX BuildBlacklistIdx ON BuildBlacklist (iLastRevision DESC, iFirstRevision ASC, sProduct, sBranch, 
+CREATE INDEX BuildBlacklistIdx ON BuildBlacklist (iLastRevision DESC, iFirstRevision ASC, sProduct, sBranch,
                                                   tsExpire DESC, tsEffective ASC);
 
 --- @table BuildCategories
@@ -1444,7 +1444,7 @@ CREATE INDEX TestResultsParentIdx ON TestResults (idTestResultParent);
 CREATE INDEX TestResultsNameIdx ON TestResults (idStrName, tsCreated DESC);
 CREATE INDEX TestResultsNameIdx2 ON TestResults (idTestResult, idStrName);
 
-ALTER TABLE TestResultFailures ADD CONSTRAINT TestResultFailures_idTestResult_idTestSet_fkey 
+ALTER TABLE TestResultFailures ADD CONSTRAINT TestResultFailures_idTestResult_idTestSet_fkey
     FOREIGN KEY (idTestResult, idTestSet) REFERENCES TestResults(idTestResult, idTestSet) MATCH FULL;
 
 
diff --git a/src/VBox/ValidationKit/testmanager/db/TestManagerVBoxPilot-1.pgsql b/src/VBox/ValidationKit/testmanager/db/TestManagerVBoxPilot-1.pgsql
index 4d6bcd0..a0e8769 100644
--- a/src/VBox/ValidationKit/testmanager/db/TestManagerVBoxPilot-1.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/TestManagerVBoxPilot-1.pgsql
@@ -49,7 +49,7 @@ INSERT INTO BuildSources (uidAuthor, sName, sProduct, sBranch, asTypes, asOsArch
 
 INSERT INTO SchedGroups (sName, sDescription, fEnabled, idBuildSrc, idBuildSrcTestSuite)
     VALUES ('VirtualBox Trunk', NULL, TRUE,
-            (SELECT idBuildSrc FROM BuildSources WHERE sName = 'VBox trunk builds'), 
+            (SELECT idBuildSrc FROM BuildSources WHERE sName = 'VBox trunk builds'),
             (SELECT idBuildSrc FROM BuildSources WHERE sName = 'VBox TestSuite trunk builds') );
 \set idSchedGroupQuery '(SELECT idSchedGroup FROM SchedGroups WHERE sName = \'VirtualBox Trunk\')'
 
@@ -79,8 +79,8 @@ INSERT INTO SchedGroupMembers (idSchedGroup, idTestGroup, uidAuthor, idTestGroup
 -- Testcases
 --
 INSERT INTO TestCases (uidAuthor, sName, fEnabled, cSecTimeout, sBaseCmd, sTestSuiteZips)
-    VALUES (:idUserQuery, 'VBox install', TRUE, 600,  
-            'validationkit/testdriver/vboxinstaller.py --vbox-build @BUILD_BINARIES@ @ACTION@ -- testdriver/base.py @ACTION@', 
+    VALUES (:idUserQuery, 'VBox install', TRUE, 600,
+            'validationkit/testdriver/vboxinstaller.py --vbox-build @BUILD_BINARIES@ @ACTION@ -- testdriver/base.py @ACTION@',
             '@VALIDATIONKIT_ZIP@');
 INSERT INTO TestCaseArgs (idTestCase, uidAuthor, sArgs)
     VALUES ((SELECT idTestCase FROM TestCases WHERE sName = 'VBox install'), :idUserQuery, '');
@@ -89,4 +89,3 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
 
 COMMIT WORK;
 
-
diff --git a/src/VBox/ValidationKit/testmanager/db/gen-sql-comments.py b/src/VBox/ValidationKit/testmanager/db/gen-sql-comments.py
index a0d5711..0d9c574 100755
--- a/src/VBox/ValidationKit/testmanager/db/gen-sql-comments.py
+++ b/src/VBox/ValidationKit/testmanager/db/gen-sql-comments.py
@@ -3,6 +3,11 @@
 # $Id: gen-sql-comments.py $
 
 """
+Converts doxygen style comments in SQL script to COMMENT ON statements.
+"""
+
+__copyright__ = \
+"""
 Copyright (C) 2012-2017 Oracle Corporation
 
 This file is part of VirtualBox Open Source Edition (OSE), as
@@ -22,9 +27,6 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-"""
-Converts doxygen style comments in SQL script to COMMENT ON statements.
-"""
 
 import sys;
 import re;
@@ -68,7 +70,7 @@ class SqlDox(object):
 
     def commitComment2(self, sSqlObj):
         if self.sComment is not None and sSqlObj is not None:
-            print("COMMENT ON %s IS\n  '%s';\n\n" % (sSqlObj, self.quoteSqlString(self.sComment.strip())));
+            print("COMMENT ON %s IS\n  '%s';\n" % (sSqlObj, self.quoteSqlString(self.sComment.strip())));
         self.resetComment();
         return True;
 
@@ -203,6 +205,20 @@ def main(asArgs):
         oFile = open(sInput, 'r');
     except:
         return errorMsg("failed to open '%s' for reading" % (sInput,));
+
+    # header.
+    print("-- $" "Id" "$");
+    print("--- @file");
+    print("-- Autogenerated from %s.  Do not edit!" % (sInput,));
+    print("--");
+    print("");
+    for sLine in __copyright__.split('\n'):
+        if len(sLine) > 0:
+            print("-- %s" % (sLine,));
+        else:
+            print("--");
+    print("");
+    print("");
     me = SqlDox(oFile, sInput);
     return me.process();
 
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r07-testresults-1.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r07-testresults-1.pgsql
index 22c38ae..52fa3bf 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r07-testresults-1.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r07-testresults-1.pgsql
@@ -35,4 +35,3 @@ COMMIT;
 
 \d+ TestResults
 
-
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r11-testsets-2.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r11-testsets-2.pgsql
index a27a918..27ec692 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r11-testsets-2.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r11-testsets-2.pgsql
@@ -30,7 +30,7 @@
 DROP INDEX TestSetsGangIdx;
 DROP INDEX TestSetsBoxIdx;
 DROP INDEX TestSetsBuildIdx;
-DROP INDEX TestSetsTestCaseIdx;    
+DROP INDEX TestSetsTestCaseIdx;
 DROP INDEX TestSetsTestVarIdx;
 DROP INDEX TestSetsCreated;
 DROP INDEX TestSetsDone;
@@ -77,7 +77,7 @@ CREATE TABLE NewTestSets (
     -- Non-unique foreign key: Builds(idBuild)
     idBuild             INTEGER     NOT NULL,
     --- The build category of idBuild when the test started.
-    -- This is for speeding up graph data collection, i.e. avoid idBuild 
+    -- This is for speeding up graph data collection, i.e. avoid idBuild
     -- the WHERE part of the selection.
     idBuildCategory     INTEGER     , -- NOT NULL REFERENCES BuildCategories(idBuildCategory)
     --- The test suite build we're using to do the testing.
@@ -147,11 +147,11 @@ COMMIT;
 SELECT COUNT(*) FROM TestSets a LEFT OUTER JOIN Builds b ON (a.idBuild = b.idBuild AND b.tsExpire = 'infinity'::TIMESTAMP);
 SELECT COUNT(*) FROM TestSets;
 
-INSERT INTO NewTestSets (idTestSet, tsConfig, tsCreated, tsDone, enmStatus, idBuild, idBuildCategory, idBuildTestSuite, 
-                         idGenTestBox, idTestBox, idTestGroup, idGenTestCase, idTestCase, idGenTestCaseArgs, idTestCaseArgs, 
+INSERT INTO NewTestSets (idTestSet, tsConfig, tsCreated, tsDone, enmStatus, idBuild, idBuildCategory, idBuildTestSuite,
+                         idGenTestBox, idTestBox, idTestGroup, idGenTestCase, idTestCase, idGenTestCaseArgs, idTestCaseArgs,
                          idTestResult, sBaseFilename, iGangMemberNo, idTestSetGangLeader )
-    SELECT a.idTestSet, a.tsConfig, a.tsCreated, tsDone, a.enmStatus, a.idBuild, b.idBuildCategory, a.idBuildTestSuite, 
-           a.idGenTestBox, a.idTestBox, a.idTestGroup, a.idGenTestCase, a.idTestCase, a.idGenTestCaseArgs, a.idTestCaseArgs, 
+    SELECT a.idTestSet, a.tsConfig, a.tsCreated, tsDone, a.enmStatus, a.idBuild, b.idBuildCategory, a.idBuildTestSuite,
+           a.idGenTestBox, a.idTestBox, a.idTestGroup, a.idGenTestCase, a.idTestCase, a.idGenTestCaseArgs, a.idTestCaseArgs,
            a.idTestResult, a.sBaseFilename, a.iGangMemberNo, a.idTestSetGangLeader
     FROM   TestSets a LEFT OUTER JOIN Builds b ON (a.idBuild = b.idBuild AND b.tsExpire = 'infinity'::TIMESTAMP);
 COMMIT;
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql
index 03fbb70..b7d3ba5 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r15-index-sorting.pgsql
@@ -60,7 +60,7 @@ ANALYZE VERBOSE TestBoxes;
 
 
 DROP INDEX IF EXISTS BuildBlacklistIdx;
-CREATE INDEX BuildBlacklistIdx ON BuildBlacklist (iLastRevision DESC, iFirstRevision ASC, sProduct, sBranch, 
+CREATE INDEX BuildBlacklistIdx ON BuildBlacklist (iLastRevision DESC, iFirstRevision ASC, sProduct, sBranch,
                                                   tsExpire DESC, tsEffective ASC);
 \d BuildBlacklist;
 ANALYZE VERBOSE BuildBlacklist;
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r16-testcaseargs-1-testresultfailures-1.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r16-testcaseargs-1-testresultfailures-1.pgsql
index 59285c8..ae138f8 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r16-testcaseargs-1-testresultfailures-1.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r16-testcaseargs-1-testresultfailures-1.pgsql
@@ -90,12 +90,12 @@ INSERT INTO TestResultFailures ( idTestResult, tsEffective, tsExpire, uidAuthor,
     FROM   OldTestResultFailures o,
            TestResults tr
     WHERE  o.idTestResult = tr.idTestResult;
-   
+
 -- Add unique constraint to TestResult for our new foreign key.
 ALTER TABLE TestResults ADD CONSTRAINT TestResults_idTestResult_idTestSet_key UNIQUE (idTestResult, idTestSet);
 
 -- Restore foreign key.
-ALTER TABLE TestResultFailures ADD CONSTRAINT TestResultFailures_idTestResult_idTestSet_fkey 
+ALTER TABLE TestResultFailures ADD CONSTRAINT TestResultFailures_idTestResult_idTestSet_fkey
     FOREIGN KEY (idTestResult, idTestSet) REFERENCES TestResults(idTestResult, idTestSet) MATCH FULL;
 
 -- Add new indexes.
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r17-testresultvalues-4.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r17-testresultvalues-4.pgsql
index 82a144e..7b60ddb 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r17-testresultvalues-4.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r17-testresultvalues-4.pgsql
@@ -36,4 +36,3 @@ COMMIT;
 
 \d+ TestResultValues
 
-
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r18-testresultfiles-1-testresultmsgs-1.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r18-testresultfiles-1-testresultmsgs-1.pgsql
index 08aca5d..1dc04b3 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r18-testresultfiles-1-testresultmsgs-1.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r18-testresultfiles-1-testresultmsgs-1.pgsql
@@ -36,11 +36,11 @@ DROP TABLE IF EXISTS OldTestResultMsgs;
 \set ON_ERROR_STOP 1
 \set AUTOCOMMIT 0
 
-                                                                                  
---                                                                                
--- Rename the original table, drop constrains and foreign key references so we    
--- get the right name automatic when creating the new one.                        
---                                                                                
+
+--
+-- Rename the original table, drop constrains and foreign key references so we
+-- get the right name automatic when creating the new one.
+--
 \d+ TestResultFiles;
 ALTER TABLE TestResultFiles RENAME TO OldTestResultFiles;
 
@@ -81,14 +81,14 @@ CREATE TABLE TestResultFiles (
     idStrMime           INTEGER     NOT NULL
 );
 
-INSERT INTO TestResultFiles ( idTestResultFile, idTestResult, idTestSet, tsCreated, idStrFile, idStrDescription, 
+INSERT INTO TestResultFiles ( idTestResultFile, idTestResult, idTestSet, tsCreated, idStrFile, idStrDescription,
                               idStrKind, idStrMime)
-    SELECT o.idTestResultFile, o.idTestResult, tr.idTestSet, o.tsCreated, o.idStrFile, o.idStrDescription, 
+    SELECT o.idTestResultFile, o.idTestResult, tr.idTestSet, o.tsCreated, o.idStrFile, o.idStrDescription,
            o.idStrKind, o.idStrMime
     FROM   OldTestResultFiles o,
            TestResults tr
     WHERE  o.idTestResult = tr.idTestResult;
-   
+
 -- Add new indexes.
 CREATE INDEX TestResultFilesIdx  ON TestResultFiles(idTestResult);
 CREATE INDEX TestResultFilesIdx2 ON TestResultFiles(idTestSet, tsCreated DESC);
@@ -104,10 +104,10 @@ ALTER TABLE TestResultFiles ADD CONSTRAINT TestResultFiles_idStrMime_fkey
 \d TestResultFiles;
 
 
---                                                                                
--- Rename the original table, drop constrains and foreign key references so we    
--- get the right name automatic when creating the new one.                        
---                                                                                
+--
+-- Rename the original table, drop constrains and foreign key references so we
+-- get the right name automatic when creating the new one.
+--
 \d+ TestResultMsgs;
 ALTER TABLE TestResultMsgs RENAME TO OldTestResultMsgs;
 
@@ -133,11 +133,11 @@ CREATE TABLE TestResultMsgs (
 );
 
 INSERT INTO TestResultMsgs ( idTestResultMsg, idTestResult, idTestSet, tsCreated, idStrMsg, enmLevel)
-    SELECT o.idTestResultMsg, o.idTestResult, tr.idTestSet, o.tsCreated, o.idStrMsg, o.enmLevel 
+    SELECT o.idTestResultMsg, o.idTestResult, tr.idTestSet, o.tsCreated, o.idStrMsg, o.enmLevel
     FROM   OldTestResultMsgs o,
            TestResults tr
     WHERE  o.idTestResult = tr.idTestResult;
-   
+
 -- Add new indexes.
 CREATE INDEX TestResultMsgsIdx  ON TestResultMsgs(idTestResult);
 CREATE INDEX TestResultMsgsIdx2 ON TestResultMsgs(idTestSet, tsCreated DESC);
@@ -159,5 +159,3 @@ DROP TABLE OldTestResultMsgs;
 
 COMMIT;
 
-
-
diff --git a/src/VBox/ValidationKit/testmanager/db/tmdb-r19-testboxes-3.pgsql b/src/VBox/ValidationKit/testmanager/db/tmdb-r19-testboxes-3.pgsql
index 33da4c0..111bd88 100644
--- a/src/VBox/ValidationKit/testmanager/db/tmdb-r19-testboxes-3.pgsql
+++ b/src/VBox/ValidationKit/testmanager/db/tmdb-r19-testboxes-3.pgsql
@@ -42,14 +42,14 @@ LOCK TABLE TestBoxStatuses      IN ACCESS EXCLUSIVE MODE;
 LOCK TABLE TestSets             IN ACCESS EXCLUSIVE MODE;
 LOCK TABLE TestBoxes            IN ACCESS EXCLUSIVE MODE;
 LOCK TABLE SchedGroupMembers    IN ACCESS EXCLUSIVE MODE;
-      
+
 \d+ TestBoxes;
 
 --
--- Rename the table, drop foreign keys refering to it, and drop constrains 
+-- Rename the table, drop foreign keys refering to it, and drop constrains
 -- within the table itself.  The latter is mostly for naming and we do it
 -- up front in case the database we're running against has different names
--- due to previous conversions. 
+-- due to previous conversions.
 --
 ALTER TABLE TestBoxes RENAME TO OldTestBoxes;
 
@@ -64,17 +64,17 @@ ALTER TABLE TestSets        DROP CONSTRAINT TestSets_idGenTestBox_fkey;
 
 ALTER TABLE OldTestBoxes    DROP CONSTRAINT testboxes_pkey;
 ALTER TABLE OldTestBoxes    DROP CONSTRAINT testboxes_idgentestbox_key;
-                   
+
 DROP INDEX IF EXISTS TestBoxesUuidIdx;
 DROP INDEX IF EXISTS TestBoxesExpireEffectiveIdx;
-             
+
 -- This output should be free of index, constraints and references from other tables.
 \d+ OldTestBoxes;
-      
+
 --
--- Create the two new tables before starting data migration (don't want to spend time 
+-- Create the two new tables before starting data migration (don't want to spend time
 -- on converting strings just to find a typo in the TestBoxes create table syntax).
---                   
+--
 CREATE SEQUENCE TestBoxStrTabIdSeq
     START 1
     INCREMENT BY 1
@@ -250,7 +250,7 @@ SELECT pg_total_relation_size('TestBoxStrTab');
 -- Populate the test box table.
 --
 
-INSERT INTO TestBoxes ( 
+INSERT INTO TestBoxes (
             idTestBox,          --  0
             tsEffective,        --  1
             tsExpire,           --  2
@@ -277,46 +277,46 @@ INSERT INTO TestBoxes (
             fCpuNestedPaging,   -- 23
             fCpu64BitGuest,     -- 24
             fChipsetIoMmu,      -- 25
-            fRawMode,           -- 26 
-            cMbMemory,          -- 27 
-            cMbScratch,         -- 28 
-            idStrReport,        -- 29 
-            iTestBoxScriptRev,  -- 30 
+            fRawMode,           -- 26
+            cMbMemory,          -- 27
+            cMbScratch,         -- 28
+            idStrReport,        -- 29
+            iTestBoxScriptRev,  -- 30
             iPythonHexVersion,  -- 31
             enmPendingCmd       -- 32
             )
-SELECT      idTestBox, 
-            tsEffective, 
-            tsExpire, 
-            uidAuthor, 
-            idGenTestBox, 
-            ip,  
-            uuidSystem,  
-            sName,  
-            st1.idStr, 
-            idSchedGroup,  
-            fEnabled,  
-            enmLomKind,  
-            ipLom,  
-            pctScaleTimeout,  
+SELECT      idTestBox,
+            tsEffective,
+            tsExpire,
+            uidAuthor,
+            idGenTestBox,
+            ip,
+            uuidSystem,
+            sName,
+            st1.idStr,
+            idSchedGroup,
+            fEnabled,
+            enmLomKind,
+            ipLom,
+            pctScaleTimeout,
             NULL,
-            st2.idStr,  
-            st3.idStr,  
-            st4.idStr,  
-            st5.idStr,  
+            st2.idStr,
+            st3.idStr,
+            st4.idStr,
+            st5.idStr,
             st6.idStr,
-            lCpuRevision,         
-            cCpus,  
-            fCpuHwVirt,  
-            fCpuNestedPaging,  
-            fCpu64BitGuest,  
-            fChipsetIoMmu,  
+            lCpuRevision,
+            cCpus,
+            fCpuHwVirt,
+            fCpuNestedPaging,
+            fCpu64BitGuest,
+            fChipsetIoMmu,
             NULL,
-            cMbMemory,  
-            cMbScratch,  
+            cMbMemory,
+            cMbScratch,
             st7.idStr,
-            iTestBoxScriptRev,  
-            iPythonHexVersion,  
+            iTestBoxScriptRev,
+            iPythonHexVersion,
             enmPendingCmd
 FROM        OldTestBoxes
         LEFT OUTER JOIN TestBoxStrTab st1 ON sDescription = st1.sValue
@@ -332,9 +332,9 @@ CREATE UNIQUE INDEX TestBoxesUuidIdx ON TestBoxes (uuidSystem, tsExpire DESC);
 CREATE INDEX TestBoxesExpireEffectiveIdx ON TestBoxes (tsExpire DESC, tsEffective ASC);
 
 -- Restore foreign key references to the table.
-ALTER TABLE TestBoxStatuses ADD  CONSTRAINT TestBoxStatuses_idGenTestBox_fkey  
+ALTER TABLE TestBoxStatuses ADD  CONSTRAINT TestBoxStatuses_idGenTestBox_fkey
     FOREIGN KEY (idGenTestBox) REFERENCES TestBoxes(idGenTestBox);
-ALTER TABLE TestSets        ADD  CONSTRAINT TestSets_idGenTestBox_fkey         
+ALTER TABLE TestSets        ADD  CONSTRAINT TestSets_idGenTestBox_fkey
     FOREIGN KEY (idGenTestBox) REFERENCES TestBoxes(idGenTestBox);
 
 -- Drop the old table.
@@ -344,4 +344,3 @@ COMMIT;
 
 \d TestBoxes;
 
-
diff --git a/src/VBox/ValidationKit/testmanager/htdocs/js/common.js b/src/VBox/ValidationKit/testmanager/htdocs/js/common.js
index d4d40df..963b6ef 100644
--- a/src/VBox/ValidationKit/testmanager/htdocs/js/common.js
+++ b/src/VBox/ValidationKit/testmanager/htdocs/js/common.js
@@ -4,7 +4,6 @@
  */
 
 /*
- *
  * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/ValidationKit/testmanager/htdocs/js/graphwiz.js b/src/VBox/ValidationKit/testmanager/htdocs/js/graphwiz.js
index 9fd2c2a..c64d561 100644
--- a/src/VBox/ValidationKit/testmanager/htdocs/js/graphwiz.js
+++ b/src/VBox/ValidationKit/testmanager/htdocs/js/graphwiz.js
@@ -4,7 +4,6 @@
  */
 
 /*
- *
  * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/ValidationKit/testmanager/selftest/st1-load.pgsql b/src/VBox/ValidationKit/testmanager/selftest/st1-load.pgsql
index 7b1c1ce..20966c9 100644
--- a/src/VBox/ValidationKit/testmanager/selftest/st1-load.pgsql
+++ b/src/VBox/ValidationKit/testmanager/selftest/st1-load.pgsql
@@ -50,15 +50,15 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
             1112223331);
 
 INSERT INTO BuildSources (uidAuthor, sName, sProduct, sBranch, asTypes, asOsArches)
-    VALUES (1112223331, 'st1-src', 'st1', 'trunk', 
-            ARRAY['release', 'strict'], 
+    VALUES (1112223331, 'st1-src', 'st1', 'trunk',
+            ARRAY['release', 'strict'],
             ARRAY['win.x86', 'linux.noarch', 'solaris.amd64', 'os-agnostic.sparc64', 'os-agnostic.noarch']);
 
 INSERT INTO BuildCategories (sProduct, sBranch, sType, asOsArches)
     VALUES ('st1', 'trunk', 'release', ARRAY['os-agnostic.noarch']);
 
 INSERT INTO Builds (uidAuthor, idBuildCategory, iRevision, sVersion, sBinaries)
-    VALUES (1112223331, 
+    VALUES (1112223331,
             (SELECT idBuildCategory FROM BuildCategories WHERE sProduct = 'st1' AND sBranch = 'trunk'),
             1234, '1.0', '');
 
@@ -101,7 +101,7 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
 -- The fourth thru eight tests
 
 INSERT INTO TestCases (uidAuthor, sName, fEnabled, cSecTimeout, sBaseCmd, sTestSuiteZips)
-    VALUES (1112223331, 'st1-test4-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test immediate-sub-tests', 
+    VALUES (1112223331, 'st1-test4-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test immediate-sub-tests',
             '@DOWNLOAD_BASE_URL@/VBoxValidationKit.zip');
 INSERT INTO TestCaseArgs (idTestCase, uidAuthor, sArgs)
     VALUES ((SELECT idTestCase  FROM TestCases  WHERE sName = 'st1-test4-neg'), 1112223331, '');
@@ -111,7 +111,7 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
             1112223331);
 
 INSERT INTO TestCases (uidAuthor, sName, fEnabled, cSecTimeout, sBaseCmd, sTestSuiteZips)
-    VALUES (1112223331, 'st1-test5-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test total-sub-tests', 
+    VALUES (1112223331, 'st1-test5-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test total-sub-tests',
             '@DOWNLOAD_BASE_URL@/VBoxValidationKit.zip');
 INSERT INTO TestCaseArgs (idTestCase, uidAuthor, sArgs)
     VALUES ((SELECT idTestCase  FROM TestCases  WHERE sName = 'st1-test5-neg'), 1112223331, '');
@@ -121,7 +121,7 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
             1112223331);
 
 INSERT INTO TestCases (uidAuthor, sName, fEnabled, cSecTimeout, sBaseCmd, sTestSuiteZips)
-    VALUES (1112223331, 'st1-test6-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test immediate-values', 
+    VALUES (1112223331, 'st1-test6-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test immediate-values',
             '@DOWNLOAD_BASE_URL@/VBoxValidationKit.zip');
 INSERT INTO TestCaseArgs (idTestCase, uidAuthor, sArgs)
     VALUES ((SELECT idTestCase  FROM TestCases  WHERE sName = 'st1-test6-neg'), 1112223331, '');
@@ -131,7 +131,7 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
             1112223331);
 
 INSERT INTO TestCases (uidAuthor, sName, fEnabled, cSecTimeout, sBaseCmd, sTestSuiteZips)
-    VALUES (1112223331, 'st1-test7-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test total-values', 
+    VALUES (1112223331, 'st1-test7-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test total-values',
             '@DOWNLOAD_BASE_URL@/VBoxValidationKit.zip');
 INSERT INTO TestCaseArgs (idTestCase, uidAuthor, sArgs)
     VALUES ((SELECT idTestCase  FROM TestCases  WHERE sName = 'st1-test7-neg'), 1112223331, '');
@@ -141,7 +141,7 @@ INSERT INTO TestGroupMembers (idTestGroup, idTestCase, uidAuthor)
             1112223331);
 
 INSERT INTO TestCases (uidAuthor, sName, fEnabled, cSecTimeout, sBaseCmd, sTestSuiteZips)
-    VALUES (1112223331, 'st1-test8-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test immediate-messages', 
+    VALUES (1112223331, 'st1-test8-neg', TRUE, 3600,  'validationkit/tests/selftests/tdSelfTest4.py --test immediate-messages',
             '@DOWNLOAD_BASE_URL@/VBoxValidationKit.zip');
 INSERT INTO TestCaseArgs (idTestCase, uidAuthor, sArgs)
     VALUES ((SELECT idTestCase  FROM TestCases  WHERE sName = 'st1-test8-neg'), 1112223331, '');
diff --git a/src/VBox/ValidationKit/testmanager/selftest/st1-unload.pgsql b/src/VBox/ValidationKit/testmanager/selftest/st1-unload.pgsql
index cfd51df..d7b796a 100644
--- a/src/VBox/ValidationKit/testmanager/selftest/st1-unload.pgsql
+++ b/src/VBox/ValidationKit/testmanager/selftest/st1-unload.pgsql
@@ -38,28 +38,28 @@ DELETE FROM SchedGroupMembers   WHERE uidAuthor = 1112223331;
 UPDATE TestBoxes SET idSchedGroup = 1 WHERE idSchedGroup IN ( SELECT idSchedGroup FROM SchedGroups WHERE uidAuthor = 1112223331 );
 DELETE FROM SchedGroups         WHERE uidAuthor = 1112223331 OR sName = 'st1-group';
 
-UPDATE TestSets SET idTestResult = NULL 
+UPDATE TestSets SET idTestResult = NULL
     WHERE idTestCase IN ( SELECT idTestCase FROM TestCases WHERE uidAuthor = 1112223331 );
 
 DELETE FROM TestResultValues
-    WHERE idTestResult IN ( SELECT idTestResult FROM TestResults 
-                            WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets  
-                                                  WHERE idTestCase IN ( SELECT idTestCase FROM TestCases 
+    WHERE idTestResult IN ( SELECT idTestResult FROM TestResults
+                            WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets
+                                                  WHERE idTestCase IN ( SELECT idTestCase FROM TestCases
                                                                         WHERE uidAuthor = 1112223331 ) ) );
 DELETE FROM TestResultFiles
-    WHERE idTestResult IN ( SELECT idTestResult FROM TestResults 
-                            WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets  
-                                                  WHERE idTestCase IN ( SELECT idTestCase FROM TestCases 
+    WHERE idTestResult IN ( SELECT idTestResult FROM TestResults
+                            WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets
+                                                  WHERE idTestCase IN ( SELECT idTestCase FROM TestCases
                                                                         WHERE uidAuthor = 1112223331 ) ) );
 DELETE FROM TestResultMsgs
-    WHERE idTestResult IN ( SELECT idTestResult FROM TestResults 
-                            WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets  
-                                                  WHERE idTestCase IN ( SELECT idTestCase FROM TestCases 
+    WHERE idTestResult IN ( SELECT idTestResult FROM TestResults
+                            WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets
+                                                  WHERE idTestCase IN ( SELECT idTestCase FROM TestCases
                                                                         WHERE uidAuthor = 1112223331 ) ) );
-DELETE FROM TestResults         
-    WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets  
+DELETE FROM TestResults
+    WHERE idTestSet IN (  SELECT idTestSet  FROM TestSets
                           WHERE idTestCase IN ( SELECT idTestCase FROM TestCases WHERE uidAuthor = 1112223331 ) );
-DELETE FROM TestSets            
+DELETE FROM TestSets
     WHERE idTestCase IN ( SELECT idTestCase FROM TestCases WHERE uidAuthor = 1112223331 );
 
 DELETE FROM TestCases           WHERE uidAuthor = 1112223331;
diff --git a/src/VBox/ValidationKit/tests/api/tdAppliance1.py b/src/VBox/ValidationKit/tests/api/tdAppliance1.py
index 9f382f8..14c9ff0 100755
--- a/src/VBox/ValidationKit/tests/api/tdAppliance1.py
+++ b/src/VBox/ValidationKit/tests/api/tdAppliance1.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118780 $"
 
 
 # Standard Python imports.
@@ -129,7 +129,7 @@ class tdAppliance1(vbox.TestDriver):
             oAppliance = oVirtualBox.createAppliance();
         except:
             return reporter.errorXcpt('IVirtualBox::createAppliance failed');
-        print "oAppliance=%s" % (oAppliance,)
+        print("oAppliance=%s" % (oAppliance,));
 
         try:
             oProgress = vboxwrappers.ProgressWrapper(oAppliance.read(sOva), self.oVBoxMgr, self, 'read "%s"' % (sOva,));
@@ -174,7 +174,7 @@ class tdAppliance1(vbox.TestDriver):
         # Unpack
         #
         try:
-            os.mkdir(sTmpDir, 0755);
+            os.mkdir(sTmpDir, 0x1ed); # 0755 = 0x1ed
             oTarFile = tarfile.open(sOva, 'r:*');
             oTarFile.extractall(sTmpDir);
             oTarFile.close();
@@ -188,7 +188,7 @@ class tdAppliance1(vbox.TestDriver):
             oAppliance2 = oVirtualBox.createAppliance();
         except:
             return reporter.errorXcpt('IVirtualBox::createAppliance failed (#2)');
-        print "oAppliance2=%s" % (oAppliance2,)
+        print("oAppliance2=%s" % (oAppliance2,));
 
         try:
             oProgress = vboxwrappers.ProgressWrapper(oAppliance2.read(sOvf), self.oVBoxMgr, self, 'read "%s"' % (sOvf,));
diff --git a/include/iprt/ntwrap.mac b/src/VBox/ValidationKit/tests/audio/Makefile.kup
similarity index 100%
rename from include/iprt/ntwrap.mac
rename to src/VBox/ValidationKit/tests/audio/Makefile.kup
diff --git a/src/VBox/ValidationKit/tests/audio/tdGuestHostTimings.py b/src/VBox/ValidationKit/tests/audio/tdGuestHostTimings.py
new file mode 100755
index 0000000..06e1c94
--- /dev/null
+++ b/src/VBox/ValidationKit/tests/audio/tdGuestHostTimings.py
@@ -0,0 +1,229 @@
+# -*- coding: utf-8 -*-
+# $Id: tdGuestHostTimings.py $
+
+"""
+????????
+"""
+
+__copyright__ = \
+"""
+Copyright (C) 2012-2017 Oracle Corporation
+
+This file is part of VirtualBox Open Source Edition (OSE), as
+available from http://www.virtualbox.org. This file is free software;
+you can redistribute it and/or modify it under the terms of the GNU
+General Public License (GPL) as published by the Free Software
+Foundation, in version 2 as it comes in the "COPYING" file of the
+VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+The contents of this file may alternatively be used under the terms
+of the Common Development and Distribution License Version 1.0
+(CDDL) only, as it comes in the "COPYING.CDDL" file of the
+VirtualBox OSE distribution, in which case the provisions of the
+CDDL are applicable instead of those of the GPL.
+
+You may elect to license modified versions of this file under the
+terms and conditions of either the GPL or the CDDL or both.
+"""
+__version__ = "$Revision: 118787 $"
+
+
+import os
+import sys
+import time
+import subprocess
+import re
+import time
+
+# Only the main script needs to modify the path.
+try:    __file__
+except: __file__ = sys.argv[0];
+g_ksValidationKitDir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))));
+sys.path.append(g_ksValidationKitDir);
+
+# Validation Kit imports.
+from testdriver import reporter
+from testdriver import base
+from testdriver import vbox
+from testdriver import vboxcon
+from testdriver import vboxtestvms
+
+class tdGuestHostTimings(vbox.TestDriver):                                         # pylint: disable=R0902
+
+    def __init__(self):
+        vbox.TestDriver.__init__(self);
+        self.sSessionTypeDef = 'gui';
+
+        self.oTestVmSet = self.oTestVmManager.getStandardVmSet('nat')
+
+        # Use the command line "--test-vms mw7x64 execute" to run the only "mw7x64" VM
+        oTestVm = vboxtestvms.TestVm(self.oTestVmSet, 'mw7x64', sHd = 'mw7x64.vdi',
+                         sKind = 'Windows7', acCpusSup = range(1, 2), fIoApic = True, sFirmwareType = 'bios',
+                            asParavirtModesSup = ['hyperv'], asVirtModesSup = ['hwvirt-np'], sHddControllerType = 'SATA Controller');
+
+        self.oTestVmSet.aoTestVms.append(oTestVm);
+
+        self.sVMname = None
+
+    def showUsage(self):
+        rc = vbox.TestDriver.showUsage(self);
+        reporter.log('');
+        reporter.log('tdGuestHostTimings Options:');
+        reporter.log(' --runningvmname <vmname>');
+        return rc;
+
+    def parseOption(self, asArgs, iArg):                                        # pylint: disable=R0912,R0915
+        if asArgs[iArg] == '--runningvmname':
+            iArg += 1
+            if iArg >= len(asArgs):
+                raise base.InvalidOption('The "----runningvmname" needs VM name')
+
+            self.sVMname = asArgs[iArg]
+        else:
+            return vbox.TestDriver.parseOption(self, asArgs, iArg)
+        return iArg + 1
+
+    def actionConfig(self):
+        return True
+
+    def actionExecute(self):
+        #self.sTempPathHost  = os.environ.get("IPRT_TMPDIR")
+        self.sTempPathHost  = os.path.normpath(os.environ.get("TEMP") + "/VBoxAudioValKit")
+
+        if self.sVMname is None:
+            return self.oTestVmSet.actionExecute(self, self.testOneVmConfig)
+        else:
+            return self.actionExecuteOnRunnigVM()
+
+    def doTest(self, oSession):
+        oConsole = oSession.console
+        oGuest = oConsole.guest
+
+        sOSTypeId = oGuest.OSTypeId.lower()
+        if sOSTypeId.find("win") == -1 :
+            reporter.log("Only Windows guests are currently supported")
+            reporter.testDone()
+            return True
+
+        oGuestSession = oGuest.createSession("Administrator", "password", "", "Audio Validation Kit")
+        guestSessionWaitResult = oGuestSession.waitFor(self.oVBoxMgr.constants.GuestSessionWaitResult_Start, 2000)
+        reporter.log("guestSessionWaitResult = %d" % guestSessionWaitResult)
+
+        for duration in range(3, 6):
+            reporter.testStart("Checking for duration of " + str(duration) + " seconds")
+            sPathToPlayer = "D:\\win\\" + ("amd64" if (sOSTypeId.find('_64') >= 0) else "x86") + "\\ntPlayToneWaveX.exe"
+            oProcess = oGuestSession.processCreate(sPathToPlayer,  ["xxx0", "--total-duration-in-secs", str(duration)], [], [], 0)
+            processWaitResult = oProcess.waitFor(self.oVBoxMgr.constants.ProcessWaitForFlag_Start, 1000)
+            reporter.log("Started: pid %d, waitResult %d" % (oProcess.PID, processWaitResult))
+
+            processWaitResult = oProcess.waitFor(self.oVBoxMgr.constants.ProcessWaitForFlag_Terminate, 2 * duration * 1000)
+            reporter.log("Terminated: pid %d, waitResult %d" % (oProcess.PID, processWaitResult))
+            time.sleep(1) # Give audio backend sometime to save a stream to .wav file
+
+            absFileName = self.seekLatestAudioFileName(oGuestSession, duration)
+
+            if absFileName is None:
+                reporter.testFailure("Unable to find audio file")
+                continue
+
+            reporter.log("Checking audio file '" + absFileName + "'")
+
+            diff = self.checkGuestHostTimings(absFileName + ".timing")
+            if diff is not None:
+                if diff > 0.0:      # Guest sends data quicker than a host can play
+                    if diff > 0.01: # 1% is probably good threshold here
+                        reporter.testFailure("Guest sends audio buffers too quickly")
+                else:
+                    diff = -diff;   # Much worse case: guest sends data very slow, host feels starvation
+                    if diff > 0.005: # 0.5% is probably good threshold here
+                        reporter.testFailure("Guest sends audio buffers too slowly")
+
+                reporter.testDone()
+            else:
+                reporter.testFailure("Unable to parse a file with timings")
+
+        oGuestSession.close()
+
+        del oGuest
+        del oConsole
+
+        return True
+
+    def testOneVmConfig(self, oVM, oTestVm):
+        #self.logVmInfo(oVM)
+        oSession, oTxsSession = self.startVmAndConnectToTxsViaTcp(oTestVm.sVmName,
+                                                                    fCdWait = True,
+                                                                    cMsTimeout = 60 * 1000)
+        if oSession is not None and oTxsSession is not None:
+            # Wait until guest reported success
+            reporter.log('Guest started. Connection to TXS service established.')
+            self.doTest(oSessionWrapper.o)
+
+        return True
+
+    def actionExecuteOnRunnigVM(self):
+        if not self.importVBoxApi():
+            return False;
+
+        oVirtualBox = self.oVBoxMgr.getVirtualBox()
+        oMachine = oVirtualBox.findMachine(self.sVMname)
+
+        if oMachine == None:
+            reporter.log("Machine '%s' is unknown" % (oMachine.name))
+            return False
+
+        if oMachine.state != self.oVBoxMgr.constants.MachineState_Running:
+            reporter.log("Machine '%s' is not Running" % (oMachine.name))
+            return False
+
+        oSession = self.oVBoxMgr.mgr.getSessionObject(oVirtualBox)
+        oMachine.lockMachine(oSession, self.oVBoxMgr.constants.LockType_Shared)
+
+        self.doTest(oSession);
+
+        oSession.unlockMachine()
+
+        del oSession
+        del oMachine
+        del oVirtualBox
+        return True
+
+    def seekLatestAudioFileName(self, guestSession, duration):
+
+        listOfFiles = os.listdir(self.sTempPathHost)
+        # Assuming that .wav files are named like 2016-11-15T12_08_27.669573100Z.wav by VBOX audio backend
+        # So that sorting by name = sorting by creation date
+        listOfFiles.sort(reverse = True)
+
+        for fileName in listOfFiles:
+            if not fileName.endswith(".wav"):
+                continue
+
+            absFileName = os.path.join(self.sTempPathHost, fileName)
+
+            # Ignore too small wav files (usually uncompleted audio streams)
+            statInfo = os.stat(absFileName)
+            if statInfo.st_size > 100:
+                return absFileName
+
+        return
+
+    def checkGuestHostTimings(self, absFileName):
+        with open(absFileName) as f:
+            for line_terminated in f:
+                line = line_terminated.rstrip('\n')
+
+        reporter.log("Last line is: " + line)
+        matchObj = re.match( r'(\d+) (\d+)', line, re.I)
+        if matchObj:
+            hostTime  = int(matchObj.group(1))
+            guestTime = int(matchObj.group(2))
+
+            diff = float(guestTime - hostTime) / hostTime
+            return diff
+
+        return
+
+if __name__ == '__main__':
+    sys.exit(tdGuestHostTimings().main(sys.argv));
diff --git a/src/VBox/ValidationKit/tests/installation/tdGuestOsInstOs2.py b/src/VBox/ValidationKit/tests/installation/tdGuestOsInstOs2.py
index 30b8073..a21e7ed 100755
--- a/src/VBox/ValidationKit/tests/installation/tdGuestOsInstOs2.py
+++ b/src/VBox/ValidationKit/tests/installation/tdGuestOsInstOs2.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118941 $"
 
 
 # Standard Python imports.
@@ -83,7 +83,6 @@ class tdGuestOsInstOs2(vbox.TestDriver):
         self.sIso                = None
         self.sFloppy             = None
         self.sIsoPathBase        = os.path.join(self.sResourcePath, '4.2', 'isos')
-        self.oVM                 = None
         self.fEnableIOAPIC       = True
         self.cCpus               = 1
         self.fEnableNestedPaging = True
@@ -159,11 +158,11 @@ class tdGuestOsInstOs2(vbox.TestDriver):
 
         self.sFloppy = os.path.join(self.sIsoPathBase, os.path.splitext(self.sIso)[0] + '.img')
 
-        self.oVM = self.createTestVM(self.sVmName, 1, sKind = sKind, sDvdImage = self.sIso, cCpus = self.cCpus,
-                                     sFloppy = self.sFloppy, eNic0AttachType = eNic0AttachType)
-        assert self.oVM is not None
+        oVM = self.createTestVM(self.sVmName, 1, sKind = sKind, sDvdImage = self.sIso, cCpus = self.cCpus,
+                                sFloppy = self.sFloppy, eNic0AttachType = eNic0AttachType)
+        assert oVM is not None
 
-        oSession = self.openSession(self.oVM)
+        oSession = self.openSession(oVM)
 
         # Create HDD
         sHddPath = os.path.join(self.sScratchPath, self.sHddName)
@@ -215,6 +214,8 @@ class tdGuestOsInstOs2(vbox.TestDriver):
         """
         Execute the testcase itself.
         """
+        if not self.importVBoxApi():
+            return False
         return self.testDoInstallGuestOs()
 
     #
@@ -225,8 +226,6 @@ class tdGuestOsInstOs2(vbox.TestDriver):
         """
         Install guest OS and wait for result
         """
-
-        self.logVmInfo(self.oVM)
         reporter.testStart('Installing %s' % (os.path.basename(self.sIso),))
 
         cMsTimeout = 40*60000;
@@ -245,4 +244,5 @@ class tdGuestOsInstOs2(vbox.TestDriver):
         return False
 
 if __name__ == '__main__':
-    sys.exit(tdGuestOsInstOs2().main(sys.argv))
+    sys.exit(tdGuestOsInstOs2().main(sys.argv));
+
diff --git a/src/VBox/ValidationKit/tests/unittests/tdUnitTest1.py b/src/VBox/ValidationKit/tests/unittests/tdUnitTest1.py
index 39dcac5..41826b8 100755
--- a/src/VBox/ValidationKit/tests/unittests/tdUnitTest1.py
+++ b/src/VBox/ValidationKit/tests/unittests/tdUnitTest1.py
@@ -27,7 +27,7 @@ CDDL are applicable instead of those of the GPL.
 You may elect to license modified versions of this file under the
 terms and conditions of either the GPL or the CDDL or both.
 """
-__version__ = "$Revision: 118412 $"
+__version__ = "$Revision: 118962 $"
 
 
 # Standard Python imports.
@@ -180,6 +180,7 @@ class tdUnitTest1(vbox.TestDriver):
         # failed or hang
         'testcase/tstCryptoPkcs7Verify': '', # hang
         'tstOVF': '',                       # hang (only ancient version, now in new place)
+        'testcase/tstOVF': '',              # Creates mess when fails, needs to be run in a separate test.
         'testcase/tstRTLockValidator': '',  # Lock validation is not enabled for critical sections
         'testcase/tstGuestControlSvc': '',  # failed: line 288: testHost(&svcTable): expected VINF_SUCCESS, got VERR_NOT_FOUND
         'testcase/tstRTMemEf': '',          # failed w/o error message
diff --git a/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs-nat.cmd b/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs-nat.cmd
index c1a4ebb..d8cd848 100644
--- a/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs-nat.cmd
+++ b/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs-nat.cmd
@@ -3,6 +3,7 @@
 @REM
 
 @REM
+REM
 REM Copyright (C) 2006-2017 Oracle Corporation
 REM
 REM This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs.cmd b/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs.cmd
index 582937e..f13752f 100644
--- a/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs.cmd
+++ b/src/VBox/ValidationKit/utils/TestExecServ/win/vboxtxs.cmd
@@ -3,6 +3,7 @@
 @REM
 
 @REM
+REM
 REM Copyright (C) 2006-2017 Oracle Corporation
 REM
 REM This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/ValidationKit/utils/audio/Makefile.kmk b/src/VBox/ValidationKit/utils/audio/Makefile.kmk
new file mode 100644
index 0000000..3ca4c55
--- /dev/null
+++ b/src/VBox/ValidationKit/utils/audio/Makefile.kmk
@@ -0,0 +1,38 @@
+# $Id: Makefile.kmk $
+## @file
+# VirtualBox Validation Kit - Audio Utilities.
+#
+
+#
+# Copyright (C) 2010-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+# VirtualBox OSE distribution, in which case the provisions of the
+# CDDL are applicable instead of those of the GPL.
+#
+# You may elect to license modified versions of this file under the
+# terms and conditions of either the GPL or the CDDL or both.
+#
+
+SUB_DEPTH = ../../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+#
+# Utility to play sine wave to Default Audio Device.
+#
+PROGRAMS.win += ntPlayToneWaveX
+ntPlayToneWaveX_TEMPLATE = VBoxValidationKitR3
+ntPlayToneWaveX_SOURCES  = ntPlayToneWaveX.cpp
+
+include $(FILE_KBUILD_SUB_FOOTER)
+
diff --git a/src/VBox/ValidationKit/utils/audio/ntPlayToneWaveX.cpp b/src/VBox/ValidationKit/utils/audio/ntPlayToneWaveX.cpp
new file mode 100644
index 0000000..10a066f
--- /dev/null
+++ b/src/VBox/ValidationKit/utils/audio/ntPlayToneWaveX.cpp
@@ -0,0 +1,216 @@
+/* $Id: ntPlayToneWaveX.cpp $ */
+/** @file
+ * ????
+ */
+
+/*
+ * Copyright (C) 2012-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/win/windows.h>
+
+#include <iprt/getopt.h>
+#include <iprt/initterm.h>
+#include <iprt/message.h>
+#include <iprt/stream.h>
+#include <iprt/err.h>
+
+#define _USE_MATH_DEFINES
+#include <math.h>
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+uint32_t g_cSamplesPerSec    = 44100;
+uint32_t g_cSamplesPerPeriod  = 100; // 441.0Hz for 44.1kHz
+uint32_t g_cSamplesInBuffer = 4096;
+double   g_rdSecDuration     = 5.0;
+
+uint32_t g_cbSample; // assuming 16-bit stereo (for now)
+
+HWAVEOUT g_hWaveOut;
+HANDLE g_hWavEvent;
+
+
+int main(int argc, char **argv)
+{
+    int rc = RTR3InitExe(argc, &argv, 0);
+    if (RT_FAILURE(rc))
+        return RTMsgInitFailure(rc);
+
+    static const RTGETOPTDEF s_aOptions[] =
+    {
+        { "--samples-per-sec",        's',  RTGETOPT_REQ_UINT32 },
+        { "--period-in-samples",      'p',  RTGETOPT_REQ_UINT32 },
+        { "--bufsize-in-samples",     'b',  RTGETOPT_REQ_UINT32 },
+        { "--total-duration-in-secs", 'd',  RTGETOPT_REQ_UINT32 }
+    };
+
+    RTGETOPTSTATE State;
+    RTGetOptInit(&State, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0);
+    RTGETOPTUNION ValueUnion;
+    int chOpt;
+    while ((chOpt = RTGetOpt(&State, &ValueUnion)) != 0)
+    {
+        switch (chOpt)
+        {
+            case 's': g_cSamplesPerSec    = ValueUnion.u32; break;
+            case 'p': g_cSamplesPerPeriod = ValueUnion.u32; break;
+            case 'b': g_cSamplesInBuffer  = ValueUnion.u32; break;
+            case 'd': g_rdSecDuration     = ValueUnion.u32; break;
+            case 'h':
+                RTPrintf("usage: ntPlayToneWaveX.exe\n"
+                "[-s|--samples-per-sec]\n"
+                "[-p|--period-in-samples]\n"
+                "[-b|--bufsize-in-samples]\n"
+                "[-d|--total-duration-in-secs]\n"
+                         "\n"
+                         "Plays sine tone using ancient waveX API\n");
+                return 0;
+
+            default:
+                return RTGetOptPrintError(chOpt, &ValueUnion);
+        }
+    }
+
+
+    WAVEFORMATEX waveFormatEx = { 0 };
+    MMRESULT mmresult;
+
+    waveFormatEx.wFormatTag = WAVE_FORMAT_PCM;
+    waveFormatEx.nChannels = 2;
+    waveFormatEx.nSamplesPerSec = g_cSamplesPerSec;
+    waveFormatEx.wBitsPerSample = 16;
+    waveFormatEx.nBlockAlign = g_cbSample = waveFormatEx.nChannels * waveFormatEx.wBitsPerSample / 8;
+    waveFormatEx.nAvgBytesPerSec = waveFormatEx.nBlockAlign * waveFormatEx.nSamplesPerSec;
+    waveFormatEx.cbSize = 0;
+
+    g_hWavEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+    mmresult = waveOutOpen(&g_hWaveOut, WAVE_MAPPER, &waveFormatEx, (DWORD_PTR)g_hWavEvent, NULL, CALLBACK_EVENT);
+
+    if (mmresult != MMSYSERR_NOERROR)
+    {
+        RTMsgError("waveOutOpen failed with 0x%X\n", mmresult);
+        return -1;
+    }
+
+
+    uint32_t ui32SamplesToPlayTotal = (uint32_t)(g_rdSecDuration * g_cSamplesPerSec);
+    uint32_t ui32SamplesToPlay = ui32SamplesToPlayTotal;
+    uint32_t ui32SamplesPlayed = 0;
+    uint32_t ui32SamplesForWavBuf;
+
+    WAVEHDR waveHdr1 = {0}, waveHdr2 = {0}, *pWaveHdr, *pWaveHdrPlaying, *pWaveHdrWaiting;
+    uint32_t i, k;
+    DWORD res;
+
+    int16_t *i16Samples1 = (int16_t *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, g_cSamplesInBuffer * g_cbSample);
+    int16_t *i16Samples2 = (int16_t *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, g_cSamplesInBuffer * g_cbSample);
+
+    k = 0; // This is discrete time really!!!
+
+    for (i = 0; i < g_cSamplesInBuffer; i++, k++)
+    {
+        i16Samples1[2 * i] = (uint16_t)(10000.0 * sin(2.0 * M_PI * k / g_cSamplesPerPeriod));
+        i16Samples1[2 * i + 1] = i16Samples1[2 * i];
+    }
+
+    ui32SamplesForWavBuf = min(ui32SamplesToPlay, g_cSamplesInBuffer);
+
+    waveHdr1.lpData = (LPSTR)i16Samples1;
+    waveHdr1.dwBufferLength = ui32SamplesForWavBuf * g_cbSample;
+    waveHdr1.dwFlags = 0;
+    waveHdr1.dwLoops = 0;
+
+    ui32SamplesToPlay -= ui32SamplesForWavBuf;
+    ui32SamplesPlayed += ui32SamplesForWavBuf;
+
+    pWaveHdrPlaying = &waveHdr1;
+
+    mmresult = waveOutPrepareHeader(g_hWaveOut, pWaveHdrPlaying, sizeof(WAVEHDR));
+    mmresult = waveOutWrite(g_hWaveOut, pWaveHdrPlaying, sizeof(WAVEHDR));
+    //RTMsgInfo("waveOutWrite completes with %d\n", mmresult);
+
+    res = WaitForSingleObject(g_hWavEvent, INFINITE);
+    //RTMsgInfo("WaitForSingleObject completes with %d\n\n", res);
+
+    waveHdr2.lpData = (LPSTR)i16Samples2;
+    waveHdr2.dwBufferLength = 0;
+    waveHdr2.dwFlags = 0;
+    waveHdr2.dwLoops = 0;
+
+    pWaveHdrWaiting = &waveHdr2;
+
+    while (ui32SamplesToPlay > 0)
+    {
+        int16_t *i16Samples = (int16_t *)pWaveHdrWaiting->lpData;
+
+        for (i = 0; i < g_cSamplesInBuffer; i++, k++)
+        {
+            i16Samples[2 * i] = (uint16_t)(10000.0 * sin(2.0 * M_PI * k / g_cSamplesPerPeriod));
+            i16Samples[2 * i + 1] = i16Samples[2 * i];
+        }
+
+        ui32SamplesForWavBuf = min(ui32SamplesToPlay, g_cSamplesInBuffer);
+
+        pWaveHdrWaiting->dwBufferLength = ui32SamplesForWavBuf * g_cbSample;
+        pWaveHdrWaiting->dwFlags = 0;
+        pWaveHdrWaiting->dwLoops = 0;
+
+
+        ui32SamplesToPlay -= ui32SamplesForWavBuf;
+        ui32SamplesPlayed += ui32SamplesForWavBuf;
+
+        mmresult = waveOutPrepareHeader(g_hWaveOut, pWaveHdrWaiting, sizeof(WAVEHDR));
+        mmresult = waveOutWrite(g_hWaveOut, pWaveHdrWaiting, sizeof(WAVEHDR));
+        //RTMsgInfo("waveOutWrite completes with %d\n", mmresult);
+
+        res = WaitForSingleObject(g_hWavEvent, INFINITE);
+        //RTMsgInfo("WaitForSingleObject completes with %d\n\n", res);
+
+        mmresult = waveOutUnprepareHeader(g_hWaveOut, pWaveHdrPlaying, sizeof(WAVEHDR));
+        //RTMsgInfo("waveOutUnprepareHeader completes with %d\n", mmresult);
+
+        pWaveHdr = pWaveHdrWaiting;
+        pWaveHdrWaiting = pWaveHdrPlaying;
+        pWaveHdrPlaying = pWaveHdr;
+    }
+
+    while (mmresult = waveOutUnprepareHeader(g_hWaveOut, pWaveHdrPlaying, sizeof(WAVEHDR)))
+    {
+        //Expecting WAVERR_STILLPLAYING
+        //RTMsgInfo("waveOutUnprepareHeader failed with 0x%X\n", mmresult);
+        Sleep(100);
+    }
+
+    if (mmresult == MMSYSERR_NOERROR)
+    {
+        waveOutClose(g_hWaveOut);
+    }
+
+    HeapFree(GetProcessHeap(), 0, i16Samples1);
+    HeapFree(GetProcessHeap(), 0, i16Samples2);
+}
+
diff --git a/src/VBox/ValidationKit/utils/cpu/xmmsaving-asm.asm b/src/VBox/ValidationKit/utils/cpu/xmmsaving-asm.asm
index d129467..e66c525 100644
--- a/src/VBox/ValidationKit/utils/cpu/xmmsaving-asm.asm
+++ b/src/VBox/ValidationKit/utils/cpu/xmmsaving-asm.asm
@@ -150,4 +150,3 @@ BEGINPROC XmmSavingTestLoadSet
     ret
 ENDPROC   XmmSavingTestLoadSet
 
-
diff --git a/src/VBox/ValidationKit/utils/usb/UsbTest.cpp b/src/VBox/ValidationKit/utils/usb/UsbTest.cpp
index d40aa90..57ab3f4 100644
--- a/src/VBox/ValidationKit/utils/usb/UsbTest.cpp
+++ b/src/VBox/ValidationKit/utils/usb/UsbTest.cpp
@@ -302,14 +302,14 @@ static int usbTestDeviceQueryBusAndDevId(uint16_t *pu16BusId, uint16_t *pu16DevI
 
 #define USBTEST_USB_DEV_SYSFS "/sys/bus/usb/devices/"
 
-    PRTDIR pDirUsb = NULL;
-    int rc = RTDirOpen(&pDirUsb, USBTEST_USB_DEV_SYSFS);
+    RTDIR hDirUsb = NULL;
+    int rc = RTDirOpen(&hDirUsb, USBTEST_USB_DEV_SYSFS);
     if (RT_SUCCESS(rc))
     {
         do
         {
             RTDIRENTRY DirUsbBus;
-            rc = RTDirRead(pDirUsb, &DirUsbBus, NULL);
+            rc = RTDirRead(hDirUsb, &DirUsbBus, NULL);
             if (   RT_SUCCESS(rc)
                 && RTStrNCmp(DirUsbBus.szName, "usb", 3)
                 && RTLinuxSysFsExists(USBTEST_USB_DEV_SYSFS "%s/idVendor", DirUsbBus.szName))
@@ -367,7 +367,7 @@ static int usbTestDeviceQueryBusAndDevId(uint16_t *pu16BusId, uint16_t *pu16DevI
         if (rc == VERR_NO_MORE_FILES)
             rc = VINF_SUCCESS;
 
-        RTDirClose(pDirUsb);
+        RTDirClose(hDirUsb);
     }
 
     if (RT_SUCCESS(rc) && !fFound)
@@ -389,27 +389,27 @@ static char *usbTestFindDevice(void)
      */
     char *pszDevPath = NULL;
 
-    PRTDIR pDirUsb = NULL;
-    int rc = RTDirOpen(&pDirUsb, "/dev/bus/usb");
+    RTDIR hDirUsb = NULL;
+    int rc = RTDirOpen(&hDirUsb, "/dev/bus/usb");
     if (RT_SUCCESS(rc))
     {
         do
         {
             RTDIRENTRY DirUsbBus;
-            rc = RTDirRead(pDirUsb, &DirUsbBus, NULL);
+            rc = RTDirRead(hDirUsb, &DirUsbBus, NULL);
             if (RT_SUCCESS(rc))
             {
                 char aszPath[RTPATH_MAX + 1];
                 RTStrPrintf(&aszPath[0], RT_ELEMENTS(aszPath), "/dev/bus/usb/%s", DirUsbBus.szName);
 
-                PRTDIR pDirUsbBus = NULL;
-                rc = RTDirOpen(&pDirUsbBus, &aszPath[0]);
+                RTDIR hDirUsbBus = NULL;
+                rc = RTDirOpen(&hDirUsbBus, &aszPath[0]);
                 if (RT_SUCCESS(rc))
                 {
                     do
                     {
                         RTDIRENTRY DirUsbDev;
-                        rc = RTDirRead(pDirUsbBus, &DirUsbDev, NULL);
+                        rc = RTDirRead(hDirUsbBus, &DirUsbDev, NULL);
                         if (RT_SUCCESS(rc))
                         {
                             char aszPathDev[RTPATH_MAX + 1];
@@ -440,7 +440,7 @@ static char *usbTestFindDevice(void)
                              && !pszDevPath);
 
                     rc = VINF_SUCCESS;
-                    RTDirClose(pDirUsbBus);
+                    RTDirClose(hDirUsbBus);
                 }
             }
             else if (rc != VERR_NO_MORE_FILES)
@@ -448,7 +448,7 @@ static char *usbTestFindDevice(void)
         } while (   RT_SUCCESS(rc)
                  && !pszDevPath);
 
-        RTDirClose(pDirUsb);
+        RTDirClose(hDirUsb);
     }
 
     return pszDevPath;
diff --git a/src/VBox/ValidationKit/utils/usb/UsbTestServicePlatform-linux.cpp b/src/VBox/ValidationKit/utils/usb/UsbTestServicePlatform-linux.cpp
index 383eaa3..e60461f 100644
--- a/src/VBox/ValidationKit/utils/usb/UsbTestServicePlatform-linux.cpp
+++ b/src/VBox/ValidationKit/utils/usb/UsbTestServicePlatform-linux.cpp
@@ -124,14 +124,14 @@ static int utsPlatformLnxDummyHcdQueryBusses(PUTSPLATFORMLNXDUMMYHCD pHcd, const
     if (cchPath == RT_ELEMENTS(aszPath))
         return VERR_BUFFER_OVERFLOW;
 
-    PRTDIR pDir = NULL;
-    rc = RTDirOpenFiltered(&pDir, aszPath, RTDIRFILTER_WINNT, 0);
+    RTDIR hDir = NULL;
+    rc = RTDirOpenFiltered(&hDir, aszPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     if (RT_SUCCESS(rc))
     {
         do
         {
             RTDIRENTRY DirFolderContent;
-            rc = RTDirRead(pDir, &DirFolderContent, NULL);
+            rc = RTDirRead(hDir, &DirFolderContent, NULL);
             if (RT_SUCCESS(rc))
             {
                 uint32_t uBusId = 0;
@@ -181,7 +181,7 @@ static int utsPlatformLnxDummyHcdQueryBusses(PUTSPLATFORMLNXDUMMYHCD pHcd, const
         if (rc == VERR_NO_MORE_FILES)
             rc = VINF_SUCCESS;
 
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
 
     return rc;
@@ -204,8 +204,8 @@ static int utsPlatformLnxHcdScanByName(const char *pszHcdName, const char *pszUd
         return VERR_BUFFER_OVERFLOW;
 
     /* Enumerate the available HCD and their bus numbers. */
-    PRTDIR pDir = NULL;
-    int rc = RTDirOpenFiltered(&pDir, aszPath, RTDIRFILTER_WINNT, 0);
+    RTDIR hDir = NULL;
+    int rc = RTDirOpenFiltered(&hDir, aszPath, RTDIRFILTER_WINNT, 0 /*fFlags*/);
     if (RT_SUCCESS(rc))
     {
         unsigned idxHcdCur = g_cDummyHcd;
@@ -214,7 +214,7 @@ static int utsPlatformLnxHcdScanByName(const char *pszHcdName, const char *pszUd
         do
         {
             RTDIRENTRY DirFolderContent;
-            rc = RTDirRead(pDir, &DirFolderContent, NULL);
+            rc = RTDirRead(hDir, &DirFolderContent, NULL);
             if (RT_SUCCESS(rc))
             {
                 /*
@@ -269,7 +269,7 @@ static int utsPlatformLnxHcdScanByName(const char *pszHcdName, const char *pszUd
         if (rc == VERR_NO_MORE_FILES)
             rc = VINF_SUCCESS;
 
-        RTDirClose(pDir);
+        RTDirClose(hDir);
     }
 
     return rc;
@@ -281,7 +281,7 @@ DECLHIDDEN(int) utsPlatformInit(void)
     int rc = utsPlatformModuleLoad("libcomposite", NULL, 0);
     if (RT_SUCCESS(rc))
     {
-        const char *apszArg[] = { "num=20" }; /** @todo: Make configurable from config. */
+        const char *apszArg[] = { "num=20" }; /** @todo Make configurable from config. */
         rc = utsPlatformModuleLoad("dummy_hcd", &apszArg[0], RT_ELEMENTS(apszArg));
         if (RT_SUCCESS(rc))
             rc = utsPlatformModuleLoad("dummy_hcd_ss", &apszArg[0], RT_ELEMENTS(apszArg));
diff --git a/src/apps/svnsync-vbox/Makefile b/src/apps/svnsync-vbox/Makefile
index b7aa6a1..878791c 100644
--- a/src/apps/svnsync-vbox/Makefile
+++ b/src/apps/svnsync-vbox/Makefile
@@ -1,8 +1,10 @@
-#
+# $Id: Makefile $
+## @file
 # Makefile
 #
+
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/apps/tunctl/.scm-settings b/src/apps/tunctl/.scm-settings
new file mode 100644
index 0000000..762a81c
--- /dev/null
+++ b/src/apps/tunctl/.scm-settings
@@ -0,0 +1,19 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for tunctl.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+/tunctl.c: --external-copyright --no-convert-tabs
diff --git a/src/bldprogs/Makefile.kmk b/src/bldprogs/Makefile.kmk
index 6825101..67ca67e 100644
--- a/src/bldprogs/Makefile.kmk
+++ b/src/bldprogs/Makefile.kmk
@@ -39,6 +39,7 @@ ifndef VBOX_ONLY_BUILD
  	scm.cpp \
  	scmdiff.cpp \
  	scmrw.cpp \
+       scmparser.cpp \
  	scmstream.cpp \
  	scmsubversion.cpp
  ifdef VBOX_PATH_SUBVERSION_INCS
diff --git a/src/bldprogs/VBoxCPP.cpp b/src/bldprogs/VBoxCPP.cpp
index 84a10e7..92a04a2 100644
--- a/src/bldprogs/VBoxCPP.cpp
+++ b/src/bldprogs/VBoxCPP.cpp
@@ -13,7 +13,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -5390,7 +5390,7 @@ static RTEXITCODE vbcppParseOptions(PVBCPP pThis, int argc, char **argv, bool *p
             case 'V':
             {
                 /* The following is assuming that svn does it's job here. */
-                static const char s_szRev[] = "$Revision: 109163 $";
+                static const char s_szRev[] = "$Revision: 118839 $";
                 const char *psz = RTStrStripL(strchr(s_szRev, ' '));
                 RTPrintf("r%.*s\n", strchr(psz, ' ') - psz, psz);
                 *pfExit = true;
diff --git a/src/bldprogs/VBoxCheckImports.cpp b/src/bldprogs/VBoxCheckImports.cpp
index 9cf1621..11cdd67 100644
--- a/src/bldprogs/VBoxCheckImports.cpp
+++ b/src/bldprogs/VBoxCheckImports.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -326,7 +326,7 @@ int main(int argc, char **argv)
             else if (   !strcmp(psz, "--version")
                      || !strcmp(psz, "-V"))
             {
-                printf("$Revision: 109096 $\n");
+                printf("$Revision: 118839 $\n");
                 return RTEXITCODE_SUCCESS;
             }
             else
diff --git a/src/bldprogs/VBoxCmp.cpp b/src/bldprogs/VBoxCmp.cpp
index 485cf05..a4e9128 100644
--- a/src/bldprogs/VBoxCmp.cpp
+++ b/src/bldprogs/VBoxCmp.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/VBoxCompilerPlugIns.h b/src/bldprogs/VBoxCompilerPlugIns.h
index 31b041f..ef78c0d 100644
--- a/src/bldprogs/VBoxCompilerPlugIns.h
+++ b/src/bldprogs/VBoxCompilerPlugIns.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/VBoxCompilerPlugInsCommon.cpp b/src/bldprogs/VBoxCompilerPlugInsCommon.cpp
index 8124fc5..9cb0180 100644
--- a/src/bldprogs/VBoxCompilerPlugInsCommon.cpp
+++ b/src/bldprogs/VBoxCompilerPlugInsCommon.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/VBoxDef2LazyLoad.cpp b/src/bldprogs/VBoxDef2LazyLoad.cpp
index 003715c..adcb1fa 100644
--- a/src/bldprogs/VBoxDef2LazyLoad.cpp
+++ b/src/bldprogs/VBoxDef2LazyLoad.cpp
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2013-2016 Oracle Corporation
+ * Copyright (C) 2013-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1071,7 +1071,7 @@ int main(int argc, char **argv)
             else if (   !strcmp(psz, "--version")
                      || !strcmp(psz, "-V"))
             {
-                printf("$Revision: 112347 $\n");
+                printf("$Revision: 118839 $\n");
                 return RTEXITCODE_SUCCESS;
             }
             else
diff --git a/src/bldprogs/VBoxPeSetVersion.cpp b/src/bldprogs/VBoxPeSetVersion.cpp
index 0929c39..fb3d7d9 100644
--- a/src/bldprogs/VBoxPeSetVersion.cpp
+++ b/src/bldprogs/VBoxPeSetVersion.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/VBoxTpG.cpp b/src/bldprogs/VBoxTpG.cpp
index a432b33..81edd6a 100644
--- a/src/bldprogs/VBoxTpG.cpp
+++ b/src/bldprogs/VBoxTpG.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -2374,7 +2374,7 @@ static RTEXITCODE parseArguments(int argc,  char **argv)
             case 'V':
             {
                 /* The following is assuming that svn does it's job here. */
-                static const char s_szRev[] = "$Revision: 109096 $";
+                static const char s_szRev[] = "$Revision: 118839 $";
                 const char *psz = RTStrStripL(strchr(s_szRev, ' '));
                 RTPrintf("r%.*s\n", strchr(psz, ' ') - psz, psz);
                 return RTEXITCODE_SUCCESS;
diff --git a/src/bldprogs/bin2c.c b/src/bldprogs/bin2c.c
index d55e3e8..0c154a4 100644
--- a/src/bldprogs/bin2c.c
+++ b/src/bldprogs/bin2c.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/biossums.c b/src/bldprogs/biossums.c
index 140e94b..b4d6e8b 100644
--- a/src/bldprogs/biossums.c
+++ b/src/bldprogs/biossums.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/checkUndefined.sh b/src/bldprogs/checkUndefined.sh
index d7c9996..61a2f84 100755
--- a/src/bldprogs/checkUndefined.sh
+++ b/src/bldprogs/checkUndefined.sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/deftoimp.sed b/src/bldprogs/deftoimp.sed
index f61ef30..5758153 100644
--- a/src/bldprogs/deftoimp.sed
+++ b/src/bldprogs/deftoimp.sed
@@ -4,8 +4,7 @@
 #
 
 #
-#
-# Copyright (C) 2006-2015 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/filesplitter.cpp b/src/bldprogs/filesplitter.cpp
index e2263a4..d9de79f 100644
--- a/src/bldprogs/filesplitter.cpp
+++ b/src/bldprogs/filesplitter.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/preload.cpp b/src/bldprogs/preload.cpp
index f539db7..7f79c97 100644
--- a/src/bldprogs/preload.cpp
+++ b/src/bldprogs/preload.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -147,7 +147,7 @@ int main(int argc, char **argv)
             if (   !strcmp(argv[i], "--version")
                 || !strcmp(argv[i], "-V"))
             {
-                printf("$Revision: 109096 $\n");
+                printf("$Revision: 118839 $\n");
                 return 0;
             }
             fprintf(stderr, "syntax error: unknown option '%s'\n", argv[i]);
diff --git a/src/bldprogs/scm.cpp b/src/bldprogs/scm.cpp
index 5f0e3de..8b591e4 100644
--- a/src/bldprogs/scm.cpp
+++ b/src/bldprogs/scm.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -76,6 +76,19 @@ typedef enum SCMOPT
     SCMOPT_NO_FIX_FLOWER_BOX_MARKERS,
     SCMOPT_FIX_TODOS,
     SCMOPT_NO_FIX_TODOS,
+    SCMOPT_UPDATE_COPYRIGHT_YEAR,
+    SCMOPT_NO_UPDATE_COPYRIGHT_YEAR,
+    SCMOPT_EXTERNAL_COPYRIGHT,
+    SCMOPT_NO_EXTERNAL_COPYRIGHT,
+    SCMOPT_NO_UPDATE_LICENSE,
+    SCMOPT_LICENSE_OSE_GPL,
+    SCMOPT_LICENSE_OSE_DUAL_GPL_CDDL,
+    SCMOPT_LICENSE_OSE_CDDL,
+    SCMOPT_LICENSE_LGPL,
+    SCMOPT_LICENSE_MIT,
+    SCMOPT_LICENSE_BASED_ON_MIT,
+    SCMOPT_LGPL_DISCLAIMER,
+    SCMOPT_NO_LGPL_DISCLAIMER,
     SCMOPT_MIN_BLANK_LINES_BEFORE_FLOWER_BOX_MARKERS,
     SCMOPT_ONLY_SVN_DIRS,
     SCMOPT_NOT_ONLY_SVN_DIRS,
@@ -92,8 +105,12 @@ typedef enum SCMOPT
     SCMOPT_FILTER_OUT_DIRS,
     SCMOPT_FILTER_FILES,
     SCMOPT_FILTER_OUT_FILES,
-    SCMOPT_LAST_SETTINGS = SCMOPT_FILTER_OUT_FILES,
+    SCMOPT_TREAT_AS,
+    SCMOPT_ADD_ACTION,
+    SCMOPT_DEL_ACTION,
+    SCMOPT_LAST_SETTINGS = SCMOPT_DEL_ACTION,
     //
+    SCMOPT_CHECK_RUN,
     SCMOPT_DIFF_IGNORE_EOL,
     SCMOPT_DIFF_NO_IGNORE_EOL,
     SCMOPT_DIFF_IGNORE_SPACE,
@@ -104,6 +121,8 @@ typedef enum SCMOPT
     SCMOPT_DIFF_NO_IGNORE_TRAILING_SPACE,
     SCMOPT_DIFF_SPECIAL_CHARS,
     SCMOPT_DIFF_NO_SPECIAL_CHARS,
+    SCMOPT_HELP_CONFIG,
+    SCMOPT_HELP_ACTIONS,
     SCMOPT_END
 } SCMOPT;
 
@@ -128,6 +147,17 @@ static bool         g_fDiffIgnoreEol        = false;
 static bool         g_fDiffIgnoreLeadingWS  = false;
 static bool         g_fDiffIgnoreTrailingWS = false;
 static int          g_iVerbosity            = 2;//99; //0;
+uint32_t            g_uYear                 = 0; /**< The current year. */
+/** @name Statistics
+ * @{ */
+static uint32_t     g_cDirsProcessed        = 0;
+static uint32_t     g_cFilesProcessed       = 0;
+static uint32_t     g_cFilesModified        = 0;
+static uint32_t     g_cFilesSkipped         = 0;
+static uint32_t     g_cFilesNotInSvn        = 0;
+static uint32_t     g_cFilesNoRewriters     = 0;
+static uint32_t     g_cFilesBinaries        = 0;
+/** @} */
 
 /** The global settings. */
 static SCMSETTINGSBASE const g_Defaults =
@@ -141,6 +171,10 @@ static SCMSETTINGSBASE const g_Defaults =
     /* .fFixFlowerBoxMarkers = */                   true,
     /* .cMinBlankLinesBeforeFlowerBoxMakers = */    2,
     /* .fFixTodos = */                              true,
+    /* .fUpdateCopyrightYear = */                   false,
+    /* .fExternalCopyright = */                     false,
+    /* .fLgplDisclaimer = */                        false,
+    /* .enmUpdateLicense = */                       kScmLicense_OseGpl,
     /* .fOnlySvnFiles = */                          false,
     /* .fOnlySvnDirs = */                           false,
     /* .fSetSvnEol = */                             false,
@@ -148,6 +182,8 @@ static SCMSETTINGSBASE const g_Defaults =
     /* .fSetSvnKeywords = */                        false,
     /* .cchTab = */                                 8,
     /* .cchWidth = */                               130,
+    /* .fFreeTreatAs = */                           false,
+    /* .pTreatAs = */                               NULL,
     /* .pszFilterFiles = */                         (char *)"",
     /* .pszFilterOutFiles = */                      (char *)"*.exe|*.com|20*-*-*.log",
     /* .pszFilterOutDirs = */                       (char *)".svn|.hg|.git|CVS",
@@ -156,6 +192,7 @@ static SCMSETTINGSBASE const g_Defaults =
 /** Option definitions for the base settings. */
 static RTGETOPTDEF  g_aScmOpts[] =
 {
+    /* rewriters */
     { "--convert-eol",                      SCMOPT_CONVERT_EOL,                     RTGETOPT_REQ_NOTHING },
     { "--no-convert-eol",                   SCMOPT_NO_CONVERT_EOL,                  RTGETOPT_REQ_NOTHING },
     { "--convert-tabs",                     SCMOPT_CONVERT_TABS,                    RTGETOPT_REQ_NOTHING },
@@ -168,15 +205,24 @@ static RTGETOPTDEF  g_aScmOpts[] =
     { "--no-strip-trailing-blanks",         SCMOPT_NO_STRIP_TRAILING_BLANKS,        RTGETOPT_REQ_NOTHING },
     { "--strip-trailing-lines",             SCMOPT_STRIP_TRAILING_LINES,            RTGETOPT_REQ_NOTHING },
     { "--strip-no-trailing-lines",          SCMOPT_NO_STRIP_TRAILING_LINES,         RTGETOPT_REQ_NOTHING },
-    { "--min-blank-lines-before-flower-box-makers", SCMOPT_FIX_FLOWER_BOX_MARKERS,  RTGETOPT_REQ_UINT8 },
+    { "--min-blank-lines-before-flower-box-makers", SCMOPT_MIN_BLANK_LINES_BEFORE_FLOWER_BOX_MARKERS,  RTGETOPT_REQ_UINT8 },
     { "--fix-flower-box-markers",           SCMOPT_FIX_FLOWER_BOX_MARKERS,          RTGETOPT_REQ_NOTHING },
     { "--no-fix-flower-box-markers",        SCMOPT_NO_FIX_FLOWER_BOX_MARKERS,       RTGETOPT_REQ_NOTHING },
     { "--fix-todos",                        SCMOPT_FIX_TODOS,                       RTGETOPT_REQ_NOTHING },
     { "--no-fix-todos",                     SCMOPT_NO_FIX_TODOS,                    RTGETOPT_REQ_NOTHING },
-    { "--only-svn-dirs",                    SCMOPT_ONLY_SVN_DIRS,                   RTGETOPT_REQ_NOTHING },
-    { "--not-only-svn-dirs",                SCMOPT_NOT_ONLY_SVN_DIRS,               RTGETOPT_REQ_NOTHING },
-    { "--only-svn-files",                   SCMOPT_ONLY_SVN_FILES,                  RTGETOPT_REQ_NOTHING },
-    { "--not-only-svn-files",               SCMOPT_NOT_ONLY_SVN_FILES,              RTGETOPT_REQ_NOTHING },
+    { "--update-copyright-year",            SCMOPT_UPDATE_COPYRIGHT_YEAR,           RTGETOPT_REQ_NOTHING },
+    { "--no-update-copyright-year",         SCMOPT_NO_UPDATE_COPYRIGHT_YEAR,        RTGETOPT_REQ_NOTHING },
+    { "--external-copyright",               SCMOPT_EXTERNAL_COPYRIGHT,              RTGETOPT_REQ_NOTHING },
+    { "--no-external-copyright",            SCMOPT_NO_EXTERNAL_COPYRIGHT,           RTGETOPT_REQ_NOTHING },
+    { "--no-update-license",                SCMOPT_NO_UPDATE_LICENSE,               RTGETOPT_REQ_NOTHING },
+    { "--license-ose-gpl",                  SCMOPT_LICENSE_OSE_GPL,                 RTGETOPT_REQ_NOTHING },
+    { "--license-ose-dual",                 SCMOPT_LICENSE_OSE_DUAL_GPL_CDDL,       RTGETOPT_REQ_NOTHING },
+    { "--license-ose-cddl",                 SCMOPT_LICENSE_OSE_CDDL,                RTGETOPT_REQ_NOTHING },
+    { "--license-lgpl",                     SCMOPT_LICENSE_LGPL,                    RTGETOPT_REQ_NOTHING },
+    { "--license-mit",                      SCMOPT_LICENSE_MIT,                     RTGETOPT_REQ_NOTHING },
+    { "--license-based-on-mit",             SCMOPT_LICENSE_BASED_ON_MIT,            RTGETOPT_REQ_NOTHING },
+    { "--lgpl-disclaimer",                  SCMOPT_LGPL_DISCLAIMER,                 RTGETOPT_REQ_NOTHING },
+    { "--no-lgpl-disclaimer",               SCMOPT_NO_LGPL_DISCLAIMER,              RTGETOPT_REQ_NOTHING },
     { "--set-svn-eol",                      SCMOPT_SET_SVN_EOL,                     RTGETOPT_REQ_NOTHING },
     { "--dont-set-svn-eol",                 SCMOPT_DONT_SET_SVN_EOL,                RTGETOPT_REQ_NOTHING },
     { "--set-svn-executable",               SCMOPT_SET_SVN_EXECUTABLE,              RTGETOPT_REQ_NOTHING },
@@ -185,122 +231,574 @@ static RTGETOPTDEF  g_aScmOpts[] =
     { "--dont-set-svn-keywords",            SCMOPT_DONT_SET_SVN_KEYWORDS,           RTGETOPT_REQ_NOTHING },
     { "--tab-size",                         SCMOPT_TAB_SIZE,                        RTGETOPT_REQ_UINT8   },
     { "--width",                            SCMOPT_WIDTH,                           RTGETOPT_REQ_UINT8   },
+
+    /* input selection */
+    { "--only-svn-dirs",                    SCMOPT_ONLY_SVN_DIRS,                   RTGETOPT_REQ_NOTHING },
+    { "--not-only-svn-dirs",                SCMOPT_NOT_ONLY_SVN_DIRS,               RTGETOPT_REQ_NOTHING },
+    { "--only-svn-files",                   SCMOPT_ONLY_SVN_FILES,                  RTGETOPT_REQ_NOTHING },
+    { "--not-only-svn-files",               SCMOPT_NOT_ONLY_SVN_FILES,              RTGETOPT_REQ_NOTHING },
     { "--filter-out-dirs",                  SCMOPT_FILTER_OUT_DIRS,                 RTGETOPT_REQ_STRING  },
     { "--filter-files",                     SCMOPT_FILTER_FILES,                    RTGETOPT_REQ_STRING  },
     { "--filter-out-files",                 SCMOPT_FILTER_OUT_FILES,                RTGETOPT_REQ_STRING  },
+
+    /* rewriter selection */
+    { "--treat-as",                         SCMOPT_TREAT_AS,                        RTGETOPT_REQ_STRING  },
+    { "--add-action",                       SCMOPT_ADD_ACTION,                      RTGETOPT_REQ_STRING  },
+    { "--del-action",                       SCMOPT_DEL_ACTION,                      RTGETOPT_REQ_STRING  },
+
+    /* Additional help */
+    { "--help-config",                      SCMOPT_HELP_CONFIG,                     RTGETOPT_REQ_NOTHING },
+    { "--help-actions",                     SCMOPT_HELP_ACTIONS,                    RTGETOPT_REQ_NOTHING },
 };
 
 /** Consider files matching the following patterns (base names only). */
 static const char  *g_pszFileFilter         = NULL;
 
-static PFNSCMREWRITER const g_aRewritersFor_Makefile_kup[] =
+/* The rewriter configuration. */
+#define SCM_REWRITER_CFG(a_Global, a_szName, fnRewriter) static const SCMREWRITERCFG a_Global = { &fnRewriter, a_szName }
+SCM_REWRITER_CFG(g_StripTrailingBlanks,             "strip-trailing-blanks",        rewrite_StripTrailingBlanks);
+SCM_REWRITER_CFG(g_ExpandTabs,                      "expand-tabs",                  rewrite_ExpandTabs);
+SCM_REWRITER_CFG(g_ForceNativeEol,                  "force-native-eol",             rewrite_ForceNativeEol);
+SCM_REWRITER_CFG(g_ForceLF,                         "force-lf",                     rewrite_ForceLF);
+SCM_REWRITER_CFG(g_ForceCRLF,                       "force-crlf",                   rewrite_ForceCRLF);
+SCM_REWRITER_CFG(g_AdjustTrailingLines,             "adjust-trailing-lines",        rewrite_AdjustTrailingLines);
+SCM_REWRITER_CFG(g_SvnNoExecutable,                 "svn-no-executable",            rewrite_SvnNoExecutable);
+SCM_REWRITER_CFG(g_SvnNoKeywords,                   "svn-no-keywords",              rewrite_SvnNoKeywords);
+SCM_REWRITER_CFG(g_SvnNoEolStyle,                   "svn-no-eol-style",             rewrite_SvnNoEolStyle);
+SCM_REWRITER_CFG(g_SvnBinary,                       "svn-binary",                   rewrite_SvnBinary);
+SCM_REWRITER_CFG(g_SvnKeywords,                     "svn-keywords",                 rewrite_SvnKeywords);
+SCM_REWRITER_CFG(g_Copyright_CstyleComment,         "copyright-c-style",            rewrite_Copyright_CstyleComment);
+SCM_REWRITER_CFG(g_Copyright_HashComment,           "copyright-hash-style",         rewrite_Copyright_HashComment);
+SCM_REWRITER_CFG(g_Copyright_PythonComment,         "copyright-python-style",       rewrite_Copyright_PythonComment);
+SCM_REWRITER_CFG(g_Copyright_RemComment,            "copyright-rem-style",          rewrite_Copyright_RemComment);
+SCM_REWRITER_CFG(g_Copyright_SemicolonComment,      "copyright-semicolon-style",    rewrite_Copyright_SemicolonComment);
+SCM_REWRITER_CFG(g_Copyright_SqlComment,            "copyright-sql-style",          rewrite_Copyright_SqlComment);
+SCM_REWRITER_CFG(g_Copyright_TickComment,           "copyright-tick-style",         rewrite_Copyright_TickComment);
+SCM_REWRITER_CFG(g_Makefile_kup,                    "makefile-kup",                 rewrite_Makefile_kup);
+SCM_REWRITER_CFG(g_Makefile_kmk,                    "makefile-kmk",                 rewrite_Makefile_kmk);
+SCM_REWRITER_CFG(g_FixFlowerBoxMarkers,             "fix-flower-boxes",             rewrite_FixFlowerBoxMarkers);
+SCM_REWRITER_CFG(g_Fix_C_and_CPP_Todos,             "fix-c-todos",                  rewrite_Fix_C_and_CPP_Todos);
+SCM_REWRITER_CFG(g_C_and_CPP,                       "c-and-cpp",                    rewrite_C_and_CPP);
+
+/** The rewriter actions. */
+static PCSCMREWRITERCFG const g_papRewriterActions[] =
+{
+    &g_StripTrailingBlanks,
+    &g_ExpandTabs,
+    &g_ForceNativeEol,
+    &g_ForceLF,
+    &g_ForceCRLF,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnNoKeywords,
+    &g_SvnNoEolStyle,
+    &g_SvnBinary,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+    &g_Copyright_HashComment,
+    &g_Copyright_PythonComment,
+    &g_Copyright_RemComment,
+    &g_Copyright_SemicolonComment,
+    &g_Copyright_SqlComment,
+    &g_Copyright_TickComment,
+    &g_Makefile_kup,
+    &g_Makefile_kmk,
+    &g_FixFlowerBoxMarkers,
+    &g_Fix_C_and_CPP_Todos,
+    &g_C_and_CPP,
+};
+
+
+static PCSCMREWRITERCFG const g_apRewritersFor_Makefile_kup[] =
+{
+    &g_SvnNoExecutable,
+    &g_Makefile_kup
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_Makefile_kmk[] =
+{
+    &g_ForceNativeEol,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_HashComment,
+    &g_Makefile_kmk
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_OtherMakefiles[] =
+{
+    &g_ForceNativeEol,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_HashComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_C_and_CPP[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+    &g_FixFlowerBoxMarkers,
+    &g_Fix_C_and_CPP_Todos,
+    &g_C_and_CPP
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_H_and_HPP[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+    &g_C_and_CPP
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_RC[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_DTrace[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_DSL[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_ASM[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_SemicolonComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_DEF[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_SemicolonComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_ShellScripts[] =
+{
+    &g_ForceLF,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_Copyright_HashComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_BatchFiles[] =
+{
+    &g_ForceCRLF,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_Copyright_RemComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_BasicScripts[] =
+{
+    &g_ForceCRLF,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_Copyright_TickComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_SedScripts[] =
+{
+    &g_ForceLF,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_Copyright_HashComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_Python[] =
 {
-    rewrite_SvnNoExecutable,
-    rewrite_Makefile_kup
+    /** @todo &g_ForceLFIfExecutable */
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_Copyright_PythonComment,
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_Makefile_kmk[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_Perl[] =
 {
-    rewrite_ForceNativeEol,
-    rewrite_StripTrailingBlanks,
-    rewrite_AdjustTrailingLines,
-    rewrite_SvnNoExecutable,
-    rewrite_SvnKeywords,
-    rewrite_Makefile_kmk
+    /** @todo &g_ForceLFIfExecutable */
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_Copyright_HashComment,
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_C_and_CPP[] =
-{
-    rewrite_ForceNativeEol,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks,
-    rewrite_AdjustTrailingLines,
-    rewrite_SvnNoExecutable,
-    rewrite_SvnKeywords,
-    rewrite_FixFlowerBoxMarkers,
-    rewrite_Fix_C_and_CPP_Todos,
-    rewrite_C_and_CPP
+static PCSCMREWRITERCFG const g_apRewritersFor_DriverInfFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+    &g_Copyright_SemicolonComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_NsisFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+    &g_Copyright_SemicolonComment,
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_H_and_HPP[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_Java[] =
 {
-    rewrite_ForceNativeEol,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks,
-    rewrite_AdjustTrailingLines,
-    rewrite_SvnNoExecutable,
-    rewrite_C_and_CPP
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_CstyleComment,
+    &g_FixFlowerBoxMarkers,
+    &g_Fix_C_and_CPP_Todos,
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_RC[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_ScmSettings[] =
 {
-    rewrite_ForceNativeEol,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks,
-    rewrite_AdjustTrailingLines,
-    rewrite_SvnNoExecutable,
-    rewrite_SvnKeywords
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_HashComment,
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_DEF[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_Images[] =
 {
-    rewrite_ForceNativeEol,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks,
-    rewrite_AdjustTrailingLines,
-    rewrite_SvnNoExecutable,
-    rewrite_SvnKeywords
+    &g_SvnNoExecutable,
+    &g_SvnBinary,
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_ShellScripts[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_Xslt[] =
 {
-    rewrite_ForceLF,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    /** @todo copyright is in an XML comment. */
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_BatchFiles[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_Xml[] =
 {
-    rewrite_ForceCRLF,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    /** @todo copyright is in an XML comment. */
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_SedScripts[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_Wix[] =
 {
-    rewrite_ForceLF,
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    /** @todo copyright is in an XML comment. */
 };
 
-static PFNSCMREWRITER const g_aRewritersFor_Python[] =
+static PCSCMREWRITERCFG const g_apRewritersFor_QtProject[] =
 {
-    /** @todo rewrite_ForceLFIfExecutable */
-    rewrite_ExpandTabs,
-    rewrite_StripTrailingBlanks,
-    rewrite_AdjustTrailingLines,
-    rewrite_SvnKeywords
+    &g_ForceNativeEol,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    &g_Copyright_HashComment,
 };
 
+static PCSCMREWRITERCFG const g_apRewritersFor_QtResourceFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    /** @todo figure out copyright for Qt resource XML files. */
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_QtTranslations[] =
+{
+    &g_ForceNativeEol,
+    &g_SvnNoExecutable,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_QtUiFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_SvnNoExecutable,
+    &g_SvnKeywords,
+    /** @todo copyright is in an XML 'comment' element. */
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_SifFiles[] =
+{
+    &g_ForceCRLF,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+    &g_Copyright_SemicolonComment,
+};
 
+static PCSCMREWRITERCFG const g_apRewritersFor_SqlFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+    &g_Copyright_SqlComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_GnuAsm[] =
+{
+    &g_ForceNativeEol,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+    &g_Copyright_CstyleComment,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_TextFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_StripTrailingBlanks,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+    /** @todo check for plain copyright + license in text files. */
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_PlainTextFiles[] =
+{
+    &g_ForceNativeEol,
+    &g_StripTrailingBlanks,
+    &g_SvnKeywords,
+    &g_SvnNoExecutable,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_BinaryFiles[] =
+{
+    &g_SvnBinary,
+};
+
+static PCSCMREWRITERCFG const g_apRewritersFor_FileLists[] = /* both makefile and shell script */
+{
+    &g_ForceLF,
+    &g_ExpandTabs,
+    &g_StripTrailingBlanks,
+    &g_AdjustTrailingLines,
+    &g_Copyright_HashComment,
+};
+
+
+/**
+ * Array of standard rewriter configurations.
+ */
 static SCMCFGENTRY const g_aConfigs[] =
 {
-    { RT_ELEMENTS(g_aRewritersFor_Makefile_kup), &g_aRewritersFor_Makefile_kup[0], "Makefile.kup" },
-    { RT_ELEMENTS(g_aRewritersFor_Makefile_kmk), &g_aRewritersFor_Makefile_kmk[0], "Makefile.kmk|Config.kmk" },
-    { RT_ELEMENTS(g_aRewritersFor_C_and_CPP),    &g_aRewritersFor_C_and_CPP[0],    "*.c|*.cpp|*.C|*.CPP|*.cxx|*.cc|*.m|*.mm" },
-    { RT_ELEMENTS(g_aRewritersFor_H_and_HPP),    &g_aRewritersFor_H_and_HPP[0],    "*.h|*.hpp" },
-    { RT_ELEMENTS(g_aRewritersFor_RC),           &g_aRewritersFor_RC[0],           "*.rc" },
-    { RT_ELEMENTS(g_aRewritersFor_DEF),          &g_aRewritersFor_DEF[0],          "*.def" },
-    { RT_ELEMENTS(g_aRewritersFor_ShellScripts), &g_aRewritersFor_ShellScripts[0], "*.sh|configure" },
-    { RT_ELEMENTS(g_aRewritersFor_BatchFiles),   &g_aRewritersFor_BatchFiles[0],   "*.bat|*.cmd|*.btm|*.vbs|*.ps1" },
-    { RT_ELEMENTS(g_aRewritersFor_SedScripts),   &g_aRewritersFor_SedScripts[0],   "*.sed" },
-    { RT_ELEMENTS(g_aRewritersFor_Python),       &g_aRewritersFor_Python[0],       "*.py" },
+#define SCM_CFG_ENTRY(a_szName, a_aRewriters, a_fBinary, a_szFilePatterns) \
+    { RT_ELEMENTS(a_aRewriters), &a_aRewriters[0], a_fBinary, a_szFilePatterns, a_szName }
+    SCM_CFG_ENTRY("kup",        g_apRewritersFor_Makefile_kup,     false, "Makefile.kup" ),
+    SCM_CFG_ENTRY("kmk",        g_apRewritersFor_Makefile_kmk,     false, "*.kmk" ),
+    SCM_CFG_ENTRY("c",          g_apRewritersFor_C_and_CPP,        false, "*.c|*.cpp|*.C|*.CPP|*.cxx|*.cc|*.m|*.mm" ),
+    SCM_CFG_ENTRY("h",          g_apRewritersFor_H_and_HPP,        false, "*.h|*.hpp" ),
+    SCM_CFG_ENTRY("rc",         g_apRewritersFor_RC,               false, "*.rc" ),
+    SCM_CFG_ENTRY("asm",        g_apRewritersFor_ASM,              false, "*.asm|*.mac|*.inc" ),
+    SCM_CFG_ENTRY("dtrace",     g_apRewritersFor_DTrace,           false, "*.d" ),
+    SCM_CFG_ENTRY("def",        g_apRewritersFor_DEF,              false, "*.def" ),
+    SCM_CFG_ENTRY("iasl",       g_apRewritersFor_DSL,              false, "*.dsl" ),
+    SCM_CFG_ENTRY("shell",      g_apRewritersFor_ShellScripts,     false, "*.sh|configure" ),
+    SCM_CFG_ENTRY("batch",      g_apRewritersFor_BatchFiles,       false, "*.bat|*.cmd|*.btm" ),
+    SCM_CFG_ENTRY("vbs",        g_apRewritersFor_BasicScripts,     false, "*.vbs|*.vb" ),
+    SCM_CFG_ENTRY("sed",        g_apRewritersFor_SedScripts,       false, "*.sed" ),
+    SCM_CFG_ENTRY("python",     g_apRewritersFor_Python,           false, "*.py" ),
+    SCM_CFG_ENTRY("perl",       g_apRewritersFor_Perl,             false, "*.pl|*.pm" ),
+    SCM_CFG_ENTRY("drvinf",     g_apRewritersFor_DriverInfFiles,   false, "*.inf" ),
+    SCM_CFG_ENTRY("nsis",       g_apRewritersFor_NsisFiles,        false, "*.nsh|*.nsi|*.nsis" ),
+    SCM_CFG_ENTRY("java",       g_apRewritersFor_Java,             false, "*.java" ),
+    SCM_CFG_ENTRY("scm",        g_apRewritersFor_ScmSettings,      false, "*.scm-settings" ),
+    SCM_CFG_ENTRY("image",      g_apRewritersFor_Images,           true,  "*.png|*.bmp|*.jpg|*.pnm|*.ico|*.icns|*.tiff|*.tif|*.xcf|*.gif" ),
+    SCM_CFG_ENTRY("xslt",       g_apRewritersFor_Xslt,             false, "*.xsl" ),
+    SCM_CFG_ENTRY("xml",        g_apRewritersFor_Xml,              false, "*.xml" ),
+    SCM_CFG_ENTRY("wix",        g_apRewritersFor_Wix,              false, "*.wxi|*.wxs|*.wxl" ),
+    SCM_CFG_ENTRY("qt-pro",     g_apRewritersFor_QtProject,        false, "*.pro" ),
+    SCM_CFG_ENTRY("qt-rc",      g_apRewritersFor_QtResourceFiles,  false, "*.qrc" ),
+    SCM_CFG_ENTRY("qt-ts",      g_apRewritersFor_QtTranslations,   false, "*.ts" ),
+    SCM_CFG_ENTRY("qt-ui",      g_apRewritersFor_QtUiFiles,        false, "*.ui" ),
+    SCM_CFG_ENTRY("sif",        g_apRewritersFor_SifFiles,         false, "*.sif" ),
+    SCM_CFG_ENTRY("sql",        g_apRewritersFor_SqlFiles,         false, "*.pgsql|*.sql" ),
+    SCM_CFG_ENTRY("gas",        g_apRewritersFor_GnuAsm,           false, "*.S" ),
+    SCM_CFG_ENTRY("binary",     g_apRewritersFor_BinaryFiles,      true,  "*.bin|*.pdf|*.zip|*.bz2|*.gz" ),
+    /* These should be be last: */
+    SCM_CFG_ENTRY("make",       g_apRewritersFor_OtherMakefiles,   false, "Makefile|makefile|GNUmakefile|SMakefile|Makefile.am|Makefile.in|*.cmake" ),
+    SCM_CFG_ENTRY("text",       g_apRewritersFor_TextFiles,        false, "*.txt|README*|readme*|ReadMe*|NOTE*|TODO*" ),
+    SCM_CFG_ENTRY("plaintext",  g_apRewritersFor_PlainTextFiles,   false, "LICENSE|ChangeLog|FAQ|AUTHORS|INSTALL|NEWS" ),
+    SCM_CFG_ENTRY("file-list",  g_apRewritersFor_FileLists,        false, "files_*" ),
 };
 
 
 
 /* -=-=-=-=-=- settings -=-=-=-=-=- */
 
+/**
+ * Delete the given config entry.
+ *
+ * @param   pEntry              The configuration entry to delete.
+ */
+static void scmCfgEntryDelete(PSCMCFGENTRY pEntry)
+{
+    RTMemFree((void *)pEntry->paRewriters);
+    pEntry->paRewriters = NULL;
+    RTMemFree(pEntry);
+}
+
+/**
+ * Create a new configuration entry.
+ *
+ * @returns The new entry. NULL if out of memory.
+ * @param   pEntry              The configuration entry to duplicate.
+ */
+static PSCMCFGENTRY scmCfgEntryNew(void)
+{
+    PSCMCFGENTRY pNew = (PSCMCFGENTRY)RTMemAlloc(sizeof(*pNew));
+    if (pNew)
+    {
+        pNew->pszName        = "custom";
+        pNew->pszFilePattern = "custom";
+        pNew->cRewriters     = 0;
+        pNew->paRewriters    = NULL;
+        pNew->fBinary        = false;
+    }
+    return pNew;
+}
+
+/**
+ * Duplicate the given config entry.
+ *
+ * @returns The duplicate. NULL if out of memory.
+ * @param   pEntry              The configuration entry to duplicate.
+ */
+static PSCMCFGENTRY scmCfgEntryDup(PCSCMCFGENTRY pEntry)
+{
+    if (pEntry)
+    {
+        PSCMCFGENTRY pDup = (PSCMCFGENTRY)RTMemDup(pEntry, sizeof(*pEntry));
+        if (pDup)
+        {
+            size_t    cbRewriters = sizeof(pEntry->paRewriters[0]) * RT_ALIGN_Z(pEntry->cRewriters, 8);
+            pDup->paRewriters = (PCSCMREWRITERCFG const *)RTMemDup(pEntry->paRewriters, cbRewriters);
+            if (pDup->paRewriters)
+                return pDup;
+
+            RTMemFree(pDup);
+        }
+        return NULL;
+    }
+    return scmCfgEntryNew();
+}
+
+/**
+ * Adds a rewriter action to the given config entry (--add-action).
+ *
+ * @returns VINF_SUCCESS.
+ * @param   pEntry              The configuration entry.
+ * @param   pAction             The rewriter action to add.
+ */
+static int scmCfgEntryAddAction(PSCMCFGENTRY pEntry, PCSCMREWRITERCFG pAction)
+{
+    PCSCMREWRITERCFG *paRewriters = (PCSCMREWRITERCFG *)pEntry->paRewriters;
+    if (pEntry->cRewriters % 8 == 0)
+    {
+        size_t cbRewriters = sizeof(pEntry->paRewriters[0]) * RT_ALIGN_Z((pEntry->cRewriters + 1), 8);
+        void *pvNew = RTMemRealloc(paRewriters, cbRewriters);
+        if (pvNew)
+            pEntry->paRewriters = paRewriters = (PCSCMREWRITERCFG *)pvNew;
+        else
+            return VERR_NO_MEMORY;
+    }
+
+    paRewriters[pEntry->cRewriters++] = pAction;
+    return VINF_SUCCESS;
+}
+
+/**
+ * Delets an rewriter action from the given config entry (--del-action).
+ *
+ * @param   pEntry              The configuration entry.
+ * @param   pAction             The rewriter action to remove.
+ */
+static void scmCfgEntryDelAction(PSCMCFGENTRY pEntry, PCSCMREWRITERCFG pAction)
+{
+    PCSCMREWRITERCFG *paRewriters = (PCSCMREWRITERCFG *)pEntry->paRewriters;
+    size_t const cEntries = pEntry->cRewriters;
+    size_t       iDst = 0;
+    for (size_t iSrc = 0; iSrc < cEntries; iSrc++)
+    {
+        PCSCMREWRITERCFG pCurAction = paRewriters[iSrc];
+        if (pCurAction != pAction)
+            paRewriters[iDst++] = pCurAction;
+    }
+    pEntry->cRewriters = iDst;
+}
 
 /**
  * Init a settings structure with settings from @a pSrc.
@@ -321,8 +819,16 @@ static int scmSettingsBaseInitAndCopy(PSCMSETTINGSBASE pSettings, PCSCMSETTINGSB
         {
             rc = RTStrDupEx(&pSettings->pszFilterOutDirs, pSrc->pszFilterOutDirs);
             if (RT_SUCCESS(rc))
-                return VINF_SUCCESS;
+            {
+                if (!pSrc->fFreeTreatAs)
+                    return VINF_SUCCESS;
 
+                pSettings->pTreatAs = scmCfgEntryDup(pSrc->pTreatAs);
+                if (pSettings->pTreatAs)
+                    return VINF_SUCCESS;
+
+                RTStrFree(pSettings->pszFilterOutDirs);
+            }
             RTStrFree(pSettings->pszFilterOutFiles);
         }
         RTStrFree(pSettings->pszFilterFiles);
@@ -331,6 +837,7 @@ static int scmSettingsBaseInitAndCopy(PSCMSETTINGSBASE pSettings, PCSCMSETTINGSB
     pSettings->pszFilterFiles = NULL;
     pSettings->pszFilterOutFiles = NULL;
     pSettings->pszFilterOutDirs = NULL;
+    pSettings->pTreatAs = NULL;
     return rc;
 }
 
@@ -358,17 +865,19 @@ static void scmSettingsBaseDelete(PSCMSETTINGSBASE pSettings)
         pSettings->cchTab = UINT8_MAX;
 
         RTStrFree(pSettings->pszFilterFiles);
-        pSettings->pszFilterFiles = NULL;
-
         RTStrFree(pSettings->pszFilterOutFiles);
-        pSettings->pszFilterOutFiles = NULL;
-
         RTStrFree(pSettings->pszFilterOutDirs);
+        if (pSettings->fFreeTreatAs)
+            scmCfgEntryDelete((PSCMCFGENTRY)pSettings->pTreatAs);
+
         pSettings->pszFilterOutDirs = NULL;
+        pSettings->pszFilterOutFiles = NULL;
+        pSettings->pszFilterFiles = NULL;
+        pSettings->pTreatAs = NULL;
+        pSettings->fFreeTreatAs = false;
     }
 }
 
-
 /**
  * Processes a RTGetOpt result.
  *
@@ -379,9 +888,15 @@ static void scmSettingsBaseDelete(PSCMSETTINGSBASE pSettings)
  * @param   pSettings           The settings to change.
  * @param   rc                  The RTGetOpt return value.
  * @param   pValueUnion         The RTGetOpt value union.
+ * @param   pchDir              The absolute path to the directory relative
+ *                              components in pchLine should be relative to.
+ * @param   cchDir              The length of the @a pchDir string.
  */
-static int scmSettingsBaseHandleOpt(PSCMSETTINGSBASE pSettings, int rc, PRTGETOPTUNION pValueUnion)
+static int scmSettingsBaseHandleOpt(PSCMSETTINGSBASE pSettings, int rc, PRTGETOPTUNION pValueUnion,
+                                    const char *pchDir, size_t cchDir)
 {
+    Assert(pchDir[cchDir - 1] == '/');
+
     switch (rc)
     {
         case SCMOPT_CONVERT_EOL:
@@ -439,6 +954,56 @@ static int scmSettingsBaseHandleOpt(PSCMSETTINGSBASE pSettings, int rc, PRTGETOP
             pSettings->fFixFlowerBoxMarkers = false;
             return VINF_SUCCESS;
 
+        case SCMOPT_FIX_TODOS:
+            pSettings->fFixTodos = true;
+            return VINF_SUCCESS;
+        case SCMOPT_NO_FIX_TODOS:
+            pSettings->fFixTodos = false;
+            return VINF_SUCCESS;
+
+        case SCMOPT_UPDATE_COPYRIGHT_YEAR:
+            pSettings->fUpdateCopyrightYear = true;
+            return VINF_SUCCESS;
+        case SCMOPT_NO_UPDATE_COPYRIGHT_YEAR:
+            pSettings->fUpdateCopyrightYear = false;
+            return VINF_SUCCESS;
+
+        case SCMOPT_EXTERNAL_COPYRIGHT:
+            pSettings->fExternalCopyright = true;
+            return VINF_SUCCESS;
+        case SCMOPT_NO_EXTERNAL_COPYRIGHT:
+            pSettings->fExternalCopyright = false;
+            return VINF_SUCCESS;
+
+        case SCMOPT_NO_UPDATE_LICENSE:
+            pSettings->enmUpdateLicense = kScmLicense_LeaveAlone;
+            return VINF_SUCCESS;
+        case SCMOPT_LICENSE_OSE_GPL:
+            pSettings->enmUpdateLicense = kScmLicense_OseGpl;
+            return VINF_SUCCESS;
+        case SCMOPT_LICENSE_OSE_DUAL_GPL_CDDL:
+            pSettings->enmUpdateLicense = kScmLicense_OseDualGplCddl;
+            return VINF_SUCCESS;
+        case SCMOPT_LICENSE_OSE_CDDL:
+            pSettings->enmUpdateLicense = kScmLicense_OseCddl;
+            return VINF_SUCCESS;
+        case SCMOPT_LICENSE_LGPL:
+            pSettings->enmUpdateLicense = kScmLicense_Lgpl;
+            return VINF_SUCCESS;
+        case SCMOPT_LICENSE_MIT:
+            pSettings->enmUpdateLicense = kScmLicense_Mit;
+            return VINF_SUCCESS;
+        case SCMOPT_LICENSE_BASED_ON_MIT:
+            pSettings->enmUpdateLicense = kScmLicense_BasedOnMit;
+            return VINF_SUCCESS;
+
+        case SCMOPT_LGPL_DISCLAIMER:
+            pSettings->fLgplDisclaimer = true;
+            return VINF_SUCCESS;
+        case SCMOPT_NO_LGPL_DISCLAIMER:
+            pSettings->fLgplDisclaimer = false;
+            return VINF_SUCCESS;
+
         case SCMOPT_ONLY_SVN_DIRS:
             pSettings->fOnlySvnDirs = true;
             return VINF_SUCCESS;
@@ -527,9 +1092,113 @@ static int scmSettingsBaseHandleOpt(PSCMSETTINGSBASE pSettings, int rc, PRTGETOP
             if (!cchSrc)
                 return VINF_SUCCESS;
 
-            return RTStrAAppendExN(ppsz, 2,
-                                   "|", *ppsz && **ppsz ? (size_t)1 : (size_t)0,
-                                   pszSrc, cchSrc);
+            /* Append it pattern by pattern, turning settings-relative paths into absolute ones. */
+            for (;;)
+            {
+                const char *pszEnd = (const char *)memchr(pszSrc, '|', cchSrc);
+                size_t cchPattern = pszEnd ? pszEnd - pszSrc : cchSrc;
+                int rc2;
+                if (*pszSrc == '/')
+                    rc2 = RTStrAAppendExN(ppsz, 3,
+                                          "|", *ppsz && **ppsz != '\0' ? (size_t)1 : (size_t)0,
+                                          pchDir, cchDir - 1,
+                                          pszSrc, cchPattern);
+                else
+                    rc2 = RTStrAAppendExN(ppsz, 2,
+                                          "|", *ppsz && **ppsz != '\0' ? (size_t)1 : (size_t)0,
+                                          pszSrc, cchPattern);
+                if (RT_FAILURE(rc2))
+                    return rc2;
+
+                /* next */
+                cchSrc -= cchPattern;
+                if (!cchSrc)
+                    return VINF_SUCCESS;
+                cchSrc -= 1;
+                pszSrc += cchPattern + 1;
+            }
+            /* not reached */
+        }
+
+        case SCMOPT_TREAT_AS:
+            if (pSettings->fFreeTreatAs)
+            {
+                scmCfgEntryDelete((PSCMCFGENTRY)pSettings->pTreatAs);
+                pSettings->pTreatAs = NULL;
+                pSettings->fFreeTreatAs = false;
+            }
+
+            if (*pValueUnion->psz)
+            {
+                /* first check the names, then patterns (legacy). */
+                for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+                    if (strcmp(g_aConfigs[iCfg].pszName, pValueUnion->psz) == 0)
+                    {
+                        pSettings->pTreatAs = &g_aConfigs[iCfg];
+                        return VINF_SUCCESS;
+                    }
+                for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+                    if (RTStrSimplePatternMultiMatch(g_aConfigs[iCfg].pszFilePattern, RTSTR_MAX,
+                                                     pValueUnion->psz, RTSTR_MAX, NULL))
+                    {
+                        pSettings->pTreatAs = &g_aConfigs[iCfg];
+                        return VINF_SUCCESS;
+                    }
+                /* Special help for listing the possibilities?  */
+                if (strcmp(pValueUnion->psz, "help") == 0)
+                {
+                    RTPrintf("Possible --treat-as values:\n");
+                    for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+                        RTPrintf("    %s (%s)\n", g_aConfigs[iCfg].pszName, g_aConfigs[iCfg].pszFilePattern);
+                }
+                return VERR_NOT_FOUND;
+            }
+
+            pSettings->pTreatAs = NULL;
+            return VINF_SUCCESS;
+
+        case SCMOPT_ADD_ACTION:
+            for (uint32_t iAction = 0; iAction < RT_ELEMENTS(g_papRewriterActions); iAction++)
+                if (strcmp(g_papRewriterActions[iAction]->pszName, pValueUnion->psz) == 0)
+                {
+                    PSCMCFGENTRY pEntry = (PSCMCFGENTRY)pSettings->pTreatAs;
+                    if (!pSettings->fFreeTreatAs)
+                    {
+                        pEntry = scmCfgEntryDup(pEntry);
+                        if (!pEntry)
+                            return VERR_NO_MEMORY;
+                        pSettings->pTreatAs = pEntry;
+                        pSettings->fFreeTreatAs = true;
+                    }
+                    return scmCfgEntryAddAction(pEntry, g_papRewriterActions[iAction]);
+                }
+            RTMsgError("Unknown --add-action value '%s'.  Try --help-actions for a list.", pValueUnion->psz);
+            return VERR_NOT_FOUND;
+
+        case SCMOPT_DEL_ACTION:
+        {
+            uint32_t cActions = 0;
+            for (uint32_t iAction = 0; iAction < RT_ELEMENTS(g_papRewriterActions); iAction++)
+                if (RTStrSimplePatternMatch(pValueUnion->psz, g_papRewriterActions[iAction]->pszName))
+                {
+                    cActions++;
+                    PSCMCFGENTRY pEntry = (PSCMCFGENTRY)pSettings->pTreatAs;
+                    if (!pSettings->fFreeTreatAs)
+                    {
+                        pEntry = scmCfgEntryDup(pEntry);
+                        if (!pEntry)
+                            return VERR_NO_MEMORY;
+                        pSettings->pTreatAs = pEntry;
+                        pSettings->fFreeTreatAs = true;
+                    }
+                    scmCfgEntryDelAction(pEntry, g_papRewriterActions[iAction]);
+                    if (!strchr(pValueUnion->psz, '*'))
+                        return VINF_SUCCESS;
+                }
+            if (cActions > 0)
+                return VINF_SUCCESS;
+            RTMsgError("Unknown --del-action value '%s'.  Try --help-actions for a list.", pValueUnion->psz);
+            return VERR_NOT_FOUND;
         }
 
         default:
@@ -544,8 +1213,11 @@ static int scmSettingsBaseHandleOpt(PSCMSETTINGSBASE pSettings, int rc, PRTGETOP
  * @param   pBase               The base settings structure to apply the options
  *                              to.
  * @param   pszOptions          The options to parse.
+ * @param   pchDir              The absolute path to the directory relative
+ *                              components in pchLine should be relative to.
+ * @param   cchDir              The length of the @a pchDir string.
  */
-static int scmSettingsBaseParseString(PSCMSETTINGSBASE pBase, const char *pszLine)
+static int scmSettingsBaseParseString(PSCMSETTINGSBASE pBase, const char *pszLine, const char *pchDir, size_t cchDir)
 {
     int    cArgs;
     char **papszArgs;
@@ -559,7 +1231,7 @@ static int scmSettingsBaseParseString(PSCMSETTINGSBASE pBase, const char *pszLin
         {
             while ((rc = RTGetOpt(&GetOptState, &ValueUnion)) != 0)
             {
-                rc = scmSettingsBaseHandleOpt(pBase, rc, &ValueUnion);
+                rc = scmSettingsBaseHandleOpt(pBase, rc, &ValueUnion, pchDir, cchDir);
                 if (RT_FAILURE(rc))
                     break;
             }
@@ -578,13 +1250,17 @@ static int scmSettingsBaseParseString(PSCMSETTINGSBASE pBase, const char *pszLin
  *                              to.
  * @param   pchLine             The line.
  * @param   cchLine             The line length.
+ * @param   pchDir              The absolute path to the directory relative
+ *                              components in pchLine should be relative to.
+ * @param   cchDir              The length of the @a pchDir string.
  */
-static int scmSettingsBaseParseStringN(PSCMSETTINGSBASE pBase, const char *pchLine, size_t cchLine)
+static int scmSettingsBaseParseStringN(PSCMSETTINGSBASE pBase, const char *pchLine, size_t cchLine,
+                                       const char *pchDir, size_t cchDir)
 {
     char *pszLine = RTStrDupN(pchLine, cchLine);
     if (!pszLine)
         return VERR_NO_MEMORY;
-    int rc = scmSettingsBaseParseString(pBase, pszLine);
+    int rc = scmSettingsBaseParseString(pBase, pszLine, pchDir, cchDir);
     RTStrFree(pszLine);
     return rc;
 }
@@ -601,7 +1277,7 @@ static int scmSettingsBaseVerifyString(const char *pszOptions)
     int rc = scmSettingsBaseInit(&Base);
     if (RT_SUCCESS(rc))
     {
-        rc = scmSettingsBaseParseString(&Base, pszOptions);
+        rc = scmSettingsBaseParseString(&Base, pszOptions, "/", 1);
         scmSettingsBaseDelete(&Base);
     }
     return rc;
@@ -662,8 +1338,10 @@ static void scmSettingsDestroy(PSCMSETTINGS pSettings)
         {
             RTStrFree(pSettings->paPairs[i].pszPattern);
             RTStrFree(pSettings->paPairs[i].pszOptions);
+            RTStrFree(pSettings->paPairs[i].pszRelativeTo);
             pSettings->paPairs[i].pszPattern = NULL;
             pSettings->paPairs[i].pszOptions = NULL;
+            pSettings->paPairs[i].pszRelativeTo = NULL;
         }
         RTMemFree(pSettings->paPairs);
         pSettings->paPairs = NULL;
@@ -678,18 +1356,22 @@ static void scmSettingsDestroy(PSCMSETTINGS pSettings)
  * @param   pSettings           The settings.
  * @param   pchLine             The line containing the unparsed pair.
  * @param   cchLine             The length of the line.
+ * @param   offColon            The offset of the colon into the line.
+ * @param   pchDir              The absolute path to the directory relative
+ *                              components in pchLine should be relative to.
+ * @param   cchDir              The length of the @a pchDir string.
  */
-static int scmSettingsAddPair(PSCMSETTINGS pSettings, const char *pchLine, size_t cchLine)
+static int scmSettingsAddPair(PSCMSETTINGS pSettings, const char *pchLine, size_t cchLine, size_t offColon,
+                              const char *pchDir, size_t cchDir)
 {
+    Assert(pchLine[offColon] == ':' && offColon < cchLine);
+    Assert(pchDir[cchDir - 1] == '/');
+
     /*
      * Split the string.
      */
-    const char *pchOptions = (const char *)memchr(pchLine, ':', cchLine);
-    if (!pchOptions)
-        return VERR_INVALID_PARAMETER;
-    size_t cchPattern = pchOptions - pchLine;
+    size_t cchPattern = offColon;
     size_t cchOptions = cchLine - cchPattern - 1;
-    pchOptions++;
 
     /* strip spaces everywhere */
     while (cchPattern > 0 && RT_C_IS_SPACE(pchLine[cchPattern - 1]))
@@ -697,6 +1379,7 @@ static int scmSettingsAddPair(PSCMSETTINGS pSettings, const char *pchLine, size_
     while (cchPattern > 0 && RT_C_IS_SPACE(*pchLine))
         cchPattern--, pchLine++;
 
+    const char *pchOptions = &pchLine[offColon + 1];
     while (cchOptions > 0 && RT_C_IS_SPACE(pchOptions[cchOptions - 1]))
         cchOptions--;
     while (cchOptions > 0 && RT_C_IS_SPACE(*pchOptions))
@@ -707,7 +1390,7 @@ static int scmSettingsAddPair(PSCMSETTINGS pSettings, const char *pchLine, size_
         return VINF_SUCCESS;
 
     /*
-     * Add the pair and verify the option string.
+     * Prepair the pair and verify the option string.
      */
     uint32_t iPair = pSettings->cPairs;
     if ((iPair % 32) == 0)
@@ -718,20 +1401,86 @@ static int scmSettingsAddPair(PSCMSETTINGS pSettings, const char *pchLine, size_
         pSettings->paPairs = (PSCMPATRNOPTPAIR)pvNew;
     }
 
-    pSettings->paPairs[iPair].pszPattern = RTStrDupN(pchLine, cchPattern);
-    pSettings->paPairs[iPair].pszOptions = RTStrDupN(pchOptions, cchOptions);
+    pSettings->paPairs[iPair].pszPattern    = RTStrDupN(pchLine, cchPattern);
+    pSettings->paPairs[iPair].pszOptions    = RTStrDupN(pchOptions, cchOptions);
+    pSettings->paPairs[iPair].pszRelativeTo = RTStrDupN(pchDir, cchDir);
     int rc;
     if (   pSettings->paPairs[iPair].pszPattern
-        && pSettings->paPairs[iPair].pszOptions)
+        && pSettings->paPairs[iPair].pszOptions
+        && pSettings->paPairs[iPair].pszRelativeTo)
         rc = scmSettingsBaseVerifyString(pSettings->paPairs[iPair].pszOptions);
     else
         rc = VERR_NO_MEMORY;
+
+    /*
+     * If it checked out fine, expand any relative paths in the pattern.
+     */
+    if (RT_SUCCESS(rc))
+    {
+        size_t cPattern = 1;
+        size_t cRelativePaths = 0;
+        const char *pszSrc = pSettings->paPairs[iPair].pszPattern;
+        for (;;)
+        {
+            if (*pszSrc == '/')
+                cRelativePaths++;
+            pszSrc = strchr(pszSrc, '|');
+            if (!pszSrc)
+                break;
+            pszSrc++;
+            cPattern++;
+        }
+        pSettings->paPairs[iPair].fMultiPattern = cPattern > 1;
+        if (cRelativePaths > 0)
+        {
+            char *pszNewPattern = RTStrAlloc(cchPattern + cRelativePaths * (cchDir - 1) + 1);
+            if (pszNewPattern)
+            {
+                char *pszDst = pszNewPattern;
+                pszSrc = pSettings->paPairs[iPair].pszPattern;
+                for (;;)
+                {
+                    if (*pszSrc == '/')
+                    {
+                        memcpy(pszDst, pchDir, cchDir);
+                        pszDst += cchDir;
+                        pszSrc += 1;
+                    }
+
+                    /* Look for the next relative path. */
+                    const char *pszSrcNext = strchr(pszSrc, '|');
+                    while (pszSrcNext && pszSrcNext[1] != '/')
+                        pszSrcNext = strchr(pszSrcNext, '|');
+                    if (!pszSrcNext)
+                        break;
+
+                    /* Copy stuff between current and the next path. */
+                    pszSrcNext++;
+                    memcpy(pszDst, pszSrc, pszSrcNext - pszSrc);
+                    pszDst += pszSrcNext - pszSrc;
+                    pszSrc = pszSrcNext;
+                }
+
+                /* Copy the final portion and replace the pattern. */
+                strcpy(pszDst, pszSrc);
+
+                RTStrFree(pSettings->paPairs[iPair].pszPattern);
+                pSettings->paPairs[iPair].pszPattern = pszNewPattern;
+            }
+            else
+                rc = VERR_NO_MEMORY;
+        }
+    }
     if (RT_SUCCESS(rc))
+        /*
+         * Commit the pair.
+         */
         pSettings->cPairs = iPair + 1;
     else
     {
         RTStrFree(pSettings->paPairs[iPair].pszPattern);
         RTStrFree(pSettings->paPairs[iPair].pszOptions);
+        RTStrFree(pSettings->paPairs[iPair].pszRelativeTo);
     }
     return rc;
 }
@@ -747,48 +1496,120 @@ static int scmSettingsLoadFile(PSCMSETTINGS pSettings, const char *pszFilename)
 {
     ScmVerbose(NULL, 3, "Loading settings file '%s'...\n", pszFilename);
 
-    SCMSTREAM Stream;
-    int rc = ScmStreamInitForReading(&Stream, pszFilename);
+    /* Turn filename into an absolute path and drop the filename. */
+    char szAbsPath[RTPATH_MAX];
+    int rc = RTPathAbs(pszFilename, szAbsPath, sizeof(szAbsPath));
     if (RT_FAILURE(rc))
     {
-        RTMsgError("%s: ScmStreamInitForReading -> %Rrc\n", pszFilename, rc);
+        RTMsgError("%s: RTPathAbs -> %Rrc\n", pszFilename, rc);
         return rc;
     }
+    RTPathChangeToUnixSlashes(szAbsPath, true);
+    size_t cchDir = RTPathFilename(szAbsPath) - &szAbsPath[0];
 
-    SCMEOL      enmEol;
-    const char *pchLine;
-    size_t      cchLine;
-    while ((pchLine = ScmStreamGetLine(&Stream, &cchLine, &enmEol)) != NULL)
+    /* Try open it.*/
+    SCMSTREAM Stream;
+    rc = ScmStreamInitForReading(&Stream, pszFilename);
+    if (RT_SUCCESS(rc))
     {
-        /* Ignore leading spaces. */
-        while (cchLine > 0 && RT_C_IS_SPACE(*pchLine))
-            pchLine++, cchLine--;
+        SCMEOL      enmEol;
+        const char *pchLine;
+        size_t      cchLine;
+        while ((pchLine = ScmStreamGetLine(&Stream, &cchLine, &enmEol)) != NULL)
+        {
+            /* Ignore leading spaces. */
+            while (cchLine > 0 && RT_C_IS_SPACE(*pchLine))
+                pchLine++, cchLine--;
 
-        /* Ignore empty lines and comment lines. */
-        if (cchLine < 1 || *pchLine == '#')
-            continue;
+            /* Ignore empty lines and comment lines. */
+            if (cchLine < 1 || *pchLine == '#')
+                continue;
 
-        /* What kind of line is it? */
-        const char *pchColon = (const char *)memchr(pchLine, ':', cchLine);
-        if (pchColon)
-            rc = scmSettingsAddPair(pSettings, pchLine, cchLine);
-        else
-            rc = scmSettingsBaseParseStringN(&pSettings->Base, pchLine, cchLine);
-        if (RT_FAILURE(rc))
-        {
-            RTMsgError("%s:%d: %Rrc\n", pszFilename, ScmStreamTellLine(&Stream), rc);
-            break;
+            /* Deal with escaped newlines. */
+            size_t  iFirstLine  = ~(size_t)0;
+            char   *pszFreeLine = NULL;
+            if (   pchLine[cchLine - 1] == '\\'
+                && (   cchLine < 2
+                    || pchLine[cchLine - 2] != '\\') )
+            {
+                iFirstLine = ScmStreamTellLine(&Stream);
+
+                cchLine--;
+                while (cchLine > 0 && RT_C_IS_SPACE(pchLine[cchLine - 1]))
+                    cchLine--;
+
+                size_t cchTotal = cchLine;
+                pszFreeLine = RTStrDupN(pchLine, cchLine);
+                if (pszFreeLine)
+                {
+                    /* Append following lines. */
+                    while ((pchLine = ScmStreamGetLine(&Stream, &cchLine, &enmEol)) != NULL)
+                    {
+                        while (cchLine > 0 && RT_C_IS_SPACE(*pchLine))
+                            pchLine++, cchLine--;
+
+                        bool const fDone = cchLine == 0
+                                        || pchLine[cchLine - 1] != '\\'
+                                        || (cchLine >= 2 && pchLine[cchLine - 2] == '\\');
+                        if (!fDone)
+                        {
+                            cchLine--;
+                            while (cchLine > 0 && RT_C_IS_SPACE(pchLine[cchLine - 1]))
+                                cchLine--;
+                        }
+
+                        rc = RTStrRealloc(&pszFreeLine, cchTotal + 1 + cchLine + 1);
+                        if (RT_FAILURE(rc))
+                            break;
+                        pszFreeLine[cchTotal++] = ' ';
+                        memcpy(&pszFreeLine[cchTotal], pchLine, cchLine);
+                        cchTotal += cchLine;
+                        pszFreeLine[cchTotal] = '\0';
+
+                        if (fDone)
+                            break;
+                    }
+                }
+                else
+                    rc = VERR_NO_STR_MEMORY;
+
+                if (RT_FAILURE(rc))
+                {
+                    RTStrFree(pszFreeLine);
+                    rc = RTMsgErrorRc(VERR_NO_MEMORY, "%s: Ran out of memory deal with escaped newlines", pszFilename);
+                    break;
+                }
+
+                pchLine = pszFreeLine;
+                cchLine = cchTotal;
+            }
+
+            /* What kind of line is it? */
+            const char *pchColon = (const char *)memchr(pchLine, ':', cchLine);
+            if (pchColon)
+                rc = scmSettingsAddPair(pSettings, pchLine, cchLine, pchColon - pchLine, szAbsPath, cchDir);
+            else
+                rc = scmSettingsBaseParseStringN(&pSettings->Base, pchLine, cchLine, szAbsPath, cchDir);
+            if (pszFreeLine)
+                RTStrFree(pszFreeLine);
+            if (RT_FAILURE(rc))
+            {
+                RTMsgError("%s:%d: %Rrc\n",
+                           pszFilename, iFirstLine == ~(size_t)0 ? ScmStreamTellLine(&Stream) : iFirstLine, rc);
+                break;
+            }
         }
-    }
 
-    if (RT_SUCCESS(rc))
-    {
-        rc = ScmStreamGetStatus(&Stream);
-        if (RT_FAILURE(rc))
-            RTMsgError("%s: ScmStreamGetStatus- > %Rrc\n", pszFilename, rc);
+        if (RT_SUCCESS(rc))
+        {
+            rc = ScmStreamGetStatus(&Stream);
+            if (RT_FAILURE(rc))
+                RTMsgError("%s: ScmStreamGetStatus- > %Rrc\n", pszFilename, rc);
+        }
+        ScmStreamDelete(&Stream);
     }
-
-    ScmStreamDelete(&Stream);
+    else
+        RTMsgError("%s: ScmStreamInitForReading -> %Rrc\n", pszFilename, rc);
     return rc;
 }
 
@@ -807,7 +1628,7 @@ static int scmSettingsCreateFromFile(PSCMSETTINGS *ppSettings, const char *pszFi
     int rc = scmSettingsCreate(&pSettings, pSettingsBase);
     if (RT_SUCCESS(rc))
     {
-        rc = scmSettingsLoadFile(pSettings, pszFilename);
+        rc = scmSettingsLoadFile(pSettings, pszFilename, RTPathFilename(pszFilename) - pszFilename);
         if (RT_SUCCESS(rc))
         {
             *ppSettings = pSettings;
@@ -868,6 +1689,8 @@ static int scmSettingsCreateForPath(PSCMSETTINGS *ppSettings, PCSCMSETTINGSBASE
             rc = RTPathAppend(szFile, sizeof(szFile), SCM_SETTINGS_FILENAME);
         if (RT_FAILURE(rc))
             break;
+        RTPathChangeToUnixSlashes(szFile, true);
+
         if (RTFileExists(szFile))
         {
             rc = scmSettingsLoadFile(pSettings, szFile);
@@ -917,6 +1740,8 @@ static int scmSettingsStackPushDir(PSCMSETTINGS *ppSettingsStack, const char *ps
     int rc = RTPathJoin(szFile, sizeof(szFile), pszDir, SCM_SETTINGS_FILENAME);
     if (RT_SUCCESS(rc))
     {
+        RTPathChangeToUnixSlashes(szFile, true);
+
         PSCMSETTINGS pSettings;
         rc = scmSettingsCreate(&pSettings, &(*ppSettingsStack)->Base);
         if (RT_SUCCESS(rc))
@@ -983,6 +1808,8 @@ static void scmSettingsStackPopAndDestroy(PSCMSETTINGS *ppSettingsStack)
 static int scmSettingsStackMakeFileBase(PCSCMSETTINGS pSettingsStack, const char *pszFilename,
                                         const char *pszBasename, size_t cchBasename, PSCMSETTINGSBASE pBase)
 {
+    ScmVerbose(NULL, 5, "scmSettingsStackMakeFileBase(%s, %.*s)\n", pszFilename, cchBasename, pszBasename);
+
     int rc = scmSettingsBaseInitAndCopy(pBase, &pSettingsStack->Base);
     if (RT_SUCCESS(rc))
     {
@@ -998,12 +1825,19 @@ static int scmSettingsStackMakeFileBase(PCSCMSETTINGS pSettingsStack, const char
             if (cPairs)
             {
                 for (size_t i = 0; i < cPairs; i++)
-                    if (   RTStrSimplePatternMultiMatch(pCur->paPairs[i].pszPattern, RTSTR_MAX,
-                                                        pszBasename,  cchBasename, NULL)
-                        || RTStrSimplePatternMultiMatch(pCur->paPairs[i].pszPattern, RTSTR_MAX,
-                                                        pszFilename,  RTSTR_MAX, NULL))
+                    if (   !pCur->paPairs[i].fMultiPattern
+                        ?    RTStrSimplePatternNMatch(pCur->paPairs[i].pszPattern, RTSTR_MAX,
+                                                      pszBasename,  cchBasename)
+                          || RTStrSimplePatternMatch(pCur->paPairs[i].pszPattern, pszFilename)
+                        :    RTStrSimplePatternMultiMatch(pCur->paPairs[i].pszPattern, RTSTR_MAX,
+                                                          pszBasename,  cchBasename, NULL)
+                          || RTStrSimplePatternMultiMatch(pCur->paPairs[i].pszPattern, RTSTR_MAX,
+                                                          pszFilename,  RTSTR_MAX, NULL))
                     {
-                        rc = scmSettingsBaseParseString(pBase, pCur->paPairs[i].pszOptions);
+                        ScmVerbose(NULL, 5, "scmSettingsStackMakeFileBase: Matched '%s' : '%s'\n",
+                                   pCur->paPairs[i].pszPattern, pCur->paPairs[i].pszOptions);
+                        rc = scmSettingsBaseParseString(pBase, pCur->paPairs[i].pszOptions,
+                                                        pCur->paPairs[i].pszRelativeTo, strlen(pCur->paPairs[i].pszRelativeTo));
                         if (RT_FAILURE(rc))
                             break;
                     }
@@ -1025,6 +1859,22 @@ static int scmSettingsStackMakeFileBase(PCSCMSETTINGS pSettingsStack, const char
 
 
 /**
+ * Prints the per file banner needed and the message level is high enough.
+ *
+ * @param   pState              The rewrite state.
+ * @param   iLevel              The required verbosity level.
+ */
+void ScmVerboseBanner(PSCMRWSTATE pState, int iLevel)
+{
+    if (iLevel <= g_iVerbosity && !pState->fFirst)
+    {
+        RTPrintf("%s: info: --= Rewriting '%s' =--\n", g_szProgName, pState->pszFilename);
+        pState->fFirst = true;
+    }
+}
+
+
+/**
  * Prints a verbose message if the level is high enough.
  *
  * @param   pState              The rewrite state.  Optional.
@@ -1042,21 +1892,46 @@ void ScmVerbose(PSCMRWSTATE pState, int iLevel, const char *pszFormat, ...)
             RTPrintf("%s: info: --= Rewriting '%s' =--\n", g_szProgName, pState->pszFilename);
             pState->fFirst = true;
         }
-        if (pszFormat)
-        {
-            RTPrintf(pState
-                     ? "%s: info:   "
-                     : "%s: info: ",
-                     g_szProgName);
-            va_list va;
-            va_start(va, pszFormat);
-            RTPrintfV(pszFormat, va);
-            va_end(va);
-        }
+        RTPrintf(pState
+                 ? "%s: info:   "
+                 : "%s: info: ",
+                 g_szProgName);
+        va_list va;
+        va_start(va, pszFormat);
+        RTPrintfV(pszFormat, va);
+        va_end(va);
     }
 }
 
 
+/**
+ * Prints an error message.
+ *
+ * @returns false
+ * @param   pState              The rewrite state.  Optional.
+ * @param   rc                  The error code.
+ * @param   pszFormat           The message format string.
+ * @param   ...                 Format arguments.
+ */
+bool ScmError(PSCMRWSTATE pState, int rc, const char *pszFormat, ...)
+{
+    if (RT_SUCCESS(pState->rc))
+        pState->rc = rc;
+
+    if (!pState->fFirst)
+    {
+        RTPrintf("%s: info: --= Rewriting '%s' =--\n", g_szProgName, pState->pszFilename);
+        pState->fFirst = true;
+    }
+    va_list va;
+    va_start(va, pszFormat);
+    RTPrintf("%s: error: %s: %N", g_szProgName, pState->pszFilename, pszFormat, &va);
+    va_end(va);
+
+    return false;
+}
+
+
 /* -=-=-=-=-=- file and directory processing -=-=-=-=-=- */
 
 
@@ -1083,6 +1958,7 @@ static int scmProcessFileInner(PSCMRWSTATE pState, const char *pszFilename, cons
         && !RTStrSimplePatternMultiMatch(pBaseSettings->pszFilterFiles, RTSTR_MAX, pszBasename, cchBasename, NULL))
     {
         ScmVerbose(NULL, 5, "skipping '%s': file filter mismatch\n", pszFilename);
+        g_cFilesSkipped++;
         return VINF_SUCCESS;
     }
     if (   pBaseSettings->pszFilterOutFiles
@@ -1091,33 +1967,18 @@ static int scmProcessFileInner(PSCMRWSTATE pState, const char *pszFilename, cons
             || RTStrSimplePatternMultiMatch(pBaseSettings->pszFilterOutFiles, RTSTR_MAX, pszFilename, RTSTR_MAX, NULL)) )
     {
         ScmVerbose(NULL, 5, "skipping '%s': filterd out\n", pszFilename);
+        g_cFilesSkipped++;
         return VINF_SUCCESS;
     }
     if (   pBaseSettings->fOnlySvnFiles
         && !ScmSvnIsInWorkingCopy(pState))
     {
         ScmVerbose(NULL, 5, "skipping '%s': not in SVN WC\n", pszFilename);
+        g_cFilesNotInSvn++;
         return VINF_SUCCESS;
     }
 
     /*
-     * Try find a matching rewrite config for this filename.
-     */
-    PCSCMCFGENTRY pCfg = NULL;
-    for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
-        if (RTStrSimplePatternMultiMatch(g_aConfigs[iCfg].pszFilePattern, RTSTR_MAX, pszBasename, cchBasename, NULL))
-        {
-            pCfg = &g_aConfigs[iCfg];
-            break;
-        }
-    if (!pCfg)
-    {
-        ScmVerbose(NULL, 4, "skipping '%s': no rewriters configured\n", pszFilename);
-        return VINF_SUCCESS;
-    }
-    ScmVerbose(pState, 4, "matched \"%s\"\n", pCfg->pszFilePattern);
-
-    /*
      * Create an input stream from the file and check that it's text.
      */
     SCMSTREAM Stream1;
@@ -1127,9 +1988,83 @@ static int scmProcessFileInner(PSCMRWSTATE pState, const char *pszFilename, cons
         RTMsgError("Failed to read '%s': %Rrc\n", pszFilename, rc);
         return rc;
     }
-    if (ScmStreamIsText(&Stream1))
+    bool const fIsText = ScmStreamIsText(&Stream1);
+
+    /*
+     * Try find a matching rewrite config for this filename.
+     */
+    PCSCMCFGENTRY pCfg = pBaseSettings->pTreatAs;
+    if (!pCfg)
+    {
+        for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+            if (RTStrSimplePatternMultiMatch(g_aConfigs[iCfg].pszFilePattern, RTSTR_MAX, pszBasename, cchBasename, NULL))
+            {
+                pCfg = &g_aConfigs[iCfg];
+                break;
+            }
+        if (!pCfg)
+        {
+            /* On failure try check for hash-bang stuff before giving up. */
+            if (fIsText)
+            {
+                SCMEOL      enmIgn;
+                size_t      cchFirst;
+                const char *pchFirst = ScmStreamGetLine(&Stream1, &cchFirst, &enmIgn);
+                if (cchFirst >= 9 && pchFirst && *pchFirst == '#')
+                {
+                    do
+                    {
+                        pchFirst++;
+                        cchFirst--;
+                    } while (cchFirst > 0 && RT_C_IS_BLANK(*pchFirst));
+                    if (*pchFirst == '!')
+                    {
+                        do
+                        {
+                            pchFirst++;
+                            cchFirst--;
+                        } while (cchFirst > 0 && RT_C_IS_BLANK(*pchFirst));
+                        const char *pszTreatAs = NULL;
+                        if (   (cchFirst >= 7 && strncmp(pchFirst, "/bin/sh", 7) == 0)
+                            || (cchFirst >= 9 && strncmp(pchFirst, "/bin/bash", 9) == 0)
+                            || (cchFirst >= 4+9 && strncmp(pchFirst, "/usr/bin/bash", 4+9) == 0) )
+                            pszTreatAs = "shell";
+                        else if (   (cchFirst >= 15 && strncmp(pchFirst, "/usr/bin/python", 15) == 0)
+                                 || (cchFirst >= 19 && strncmp(pchFirst, "/usr/bin/env python", 19) == 0) )
+                            pszTreatAs = "python";
+                        else if (   (cchFirst >= 13 && strncmp(pchFirst, "/usr/bin/perl", 13) == 0)
+                                 || (cchFirst >= 17 && strncmp(pchFirst, "/usr/bin/env perl", 17) == 0) )
+                            pszTreatAs = "perl";
+                        if (pszTreatAs)
+                        {
+                            for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+                                if (strcmp(pszTreatAs, g_aConfigs[iCfg].pszName) == 0)
+                                {
+                                    pCfg = &g_aConfigs[iCfg];
+                                    break;
+                                }
+                            Assert(pCfg);
+                        }
+                    }
+                }
+                ScmStreamRewindForReading(&Stream1);
+            }
+            if (!pCfg)
+            {
+                ScmVerbose(NULL, 2, "skipping '%s': no rewriters configured\n", pszFilename);
+                g_cFilesNoRewriters++;
+                ScmStreamDelete(&Stream1);
+                return VINF_SUCCESS;
+            }
+        }
+        ScmVerbose(pState, 4, "matched \"%s\" (%s)\n", pCfg->pszFilePattern, pCfg->pszName);
+    }
+    else
+        ScmVerbose(pState, 4, "treat-as \"%s\"\n", pCfg->pszName);
+
+    if (fIsText || pCfg->fBinary)
     {
-        ScmVerbose(pState, 3, NULL);
+        ScmVerboseBanner(pState, 3);
 
         /*
          * Gather SCM and editor settings from the stream.
@@ -1157,7 +2092,10 @@ static int scmProcessFileInner(PSCMRWSTATE pState, const char *pszFilename, cons
                     PSCMSTREAM  pOut      = &Stream2;
                     for (size_t iRw = 0; iRw < pCfg->cRewriters; iRw++)
                     {
-                        bool fRc = pCfg->papfnRewriter[iRw](pState, pIn, pOut, pBaseSettings);
+                        pState->rc = VINF_SUCCESS;
+                        bool fRc = pCfg->paRewriters[iRw]->pfnRewriter(pState, pIn, pOut, pBaseSettings);
+                        if (RT_FAILURE(pState->rc))
+                            break;
                         if (fRc)
                         {
                             PSCMSTREAM pTmp = pOut;
@@ -1165,58 +2103,70 @@ static int scmProcessFileInner(PSCMRWSTATE pState, const char *pszFilename, cons
                             pIn  = pTmp;
                             fModified = true;
                         }
+
                         ScmStreamRewindForReading(pIn);
                         ScmStreamRewindForWriting(pOut);
                     }
 
-                    rc = ScmStreamGetStatus(&Stream1);
-                    if (RT_SUCCESS(rc))
-                        rc = ScmStreamGetStatus(&Stream2);
-                    if (RT_SUCCESS(rc))
-                        rc = ScmStreamGetStatus(&Stream3);
+                    rc = pState->rc;
                     if (RT_SUCCESS(rc))
                     {
-                        /*
-                         * If rewritten, write it back to disk.
-                         */
-                        if (fModified)
+                        rc = ScmStreamGetStatus(&Stream1);
+                        if (RT_SUCCESS(rc))
+                            rc = ScmStreamGetStatus(&Stream2);
+                        if (RT_SUCCESS(rc))
+                            rc = ScmStreamGetStatus(&Stream3);
+                        if (RT_SUCCESS(rc))
                         {
-                            if (!g_fDryRun)
-                            {
-                                ScmVerbose(pState, 1, "writing modified file to \"%s%s\"\n", pszFilename, g_pszChangedSuff);
-                                rc = ScmStreamWriteToFile(pIn, "%s%s", pszFilename, g_pszChangedSuff);
-                                if (RT_FAILURE(rc))
-                                    RTMsgError("Error writing '%s%s': %Rrc\n", pszFilename, g_pszChangedSuff, rc);
-                            }
-                            else
+                            /*
+                             * If rewritten, write it back to disk.
+                             */
+                            if (fModified && !pCfg->fBinary)
                             {
-                                ScmVerbose(pState, 1, NULL);
-                                ScmDiffStreams(pszFilename, &Stream1, pIn, g_fDiffIgnoreEol, g_fDiffIgnoreLeadingWS,
-                                               g_fDiffIgnoreTrailingWS, g_fDiffSpecialChars, pBaseSettings->cchTab, g_pStdOut);
-                                ScmVerbose(pState, 2, "would have modified the file \"%s%s\"\n", pszFilename, g_pszChangedSuff);
+                                if (!g_fDryRun)
+                                {
+                                    ScmVerbose(pState, 1, "writing modified file to \"%s%s\"\n", pszFilename, g_pszChangedSuff);
+                                    rc = ScmStreamWriteToFile(pIn, "%s%s", pszFilename, g_pszChangedSuff);
+                                    if (RT_FAILURE(rc))
+                                        RTMsgError("Error writing '%s%s': %Rrc\n", pszFilename, g_pszChangedSuff, rc);
+                                }
+                                else
+                                {
+                                    ScmVerboseBanner(pState, 1);
+                                    ScmDiffStreams(pszFilename, &Stream1, pIn, g_fDiffIgnoreEol,
+                                                   g_fDiffIgnoreLeadingWS, g_fDiffIgnoreTrailingWS, g_fDiffSpecialChars,
+                                                   pBaseSettings->cchTab, g_pStdOut);
+                                    ScmVerbose(pState, 2, "would have modified the file \"%s%s\"\n",
+                                               pszFilename, g_pszChangedSuff);
+                                }
+                                g_cFilesModified++;
                             }
-                        }
+                            else if (fModified)
+                                rc = RTMsgErrorRc(VERR_INTERNAL_ERROR, "Rewriters modified binary file! Impossible!");
 
-                        /*
-                         * If pending SVN property changes, apply them.
-                         */
-                        if (pState->cSvnPropChanges && RT_SUCCESS(rc))
-                        {
-                            if (!g_fDryRun)
+                            /*
+                             * If pending SVN property changes, apply them.
+                             */
+                            if (pState->cSvnPropChanges && RT_SUCCESS(rc))
                             {
-                                rc = ScmSvnApplyChanges(pState);
-                                if (RT_FAILURE(rc))
-                                    RTMsgError("%s: failed to apply SVN property changes (%Rrc)\n", pszFilename, rc);
+                                if (!g_fDryRun)
+                                {
+                                    rc = ScmSvnApplyChanges(pState);
+                                    if (RT_FAILURE(rc))
+                                        RTMsgError("%s: failed to apply SVN property changes (%Rrc)\n", pszFilename, rc);
+                                }
+                                else
+                                    ScmSvnDisplayChanges(pState);
+                                if (!fModified)
+                                    g_cFilesModified++;
                             }
-                            else
-                                ScmSvnDisplayChanges(pState);
-                        }
 
-                        if (!fModified && !pState->cSvnPropChanges)
-                            ScmVerbose(pState, 3, "no change\n", pszFilename);
+                            if (!fModified && !pState->cSvnPropChanges)
+                                ScmVerbose(pState, 3, "%s: no change\n", pszFilename);
+                        }
+                        else
+                            RTMsgError("%s: stream error %Rrc\n", pszFilename, rc);
                     }
-                    else
-                        RTMsgError("%s: stream error %Rrc\n", pszFilename, rc);
                     ScmStreamDelete(&Stream3);
                 }
                 else
@@ -1230,7 +2180,10 @@ static int scmProcessFileInner(PSCMRWSTATE pState, const char *pszFilename, cons
             RTMsgError("scmSettingsBaseLoadFromDocument: %Rrc\n", rc);
     }
     else
-        ScmVerbose(pState, 4, "not text file: \"%s\"\n", pszFilename);
+    {
+        ScmVerbose(pState, 2, "not text file: \"%s\"\n", pszFilename);
+        g_cFilesBinaries++;
+    }
     ScmStreamDelete(&Stream1);
 
     return rc;
@@ -1257,10 +2210,12 @@ static int scmProcessFile(const char *pszFilename, const char *pszBasename, size
     if (RT_SUCCESS(rc))
     {
         SCMRWSTATE State;
-        State.fFirst           = false;
-        State.pszFilename      = pszFilename;
-        State.cSvnPropChanges  = 0;
-        State.paSvnPropChanges = NULL;
+        State.pszFilename           = pszFilename;
+        State.fFirst                = false;
+        State.fIsInSvnWorkingCopy   = 0;
+        State.cSvnPropChanges       = 0;
+        State.paSvnPropChanges      = NULL;
+        State.rc                    = VINF_SUCCESS;
 
         rc = scmProcessFileInner(&State, pszFilename, pszBasename, cchBasename, &Base);
 
@@ -1273,11 +2228,12 @@ static int scmProcessFile(const char *pszFilename, const char *pszBasename, size
         RTMemFree(State.paSvnPropChanges);
 
         scmSettingsBaseDelete(&Base);
+
+        g_cFilesProcessed++;
     }
     return rc;
 }
 
-
 /**
  * Tries to correct RTDIRENTRY_UNKNOWN.
  *
@@ -1335,12 +2291,13 @@ static int scmProcessDirTreeRecursion(char *pszBuf, size_t cchDir, PRTDIRENTRY p
         if (!ScmSvnIsDirInWorkingCopy(pszBuf))
             return VINF_SUCCESS;
     }
+    g_cDirsProcessed++;
 
     /*
      * Try open and read the directory.
      */
-    PRTDIR pDir;
-    rc = RTDirOpenFiltered(&pDir, pszBuf, RTDIRFILTER_NONE, 0);
+    RTDIR hDir;
+    rc = RTDirOpenFiltered(&hDir, pszBuf, RTDIRFILTER_NONE, 0 /*fFlags*/);
     if (RT_FAILURE(rc))
     {
         RTMsgError("Failed to enumerate directory '%s': %Rrc", pszBuf, rc);
@@ -1349,7 +2306,7 @@ static int scmProcessDirTreeRecursion(char *pszBuf, size_t cchDir, PRTDIRENTRY p
     for (;;)
     {
         /* Read the next entry. */
-        rc = RTDirRead(pDir, pEntry, NULL);
+        rc = RTDirRead(hDir, pEntry, NULL);
         if (RT_FAILURE(rc))
         {
             if (rc == VERR_NO_MORE_FILES)
@@ -1414,7 +2371,7 @@ static int scmProcessDirTreeRecursion(char *pszBuf, size_t cchDir, PRTDIRENTRY p
         if (RT_FAILURE(rc))
             break;
     }
-    RTDirClose(pDir);
+    RTDirClose(hDir);
     return rc;
 
 }
@@ -1434,6 +2391,8 @@ static int scmProcessDirTree(char *pszDir, PSCMSETTINGS pSettingsStack)
     int rc = RTPathAppend(pszDir, RTPATH_MAX, ".");
     if (RT_SUCCESS(rc))
     {
+        RTPathChangeToUnixSlashes(pszDir, true);
+
         RTDIRENTRY Entry;
         rc = scmProcessDirTreeRecursion(pszDir, strlen(pszDir), &Entry, pSettingsStack, 0);
     }
@@ -1493,41 +2452,146 @@ static int scmProcessSomething(const char *pszSomething, PSCMSETTINGS pSettingsS
     return rc;
 }
 
-static void usage(PCRTGETOPTDEF paOpts, size_t cOpts)
+/**
+ * Print some stats.
+ */
+static void scmPrintStats(void)
+{
+    ScmVerbose(NULL, 0,
+               g_fDryRun
+               ? "%u out of %u file%s in %u dir%s would be modified (%u without rewriter%s, %u binar%s, %u not in svn, %u skipped)\n"
+               : "%u out of %u file%s in %u dir%s was modified (%u without rewriter%s, %u binar%s, %u not in svn, %u skipped)\n",
+               g_cFilesModified,
+               g_cFilesProcessed, g_cFilesProcessed == 1 ? "" : "s",
+               g_cDirsProcessed,  g_cDirsProcessed == 1 ? "" : "s",
+               g_cFilesNoRewriters, g_cFilesNoRewriters == 1 ? "" : "s",
+               g_cFilesBinaries,  g_cFilesBinaries == 1 ? "y" : "ies",
+               g_cFilesNotInSvn, g_cFilesSkipped);
+}
+
+/**
+ * Display the rewriter actions.
+ *
+ * @returns RTEXITCODE_SUCCESS.
+ */
+static int scmHelpActions(void)
+{
+    RTPrintf("Available rewriter actions:\n");
+    for (uint32_t i = 0; i < RT_ELEMENTS(g_papRewriterActions); i++)
+        RTPrintf("  %s\n", g_papRewriterActions[i]->pszName);
+    return RTEXITCODE_SUCCESS;
+}
+
+/**
+ * Display the default configuration.
+ *
+ * @returns RTEXITCODE_SUCCESS.
+ */
+static int scmHelpConfig(void)
+{
+    RTPrintf("Rewriter configuration:\n");
+    for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+    {
+        RTPrintf("\n  %s%s - %s:\n",
+                 g_aConfigs[iCfg].pszName, g_aConfigs[iCfg].fBinary ? " (binary)" : "", g_aConfigs[iCfg].pszFilePattern);
+        for (size_t i = 0; i < g_aConfigs[iCfg].cRewriters; i++)
+            RTPrintf("    %s\n", g_aConfigs[iCfg].paRewriters[i]->pszName);
+    }
+    return RTEXITCODE_SUCCESS;
+}
+
+/**
+ * Display the primary help text.
+ *
+ * @returns RTEXITCODE_SUCCESS.
+ * @param   paOpts              Options.
+ * @param   cOpts               Number of options.
+ */
+static int scmHelp(PCRTGETOPTDEF paOpts, size_t cOpts)
 {
     RTPrintf("VirtualBox Source Code Massager\n"
              "\n"
              "Usage: %s [options] <files & dirs>\n"
              "\n"
-             "Options:\n", g_szProgName);
+             "General options:\n", g_szProgName);
     for (size_t i = 0; i < cOpts; i++)
     {
-        bool fAdvanceTwo = false;
+        /* Grouping. */
+        switch (paOpts[i].iShort)
+        {
+            case SCMOPT_DIFF_IGNORE_EOL:
+                RTPrintf("\nDiff options (dry runs):\n");
+                break;
+            case SCMOPT_CONVERT_EOL:
+                RTPrintf("\nRewriter action options:\n");
+                break;
+            case SCMOPT_ONLY_SVN_DIRS:
+                RTPrintf("\nInput selection options:\n");
+                break;
+            case SCMOPT_TREAT_AS:
+                RTPrintf("\nMisc options:\n");
+                break;
+        }
+
+        size_t cExtraAdvance = 0;
         if ((paOpts[i].fFlags & RTGETOPT_REQ_MASK) == RTGETOPT_REQ_NOTHING)
         {
-            fAdvanceTwo = i + 1 < cOpts
-                       && (   strstr(paOpts[i+1].pszLong, "-no-") != NULL
-                           || strstr(paOpts[i+1].pszLong, "-not-") != NULL
-                           || strstr(paOpts[i+1].pszLong, "-dont-") != NULL
-                           || (paOpts[i].iShort == 'q' && paOpts[i+1].iShort == 'v')
-                           || (paOpts[i].iShort == 'd' && paOpts[i+1].iShort == 'D')
-                          );
-            if (fAdvanceTwo)
+            cExtraAdvance = i + 1 < cOpts
+                         && (   strstr(paOpts[i+1].pszLong, "-no-") != NULL
+                             || strstr(paOpts[i+1].pszLong, "-not-") != NULL
+                             || strstr(paOpts[i+1].pszLong, "-dont-") != NULL
+                             || (paOpts[i].iShort == 'q' && paOpts[i+1].iShort == 'v')
+                             || (paOpts[i].iShort == 'd' && paOpts[i+1].iShort == 'D')
+                            );
+            if (cExtraAdvance)
                 RTPrintf("  %s, %s\n", paOpts[i].pszLong, paOpts[i + 1].pszLong);
-            else
+            else if (paOpts[i].iShort != SCMOPT_NO_UPDATE_LICENSE)
                 RTPrintf("  %s\n", paOpts[i].pszLong);
+            else
+            {
+                RTPrintf("  %s,\n"
+                         "  %s,\n"
+                         "  %s,\n"
+                         "  %s,\n"
+                         "  %s,\n"
+                         "  %s,\n"
+                         "  %s\n",
+                         paOpts[i].pszLong,
+                         paOpts[i + 1].pszLong,
+                         paOpts[i + 2].pszLong,
+                         paOpts[i + 3].pszLong,
+                         paOpts[i + 4].pszLong,
+                         paOpts[i + 5].pszLong,
+                         paOpts[i + 6].pszLong);
+                cExtraAdvance = 6;
+            }
         }
         else if ((paOpts[i].fFlags & RTGETOPT_REQ_MASK) == RTGETOPT_REQ_STRING)
-            RTPrintf("  %s string\n", paOpts[i].pszLong);
+            switch (paOpts[i].iShort)
+            {
+                case SCMOPT_DEL_ACTION:
+                    RTPrintf("  %s pattern\n", paOpts[i].pszLong);
+                    break;
+                case SCMOPT_FILTER_OUT_DIRS:
+                case SCMOPT_FILTER_FILES:
+                case SCMOPT_FILTER_OUT_FILES:
+                    RTPrintf("  %s multi-pattern\n", paOpts[i].pszLong);
+                    break;
+                default:
+                    RTPrintf("  %s string\n", paOpts[i].pszLong);
+            }
         else
             RTPrintf("  %s value\n", paOpts[i].pszLong);
         switch (paOpts[i].iShort)
         {
             case 'd':
             case 'D':                           RTPrintf("      Default: --dry-run\n"); break;
+            case SCMOPT_CHECK_RUN:              RTPrintf("      Default: --dry-run\n"); break;
             case 'f':                           RTPrintf("      Default: none\n"); break;
             case 'q':
             case 'v':                           RTPrintf("      Default: -vv\n"); break;
+            case SCMOPT_HELP_CONFIG:            RTPrintf("      Shows the standard file rewriter configurations.\n"); break;
+            case SCMOPT_HELP_ACTIONS:           RTPrintf("      Shows the available rewriter actions.\n"); break;
 
             case SCMOPT_DIFF_IGNORE_EOL:        RTPrintf("      Default: false\n"); break;
             case SCMOPT_DIFF_IGNORE_SPACE:      RTPrintf("      Default: false\n"); break;
@@ -1542,23 +2606,61 @@ static void usage(PCRTGETOPTDEF paOpts, size_t cOpts)
             case SCMOPT_STRIP_TRAILING_BLANKS:  RTPrintf("      Default: %RTbool\n", g_Defaults.fStripTrailingBlanks); break;
             case SCMOPT_STRIP_TRAILING_LINES:   RTPrintf("      Default: %RTbool\n", g_Defaults.fStripTrailingLines); break;
             case SCMOPT_FIX_FLOWER_BOX_MARKERS: RTPrintf("      Default: %RTbool\n", g_Defaults.fFixFlowerBoxMarkers); break;
-            case SCMOPT_FIX_TODOS:              RTPrintf("      Default: %RTbool\n", g_Defaults.fFixTodos); break;
             case SCMOPT_MIN_BLANK_LINES_BEFORE_FLOWER_BOX_MARKERS: RTPrintf("      Default: %u\n", g_Defaults.cMinBlankLinesBeforeFlowerBoxMakers); break;
-            case SCMOPT_ONLY_SVN_DIRS:          RTPrintf("      Default: %RTbool\n", g_Defaults.fOnlySvnDirs); break;
-            case SCMOPT_ONLY_SVN_FILES:         RTPrintf("      Default: %RTbool\n", g_Defaults.fOnlySvnFiles); break;
+
+            case SCMOPT_FIX_TODOS:
+                RTPrintf("      Fix @todo statements so doxygen sees them.  Default: %RTbool\n", g_Defaults.fFixTodos);
+                break;
+            case SCMOPT_UPDATE_COPYRIGHT_YEAR:
+                RTPrintf("      Update the copyright year.  Default: %RTbool\n", g_Defaults.fUpdateCopyrightYear);
+                break;
+            case SCMOPT_EXTERNAL_COPYRIGHT:
+                RTPrintf("      Only external copyright holders.  Default: %RTbool\n", g_Defaults.fExternalCopyright);
+                break;
+            case SCMOPT_NO_UPDATE_LICENSE:
+                RTPrintf("      License selection.  Default: --license-ose-gpl\n");
+                break;
+
+            case SCMOPT_LGPL_DISCLAIMER:
+                RTPrintf("      Include LGPL version disclaimer.  Default: --no-lgpl-disclaimer\n");
+                break;
+
             case SCMOPT_SET_SVN_EOL:            RTPrintf("      Default: %RTbool\n", g_Defaults.fSetSvnEol); break;
             case SCMOPT_SET_SVN_EXECUTABLE:     RTPrintf("      Default: %RTbool\n", g_Defaults.fSetSvnExecutable); break;
             case SCMOPT_SET_SVN_KEYWORDS:       RTPrintf("      Default: %RTbool\n", g_Defaults.fSetSvnKeywords); break;
             case SCMOPT_TAB_SIZE:               RTPrintf("      Default: %u\n", g_Defaults.cchTab); break;
             case SCMOPT_WIDTH:                  RTPrintf("      Default: %u\n", g_Defaults.cchWidth); break;
+
+            case SCMOPT_ONLY_SVN_DIRS:          RTPrintf("      Default: %RTbool\n", g_Defaults.fOnlySvnDirs); break;
+            case SCMOPT_ONLY_SVN_FILES:         RTPrintf("      Default: %RTbool\n", g_Defaults.fOnlySvnFiles); break;
             case SCMOPT_FILTER_OUT_DIRS:        RTPrintf("      Default: %s\n", g_Defaults.pszFilterOutDirs); break;
             case SCMOPT_FILTER_FILES:           RTPrintf("      Default: %s\n", g_Defaults.pszFilterFiles); break;
             case SCMOPT_FILTER_OUT_FILES:       RTPrintf("      Default: %s\n", g_Defaults.pszFilterOutFiles); break;
+
+            case SCMOPT_TREAT_AS:
+                RTPrintf("      For treat the input file(s) differently, restting any --add-action.\n"
+                         "      If the value is empty defaults will be used again.  Possible values:\n");
+                for (size_t iCfg = 0; iCfg < RT_ELEMENTS(g_aConfigs); iCfg++)
+                    RTPrintf("          %s (%s)\n", g_aConfigs[iCfg].pszName, g_aConfigs[iCfg].pszFilePattern);
+                break;
+
+            case SCMOPT_ADD_ACTION:
+                RTPrintf("      Adds a rewriter action.  The first use after a --treat-as will copy and\n"
+                         "      the action list selected by the --treat-as.  The actuion list will be\n"
+                         "      flushed by --treat-as.\n");
+                break;
+
+            case SCMOPT_DEL_ACTION:
+                RTPrintf("      Deletes one or more rewriter action (pattern). Best used after\n"
+                         "      a --treat-as.\n");
+                break;
+
             default: AssertMsgFailed(("i=%d %d %s\n", i, paOpts[i].iShort, paOpts[i].pszLong));
         }
-        i += fAdvanceTwo;
+        i += cExtraAdvance;
     }
 
+    return RTEXITCODE_SUCCESS;
 }
 
 int main(int argc, char **argv)
@@ -1568,6 +2670,14 @@ int main(int argc, char **argv)
         return 1;
 
     /*
+     * Init the current year.
+     */
+    RTTIMESPEC  Now;
+    RTTIME      Time;
+    RTTimeExplode(&Time, RTTimeNow(&Now));
+    g_uYear = Time.i32Year;
+
+    /*
      * Init the settings.
      */
     PSCMSETTINGS pSettings;
@@ -1586,6 +2696,7 @@ int main(int argc, char **argv)
     {
         { "--dry-run",                          'd',                                    RTGETOPT_REQ_NOTHING },
         { "--real-run",                         'D',                                    RTGETOPT_REQ_NOTHING },
+        { "--check-run",                        SCMOPT_CHECK_RUN,                       RTGETOPT_REQ_NOTHING },
         { "--file-filter",                      'f',                                    RTGETOPT_REQ_STRING  },
         { "--quiet",                            'q',                                    RTGETOPT_REQ_NOTHING },
         { "--verbose",                          'v',                                    RTGETOPT_REQ_NOTHING },
@@ -1602,21 +2713,26 @@ int main(int argc, char **argv)
     };
     memcpy(&s_aOpts[RT_ELEMENTS(s_aOpts) - RT_ELEMENTS(g_aScmOpts)], &g_aScmOpts[0], sizeof(g_aScmOpts));
 
+    bool            fCheckRun = false;
     RTGETOPTUNION   ValueUnion;
     RTGETOPTSTATE   GetOptState;
     rc = RTGetOptInit(&GetOptState, argc, argv, &s_aOpts[0], RT_ELEMENTS(s_aOpts), 1, RTGETOPTINIT_FLAGS_OPTS_FIRST);
     AssertReleaseRCReturn(rc, 1);
-    size_t          cProcessed = 0;
 
-    while ((rc = RTGetOpt(&GetOptState, &ValueUnion)) != 0)
+    while (   (rc = RTGetOpt(&GetOptState, &ValueUnion)) != 0
+           && rc != VINF_GETOPT_NOT_OPTION)
     {
         switch (rc)
         {
             case 'd':
                 g_fDryRun = true;
+                fCheckRun = false;
                 break;
             case 'D':
-                g_fDryRun = false;
+                g_fDryRun = fCheckRun = false;
+                break;
+            case SCMOPT_CHECK_RUN:
+                g_fDryRun = fCheckRun = true;
                 break;
 
             case 'f':
@@ -1624,8 +2740,13 @@ int main(int argc, char **argv)
                 break;
 
             case 'h':
-                usage(s_aOpts, RT_ELEMENTS(s_aOpts));
-                return 1;
+                return scmHelp(s_aOpts, RT_ELEMENTS(s_aOpts));
+
+            case SCMOPT_HELP_CONFIG:
+                return scmHelpConfig();
+
+            case SCMOPT_HELP_ACTIONS:
+                return scmHelpActions();
 
             case 'q':
                 g_iVerbosity = 0;
@@ -1638,7 +2759,7 @@ int main(int argc, char **argv)
             case 'V':
             {
                 /* The following is assuming that svn does it's job here. */
-                static const char s_szRev[] = "$Revision: 118411 $";
+                static const char s_szRev[] = "$Revision: 119153 $";
                 const char *psz = RTStrStripL(strchr(s_szRev, ' '));
                 RTPrintf("r%.*s\n", strchr(psz, ' ') - psz, psz);
                 return 0;
@@ -1679,34 +2800,9 @@ int main(int argc, char **argv)
                 g_fDiffSpecialChars = false;
                 break;
 
-            case VINF_GETOPT_NOT_OPTION:
-            {
-                if (!g_fDryRun)
-                {
-                    if (!cProcessed)
-                    {
-                        RTPrintf("%s: Warning! This program will make changes to your source files and\n"
-                                 "%s:          there is a slight risk that bugs or a full disk may cause\n"
-                                 "%s:          LOSS OF DATA.   So, please make sure you have checked in\n"
-                                 "%s:          all your changes already.  If you didn't, then don't blame\n"
-                                 "%s:          anyone for not warning you!\n"
-                                 "%s:\n"
-                                 "%s:          Press any key to continue...\n",
-                                 g_szProgName, g_szProgName, g_szProgName, g_szProgName, g_szProgName,
-                                 g_szProgName, g_szProgName);
-                        RTStrmGetCh(g_pStdIn);
-                    }
-                    cProcessed++;
-                }
-                rc = scmProcessSomething(ValueUnion.psz, pSettings);
-                if (RT_FAILURE(rc))
-                    return rc;
-                break;
-            }
-
             default:
             {
-                int rc2 = scmSettingsBaseHandleOpt(&pSettings->Base, rc, &ValueUnion);
+                int rc2 = scmSettingsBaseHandleOpt(&pSettings->Base, rc, &ValueUnion, "/", 1);
                 if (RT_SUCCESS(rc2))
                     break;
                 if (rc2 != VERR_GETOPT_UNKNOWN_OPTION)
@@ -1716,7 +2812,62 @@ int main(int argc, char **argv)
         }
     }
 
+    /*
+     * Process non-options.
+     */
+    RTEXITCODE rcExit = RTEXITCODE_SUCCESS;
+    if (rc == VINF_GETOPT_NOT_OPTION)
+    {
+        ScmSvnInit();
+
+        bool fWarned = g_fDryRun;
+        while (rc == VINF_GETOPT_NOT_OPTION)
+        {
+            if (!fWarned)
+            {
+                RTPrintf("%s: Warning! This program will make changes to your source files and\n"
+                         "%s:          there is a slight risk that bugs or a full disk may cause\n"
+                         "%s:          LOSS OF DATA.   So, please make sure you have checked in\n"
+                         "%s:          all your changes already.  If you didn't, then don't blame\n"
+                         "%s:          anyone for not warning you!\n"
+                         "%s:\n"
+                         "%s:          Press any key to continue...\n",
+                         g_szProgName, g_szProgName, g_szProgName, g_szProgName, g_szProgName,
+                         g_szProgName, g_szProgName);
+                RTStrmGetCh(g_pStdIn);
+                fWarned = true;
+            }
+
+            rc = scmProcessSomething(ValueUnion.psz, pSettings);
+            if (RT_FAILURE(rc))
+            {
+                rcExit = RTEXITCODE_FAILURE;
+                break;
+            }
+
+            /* next */
+            rc = RTGetOpt(&GetOptState, &ValueUnion);
+            if (RT_FAILURE(rc))
+                rcExit = RTGetOptPrintError(rc, &ValueUnion);
+        }
+
+        scmPrintStats();
+        ScmSvnTerm();
+    }
+    else
+        RTMsgWarning("No files or directories specified. Doing nothing");
+
     scmSettingsDestroy(pSettings);
-    return 0;
+
+    /* If we're in checking mode, fail if any files needed modification. */
+    if (   rcExit == RTEXITCODE_SUCCESS
+        && fCheckRun
+        && g_cFilesModified > 0)
+    {
+        RTMsgError("Checking mode failed! %u file%s needs modifications", g_cFilesBinaries, g_cFilesBinaries > 1 ? "s" : "");
+        rcExit = RTEXITCODE_FAILURE;
+    }
+
+    return rcExit;
 }
 
diff --git a/src/bldprogs/scm.h b/src/bldprogs/scm.h
index ba7ccd8..2800494 100644
--- a/src/bldprogs/scm.h
+++ b/src/bldprogs/scm.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -50,6 +50,8 @@ typedef SCMSVNPROP *PSCMSVNPROP;
 typedef SCMSVNPROP const *PCSCMSVNPROP;
 
 
+void ScmSvnInit(void);
+void ScmSvnTerm(void);
 bool ScmSvnIsDirInWorkingCopy(const char *pszDir);
 bool ScmSvnIsInWorkingCopy(PSCMRWSTATE pState);
 int  ScmSvnQueryProperty(PSCMRWSTATE pState, const char *pszName, char **ppszValue);
@@ -61,6 +63,94 @@ int  ScmSvnApplyChanges(PSCMRWSTATE pState);
 /** @} */
 
 
+/** @name Code Parsing
+ * @{  */
+
+/**
+ * Comment style.
+ */
+typedef enum SCMCOMMENTSTYLE
+{
+    kScmCommentStyle_Invalid = 0,
+    kScmCommentStyle_C,
+    kScmCommentStyle_Hash,
+    kScmCommentStyle_Python,    /**< Same as hash, except for copyright/license. */
+    kScmCommentStyle_Semicolon,
+    kScmCommentStyle_Rem_Upper,
+    kScmCommentStyle_Rem_Lower,
+    kScmCommentStyle_Rem_Camel,
+    kScmCommentStyle_Sql,
+    kScmCommentStyle_Tick,
+    kScmCommentStyle_End
+} SCMCOMMENTSTYLE;
+
+/**
+ * Comment types.
+ */
+typedef enum SCMCOMMENTTYPE
+{
+    kScmCommentType_Invalid = 0,                /**< Customary invalid zero value. */
+    kScmCommentType_Line,                       /**< Line comment. */
+    kScmCommentType_Line_JavaDoc,               /**< Line comment, JavaDoc style. */
+    kScmCommentType_Line_JavaDoc_After,         /**< Line comment, JavaDoc after-member style. */
+    kScmCommentType_Line_Qt,                    /**< Line comment, JavaDoc style. */
+    kScmCommentType_Line_Qt_After,              /**< Line comment, JavaDoc after-member style. */
+    kScmCommentType_MultiLine,                  /**< Multi-line comment (e.g. ansi C).  */
+    kScmCommentType_MultiLine_JavaDoc,          /**< Multi-line comment, JavaDoc style.  */
+    kScmCommentType_MultiLine_JavaDoc_After,    /**< Multi-line comment, JavaDoc after-member style.  */
+    kScmCommentType_MultiLine_Qt,               /**< Multi-line comment, Qt style.  */
+    kScmCommentType_MultiLine_Qt_After,         /**< Multi-line comment, Qt after-member style.  */
+    kScmCommentType_DocString,                  /**< Triple quoted python doc string. */
+    kScmCommentType_End                         /**< Customary exclusive end value. */
+} SCMCOMMENTTYPE;
+
+
+/**
+ * Comment information.
+ */
+typedef struct SCMCOMMENTINFO
+{
+    /** Comment type. */
+    SCMCOMMENTTYPE  enmType;
+    /** Start line number  (0-based). */
+    uint32_t        iLineStart;
+    /** Start line offset (0-based). */
+    uint32_t        offStart;
+    /** End line number  (0-based). */
+    uint32_t        iLineEnd;
+    /** End line offset  (0-based). */
+    uint32_t        offEnd;
+    /** Number of blank lines before the body (@a pszBody). */
+    uint32_t        cBlankLinesBefore;
+    /** Number of blank lines after the body (@a pszBody + @a cchBody). */
+    uint32_t        cBlankLinesAfter;
+    /** @todo add min/max indent. Raw length. Etc. */
+} SCMCOMMENTINFO;
+/** Pointer to comment info. */
+typedef SCMCOMMENTINFO *PSCMCOMMENTINFO;
+/** Pointer to const comment info. */
+typedef SCMCOMMENTINFO const *PCSCMCOMMENTINFO;
+
+
+/**
+ * Comment enumeration callback function.
+ *
+ * @returns IPRT style status code.  Failures causes immediate return.  While an
+ *          informational status code is saved (first one) and returned later.
+ * @param   pInfo           Additional comment info.
+ * @param   pszBody         The comment body.  This is somewhat stripped.
+ * @param   cchBody         The comment body length.
+ * @param   pvUser          User callback argument.
+ */
+typedef DECLCALLBACK(int) FNSCMCOMMENTENUMERATOR(PCSCMCOMMENTINFO pInfo, const char *pszBody, size_t cchBody, void *pvUser);
+/** Poiter to a omment enumeration callback function. */
+typedef FNSCMCOMMENTENUMERATOR *PFNSCMCOMMENTENUMERATOR;
+
+int ScmEnumerateComments(PSCMSTREAM pIn, SCMCOMMENTSTYLE enmCommentStyle, PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser);
+
+/** @} */
+
+
 /** @name Rewriters
  * @{ */
 
@@ -74,10 +164,15 @@ typedef struct SCMRWSTATE
     /** Set after the printing the first verbose message about a file under
      *  rewrite. */
     bool                fFirst;
+    /** Cached ScmSvnIsInWorkingCopy response. 0 indicates not known, 1 means it
+     * is in WC, -1 means it doesn't. */
+    int8_t              fIsInSvnWorkingCopy;
     /** The number of SVN property changes. */
     size_t              cSvnPropChanges;
     /** Pointer to an array of SVN property changes. */
     struct SCMSVNPROP  *paSvnPropChanges;
+    /** For error propagation. */
+    int32_t             rc;
 } SCMRWSTATE;
 
 /**
@@ -102,13 +197,36 @@ FNSCMREWRITER rewrite_ForceLF;
 FNSCMREWRITER rewrite_ForceCRLF;
 FNSCMREWRITER rewrite_AdjustTrailingLines;
 FNSCMREWRITER rewrite_SvnNoExecutable;
+FNSCMREWRITER rewrite_SvnNoKeywords;
+FNSCMREWRITER rewrite_SvnNoEolStyle;
+FNSCMREWRITER rewrite_SvnBinary;
 FNSCMREWRITER rewrite_SvnKeywords;
+FNSCMREWRITER rewrite_Copyright_CstyleComment;
+FNSCMREWRITER rewrite_Copyright_HashComment;
+FNSCMREWRITER rewrite_Copyright_PythonComment;
+FNSCMREWRITER rewrite_Copyright_RemComment;
+FNSCMREWRITER rewrite_Copyright_SemicolonComment;
+FNSCMREWRITER rewrite_Copyright_SqlComment;
+FNSCMREWRITER rewrite_Copyright_TickComment;
 FNSCMREWRITER rewrite_Makefile_kup;
 FNSCMREWRITER rewrite_Makefile_kmk;
 FNSCMREWRITER rewrite_FixFlowerBoxMarkers;
 FNSCMREWRITER rewrite_Fix_C_and_CPP_Todos;
 FNSCMREWRITER rewrite_C_and_CPP;
 
+/**
+ * Rewriter configuration.
+ */
+typedef struct SCMREWRITERCFG
+{
+    /** The rewriter function. */
+    PFNSCMREWRITER  pfnRewriter;
+    /** The name of the rewriter. */
+    const char     *pszName;
+} SCMREWRITERCFG;
+/** Pointer to a const rewriter config. */
+typedef SCMREWRITERCFG const *PCSCMREWRITERCFG;
+
 /** @}  */
 
 
@@ -121,16 +239,33 @@ FNSCMREWRITER rewrite_C_and_CPP;
 typedef struct SCMCFGENTRY
 {
     /** Number of rewriters. */
-    size_t          cRewriters;
+    size_t                  cRewriters;
     /** Pointer to an array of rewriters. */
-    PFNSCMREWRITER const  *papfnRewriter;
+    PCSCMREWRITERCFG const *paRewriters;
+    /** Set if the entry handles binaries.  */
+    bool                    fBinary;
     /** File pattern (simple).  */
-    const char     *pszFilePattern;
+    const char             *pszFilePattern;
+    /** Name (for treat as).  */
+    const char             *pszName;
 } SCMCFGENTRY;
 typedef SCMCFGENTRY *PSCMCFGENTRY;
 typedef SCMCFGENTRY const *PCSCMCFGENTRY;
 
 
+/** License update options. */
+typedef enum SCMLICENSE
+{
+    kScmLicense_LeaveAlone = 0,     /**< Leave it alone. */
+    kScmLicense_OseGpl,             /**< VBox OSE GPL if public. */
+    kScmLicense_OseDualGplCddl,     /**< VBox OSE dual GPL & CDDL if public. */
+    kScmLicense_OseCddl,            /**< VBox OSE CDDL if public. */
+    kScmLicense_Lgpl,               /**< LGPL if public. */
+    kScmLicense_Mit,                /**< MIT if public. */
+    kScmLicense_BasedOnMit,         /**< Copyright us but based on someone else's MIT. */
+    kScmLicense_End
+} SCMLICENSE;
+
 /**
  * Source Code Massager Settings.
  */
@@ -151,6 +286,15 @@ typedef struct SCMSETTINGSBASE
     /** Whether to fix C/C++ todos. */
     bool            fFixTodos;
 
+    /** Update the copyright year. */
+    bool            fUpdateCopyrightYear;
+    /** Only external copyright holders. */
+    bool            fExternalCopyright;
+    /** Whether there should be a LGPL disclaimer. */
+    bool            fLgplDisclaimer;
+    /** How to update the license. */
+    SCMLICENSE      enmUpdateLicense;
+
     /** Only process files that are part of a SVN working copy. */
     bool            fOnlySvnFiles;
     /** Only recurse into directories containing an .svn dir.  */
@@ -165,6 +309,10 @@ typedef struct SCMSETTINGSBASE
     uint8_t         cchTab;
     /** Optimal source code width. */
     uint8_t         cchWidth;
+    /** Free the treat as structure. */
+    bool            fFreeTreatAs;
+    /** Prematched config entry. */
+    PCSCMCFGENTRY   pTreatAs;
     /** Only consider files matching these patterns.  This is only applied to the
      *  base names. */
     char           *pszFilterFiles;
@@ -186,6 +334,8 @@ typedef struct SCMPATRNOPTPAIR
 {
     char *pszPattern;
     char *pszOptions;
+    char *pszRelativeTo;
+    bool  fMultiPattern;
 } SCMPATRNOPTPAIR;
 /** Pointer to a pattern + option pair. */
 typedef SCMPATRNOPTPAIR *PSCMPATRNOPTPAIR;
@@ -229,11 +379,14 @@ typedef SCMSETTINGS const *PCSCMSETTINGS;
 /** @} */
 
 
-void ScmVerbose(PSCMRWSTATE pState, int iLevel, const char *pszFormat, ...);
+void ScmVerboseBanner(PSCMRWSTATE pState, int iLevel);
+void ScmVerbose(PSCMRWSTATE pState, int iLevel, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4);
+bool ScmError(PSCMRWSTATE pState, int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4);
 
 extern const char g_szTabSpaces[16+1];
 extern const char g_szAsterisks[255+1];
 extern const char g_szSpaces[255+1];
+extern uint32_t g_uYear;
 
 RT_C_DECLS_END
 
diff --git a/src/bldprogs/scmdiff.cpp b/src/bldprogs/scmdiff.cpp
index 64f6c3b..d85b5ca 100644
--- a/src/bldprogs/scmdiff.cpp
+++ b/src/bldprogs/scmdiff.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/scmdiff.h b/src/bldprogs/scmdiff.h
index 97948ee..955417a 100644
--- a/src/bldprogs/scmdiff.h
+++ b/src/bldprogs/scmdiff.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/scmparser.cpp b/src/bldprogs/scmparser.cpp
new file mode 100644
index 0000000..c5103b3
--- /dev/null
+++ b/src/bldprogs/scmparser.cpp
@@ -0,0 +1,1008 @@
+/* $Id: scmparser.cpp $ */
+/** @file
+ * IPRT Testcase / Tool - Source Code Massager, Code Parsers.
+ */
+
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
+#include <iprt/assert.h>
+#include <iprt/ctype.h>
+#include <iprt/dir.h>
+#include <iprt/env.h>
+#include <iprt/file.h>
+#include <iprt/err.h>
+#include <iprt/getopt.h>
+#include <iprt/initterm.h>
+#include <iprt/mem.h>
+#include <iprt/message.h>
+#include <iprt/param.h>
+#include <iprt/path.h>
+#include <iprt/process.h>
+#include <iprt/stream.h>
+#include <iprt/string.h>
+
+#include "scm.h"
+
+
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+typedef size_t (*PFNISCOMMENT)(const char *pchLine, size_t cchLine, bool fSecond);
+
+
+/**
+ * Callback for checking if C++ line comment.
+ */
+static size_t isCppLineComment(const char *pchLine, size_t cchLine, bool fSecond)
+{
+    if (   cchLine >= 2
+        && pchLine[0] == '/'
+        && pchLine[1] == '/')
+    {
+        if (!fSecond)
+            return 2;
+        if (cchLine >= 3 && pchLine[2] == '/')
+            return 3;
+    }
+    return 0;
+}
+
+
+/**
+ * Callback for checking if hash comment.
+ */
+static size_t isHashComment(const char *pchLine, size_t cchLine, bool fSecond)
+{
+    if (cchLine >= 1 && *pchLine == '#')
+    {
+        if (!fSecond)
+            return 1;
+        if (cchLine >= 2 && pchLine[1] == '#')
+            return 2;
+    }
+    return 0;
+}
+
+
+/**
+ * Callback for checking if semicolon comment.
+ */
+static size_t isSemicolonComment(const char *pchLine, size_t cchLine, bool fSecond)
+{
+    if (cchLine >= 1 && *pchLine == ';')
+    {
+        if (!fSecond)
+            return 1;
+        if (cchLine >= 2 && pchLine[1] == ';')
+            return 2;
+    }
+    return 0;
+}
+
+
+/** Macro for checking for a batch file comment prefix. */
+#define IS_REM(a_pch, a_off, a_cch) \
+        (   (a_off) + 3 <= (a_cch) \
+         && ((a_pch)[(a_off)    ] == 'R' || (a_pch)[(a_off)    ] == 'r') \
+         && ((a_pch)[(a_off) + 1] == 'E' || (a_pch)[(a_off) + 1] == 'e') \
+         && ((a_pch)[(a_off) + 2] == 'M' || (a_pch)[(a_off) + 2] == 'm') \
+         && ((a_off) + 3 == (a_cch) || RT_C_IS_SPACE((a_pch)[(a_off) + 3])) )
+
+
+/**
+ * Callback for checking if batch comment.
+ */
+static size_t isBatchComment(const char *pchLine, size_t cchLine, bool fSecond)
+{
+    if (!fSecond)
+    {
+        if (IS_REM(pchLine, 0, cchLine))
+            return 3;
+    }
+    else
+    {
+        /* Check for the 2nd in "rem rem" lines. */
+        if (   cchLine >= 4
+            && RT_C_IS_SPACE(*pchLine)
+            && IS_REM(pchLine, 1, cchLine))
+            return 4;
+    }
+    return 0;
+}
+
+/**
+ * Callback for checking if SQL comment.
+ */
+static size_t isSqlComment(const char *pchLine, size_t cchLine, bool fSecond)
+{
+    if (   cchLine >= 2
+        && pchLine[0] == '-'
+        && pchLine[1] == '-')
+    {
+        if (!fSecond)
+            return 2;
+        if (   cchLine >= 3
+            && pchLine[2] == '-')
+            return 3;
+    }
+    return 0;
+}
+
+/**
+ * Callback for checking if tick comment.
+ */
+static size_t isTickComment(const char *pchLine, size_t cchLine, bool fSecond)
+{
+    if (cchLine >= 1 && *pchLine == '\'')
+    {
+        if (!fSecond)
+            return 1;
+        if (cchLine >= 2 && pchLine[1] == '\'')
+            return 2;
+    }
+    return 0;
+}
+
+
+/**
+ * Common worker for enumeratePythonComments and enumerateSimpleLineComments.
+ *
+ * @returns IPRT status code.
+ * @param   pIn             The input stream.
+ * @param   pfnIsComment    Comment tester function.
+ * @param   pfnCallback     The callback.
+ * @param   pvUser          The user argument for the callback.
+ * @param   ppchLine        Pointer to the line variable.
+ * @param   pcchLine        Pointer to the line length variable.
+ * @param   penmEol         Pointer to the line ending type variable.
+ * @param   piLine          Pointer to the line number variable.
+ * @param   poff            Pointer to the line offset variable.  On input this
+ *                          is positioned at the start of the comment.
+ */
+static int handleLineComment(PSCMSTREAM pIn, PFNISCOMMENT pfnIsComment,
+                             PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser,
+                             const char **ppchLine, size_t *pcchLine, PSCMEOL penmEol,
+                             uint32_t *piLine, size_t *poff)
+{
+    /* Unpack input/output variables. */
+    uint32_t        iLine   = *piLine;
+    const char     *pchLine = *ppchLine;
+    size_t          cchLine = *pcchLine;
+    size_t          off     = *poff;
+    SCMEOL          enmEol  = *penmEol;
+
+    /*
+     * Take down the basic info about the comment.
+     */
+    SCMCOMMENTINFO  Info;
+    Info.iLineStart         = iLine;
+    Info.iLineEnd           = iLine;
+    Info.offStart           = (uint32_t)off;
+    Info.offEnd             = (uint32_t)cchLine;
+
+    size_t cchSkip = pfnIsComment(&pchLine[off], cchLine - off, false);
+    Assert(cchSkip > 0);
+    off += cchSkip;
+
+    /* Determin comment type. */
+    Info.enmType = kScmCommentType_Line;
+    char ch;
+    cchSkip = 1;
+    if (   off < cchLine
+        && (   (ch = pchLine[off]) == '!'
+            || (cchSkip = pfnIsComment(&pchLine[off], cchLine - off, true)) > 0) )
+    {
+        unsigned ch2;
+        if (   off + cchSkip == cchLine
+            || RT_C_IS_SPACE(ch2 = pchLine[off + cchSkip]) )
+        {
+            Info.enmType = ch != '!' ? kScmCommentType_Line_JavaDoc : kScmCommentType_Line_Qt;
+            off += cchSkip;
+        }
+        else if (   ch2 == '<'
+                 && (   off + cchSkip + 1 == cchLine
+                     || RT_C_IS_SPACE(pchLine[off + cchSkip + 1]) ))
+        {
+            Info.enmType = ch == '!' ? kScmCommentType_Line_JavaDoc_After : kScmCommentType_Line_Qt_After;
+            off += cchSkip + 1;
+        }
+    }
+
+    /*
+     * Copy body of the first line.  Like for C, we ignore a single space in the first comment line.
+     */
+    if (off < cchLine && RT_C_IS_SPACE(pchLine[off]))
+        off++;
+    size_t cchBody = cchLine;
+    while (cchBody > off && RT_C_IS_SPACE(pchLine[cchBody - 1]))
+           cchBody--;
+    cchBody -= off;
+    size_t   cbBodyAlloc = RT_MAX(_1K, RT_ALIGN_Z(cchBody + 64, 128));
+    char    *pszBody     = (char *)RTMemAlloc(cbBodyAlloc);
+    if (!pszBody)
+        return VERR_NO_MEMORY;
+    memcpy(pszBody, &pchLine[off], cchBody);
+    pszBody[cchBody] = '\0';
+
+    Info.cBlankLinesBefore = cchBody == 0;
+
+    /*
+     * Look for more comment lines and append them to the body.
+     */
+    while ((pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol)) != NULL)
+    {
+        iLine++;
+
+        /* Skip leading spaces. */
+        off = 0;
+        while (off < cchLine && RT_C_IS_SPACE(pchLine[off]))
+            off++;
+
+        /* Check if it's a comment. */
+        if (   off >= cchLine
+            || (cchSkip = pfnIsComment(&pchLine[off], cchLine - off, false)) == 0)
+            break;
+        off += cchSkip;
+
+        /* Split on doxygen comment start (if not already in one). */
+        if (   Info.enmType == kScmCommentType_Line
+            && off + 1 < cchLine
+            && (   pfnIsComment(&pchLine[off], cchLine - off, true) > 0
+                || (   pchLine[off + 1] == '!'
+                    && (   off + 2 == cchLine
+                        || pchLine[off + 2] != '!') ) ) )
+        {
+            off -= cchSkip;
+            break;
+        }
+
+        /* Append the body w/o trailing spaces and some leading ones. */
+        if (off < cchLine && RT_C_IS_SPACE(pchLine[off]))
+            off++;
+        while (off < cchLine && off < Info.offStart + 3 && RT_C_IS_SPACE(pchLine[off]))
+            off++;
+        size_t cchAppend = cchLine;
+        while (cchAppend > off && RT_C_IS_SPACE(pchLine[cchAppend - 1]))
+            cchAppend--;
+        cchAppend -= off;
+
+        size_t cchNewBody = cchBody + 1 + cchAppend;
+        if (cchNewBody >= cbBodyAlloc)
+        {
+            cbBodyAlloc = RT_MAX(cbBodyAlloc ? cbBodyAlloc * 2 : _1K, RT_ALIGN_Z(cchNewBody + 64, 128));
+            void *pvNew = RTMemRealloc(pszBody, cbBodyAlloc);
+            if (pvNew)
+                pszBody = (char *)pvNew;
+            else
+            {
+                RTMemFree(pszBody);
+                return VERR_NO_MEMORY;
+            }
+        }
+
+        if (   cchBody > 0
+            || cchAppend > 0)
+        {
+            if (cchBody > 0)
+                pszBody[cchBody++] = '\n';
+            memcpy(&pszBody[cchBody], &pchLine[off], cchAppend);
+            cchBody += cchAppend;
+            pszBody[cchBody] = '\0';
+        }
+        else
+            Info.cBlankLinesBefore++;
+
+        /* Advance. */
+        Info.offEnd   = (uint32_t)cchLine;
+        Info.iLineEnd = iLine;
+    }
+
+    /*
+     * Strip trailing empty lines in the body.
+     */
+    Info.cBlankLinesAfter = 0;
+    while (cchBody >= 1 && pszBody[cchBody - 1] == '\n')
+    {
+        Info.cBlankLinesAfter++;
+        pszBody[--cchBody] = '\0';
+    }
+
+    /*
+     * Do the callback and return.
+     */
+    int rc = pfnCallback(&Info, pszBody, cchBody, pvUser);
+
+    RTMemFree(pszBody);
+
+    *piLine   = iLine;
+    *ppchLine = pchLine;
+    *pcchLine = cchLine;
+    *poff     = off;
+    *penmEol  = enmEol;
+    return rc;
+}
+
+
+
+/**
+ * Common string litteral handler.
+ *
+ * @returns new pchLine value.
+ * @param   pIn         The input string.
+ * @param   chType      The quotation type.
+ * @param   pchLine     The current line.
+ * @param   ppchLine    Pointer to the line variable.
+ * @param   pcchLine    Pointer to the line length variable.
+ * @param   penmEol     Pointer to the line ending type variable.
+ * @param   piLine      Pointer to the line number variable.
+ * @param   poff        Pointer to the line offset variable.
+ */
+static const char *handleStringLitteral(PSCMSTREAM pIn, char chType, const char *pchLine, size_t *pcchLine, PSCMEOL penmEol,
+                                        uint32_t *piLine, size_t *poff)
+{
+    size_t off = *poff;
+    for (;;)
+    {
+        bool fEnd = false;
+        bool fEscaped = false;
+        size_t const cchLine = *pcchLine;
+        while (off < cchLine)
+        {
+            char ch = pchLine[off++];
+            if (!fEscaped)
+            {
+                if (ch != chType)
+                {
+                    if (ch != '\\')
+                    { /* likely */ }
+                    else
+                        fEscaped = true;
+                }
+                else
+                {
+                    fEnd = true;
+                    break;
+                }
+            }
+            else
+                fEscaped = false;
+        }
+        if (fEnd)
+            break;
+
+        /* next line */
+        pchLine = ScmStreamGetLine(pIn, pcchLine, penmEol);
+        if (!pchLine)
+            break;
+        *piLine += 1;
+        off = 0;
+    }
+
+    *poff = off;
+    return pchLine;
+}
+
+
+/**
+ * Deals with comments in C and C++ code.
+ *
+ * @returns VBox status code / callback return code.
+ * @param   pIn                 The stream to parse.
+ * @param   pfnCallback         The callback.
+ * @param   pvUser              The user parameter for the callback.
+ */
+static int enumerateCStyleComments(PSCMSTREAM pIn, PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser)
+{
+    AssertCompile('\'' < '/');
+    AssertCompile('"'  < '/');
+
+    int             rcRet = VINF_SUCCESS;
+    uint32_t        iLine = 0;
+    SCMEOL          enmEol;
+    size_t          cchLine;
+    const char     *pchLine;
+    while ((pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol)) != NULL)
+    {
+        size_t off = 0;
+        while (off < cchLine)
+        {
+            unsigned ch = pchLine[off++];
+            if (ch > (unsigned)'/')
+            { /* not interesting */ }
+            else if (ch == '/')
+            {
+                if (off < cchLine)
+                {
+                    ch = pchLine[off++];
+                    if (ch == '*')
+                    {
+                        /*
+                         * Multiline comment.  Find the end.
+                         *
+                         * Note! This is very similar to the python doc string handling further down.
+                         */
+                        SCMCOMMENTINFO  Info;
+                        Info.iLineStart         = iLine;
+                        Info.offStart           = (uint32_t)off - 2;
+                        Info.iLineEnd           = UINT32_MAX;
+                        Info.offEnd             = UINT32_MAX;
+                        Info.cBlankLinesBefore  = 0;
+
+                        /* Determin comment type (same as for line-comments). */
+                        Info.enmType = kScmCommentType_MultiLine;
+                        if (   off < cchLine
+                            && (   (ch = pchLine[off]) == '*'
+                                || ch == '!') )
+                        {
+                            unsigned ch2;
+                            if (   off + 1 == cchLine
+                                || RT_C_IS_SPACE(ch2 = pchLine[off + 1]) )
+                            {
+                                Info.enmType = ch == '*' ? kScmCommentType_MultiLine_JavaDoc : kScmCommentType_MultiLine_Qt;
+                                off += 1;
+                            }
+                            else if (   ch2 == '<'
+                                     && (   off + 2 == cchLine
+                                         || RT_C_IS_SPACE(pchLine[off + 2]) ))
+                            {
+                                Info.enmType = ch == '*' ? kScmCommentType_MultiLine_JavaDoc_After
+                                             : kScmCommentType_MultiLine_Qt_After;
+                                off += 2;
+                            }
+                        }
+
+                        /*
+                         * Copy the body and find the end of the multiline comment.
+                         */
+                        size_t          cbBodyAlloc = 0;
+                        size_t          cchBody     = 0;
+                        char           *pszBody     = NULL;
+                        for (;;)
+                        {
+                            /* Parse the line up to the end-of-comment or end-of-line. */
+                            size_t offLineStart     = off;
+                            size_t offLastNonBlank  = off;
+                            size_t offFirstNonBlank = ~(size_t)0;
+                            while (off < cchLine)
+                            {
+                                ch = pchLine[off++];
+                                if (ch != '*' || off >= cchLine || pchLine[off] != '/')
+                                {
+                                    if (RT_C_IS_BLANK(ch))
+                                    {/* kind of likely */}
+                                    else
+                                    {
+                                        offLastNonBlank = off - 1;
+                                        if (offFirstNonBlank != ~(size_t)0)
+                                        {/* likely */}
+                                        else if (   ch != '*'          /* ignore continuation-asterisks */
+                                                 || off > Info.offStart + 1 + 1
+                                                 || off > cchLine
+                                                 || (   off < cchLine
+                                                     && !RT_C_IS_SPACE(pchLine[off]))
+                                                 || pszBody == NULL)
+                                            offFirstNonBlank = off - 1;
+                                    }
+                                }
+                                else
+                                {
+                                    Info.offEnd   = (uint32_t)++off;
+                                    Info.iLineEnd = iLine;
+                                    break;
+                                }
+                            }
+
+                            /* Append line content to the comment body string. */
+                            size_t cchAppend;
+                            if (offFirstNonBlank == ~(size_t)0)
+                                cchAppend = 0; /* empty line */
+                            else
+                            {
+                                if (pszBody)
+                                    offLineStart = RT_MIN(Info.offStart + 3, offFirstNonBlank);
+                                else if (offFirstNonBlank > Info.offStart + 2) /* Skip one leading blank at the start of the comment. */
+                                    offLineStart++;
+                                cchAppend = offLastNonBlank + 1 - offLineStart;
+                                Assert(cchAppend <= cchLine);
+                            }
+
+                            size_t cchNewBody = cchBody + (cchBody > 0) + cchAppend;
+                            if (cchNewBody >= cbBodyAlloc)
+                            {
+                                cbBodyAlloc = RT_MAX(cbBodyAlloc ? cbBodyAlloc * 2 : _1K, RT_ALIGN_Z(cchNewBody + 64, 128));
+                                void *pvNew = RTMemRealloc(pszBody, cbBodyAlloc);
+                                if (pvNew)
+                                    pszBody = (char *)pvNew;
+                                else
+                                {
+                                    RTMemFree(pszBody);
+                                    return VERR_NO_MEMORY;
+                                }
+                            }
+
+                            if (cchBody > 0)                        /* no leading blank lines */
+                                pszBody[cchBody++] = '\n';
+                            else if (cchAppend == 0)
+                                Info.cBlankLinesBefore++;
+                            memcpy(&pszBody[cchBody], &pchLine[offLineStart], cchAppend);
+                            cchBody += cchAppend;
+                            pszBody[cchBody] = '\0';
+
+                            /* Advance to the next line, if we haven't yet seen the end of this comment. */
+                            if (Info.iLineEnd != UINT32_MAX)
+                                break;
+                            pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol);
+                            if (!pchLine)
+                            {
+                                Info.offEnd   = (uint32_t)cchLine;
+                                Info.iLineEnd = iLine;
+                                break;
+                            }
+                            iLine++;
+                            off = 0;
+                        }
+
+                        /* Strip trailing empty lines in the body. */
+                        Info.cBlankLinesAfter = 0;
+                        while (cchBody >= 1 && pszBody[cchBody - 1] == '\n')
+                        {
+                            Info.cBlankLinesAfter++;
+                            pszBody[--cchBody] = '\0';
+                        }
+
+                        /* Do the callback. */
+                        int rc = pfnCallback(&Info, pszBody, cchBody, pvUser);
+                        RTMemFree(pszBody);
+                        if (RT_FAILURE(rc))
+                            return rc;
+                        if (rc > VINF_SUCCESS && rcRet == VINF_SUCCESS)
+                            rcRet = rc;
+                    }
+                    else if (ch == '/')
+                    {
+                        /*
+                         * Line comment.  Join the other line comment guys.
+                         */
+                        off -= 2;
+                        int rc = handleLineComment(pIn, isCppLineComment, pfnCallback, pvUser,
+                                                   &pchLine, &cchLine, &enmEol, &iLine, &off);
+                        if (RT_FAILURE(rc))
+                            return rc;
+                        if (rcRet == VINF_SUCCESS)
+                            rcRet = rc;
+                    }
+
+                    if (!pchLine)
+                        break;
+                }
+            }
+            else if (ch == '"')
+            {
+                /*
+                 * String litterals may include sequences that looks like comments.  So,
+                 * they needs special handling to avoid confusion.
+                 */
+                pchLine = handleStringLitteral(pIn, '"', pchLine, &cchLine, &enmEol, &iLine, &off);
+            }
+            /* else: We don't have to deal with character litterals as these shouldn't
+                     include comment-like sequences. */
+        } /* for each character in the line */
+
+        iLine++;
+    } /* for each line in the stream */
+
+    int rcStream = ScmStreamGetStatus(pIn);
+    if (RT_SUCCESS(rcStream))
+        return rcRet;
+    return rcStream;
+}
+
+
+/**
+ * Deals with comments in Python code.
+ *
+ * @returns VBox status code / callback return code.
+ * @param   pIn                 The stream to parse.
+ * @param   pfnCallback         The callback.
+ * @param   pvUser              The user parameter for the callback.
+ */
+static int enumeratePythonComments(PSCMSTREAM pIn, PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser)
+{
+    AssertCompile('#'  < '\'');
+    AssertCompile('"'  < '\'');
+
+    int             rcRet = VINF_SUCCESS;
+    uint32_t        iLine = 0;
+    SCMEOL          enmEol;
+    size_t          cchLine;
+    const char     *pchLine;
+    SCMCOMMENTINFO  Info;
+    while ((pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol)) != NULL)
+    {
+        size_t off = 0;
+        while (off < cchLine)
+        {
+            char ch = pchLine[off++];
+            if ((unsigned char)ch > (unsigned char)'\'')
+            { /* not interesting */ }
+            else if (ch == '#')
+            {
+                /*
+                 * Line comment.  Join paths with the others.
+                 */
+                off -= 1;
+                int rc = handleLineComment(pIn, isHashComment, pfnCallback, pvUser,
+                                           &pchLine, &cchLine, &enmEol, &iLine, &off);
+                if (RT_FAILURE(rc))
+                    return rc;
+                if (rcRet == VINF_SUCCESS)
+                    rcRet = rc;
+
+                if (!pchLine)
+                    break;
+            }
+            else if (ch == '"' || ch == '\'')
+            {
+                /*
+                 * String litterals may be doc strings and they may legally include hashes.
+                 */
+                const char chType = ch;
+                if (   off + 1 >= cchLine
+                    || pchLine[off] != chType
+                    || pchLine[off + 1] != chType)
+                    pchLine = handleStringLitteral(pIn, chType, pchLine, &cchLine, &enmEol, &iLine, &off);
+                else
+                {
+                    /*
+                     * Doc string (/ long string).
+                     *
+                     * Note! This is very similar to the multiline C comment handling above.
+                     */
+                    Info.iLineStart         = iLine;
+                    Info.offStart           = (uint32_t)off - 1;
+                    Info.iLineEnd           = UINT32_MAX;
+                    Info.offEnd             = UINT32_MAX;
+                    Info.cBlankLinesBefore  = 0;
+                    Info.enmType            = kScmCommentType_DocString;
+
+                    off += 2;
+
+                    /* Copy the body and find the end of the doc string comment. */
+                    size_t          cbBodyAlloc = 0;
+                    size_t          cchBody     = 0;
+                    char           *pszBody     = NULL;
+                    for (;;)
+                    {
+                        /* Parse the line up to the end-of-comment or end-of-line. */
+                        size_t offLineStart     = off;
+                        size_t offLastNonBlank  = off;
+                        size_t offFirstNonBlank = ~(size_t)0;
+                        bool fEscaped = false;
+                        while (off < cchLine)
+                        {
+                            ch = pchLine[off++];
+                            if (!fEscaped)
+                            {
+                                if (   off + 1 >= cchLine
+                                    || ch != chType
+                                    || pchLine[off] != chType
+                                    || pchLine[off + 1] != chType)
+                                {
+                                    if (RT_C_IS_BLANK(ch))
+                                    {/* kind of likely */}
+                                    else
+                                    {
+                                        offLastNonBlank = off - 1;
+                                        if (offFirstNonBlank != ~(size_t)0)
+                                        {/* likely */}
+                                        else if (   ch != '*'          /* ignore continuation-asterisks */
+                                                 || off > Info.offStart + 1 + 1
+                                                 || off > cchLine
+                                                 || (   off < cchLine
+                                                     && !RT_C_IS_SPACE(pchLine[off]))
+                                                 || pszBody == NULL)
+                                            offFirstNonBlank = off - 1;
+
+                                        if (ch != '\\')
+                                        {/* likely */ }
+                                        else
+                                            fEscaped = true;
+                                    }
+                                }
+                                else
+                                {
+                                    off += 2;
+                                    Info.offEnd   = (uint32_t)off;
+                                    Info.iLineEnd = iLine;
+                                    break;
+                                }
+                            }
+                            else
+                                fEscaped = false;
+                        }
+
+                        /* Append line content to the comment body string. */
+                        size_t cchAppend;
+                        if (offFirstNonBlank == ~(size_t)0)
+                            cchAppend = 0; /* empty line */
+                        else
+                        {
+                            if (pszBody)
+                                offLineStart = RT_MIN(Info.offStart + 3, offFirstNonBlank);
+                            else if (offFirstNonBlank > Info.offStart + 2) /* Skip one leading blank at the start of the comment. */
+                                offLineStart++;
+                            cchAppend = offLastNonBlank + 1 - offLineStart;
+                            Assert(cchAppend <= cchLine);
+                        }
+
+                        size_t cchNewBody = cchBody + (cchBody > 0) + cchAppend;
+                        if (cchNewBody >= cbBodyAlloc)
+                        {
+                            cbBodyAlloc = RT_MAX(cbBodyAlloc ? cbBodyAlloc * 2 : _1K, RT_ALIGN_Z(cchNewBody + 64, 128));
+                            void *pvNew = RTMemRealloc(pszBody, cbBodyAlloc);
+                            if (pvNew)
+                                pszBody = (char *)pvNew;
+                            else
+                            {
+                                RTMemFree(pszBody);
+                                return VERR_NO_MEMORY;
+                            }
+                        }
+
+                        if (cchBody > 0)                        /* no leading blank lines */
+                            pszBody[cchBody++] = '\n';
+                        else if (cchAppend == 0)
+                            Info.cBlankLinesBefore++;
+                        memcpy(&pszBody[cchBody], &pchLine[offLineStart], cchAppend);
+                        cchBody += cchAppend;
+                        pszBody[cchBody] = '\0';
+
+                        /* Advance to the next line, if we haven't yet seen the end of this comment. */
+                        if (Info.iLineEnd != UINT32_MAX)
+                            break;
+                        pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol);
+                        if (!pchLine)
+                        {
+                            Info.offEnd   = (uint32_t)cchLine;
+                            Info.iLineEnd = iLine;
+                            break;
+                        }
+                        iLine++;
+                        off = 0;
+                    }
+
+                    /* Strip trailing empty lines in the body. */
+                    Info.cBlankLinesAfter = 0;
+                    while (cchBody >= 1 && pszBody[cchBody - 1] == '\n')
+                    {
+                        Info.cBlankLinesAfter++;
+                        pszBody[--cchBody] = '\0';
+                    }
+
+                    /* Do the callback. */
+                    int rc = pfnCallback(&Info, pszBody, cchBody, pvUser);
+                    RTMemFree(pszBody);
+                    if (RT_FAILURE(rc))
+                        return rc;
+                    if (rc > VINF_SUCCESS && rcRet == VINF_SUCCESS)
+                        rcRet = rc;
+                }
+
+                if (!pchLine)
+                    break;
+            }
+            /* else: We don't have to deal with character litterals as these shouldn't
+                     include comment-like sequences. */
+        } /* for each character in the line */
+
+        iLine++;
+    } /* for each line in the stream */
+
+    int rcStream = ScmStreamGetStatus(pIn);
+    if (RT_SUCCESS(rcStream))
+        return rcRet;
+    return rcStream;
+}
+
+
+/**
+ * Deals with comments in DOS batch files.
+ *
+ * @returns VBox status code / callback return code.
+ * @param   pIn                 The stream to parse.
+ * @param   pfnCallback         The callback.
+ * @param   pvUser              The user parameter for the callback.
+ */
+static int enumerateBatchComments(PSCMSTREAM pIn, PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser)
+{
+    int             rcRet = VINF_SUCCESS;
+    uint32_t        iLine = 0;
+    SCMEOL          enmEol;
+    size_t          cchLine;
+    const char     *pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol);
+    while (pchLine != NULL)
+    {
+        /*
+         * Skip leading blanks and check for 'rem'.
+         * At the moment we do not parse '::lable-comments'.
+         */
+        size_t off = 0;
+        while (off + 3 < cchLine && RT_C_IS_SPACE(pchLine[off]))
+            off++;
+        if (!IS_REM(pchLine, off, cchLine))
+        {
+            iLine++;
+            pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol);
+        }
+        else
+        {
+            int rc = handleLineComment(pIn, isBatchComment, pfnCallback, pvUser,
+                                       &pchLine, &cchLine, &enmEol, &iLine, &off);
+            if (RT_FAILURE(rc))
+                return rc;
+            if (rcRet == VINF_SUCCESS)
+                rcRet = rc;
+        }
+    }
+
+    int rcStream = ScmStreamGetStatus(pIn);
+    if (RT_SUCCESS(rcStream))
+        return rcRet;
+    return rcStream;
+}
+
+
+/**
+ * Deals with comments in SQL files.
+ *
+ * @returns VBox status code / callback return code.
+ * @param   pIn                 The stream to parse.
+ * @param   pfnCallback         The callback.
+ * @param   pvUser              The user parameter for the callback.
+ */
+static int enumerateSqlComments(PSCMSTREAM pIn, PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser)
+{
+    int             rcRet = VINF_SUCCESS;
+    uint32_t        iLine = 0;
+    SCMEOL          enmEol;
+    size_t          cchLine;
+    const char     *pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol);
+    while (pchLine != NULL)
+    {
+        /*
+         * Skip leading blanks and check for '--'.
+         */
+        size_t off = 0;
+        while (off + 3 < cchLine && RT_C_IS_SPACE(pchLine[off]))
+            off++;
+        if (   cchLine < 2
+            || pchLine[0] != '-'
+            || pchLine[1] != '-')
+        {
+            iLine++;
+            pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol);
+        }
+        else
+        {
+            int rc = handleLineComment(pIn, isSqlComment, pfnCallback, pvUser,
+                                       &pchLine, &cchLine, &enmEol, &iLine, &off);
+            if (RT_FAILURE(rc))
+                return rc;
+            if (rcRet == VINF_SUCCESS)
+                rcRet = rc;
+        }
+    }
+
+    int rcStream = ScmStreamGetStatus(pIn);
+    if (RT_SUCCESS(rcStream))
+        return rcRet;
+    return rcStream;
+}
+
+
+/**
+ * Deals with simple line comments.
+ *
+ * @returns VBox status code / callback return code.
+ * @param   pIn                 The stream to parse.
+ * @param   chStart             The start of comment character.
+ * @param   pfnIsComment        Comment tester function.
+ * @param   pfnCallback         The callback.
+ * @param   pvUser              The user parameter for the callback.
+ */
+static int enumerateSimpleLineComments(PSCMSTREAM pIn, char chStart, PFNISCOMMENT pfnIsComment,
+                                       PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser)
+{
+    int             rcRet = VINF_SUCCESS;
+    uint32_t        iLine = 0;
+    SCMEOL          enmEol;
+    size_t          cchLine;
+    const char     *pchLine;
+    while ((pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol)) != NULL)
+    {
+        size_t off = 0;
+        while (off < cchLine)
+        {
+            char ch = pchLine[off++];
+            if (ch != chStart)
+            { /* not interesting */ }
+            else
+            {
+                off -= 1;
+                int rc = handleLineComment(pIn, pfnIsComment, pfnCallback, pvUser,
+                                           &pchLine, &cchLine, &enmEol,  &iLine, &off);
+                if (RT_FAILURE(rc))
+                    return rc;
+                if (rcRet == VINF_SUCCESS)
+                    rcRet = rc;
+
+                if (!pchLine)
+                    break;
+            }
+        } /* for each character in the line */
+
+        iLine++;
+    } /* for each line in the stream */
+
+    int rcStream = ScmStreamGetStatus(pIn);
+    if (RT_SUCCESS(rcStream))
+        return rcRet;
+    return rcStream;
+}
+
+
+/**
+ * Enumerates the comments in the given stream, calling @a pfnCallback for each.
+ *
+ * @returns IPRT status code.
+ * @param   pIn             The stream to parse.
+ * @param   enmCommentStyle The comment style of the source stream.
+ * @param   pfnCallback     The function to call.
+ * @param   pvUser          User argument to the callback.
+ */
+int ScmEnumerateComments(PSCMSTREAM pIn, SCMCOMMENTSTYLE enmCommentStyle, PFNSCMCOMMENTENUMERATOR pfnCallback, void *pvUser)
+{
+    switch (enmCommentStyle)
+    {
+        case kScmCommentStyle_C:
+            return enumerateCStyleComments(pIn, pfnCallback, pvUser);
+
+        case kScmCommentStyle_Python:
+            return enumeratePythonComments(pIn, pfnCallback, pvUser);
+
+        case kScmCommentStyle_Semicolon:
+            return enumerateSimpleLineComments(pIn, ';', isSemicolonComment, pfnCallback, pvUser);
+
+        case kScmCommentStyle_Hash:
+            return enumerateSimpleLineComments(pIn, '#', isHashComment, pfnCallback, pvUser);
+
+        case kScmCommentStyle_Rem_Upper:
+        case kScmCommentStyle_Rem_Lower:
+        case kScmCommentStyle_Rem_Camel:
+            return enumerateBatchComments(pIn, pfnCallback, pvUser);
+
+        case kScmCommentStyle_Sql:
+            return enumerateSqlComments(pIn, pfnCallback, pvUser);
+
+        case kScmCommentStyle_Tick:
+            return enumerateSimpleLineComments(pIn, '\'', isTickComment, pfnCallback, pvUser);
+
+        default:
+            AssertFailedReturn(VERR_INVALID_PARAMETER);
+    }
+}
+
diff --git a/src/bldprogs/scmrw.cpp b/src/bldprogs/scmrw.cpp
index 6d76d52..eab187e 100644
--- a/src/bldprogs/scmrw.cpp
+++ b/src/bldprogs/scmrw.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -38,6 +38,462 @@
 #include "scm.h"
 
 
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
+/** License types. */
+typedef enum SCMLICENSETYPE
+{
+    kScmLicenseType_Invalid = 0,
+    kScmLicenseType_OseGpl,
+    kScmLicenseType_OseDualGplCddl,
+    kScmLicenseType_OseCddl,
+    kScmLicenseType_VBoxLgpl,
+    kScmLicenseType_Mit,
+    kScmLicenseType_Confidential
+} SCMLICENSETYPE;
+
+/** A license. */
+typedef struct SCMLICENSETEXT
+{
+    /** The license type. */
+    SCMLICENSETYPE  enmType;
+    /** The license option. */
+    SCMLICENSE      enmOpt;
+    /** The license text.   */
+    const char     *psz;
+    /** The license text length. */
+    size_t          cch;
+} SCMLICENSETEXT;
+/** Pointer to a license. */
+typedef SCMLICENSETEXT const *PCSCMLICENSETEXT;
+
+/**
+ * Copyright + license rewriter state.
+ */
+typedef struct SCMCOPYRIGHTINFO
+{
+    /** State. */
+    PSCMRWSTATE         pState;                 /**< input */
+    /** The comment style (neede for C/C++). */
+    SCMCOMMENTSTYLE     enmCommentStyle;        /**< input */
+
+    /** Number of comments we've parsed. */
+    uint32_t            cComments;
+
+    /** Copy of the contributed-by line if present. */
+    char               *pszContributedBy;
+
+    /** @name Common info
+     * @{ */
+    uint32_t            iLineComment;
+    uint32_t            cLinesComment;          /**< This excludes any external license lines. */
+    /** @} */
+
+    /** @name Copyright info
+     * @{ */
+    uint32_t            iLineCopyright;
+    uint32_t            uFirstYear;
+    uint32_t            uLastYear;
+    bool                fWellFormedCopyright;
+    bool                fUpToDateCopyright;
+    /** @} */
+
+    /** @name License info
+     * @{ */
+    bool                fOpenSource;            /**< input */
+    PCSCMLICENSETEXT    pExpectedLicense;       /**< input */
+    PCSCMLICENSETEXT    paLicenses;             /**< input */
+    SCMLICENSE          enmLicenceOpt;          /**< input */
+    uint32_t            iLineLicense;
+    uint32_t            cLinesLicense;
+    PCSCMLICENSETEXT    pCurrentLicense;
+    bool                fIsCorrectLicense;
+    bool                fWellFormedLicense;
+    bool                fExternalLicense;
+    /** @} */
+
+    /** @name LGPL licence notice and disclaimer info
+     * @{ */
+    /** Wheter to check for LGPL license notices and disclaimers. */
+    bool                fCheckforLgpl;
+    /** The approximate line we found the (first) LGPL licence notice on. */
+    uint32_t            iLineLgplNotice;
+    /** The line number after the LGPL notice comment. */
+    uint32_t            iLineAfterLgplComment;
+    /** The LGPL disclaimer line. */
+    uint32_t            iLineLgplDisclaimer;
+    /** @} */
+
+} SCMCOPYRIGHTINFO;
+typedef SCMCOPYRIGHTINFO *PSCMCOPYRIGHTINFO;
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+/** --license-ose-gpl */
+static const char g_szVBoxOseGpl[] =
+    "This file is part of VirtualBox Open Source Edition (OSE), as\n"
+    "available from http://www.virtualbox.org. This file is free software;\n"
+    "you can redistribute it and/or modify it under the terms of the GNU\n"
+    "General Public License (GPL) as published by the Free Software\n"
+    "Foundation, in version 2 as it comes in the \"COPYING\" file of the\n"
+    "VirtualBox OSE distribution. VirtualBox OSE is distributed in the\n"
+    "hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.\n";
+
+/** --license-ose-dual */
+static const char g_szVBoxOseDualGplCddl[] =
+    "This file is part of VirtualBox Open Source Edition (OSE), as\n"
+    "available from http://www.virtualbox.org. This file is free software;\n"
+    "you can redistribute it and/or modify it under the terms of the GNU\n"
+    "General Public License (GPL) as published by the Free Software\n"
+    "Foundation, in version 2 as it comes in the \"COPYING\" file of the\n"
+    "VirtualBox OSE distribution. VirtualBox OSE is distributed in the\n"
+    "hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.\n"
+    "\n"
+    "The contents of this file may alternatively be used under the terms\n"
+    "of the Common Development and Distribution License Version 1.0\n"
+    "(CDDL) only, as it comes in the \"COPYING.CDDL\" file of the\n"
+    "VirtualBox OSE distribution, in which case the provisions of the\n"
+    "CDDL are applicable instead of those of the GPL.\n"
+    "\n"
+    "You may elect to license modified versions of this file under the\n"
+    "terms and conditions of either the GPL or the CDDL or both.\n";
+
+/** --license-ose-cddl   */
+static const char g_szVBoxOseCddl[] =
+    "This file is part of VirtualBox Open Source Edition (OSE), as\n"
+    "available from http://www.virtualbox.org. This file is free software;\n"
+    "you can redistribute it and/or modify it under the terms of the Common\n"
+    "Development and Distribution License Version 1.0 (CDDL) only, as it\n"
+    "comes in the \"COPYING.CDDL\" file of the VirtualBox OSE distribution.\n"
+    "VirtualBox OSE is distributed in the hope that it will be useful, but\n"
+    "WITHOUT ANY WARRANTY of any kind.\n";
+
+/** --license-lgpl */
+static const char g_szVBoxLgpl[] =
+    "This file is part of a free software library; you can redistribute\n"
+    "it and/or modify it under the terms of the GNU Lesser General\n"
+    "Public License version 2.1 as published by the Free Software\n"
+    "Foundation and shipped in the \"COPYING\" file with this library.\n"
+    "The library is distributed in the hope that it will be useful,\n"
+    "but WITHOUT ANY WARRANTY of any kind.\n"
+    "\n"
+    "Oracle LGPL Disclaimer: For the avoidance of doubt, except that if\n"
+    "any license choice other than GPL or LGPL is available it will\n"
+    "apply instead, Oracle elects to use only the Lesser General Public\n"
+    "License version 2.1 (LGPLv2) at this time for any software where\n"
+    "a choice of LGPL license versions is made available with the\n"
+    "language indicating that LGPLv2 or any later version may be used,\n"
+    "or where a choice of which version of the LGPL is applied is\n"
+    "otherwise unspecified.\n";
+
+/** --license-mit
+ * @note This isn't detectable as VirtualBox or Oracle specific.
+ */
+static const char g_szMit[] =
+    "Permission is hereby granted, free of charge, to any person\n"
+    "obtaining a copy of this software and associated documentation\n"
+    "files (the \"Software\"), to deal in the Software without\n"
+    "restriction, including without limitation the rights to use,\n"
+    "copy, modify, merge, publish, distribute, sublicense, and/or sell\n"
+    "copies of the Software, and to permit persons to whom the\n"
+    "Software is furnished to do so, subject to the following\n"
+    "conditions:\n"
+    "\n"
+    "The above copyright notice and this permission notice shall be\n"
+    "included in all copies or substantial portions of the Software.\n"
+    "\n"
+    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n"
+    "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n"
+    "OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n"
+    "NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n"
+    "HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n"
+    "WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n"
+    "FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n"
+    "OTHER DEALINGS IN THE SOFTWARE.\n";
+
+/** --license-mit, alternative wording \#1.
+ * @note This differes from g_szMit in "AUTHORS OR COPYRIGHT HOLDERS" is written
+ *       "COPYRIGHT HOLDER(S) OR AUTHOR(S)". Its layout is wider, so it is a
+ *       couple of lines shorter. */
+static const char g_szMitAlt1[] =
+    "Permission is hereby granted, free of charge, to any person obtaining a\n"
+    "copy of this software and associated documentation files (the \"Software\"),\n"
+    "to deal in the Software without restriction, including without limitation\n"
+    "the rights to use, copy, modify, merge, publish, distribute, sublicense,\n"
+    "and/or sell copies of the Software, and to permit persons to whom the\n"
+    "Software is furnished to do so, subject to the following conditions:\n"
+    "\n"
+    "The above copyright notice and this permission notice shall be included in\n"
+    "all copies or substantial portions of the Software.\n"
+    "\n"
+    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
+    "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
+    "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\n"
+    "THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR\n"
+    "OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n"
+    "ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n"
+    "OTHER DEALINGS IN THE SOFTWARE.\n";
+
+/** --license-mit, alternative wording \#2.
+ * @note This differes from g_szMit in that "AUTHORS OR COPYRIGHT HOLDERS" is
+ *       replaced with "THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS".
+ *       Its layout is wider, so it is a couple of lines shorter. */
+static const char g_szMitAlt2[] =
+    "Permission is hereby granted, free of charge, to any person obtaining a\n"
+    "copy of this software and associated documentation files (the \"Software\"),\n"
+    "to deal in the Software without restriction, including without limitation\n"
+    "the rights to use, copy, modify, merge, publish, distribute, sublicense,\n"
+    "and/or sell copies of the Software, and to permit persons to whom the\n"
+    "Software is furnished to do so, subject to the following conditions:\n"
+    "\n"
+    "The above copyright notice and this permission notice shall be included in\n"
+    "all copies or substantial portions of the Software.\n"
+    "\n"
+    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
+    "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
+    "FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n"
+    "THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,\n"
+    "DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n"
+    "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n"
+    "USE OR OTHER DEALINGS IN THE SOFTWARE.\n";
+
+/** --license-mit, alternative wording \#3.
+ * @note This differes from g_szMitAlt2 in that the second and third sections
+ *       have been switch. */
+static const char g_szMitAlt3[] =
+    "Permission is hereby granted, free of charge, to any person obtaining a\n"
+    "copy of this software and associated documentation files (the \"Software\"),\n"
+    "to deal in the Software without restriction, including without limitation\n"
+    "the rights to use, copy, modify, merge, publish, distribute, sublicense,\n"
+    "and/or sell copies of the Software, and to permit persons to whom the\n"
+    "Software is furnished to do so, subject to the following conditions:\n"
+    "\n"
+    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
+    "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
+    "FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n"
+    "THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,\n"
+    "DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n"
+    "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n"
+    "USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
+    "\n"
+    "The above copyright notice and this permission notice shall be included in\n"
+    "all copies or substantial portions of the Software.\n";
+
+/** --license-(based-on)mit, alternative wording \#4.
+ * @note This differs from g_szMitAlt2 in injecting "(including the next
+ *       paragraph)". */
+static const char g_szMitAlt4[] =
+    "Permission is hereby granted, free of charge, to any person obtaining a\n"
+    "copy of this software and associated documentation files (the \"Software\"),\n"
+    "to deal in the Software without restriction, including without limitation\n"
+    "the rights to use, copy, modify, merge, publish, distribute, sublicense,\n"
+    "and/or sell copies of the Software, and to permit persons to whom the\n"
+    "Software is furnished to do so, subject to the following conditions:\n"
+    "\n"
+    "The above copyright notice and this permission notice (including the next\n"
+    "paragraph) shall be included in all copies or substantial portions of the\n"
+    "Software.\n"
+    "\n"
+    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
+    "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
+    "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\n"
+    "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
+    "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n"
+    "FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n"
+    "DEALINGS IN THE SOFTWARE.\n";
+
+/** --license-(based-on)mit, alternative wording \#5.
+ * @note This differs from g_szMitAlt3 in using "sub license" instead of
+ *       "sublicense" and adding an illogical "(including the next
+ *       paragraph)" remark to the final paragraph. (vbox_ttm.c) */
+static const char g_szMitAlt5[] =
+    "Permission is hereby granted, free of charge, to any person obtaining a\n"
+    "copy of this software and associated documentation files (the\n"
+    "\"Software\"), to deal in the Software without restriction, including\n"
+    "without limitation the rights to use, copy, modify, merge, publish,\n"
+    "distribute, sub license, and/or sell copies of the Software, and to\n"
+    "permit persons to whom the Software is furnished to do so, subject to\n"
+    "the following conditions:\n"
+    "\n"
+    "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
+    "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
+    "FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n"
+    "THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,\n"
+    "DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n"
+    "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n"
+    "USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
+    "\n"
+    "The above copyright notice and this permission notice (including the\n"
+    "next paragraph) shall be included in all copies or substantial portions\n"
+    "of the Software.\n";
+
+/** Oracle confidential. */
+static const char g_szOracleConfidential[] =
+    "Oracle Corporation confidential\n"
+    "All rights reserved\n";
+
+/** Licenses to detect when --license-mit isn't used. */
+static const SCMLICENSETEXT g_aLicenses[] =
+{
+    { kScmLicenseType_OseGpl,           kScmLicense_OseGpl,         RT_STR_TUPLE(g_szVBoxOseGpl)},
+    { kScmLicenseType_OseDualGplCddl,   kScmLicense_OseDualGplCddl, RT_STR_TUPLE(g_szVBoxOseDualGplCddl) },
+    { kScmLicenseType_OseCddl,          kScmLicense_OseCddl,        RT_STR_TUPLE(g_szVBoxOseCddl) },
+    { kScmLicenseType_VBoxLgpl,         kScmLicense_Lgpl,           RT_STR_TUPLE(g_szVBoxLgpl)},
+    { kScmLicenseType_Confidential,     kScmLicense_End,            RT_STR_TUPLE(g_szOracleConfidential) },
+    { kScmLicenseType_Invalid,          kScmLicense_End,            NULL, 0 },
+};
+
+/** Licenses to detect when --license-mit or --license-based-on-mit are used. */
+static const SCMLICENSETEXT g_aLicensesWithMit[] =
+{
+    { kScmLicenseType_Mit,              kScmLicense_Mit,            RT_STR_TUPLE(g_szMit) },
+    { kScmLicenseType_Mit,              kScmLicense_Mit,            RT_STR_TUPLE(g_szMitAlt1) },
+    { kScmLicenseType_Mit,              kScmLicense_Mit,            RT_STR_TUPLE(g_szMitAlt2) },
+    { kScmLicenseType_Mit,              kScmLicense_Mit,            RT_STR_TUPLE(g_szMitAlt3) },
+    { kScmLicenseType_Mit,              kScmLicense_Mit,            RT_STR_TUPLE(g_szMitAlt4) },
+    { kScmLicenseType_Mit,              kScmLicense_Mit,            RT_STR_TUPLE(g_szMitAlt5) },
+    { kScmLicenseType_OseGpl,           kScmLicense_OseGpl,         RT_STR_TUPLE(g_szVBoxOseGpl)},
+    { kScmLicenseType_OseDualGplCddl,   kScmLicense_OseDualGplCddl, RT_STR_TUPLE(g_szVBoxOseDualGplCddl) },
+    { kScmLicenseType_VBoxLgpl,         kScmLicense_Lgpl,           RT_STR_TUPLE(g_szVBoxLgpl)},
+    { kScmLicenseType_Confidential,     kScmLicense_End,            RT_STR_TUPLE(g_szOracleConfidential) },
+    { kScmLicenseType_Invalid,          kScmLicense_End,            NULL, 0 },
+};
+
+/** Copyright holder. */
+static const char g_szCopyrightHolder[] = "Oracle Corporation";
+
+/** LGPL disclaimer. */
+static const char g_szLgplDisclaimer[] =
+    "Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice\n"
+    "other than GPL or LGPL is available it will apply instead, Oracle elects to use only\n"
+    "the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where\n"
+    "a choice of LGPL license versions is made available with the language indicating\n"
+    "that LGPLv2 or any later version may be used, or where a choice of which version\n"
+    "of the LGPL is applied is otherwise unspecified.\n";
+
+/** Copyright+license comment start for each SCMCOMMENTSTYLE. */
+static RTSTRTUPLE const g_aCopyrightCommentStart[] =
+{
+    { RT_STR_TUPLE("<invalid> ") },
+    { RT_STR_TUPLE("/*") },
+    { RT_STR_TUPLE("#") },
+    { RT_STR_TUPLE("\"\"\"") },
+    { RT_STR_TUPLE(";") },
+    { RT_STR_TUPLE("REM") },
+    { RT_STR_TUPLE("rem") },
+    { RT_STR_TUPLE("Rem") },
+    { RT_STR_TUPLE("--") },
+    { RT_STR_TUPLE("'") },
+    { RT_STR_TUPLE("<end>") },
+};
+
+/** Copyright+license line prefix for each SCMCOMMENTSTYLE. */
+static RTSTRTUPLE const g_aCopyrightCommentPrefix[] =
+{
+    { RT_STR_TUPLE("<invalid> ") },
+    { RT_STR_TUPLE(" * ") },
+    { RT_STR_TUPLE("# ") },
+    { RT_STR_TUPLE("") },
+    { RT_STR_TUPLE("; ") },
+    { RT_STR_TUPLE("REM ") },
+    { RT_STR_TUPLE("rem ") },
+    { RT_STR_TUPLE("Rem ") },
+    { RT_STR_TUPLE("-- ") },
+    { RT_STR_TUPLE("' ") },
+    { RT_STR_TUPLE("<end>") },
+};
+
+/** Copyright+license empty line for each SCMCOMMENTSTYLE. */
+static RTSTRTUPLE const g_aCopyrightCommentEmpty[] =
+{
+    { RT_STR_TUPLE("<invalid>") },
+    { RT_STR_TUPLE(" *") },
+    { RT_STR_TUPLE("#") },
+    { RT_STR_TUPLE("") },
+    { RT_STR_TUPLE(";") },
+    { RT_STR_TUPLE("REM") },
+    { RT_STR_TUPLE("rem") },
+    { RT_STR_TUPLE("Rem") },
+    { RT_STR_TUPLE("--") },
+    { RT_STR_TUPLE("'") },
+    { RT_STR_TUPLE("<end>") },
+};
+
+/** Copyright+license end of comment for each SCMCOMMENTSTYLE. */
+static RTSTRTUPLE const g_aCopyrightCommentEnd[] =
+{
+    { RT_STR_TUPLE("<invalid> ") },
+    { RT_STR_TUPLE(" */") },
+    { RT_STR_TUPLE("#") },
+    { RT_STR_TUPLE("\"\"\"") },
+    { RT_STR_TUPLE(";") },
+    { RT_STR_TUPLE("REM") },
+    { RT_STR_TUPLE("rem") },
+    { RT_STR_TUPLE("Rem") },
+    { RT_STR_TUPLE("--") },
+    { RT_STR_TUPLE("'") },
+    { RT_STR_TUPLE("<end>") },
+};
+
+
+/**
+ * Figures out the predominant casing of the "REM" keyword in a batch file.
+ *
+ * @returns Predominant comment style.
+ * @param   pIn         The file to scan.  Will be rewound.
+ */
+static SCMCOMMENTSTYLE determinBatchFileCommentStyle(PSCMSTREAM pIn)
+{
+    /*
+     * Figure out whether it's using upper or lower case REM comments before
+     * doing the work.
+     */
+    uint32_t    cUpper = 0;
+    uint32_t    cLower = 0;
+    uint32_t    cCamel = 0;
+    SCMEOL      enmEol;
+    size_t      cchLine;
+    const char *pchLine;
+    while ((pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol)) != NULL)
+    {
+        while (   cchLine > 2
+               && RT_C_IS_SPACE(*pchLine))
+        {
+            pchLine++;
+            cchLine--;
+        }
+        if (   (   cchLine > 3
+                && RT_C_IS_SPACE(pchLine[2]))
+            || cchLine == 3)
+        {
+            if (   pchLine[0] == 'R'
+                && pchLine[1] == 'E'
+                && pchLine[2] == 'M')
+                cUpper++;
+            else if (   pchLine[0] == 'r'
+                     && pchLine[1] == 'e'
+                     && pchLine[2] == 'm')
+                cLower++;
+            else if (   pchLine[0] == 'R'
+                     && pchLine[1] == 'e'
+                     && pchLine[2] == 'm')
+                cCamel++;
+        }
+    }
+
+    ScmStreamRewindForReading(pIn);
+
+    if (cLower >= cUpper && cLower >= cCamel)
+        return kScmCommentStyle_Rem_Lower;
+    if (cCamel >= cLower && cCamel >= cUpper)
+        return kScmCommentStyle_Rem_Camel;
+    return kScmCommentStyle_Rem_Upper;
+}
+
+
 /**
  * Worker for isBlankLine.
  *
@@ -228,7 +684,7 @@ static bool rewrite_ForceEol(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut
                 ScmVerbose(pState, 2, " * Setting svn:eol-style to %s (was: %s)\n", pszDesiredSvnEol, pszEol);
             int rc2 = ScmSvnSetProperty(pState, "svn:eol-style", pszDesiredSvnEol);
             if (RT_FAILURE(rc2))
-                RTMsgError("ScmSvnSetProperty: %Rrc\n", rc2); /** @todo propagate the error somehow... */
+                ScmError(pState, rc2, "ScmSvnSetProperty: %Rrc\n", rc2);
         }
         if (RT_SUCCESS(rc))
             RTStrFree(pszEol);
@@ -352,7 +808,7 @@ bool rewrite_AdjustTrailingLines(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM
 }
 
 /**
- * Make sure there is no svn:executable keyword on the current file.
+ * Make sure there is no svn:executable property on the current file.
  *
  * @returns false - the state carries these kinds of changes.
  * @param   pState              The rewriter state.
@@ -373,12 +829,115 @@ bool rewrite_SvnNoExecutable(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut
         ScmVerbose(pState, 2, " * removing svn:executable\n");
         rc = ScmSvnDelProperty(pState, "svn:executable");
         if (RT_FAILURE(rc))
-            RTMsgError("ScmSvnSetProperty: %Rrc\n", rc); /** @todo error propagation here.. */
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
     }
     return false;
 }
 
 /**
+ * Make sure there is no svn:keywords property on the current file.
+ *
+ * @returns false - the state carries these kinds of changes.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ */
+bool rewrite_SvnNoKeywords(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    RT_NOREF2(pIn, pOut);
+    if (   !pSettings->fSetSvnExecutable
+        || !ScmSvnIsInWorkingCopy(pState))
+        return false;
+
+    int rc = ScmSvnQueryProperty(pState, "svn:keywords", NULL);
+    if (RT_SUCCESS(rc))
+    {
+        ScmVerbose(pState, 2, " * removing svn:keywords\n");
+        rc = ScmSvnDelProperty(pState, "svn:keywords");
+        if (RT_FAILURE(rc))
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
+    }
+    return false;
+}
+
+/**
+ * Make sure there is no svn:eol-style property on the current file.
+ *
+ * @returns false - the state carries these kinds of changes.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ */
+bool rewrite_SvnNoEolStyle(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    RT_NOREF2(pIn, pOut);
+    if (   !pSettings->fSetSvnExecutable
+        || !ScmSvnIsInWorkingCopy(pState))
+        return false;
+
+    int rc = ScmSvnQueryProperty(pState, "svn:eol-style", NULL);
+    if (RT_SUCCESS(rc))
+    {
+        ScmVerbose(pState, 2, " * removing svn:eol-style\n");
+        rc = ScmSvnDelProperty(pState, "svn:eol-style");
+        if (RT_FAILURE(rc))
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
+    }
+    return false;
+}
+
+/**
+ * Makes sure the svn properties are appropriate for a binary.
+ *
+ * @returns false - the state carries these kinds of changes.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ */
+bool rewrite_SvnBinary(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    RT_NOREF2(pIn, pOut);
+    if (   !pSettings->fSetSvnExecutable
+        || !ScmSvnIsInWorkingCopy(pState))
+        return false;
+
+    /* remove svn:eol-style and svn:keywords */
+    static const char * const s_apszRemove[] = { "svn:eol-style", "svn:keywords" };
+    for (uint32_t i = 0; i < RT_ELEMENTS(s_apszRemove); i++)
+    {
+        char *pszValue;
+        int rc = ScmSvnQueryProperty(pState, s_apszRemove[i], &pszValue);
+        if (RT_SUCCESS(rc))
+        {
+            ScmVerbose(pState, 2, " * removing %s=%s\n", s_apszRemove[i], pszValue);
+            RTStrFree(pszValue);
+            rc = ScmSvnDelProperty(pState, s_apszRemove[i]);
+            if (RT_FAILURE(rc))
+                ScmError(pState, rc, "ScmSvnSetProperty(,%s): %Rrc\n", s_apszRemove[i], rc);
+        }
+        else if (rc != VERR_NOT_FOUND)
+            ScmError(pState, rc, "ScmSvnQueryProperty: %Rrc\n", rc);
+    }
+
+    /* Make sure there is a svn:mime-type set. */
+    int rc = ScmSvnQueryProperty(pState, "svn:mime-type", NULL);
+    if (rc == VERR_NOT_FOUND)
+    {
+        ScmVerbose(pState, 2, " * settings svn:mime-type\n");
+        rc = ScmSvnSetProperty(pState, "svn:mime-type", "application/octet-stream");
+        if (RT_FAILURE(rc))
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
+    }
+    else if (RT_FAILURE(rc))
+        ScmError(pState, rc, "ScmSvnQueryProperty: %Rrc\n", rc);
+
+    return false;
+}
+
+/**
  * Make sure the Id and Revision keywords are expanded.
  *
  * @returns false - the state carries these kinds of changes.
@@ -411,10 +970,10 @@ bool rewrite_SvnKeywords(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PC
             ScmVerbose(pState, 2, " * changing svn:keywords to '%s'\n", pszKeywords);
             rc = ScmSvnSetProperty(pState, "svn:keywords", pszKeywords);
             if (RT_FAILURE(rc))
-                RTMsgError("ScmSvnSetProperty: %Rrc\n", rc); /** @todo error propagation here.. */
+                ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
         }
         else
-            RTMsgError("RTStrAppend: %Rrc\n", rc); /** @todo error propagation here.. */
+            ScmError(pState, rc, "RTStrAppend: %Rrc\n", rc);
         RTStrFree(pszKeywords);
     }
     else if (rc == VERR_NOT_FOUND)
@@ -422,7 +981,7 @@ bool rewrite_SvnKeywords(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PC
         ScmVerbose(pState, 2, " * setting svn:keywords to 'Id Revision'\n");
         rc = ScmSvnSetProperty(pState, "svn:keywords", "Id Revision");
         if (RT_FAILURE(rc))
-            RTMsgError("ScmSvnSetProperty: %Rrc\n", rc); /** @todo error propagation here.. */
+            ScmError(pState, rc, "ScmSvnSetProperty: %Rrc\n", rc);
     }
     else if (RT_SUCCESS(rc))
         RTStrFree(pszKeywords);
@@ -431,6 +990,917 @@ bool rewrite_SvnKeywords(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PC
 }
 
 /**
+ * Compares two strings word-by-word, ignoring spaces, punctuation and case.
+ *
+ * Assumes ASCII strings.
+ *
+ * @returns true if they match, false if not.
+ * @param   psz1        The first string.  This is typically the known one.
+ * @param   psz2        The second string.  This is typically the unknown one,
+ *                      which is why we return a next pointer for this one.
+ * @param   ppsz2Next   Where to return the next part of the 2nd string.  If
+ *                      this is NULL, the whole string must match.
+ */
+static bool IsEqualWordByWordIgnoreCase(const char *psz1, const char *psz2, const char **ppsz2Next)
+{
+    for (;;)
+    {
+        /* Try compare raw strings first. */
+        char ch1 = *psz1;
+        char ch2 = *psz2;
+        if (   ch1 == ch2
+            || RT_C_TO_LOWER(ch1) == RT_C_TO_LOWER(ch2))
+        {
+            if (ch1)
+            {
+                psz1++;
+                psz2++;
+            }
+            else
+            {
+                if (ppsz2Next)
+                    *ppsz2Next = psz2;
+                return true;
+            }
+        }
+        else
+        {
+            /* Try skip spaces an punctuation. */
+            while (   RT_C_IS_SPACE(ch1)
+                   || RT_C_IS_PUNCT(ch1))
+                ch1 = *++psz1;
+
+            if (ch1 == '\0' && ppsz2Next)
+            {
+                *ppsz2Next = psz2;
+                return true;
+            }
+
+            while (   RT_C_IS_SPACE(ch2)
+                   || RT_C_IS_PUNCT(ch2))
+                ch2 = *++psz2;
+
+            if (   ch1 != ch2
+                && RT_C_TO_LOWER(ch1) != RT_C_TO_LOWER(ch2))
+            {
+                if (ppsz2Next)
+                    *ppsz2Next = psz2;
+                return false;
+            }
+        }
+    }
+}
+
+/**
+ * Looks for @a pszFragment anywhere in @a pszText, ignoring spaces, punctuation
+ * and case.
+ *
+ * @returns true if found, false if not.
+ * @param   pszText             The haystack to search in.
+ * @param   cchText             The length @a pszText.
+ * @param   pszFragment         The needle to search for.
+ * @param   ppszStart           Where to return the address in @a pszText where
+ *                              the fragment was found.  Optional.
+ * @param   ppszNext            Where to return the pointer to the first char in
+ *                              @a pszText after the fragment.  Optional.
+ *
+ * @remarks First character of @a pszFragment must be an 7-bit ASCII character!
+ *          This character must not be space or punctuation.
+ */
+static bool scmContainsWordByWordIgnoreCase(const char *pszText, size_t cchText, const char *pszFragment,
+                                            const char **ppszStart, const char **ppszNext)
+{
+    Assert(!((unsigned)*pszFragment & 0x80));
+    Assert(pszText[cchText] == '\0');
+    Assert(!RT_C_IS_BLANK(*pszFragment));
+    Assert(!RT_C_IS_PUNCT(*pszFragment));
+
+    char chLower = RT_C_TO_LOWER(*pszFragment);
+    char chUpper = RT_C_TO_UPPER(*pszFragment);
+    for (;;)
+    {
+        const char *pszHit = (const char *)memchr(pszText, chLower, cchText);
+        const char *pszHit2 = (const char *)memchr(pszText, chUpper, cchText);
+        if (!pszHit && !pszHit2)
+        {
+            if (ppszStart)
+                *ppszStart = NULL;
+            if (ppszNext)
+                *ppszNext = NULL;
+            return false;
+        }
+
+        if (   pszHit == NULL
+            || (   pszHit2 != NULL
+                && ((uintptr_t)pszHit2 < (uintptr_t)pszHit)) )
+            pszHit = pszHit2;
+
+        const char *pszNext;
+        if (IsEqualWordByWordIgnoreCase(pszFragment, pszHit, &pszNext))
+        {
+            if (ppszStart)
+                *ppszStart = pszHit;
+            if (ppszNext)
+                *ppszNext = pszNext;
+            return true;
+        }
+
+        cchText -= pszHit - pszText + 1;
+        pszText = pszHit + 1;
+    }
+}
+
+
+/**
+ * Counts the number of lines in the given substring.
+ *
+ * @returns The number of lines.
+ * @param   psz          The start of the substring.
+ * @param   cch          The length of the substring.
+ */
+static uint32_t CountLinesInSubstring(const char *psz, size_t cch)
+{
+    uint32_t cLines = 0;
+    for (;;)
+    {
+        const char *pszEol = (const char *)memchr(psz, '\n', cch);
+        if (pszEol)
+            cLines++;
+        else
+            return cLines + (*psz != '\0');
+        cch -= pszEol + 1 - psz;
+        if (!cch)
+            return cLines;
+        psz  = pszEol + 1;
+    }
+}
+
+
+/**
+ * Comment parser callback for locating copyright and license.
+ */
+static DECLCALLBACK(int)
+rewrite_Copyright_CommentCallback(PCSCMCOMMENTINFO pInfo, const char *pszBody, size_t cchBody, void *pvUser)
+{
+    PSCMCOPYRIGHTINFO pState = (PSCMCOPYRIGHTINFO)pvUser;
+    Assert(strlen(pszBody) == cchBody);
+    //RTPrintf("--- comment at %u, type %u ---\n%s\n--- end ---\n", pInfo->iLineStart, pInfo->enmType, pszBody);
+    ScmVerbose(pState->pState, 5,
+               "--- comment at %u col %u, %u lines, type %u, %u lines before body, %u lines after body\n",
+               pInfo->iLineStart, pInfo->offStart, pInfo->iLineEnd - pInfo->iLineStart + 1, pInfo->enmType,
+               pInfo->cBlankLinesBefore, pInfo->cBlankLinesAfter);
+
+    pState->cComments++;
+
+    uint32_t iLine = pInfo->iLineStart + pInfo->cBlankLinesBefore;
+
+    /*
+     * Look for a 'contributed by' or 'includes contributions from' line, these
+     * comes first when present.
+     */
+    const char *pchContributedBy = NULL;
+    size_t      cchContributedBy = 0;
+    size_t      cBlankLinesAfterContributedBy = 0;
+    if (    pState->pszContributedBy == NULL
+        && (   pState->iLineCopyright == UINT32_MAX
+            || pState->iLineLicense == UINT32_MAX)
+        && (   (    cchBody > sizeof("Contributed by")
+                && RTStrNICmp(pszBody, RT_STR_TUPLE("contributed by")) == 0)
+            || (    cchBody > sizeof("Includes contributions from")
+                && RTStrNICmp(pszBody, RT_STR_TUPLE("Includes contributions from")) == 0) ) )
+    {
+        const char *pszNextLine = (const char *)memchr(pszBody, '\n', cchBody);
+        while (pszNextLine && pszNextLine[1] != '\n')
+            pszNextLine = (const char *)memchr(pszNextLine + 1, '\n', cchBody);
+        if (pszNextLine)
+        {
+            pchContributedBy = pszBody;
+            cchContributedBy = pszNextLine - pszBody;
+
+            /* Skip the copyright line and any blank lines following it. */
+            cchBody -= cchContributedBy + 1;
+            pszBody  = pszNextLine + 1;
+            iLine   += 1;
+            while (*pszBody == '\n')
+            {
+                pszBody++;
+                cchBody--;
+                iLine++;
+                cBlankLinesAfterContributedBy++;
+            }
+        }
+    }
+
+    /*
+     * Look for the copyright line.
+     */
+    bool     fFoundCopyright = false;
+    uint32_t cBlankLinesAfterCopyright = 0;
+    if (   pState->iLineCopyright == UINT32_MAX
+        && cchBody > sizeof("Copyright") + sizeof(g_szCopyrightHolder)
+        && RTStrNICmp(pszBody, RT_STR_TUPLE("copyright")) == 0)
+    {
+        const char *pszNextLine = (const char *)memchr(pszBody, '\n', cchBody);
+
+        /* Oracle copyright? */
+        const char *pszEnd  = pszNextLine ? pszNextLine : &pszBody[cchBody];
+        while (RT_C_IS_SPACE(pszEnd[-1]))
+            pszEnd--;
+        if (   (uintptr_t)(pszEnd - pszBody) > sizeof(g_szCopyrightHolder)
+            && (*(unsigned char *)(pszEnd - sizeof(g_szCopyrightHolder) + 1) & 0x80) == 0 /* to avoid annoying assertion */
+            && RTStrNICmp(pszEnd - sizeof(g_szCopyrightHolder) + 1, RT_STR_TUPLE(g_szCopyrightHolder)) == 0)
+        {
+            /* Parse out the year(s). */
+            const char *psz = pszBody + sizeof("copyright");
+            while ((uintptr_t)psz < (uintptr_t)pszEnd && !RT_C_IS_DIGIT(*psz))
+                psz++;
+            if (RT_C_IS_DIGIT(*psz))
+            {
+                char *pszNext;
+                int rc = RTStrToUInt32Ex(psz, &pszNext, 10, &pState->uFirstYear);
+                if (   RT_SUCCESS(rc)
+                    && rc != VWRN_NUMBER_TOO_BIG
+                    && rc != VWRN_NEGATIVE_UNSIGNED)
+                {
+                    if (   pState->uFirstYear < 1975
+                        || pState->uFirstYear > 3000)
+                    {
+                        ScmError(pState->pState, VERR_OUT_OF_RANGE, "Copyright year is out of range: %u ('%.*s')\n",
+                                 pState->uFirstYear, pszEnd - pszBody, pszBody);
+                        pState->uFirstYear = UINT32_MAX;
+                    }
+
+                    while (RT_C_IS_SPACE(*pszNext))
+                        pszNext++;
+                    if (*pszNext == '-')
+                    {
+                        do
+                            pszNext++;
+                        while (RT_C_IS_SPACE(*pszNext));
+                        rc = RTStrToUInt32Ex(pszNext, &pszNext, 10, &pState->uLastYear);
+                        if (   RT_SUCCESS(rc)
+                            && rc != VWRN_NUMBER_TOO_BIG
+                            && rc != VWRN_NEGATIVE_UNSIGNED)
+                        {
+                            if (   pState->uLastYear < 1975
+                                || pState->uLastYear > 3000)
+                            {
+                                ScmError(pState->pState, VERR_OUT_OF_RANGE, "Second copyright year is out of range: %u ('%.*s')\n",
+                                         pState->uLastYear, pszEnd - pszBody, pszBody);
+                                pState->uLastYear = UINT32_MAX;
+                            }
+                            else if (pState->uFirstYear > pState->uLastYear)
+                            {
+                                RTMsgWarning("Copyright years switched(?): '%.*s'\n", pszEnd - pszBody, pszBody);
+                                uint32_t iTmp = pState->uLastYear;
+                                pState->uLastYear = pState->uFirstYear;
+                                pState->uFirstYear = iTmp;
+                            }
+                        }
+                        else
+                        {
+                            pState->uLastYear = UINT32_MAX;
+                            ScmError(pState->pState, RT_SUCCESS(rc) ? -rc : rc,
+                                     "Failed to parse second copyright year: '%.*s'\n", pszEnd - pszBody, pszBody);
+                        }
+                    }
+                    else if (*pszNext != g_szCopyrightHolder[0])
+                        ScmError(pState->pState, VERR_PARSE_ERROR,
+                                 "Failed to parse copyright: '%.*s'\n", pszEnd - pszBody, pszBody);
+                    else
+                        pState->uLastYear = pState->uFirstYear;
+                }
+                else
+                {
+                    pState->uFirstYear = UINT32_MAX;
+                    ScmError(pState->pState, RT_SUCCESS(rc) ? -rc : rc,
+                             "Failed to parse copyright year: '%.*s'\n", pszEnd - pszBody, pszBody);
+                }
+            }
+
+            /* The copyright comment must come before the license. */
+            if (pState->iLineLicense != UINT32_MAX)
+                ScmError(pState->pState, VERR_WRONG_ORDER, "Copyright (line %u) must come before the license (line %u)!\n",
+                         iLine, pState->iLineLicense);
+
+            /* In C/C++ code, this must be a multiline comment.  While in python it
+               must be a */
+            if (pState->enmCommentStyle == kScmCommentStyle_C && pInfo->enmType != kScmCommentType_MultiLine)
+                ScmError(pState->pState, VERR_WRONG_ORDER, "Copyright must appear in a multiline comment (no doxygen stuff)\n");
+            else if (pState->enmCommentStyle == kScmCommentStyle_Python && pInfo->enmType != kScmCommentType_DocString)
+                ScmError(pState->pState, VERR_WRONG_ORDER, "Copyright must appear in a doc-string\n");
+
+            /* The copyright must be followed by the license. */
+            if (!pszNextLine)
+                ScmError(pState->pState, VERR_WRONG_ORDER, "Copyright should be followed by the license text!\n");
+
+            /* Quit if we've flagged a failure. */
+            if (RT_FAILURE(pState->pState->rc))
+                return VERR_CALLBACK_RETURN;
+
+            /* Check if it's well formed and up to date. */
+            char   szWellFormed[256];
+            size_t cchWellFormed;
+            if (pState->uFirstYear == pState->uLastYear)
+                cchWellFormed = RTStrPrintf(szWellFormed, sizeof(szWellFormed), "Copyright (C) %u %s",
+                                            pState->uFirstYear, g_szCopyrightHolder);
+            else
+                cchWellFormed = RTStrPrintf(szWellFormed, sizeof(szWellFormed), "Copyright (C) %u-%u %s",
+                                            pState->uFirstYear, pState->uLastYear, g_szCopyrightHolder);
+            pState->fUpToDateCopyright   = pState->uLastYear == g_uYear;
+            pState->iLineCopyright       = iLine;
+            pState->fWellFormedCopyright = cchWellFormed == (uintptr_t)(pszEnd - pszBody)
+                                        && memcmp(pszBody, szWellFormed, cchWellFormed) == 0;
+            if (!pState->fWellFormedCopyright)
+                ScmVerbose(pState->pState, 1, "* copyright isn't well formed\n");
+
+            /* If there wasn't exactly one blank line before the comment, trigger a rewrite. */
+            if (pInfo->cBlankLinesBefore != 1)
+            {
+                ScmVerbose(pState->pState, 1, "* copyright comment is preceeded by %u blank lines instead of 1\n",
+                           pInfo->cBlankLinesBefore);
+                pState->fWellFormedCopyright = false;
+            }
+
+            /* If the comment doesn't start in column 1, trigger rewrite. */
+            if (pInfo->offStart != 0)
+            {
+                ScmVerbose(pState->pState, 1, "* copyright comment starts in column %u instead of 1\n", pInfo->offStart + 1);
+                pState->fWellFormedCopyright = false;
+                /** @todo check that there isn't any code preceeding the comment. */
+            }
+
+            if (pchContributedBy)
+            {
+                pState->pszContributedBy = RTStrDupN(pchContributedBy, cchContributedBy);
+                if (cBlankLinesAfterContributedBy != 1)
+                {
+                    ScmVerbose(pState->pState, 1, "* %u blank lines between contributed by and copyright, should be 1\n",
+                               cBlankLinesAfterContributedBy);
+                    pState->fWellFormedCopyright = false;
+                }
+            }
+
+            fFoundCopyright = true;
+            ScmVerbose(pState->pState, 3, "oracle copyright %u-%u: up-to-date=%RTbool well-formed=%RTbool\n",
+                       pState->uFirstYear, pState->uLastYear, pState->fUpToDateCopyright, pState->fWellFormedCopyright);
+        }
+        else
+            ScmVerbose(pState->pState, 3, "not oracle copyright: '%.*s'\n", pszEnd - pszBody, pszBody);
+
+        if (!pszNextLine)
+            return VINF_SUCCESS;
+
+        /* Skip the copyright line and any blank lines following it. */
+        cchBody -= pszNextLine - pszBody + 1;
+        pszBody  = pszNextLine + 1;
+        iLine   += 1;
+        while (*pszBody == '\n')
+        {
+            pszBody++;
+            cchBody--;
+            iLine++;
+            cBlankLinesAfterCopyright++;
+        }
+
+        /*
+         * If we have a based-on-mit scenario, check for the lead in now and
+         * complain if not found.
+         */
+        if (   fFoundCopyright
+            && pState->enmLicenceOpt == kScmLicense_BasedOnMit
+            && pState->iLineLicense == UINT32_MAX)
+        {
+            if (RTStrNICmp(pszBody, RT_STR_TUPLE("This file is based on ")) == 0)
+            {
+                /* Take down a comment area which goes up to 'this file is based on'.
+                   The license line and length isn't used but gets set to cover the current line. */
+                pState->iLineComment        = pInfo->iLineStart;
+                pState->cLinesComment       = iLine - pInfo->iLineStart;
+                pState->iLineLicense        = iLine;
+                pState->cLinesLicense       = 1;
+                pState->fExternalLicense    = true;
+                pState->fIsCorrectLicense   = true;
+                pState->fWellFormedLicense  = true;
+
+                /* Check if we've got a MIT a license here or not. */
+                pState->pCurrentLicense     = NULL;
+                do
+                {
+                    const char *pszEol = (const char *)memchr(pszBody, '\n', cchBody);
+                    if (!pszEol || pszEol[1] == '\0')
+                    {
+                        pszBody += cchBody;
+                        cchBody = 0;
+                        break;
+                    }
+                    cchBody -= pszEol - pszBody + 1;
+                    pszBody  = pszEol + 1;
+                    iLine++;
+
+                    for (PCSCMLICENSETEXT pCur = pState->paLicenses; pCur->cch > 0; pCur++)
+                    {
+                        const char *pszNext;
+                        if (   pCur->cch <= cchBody + 32 /* (+ 32 since we don't compare spaces and punctuation) */
+                            && IsEqualWordByWordIgnoreCase(pCur->psz, pszBody, &pszNext))
+                        {
+                            pState->pCurrentLicense = pCur;
+                            break;
+                        }
+                    }
+                } while (!pState->pCurrentLicense);
+                if (!pState->pCurrentLicense)
+                    ScmError(pState->pState, VERR_NOT_FOUND, "Could not find the based-on license!\n");
+                else if (pState->pCurrentLicense->enmType != kScmLicenseType_Mit)
+                    ScmError(pState->pState, VERR_NOT_FOUND, "The based-on license is not MIT (%.32s...)\n",
+                             pState->pCurrentLicense->psz);
+            }
+            else
+                ScmError(pState->pState, VERR_WRONG_ORDER, "Expected 'This file is based on ...' after our copyright!\n");
+            return VINF_SUCCESS;
+        }
+    }
+
+    /*
+     * Look for LGPL like text in the comment.
+     */
+    if (pState->fCheckforLgpl && cchBody > 128)
+    {
+        /* We look for typical LGPL notices. */
+        if (pState->iLineLgplNotice == UINT32_MAX)
+        {
+            static const char * const s_apszFragments[] =
+            {
+                "under the terms of the GNU Lesser General Public License",
+            };
+            for (unsigned i = 0; i < RT_ELEMENTS(s_apszFragments); i++)
+                if (scmContainsWordByWordIgnoreCase(pszBody, cchBody, s_apszFragments[i], NULL, NULL))
+                {
+                    pState->iLineLgplNotice = iLine;
+                    pState->iLineAfterLgplComment = pInfo->iLineEnd + 1;
+                    ScmVerbose(pState->pState, 3, "Found LGPL notice at %u\n", iLine);
+                    break;
+                }
+        }
+
+        if (   pState->iLineLgplDisclaimer == UINT32_MAX
+            && scmContainsWordByWordIgnoreCase(pszBody, cchBody, g_szLgplDisclaimer, NULL, NULL))
+        {
+            pState->iLineLgplDisclaimer = iLine;
+            ScmVerbose(pState->pState, 3, "Found LGPL disclaimer at %u\n", iLine);
+        }
+    }
+
+    /*
+     * Look for the license text.
+     */
+    if (pState->iLineLicense == UINT32_MAX)
+    {
+        for (PCSCMLICENSETEXT pCur = pState->paLicenses; pCur->cch > 0; pCur++)
+        {
+            const char *pszNext;
+            if (   pCur->cch <= cchBody + 32 /* (+ 32 since we don't compare spaces and punctuation) */
+                && IsEqualWordByWordIgnoreCase(pCur->psz, pszBody, &pszNext))
+            {
+                while (   RT_C_IS_SPACE(*pszNext)
+                       || (RT_C_IS_PUNCT(*pszNext) && *pszNext != '-'))
+                    pszNext++;
+
+                uint32_t cDashes = 0;
+                while (*pszNext == '-')
+                    cDashes++, pszNext++;
+                bool fExternal = cDashes > 10;
+
+                if (   *pszNext == '\0'
+                    || fExternal)
+                {
+                    /* In C/C++ code, this must be a multiline comment.  While in python it
+                       must be a */
+                    if (pState->enmCommentStyle == kScmCommentStyle_C && pInfo->enmType != kScmCommentType_MultiLine)
+                        ScmError(pState->pState, VERR_WRONG_ORDER, "License must appear in a multiline comment (no doxygen stuff)\n");
+                    else if (pState->enmCommentStyle == kScmCommentStyle_Python && pInfo->enmType != kScmCommentType_DocString)
+                        ScmError(pState->pState, VERR_WRONG_ORDER, "License must appear in a doc-string\n");
+
+                    /* Quit if we've flagged a failure. */
+                    if (RT_FAILURE(pState->pState->rc))
+                        return VERR_CALLBACK_RETURN;
+
+                    /* Record it. */
+                    pState->iLineLicense        = iLine;
+                    pState->cLinesLicense       = CountLinesInSubstring(pszBody, pszNext - pszBody) - fExternal;
+                    pState->pCurrentLicense     = pCur;
+                    pState->fExternalLicense    = fExternal;
+                    pState->fIsCorrectLicense   = pState->fOpenSource
+                                                ? pCur == pState->pExpectedLicense
+                                                : pCur->enmType == kScmLicenseType_Confidential;
+                    pState->fWellFormedLicense  = memcmp(pszBody, pCur->psz, pCur->cch - 1) == 0;
+                    if (!pState->fWellFormedLicense)
+                        ScmVerbose(pState->pState, 1, "* license text isn't well-formed\n");
+
+                    /* If there was more than one blank line between the copyright and the
+                       license text, extend the license text area and force a rewrite of it. */
+                    if (cBlankLinesAfterCopyright > 1)
+                    {
+                        ScmVerbose(pState->pState, 1, "* %u blank lines between copyright and license text, instead of 1\n",
+                                   cBlankLinesAfterCopyright);
+                        pState->iLineLicense -= cBlankLinesAfterCopyright - 1;
+                        pState->cLinesLicense += cBlankLinesAfterCopyright - 1;
+                        pState->fWellFormedLicense = false;
+                    }
+
+                    /* If there was more than one blank line after the license, trigger a rewrite. */
+                    if (!fExternal && pInfo->cBlankLinesAfter != 1)
+                    {
+                        ScmVerbose(pState->pState, 1, "* copyright comment is followed by %u blank lines instead of 1\n",
+                                   pInfo->cBlankLinesAfter);
+                        pState->fWellFormedLicense = false;
+                    }
+
+                    /** @todo Check that the last comment line doesn't have any code on it. */
+                    /** @todo Check that column 2 contains '*' for C/C++ files. */
+
+                    ScmVerbose(pState->pState, 3,
+                               "Found license %d/%d at %u..%u: is-correct=%RTbool well-formed=%RTbool external-part=%RTbool open-source=%RTbool\n",
+                               pCur->enmType, pCur->enmOpt, pState->iLineLicense, pState->iLineLicense + pState->cLinesLicense,
+                               pState->fIsCorrectLicense, pState->fWellFormedLicense,
+                               pState->fExternalLicense, pState->fOpenSource);
+
+                    if (fFoundCopyright)
+                    {
+                        pState->iLineComment  = pInfo->iLineStart;
+                        pState->cLinesComment = (fExternal ? pState->iLineLicense + pState->cLinesLicense : pInfo->iLineEnd + 1)
+                                              - pInfo->iLineStart;
+                    }
+                    else
+                        ScmError(pState->pState, VERR_WRONG_ORDER, "License should be preceeded by the copyright!\n");
+                    break;
+                }
+            }
+        }
+    }
+
+    if (fFoundCopyright && pState->iLineLicense == UINT32_MAX)
+        ScmError(pState->pState, VERR_WRONG_ORDER, "Copyright should be followed by the license text!\n");
+
+    /*
+     * Stop looking for stuff after 100 comments.
+     */
+    if (pState->cComments > 100)
+        return VERR_CALLBACK_RETURN;
+    return VINF_SUCCESS;
+}
+
+/**
+ * Writes comment body text.
+ *
+ * @returns Stream status.
+ * @param   pOut                The output stream.
+ * @param   pszText             The text to write.
+ * @param   cchText             The length of the text.
+ * @param   enmCommentStyle     The comment style.
+ * @param   enmEol              The EOL style.
+ */
+static int scmWriteCommentBody(PSCMSTREAM pOut, const char *pszText, size_t cchText,
+                               SCMCOMMENTSTYLE enmCommentStyle, SCMEOL enmEol)
+{
+    Assert(pszText[cchText - 1] == '\n');
+    Assert(pszText[cchText - 2] != '\n');
+    NOREF(cchText);
+    do
+    {
+        const char *pszEol = strchr(pszText, '\n');
+        if (pszEol != pszText)
+        {
+            ScmStreamWrite(pOut, g_aCopyrightCommentPrefix[enmCommentStyle].psz,
+                           g_aCopyrightCommentPrefix[enmCommentStyle].cch);
+            ScmStreamWrite(pOut, pszText, pszEol - pszText);
+            ScmStreamPutEol(pOut, enmEol);
+        }
+        else
+            ScmStreamPutLine(pOut, g_aCopyrightCommentEmpty[enmCommentStyle].psz,
+                             g_aCopyrightCommentEmpty[enmCommentStyle].cch, enmEol);
+        pszText = pszEol + 1;
+    } while (*pszText != '\0');
+    return ScmStreamGetStatus(pOut);
+}
+
+
+/**
+ * Updates the copyright year and/or license text.
+ *
+ * @returns true if modifications were made, false if not.
+ * @param   pState              The rewriter state.
+ * @param   pIn                 The input stream.
+ * @param   pOut                The output stream.
+ * @param   pSettings           The settings.
+ * @param   enmCommentStyle     The comment style used by the file.
+ */
+static bool rewrite_Copyright_Common(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings,
+                                     SCMCOMMENTSTYLE enmCommentStyle)
+{
+    if (   !pSettings->fUpdateCopyrightYear
+        && pSettings->enmUpdateLicense == kScmLicense_LeaveAlone)
+        return false;
+
+    /*
+     * Try locate the relevant comments.
+     */
+    SCMCOPYRIGHTINFO Info =
+    {
+        /*.pState = */                  pState,
+        /*.enmCommentStyle = */         enmCommentStyle,
+
+        /*.cComments = */               0,
+
+        /*.pszContributedBy = */        NULL,
+
+        /*.iLineComment = */            UINT32_MAX,
+        /*.cLinesComment = */           0,
+
+        /*.iLineCopyright = */          UINT32_MAX,
+        /*.uFirstYear = */              UINT32_MAX,
+        /*.uLastYear = */               UINT32_MAX,
+        /*.fWellFormedCopyright = */    false,
+        /*.fUpToDateCopyright = */      false,
+
+        /*.fOpenSource = */             true,
+        /*.pExpectedLicense = */        NULL,
+        /*.paLicenses = */                   pSettings->enmUpdateLicense != kScmLicense_Mit
+                                          && pSettings->enmUpdateLicense != kScmLicense_BasedOnMit
+                                        ? &g_aLicenses[0] : &g_aLicensesWithMit[0],
+        /*.enmLicenceOpt = */           pSettings->enmUpdateLicense,
+        /*.iLineLicense = */            UINT32_MAX,
+        /*.cLinesLicense = */           0,
+        /*.pCurrentLicense = */         NULL,
+        /*.fIsCorrectLicense = */       false,
+        /*.fWellFormedLicense = */      false,
+        /*.fExternalLicense = */        false,
+
+        /*.fCheckForLgpl = */           true,
+        /*.iLineLgplNotice = */         UINT32_MAX,
+        /*.iLineAfterLgplComment = */   UINT32_MAX,
+        /*.iLineLgplDisclaimer = */     UINT32_MAX,
+    };
+
+    /* Figure Info.fOpenSource and the desired license: */
+    char *pszSyncProcess;
+    int rc = ScmSvnQueryProperty(pState, "svn:sync-process", &pszSyncProcess);
+    if (RT_SUCCESS(rc))
+    {
+        Info.fOpenSource = strcmp(RTStrStrip(pszSyncProcess), "export") == 0;
+        RTStrFree(pszSyncProcess);
+    }
+    else if (rc == VERR_NOT_FOUND)
+        Info.fOpenSource = false;
+    else
+        return ScmError(pState, rc, "ScmSvnQueryProperty(svn:sync-process): %Rrc\n", rc);
+
+    Info.pExpectedLicense = Info.paLicenses;
+    if (Info.fOpenSource)
+    {
+        if (   pSettings->enmUpdateLicense != kScmLicense_Mit
+            && pSettings->enmUpdateLicense != kScmLicense_BasedOnMit)
+            while (Info.pExpectedLicense->enmOpt != pSettings->enmUpdateLicense)
+                Info.pExpectedLicense++;
+        else
+            Assert(Info.pExpectedLicense->enmOpt == kScmLicense_Mit);
+    }
+    else
+        while (Info.pExpectedLicense->enmType != kScmLicenseType_Confidential)
+            Info.pExpectedLicense++;
+
+    /* Scan the comments. */
+    rc = ScmEnumerateComments(pIn, enmCommentStyle, rewrite_Copyright_CommentCallback, &Info);
+    if (   (rc == VERR_CALLBACK_RETURN || RT_SUCCESS(rc))
+        && RT_SUCCESS(pState->rc))
+    {
+        /*
+         * Do conformity checks.
+         */
+        bool fAddLgplDisclaimer = false;
+        if (Info.fCheckforLgpl)
+        {
+            if (   Info.iLineLgplNotice != UINT32_MAX
+                && Info.iLineLgplDisclaimer == UINT32_MAX)
+            {
+                if (!pSettings->fLgplDisclaimer) /** @todo reconcile options with common sense. */
+                    ScmError(pState, VERR_NOT_FOUND, "LGPL licence notice on line %u, but no LGPL disclaimer was found!\n",
+                             Info.iLineLgplNotice + 1);
+                else
+                {
+                    ScmVerbose(pState, 1, "* Need to add LGPL disclaimer\n");
+                    fAddLgplDisclaimer = true;
+                }
+            }
+            else if (   Info.iLineLgplNotice == UINT32_MAX
+                     && Info.iLineLgplDisclaimer != UINT32_MAX)
+                ScmError(pState, VERR_NOT_FOUND, "LGPL disclaimer on line %u, but no LGPL copyright notice!\n",
+                         Info.iLineLgplDisclaimer + 1);
+        }
+
+        if (!pSettings->fExternalCopyright)
+        {
+            if (Info.iLineCopyright == UINT32_MAX)
+                ScmError(pState, VERR_NOT_FOUND, "Missing copyright!\n");
+            if (Info.iLineLicense == UINT32_MAX)
+                ScmError(pState, VERR_NOT_FOUND, "Missing license!\n");
+        }
+        else if (Info.iLineCopyright != UINT32_MAX)
+            ScmError(pState, VERR_NOT_FOUND,
+                     "Marked as external copyright only, but found non-external copyright statement at line %u!\n",
+                     Info.iLineCopyright + 1);
+
+
+        if (RT_SUCCESS(pState->rc))
+        {
+            /*
+             * Do we need to make any changes?
+             */
+            bool fUpdateCopyright = !pSettings->fExternalCopyright
+                                 && (   !Info.fWellFormedCopyright
+                                     || (!Info.fUpToDateCopyright && pSettings->fUpdateCopyrightYear));
+            bool fUpdateLicense   = !pSettings->fExternalCopyright
+                                 && Info.enmLicenceOpt != kScmLicense_LeaveAlone
+                                 && (   !Info.fWellFormedLicense
+                                     || !Info.fIsCorrectLicense);
+            if (   fUpdateCopyright
+                || fUpdateLicense
+                || fAddLgplDisclaimer)
+            {
+                Assert(Info.iLineComment != UINT32_MAX);
+                Assert(Info.cLinesComment > 0);
+
+                /*
+                 * Okay, do the work.
+                 */
+                ScmStreamRewindForReading(pIn);
+
+                if (pSettings->fUpdateCopyrightYear)
+                    Info.uLastYear = g_uYear;
+
+                uint32_t    iLine = 0;
+                SCMEOL      enmEol;
+                size_t      cchLine;
+                const char *pchLine;
+                while ((pchLine = ScmStreamGetLine(pIn, &cchLine, &enmEol)) != NULL)
+                {
+                    if (   iLine == Info.iLineComment
+                        && (fUpdateCopyright || fUpdateLicense) )
+                    {
+                        /* Leading blank line. */
+                        ScmStreamPutLine(pOut, g_aCopyrightCommentStart[enmCommentStyle].psz,
+                                         g_aCopyrightCommentStart[enmCommentStyle].cch, enmEol);
+
+                        /* Contributed by someone? */
+                        if (Info.pszContributedBy)
+                        {
+                            const char *psz = Info.pszContributedBy;
+                            for (;;)
+                            {
+                                const char *pszEol = strchr(psz, '\n');
+                                size_t cchContribLine = pszEol ? pszEol - psz : strlen(psz);
+                                ScmStreamWrite(pOut, g_aCopyrightCommentPrefix[enmCommentStyle].psz,
+                                               g_aCopyrightCommentPrefix[enmCommentStyle].cch);
+                                ScmStreamWrite(pOut, psz, cchContribLine);
+                                ScmStreamPutEol(pOut, enmEol);
+                                if (!pszEol)
+                                    break;
+                                psz = pszEol + 1;
+                            }
+
+                            ScmStreamPutLine(pOut, g_aCopyrightCommentEmpty[enmCommentStyle].psz,
+                                             g_aCopyrightCommentEmpty[enmCommentStyle].cch, enmEol);
+                        }
+
+                        /* Write the copyright comment line. */
+                        ScmStreamWrite(pOut, g_aCopyrightCommentPrefix[enmCommentStyle].psz,
+                                       g_aCopyrightCommentPrefix[enmCommentStyle].cch);
+
+                        char   szCopyright[256];
+                        size_t cchCopyright;
+                        if (Info.uFirstYear == Info.uLastYear)
+                            cchCopyright = RTStrPrintf(szCopyright, sizeof(szCopyright), "Copyright (C) %u %s",
+                                                       Info.uFirstYear, g_szCopyrightHolder);
+                        else
+                            cchCopyright = RTStrPrintf(szCopyright, sizeof(szCopyright), "Copyright (C) %u-%u %s",
+                                                       Info.uFirstYear, Info.uLastYear, g_szCopyrightHolder);
+
+                        ScmStreamWrite(pOut, szCopyright, cchCopyright);
+                        ScmStreamPutEol(pOut, enmEol);
+
+                        if (pSettings->enmUpdateLicense != kScmLicense_BasedOnMit)
+                        {
+                            /* Blank line separating the two. */
+                            ScmStreamPutLine(pOut, g_aCopyrightCommentEmpty[enmCommentStyle].psz,
+                                             g_aCopyrightCommentEmpty[enmCommentStyle].cch, enmEol);
+
+                            /* Write the license text. */
+                            scmWriteCommentBody(pOut, Info.pExpectedLicense->psz, Info.pExpectedLicense->cch,
+                                                enmCommentStyle, enmEol);
+
+                            /* Final comment line. */
+                            if (!Info.fExternalLicense)
+                                ScmStreamPutLine(pOut, g_aCopyrightCommentEnd[enmCommentStyle].psz,
+                                                 g_aCopyrightCommentEnd[enmCommentStyle].cch, enmEol);
+                        }
+                        else
+                            Assert(Info.fExternalLicense);
+
+                        /* Skip the copyright and license text in the input file. */
+                        rc = ScmStreamGetStatus(pOut);
+                        if (RT_SUCCESS(rc))
+                        {
+                            iLine = Info.iLineComment + Info.cLinesComment;
+                            rc = ScmStreamSeekByLine(pIn, iLine);
+                        }
+                    }
+                    /*
+                     * Add LGPL disclaimer?
+                     */
+                    else if (   iLine == Info.iLineAfterLgplComment
+                             && fAddLgplDisclaimer)
+                    {
+                        ScmStreamPutEol(pOut, enmEol);
+                        ScmStreamPutLine(pOut, g_aCopyrightCommentStart[enmCommentStyle].psz,
+                                         g_aCopyrightCommentStart[enmCommentStyle].cch, enmEol);
+                        scmWriteCommentBody(pOut, g_szLgplDisclaimer, sizeof(g_szLgplDisclaimer) - 1,
+                                            enmCommentStyle, enmEol);
+                        ScmStreamPutLine(pOut, g_aCopyrightCommentEnd[enmCommentStyle].psz,
+                                         g_aCopyrightCommentEnd[enmCommentStyle].cch, enmEol);
+
+                        /* put the actual line */
+                        rc = ScmStreamPutLine(pOut, pchLine, cchLine, enmEol);
+                        iLine++;
+                    }
+                    else
+                    {
+                        rc = ScmStreamPutLine(pOut, pchLine, cchLine, enmEol);
+                        iLine++;
+                    }
+                    if (RT_FAILURE(rc))
+                    {
+                        RTStrFree(Info.pszContributedBy);
+                        return false;
+                    }
+                } /* for each source line */
+
+                RTStrFree(Info.pszContributedBy);
+                return true;
+            }
+        }
+    }
+    else
+        ScmError(pState, rc,  "ScmEnumerateComments: %Rrc\n", rc);
+    NOREF(pState); NOREF(pOut);
+    RTStrFree(Info.pszContributedBy);
+    return false;
+}
+
+
+/** Copyright updater for C-style comments.   */
+bool rewrite_Copyright_CstyleComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, kScmCommentStyle_C);
+}
+
+/** Copyright updater for hash-prefixed comments.   */
+bool rewrite_Copyright_HashComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, kScmCommentStyle_Hash);
+}
+
+/** Copyright updater for REM-prefixed comments.   */
+bool rewrite_Copyright_RemComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, determinBatchFileCommentStyle(pIn));
+}
+
+/** Copyright updater for python comments.   */
+bool rewrite_Copyright_PythonComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, kScmCommentStyle_Python);
+}
+
+/** Copyright updater for semicolon-prefixed comments.   */
+bool rewrite_Copyright_SemicolonComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, kScmCommentStyle_Semicolon);
+}
+
+/** Copyright updater for sql  comments.   */
+bool rewrite_Copyright_SqlComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, kScmCommentStyle_Sql);
+}
+
+/** Copyright updater for tick-prefixed comments.   */
+bool rewrite_Copyright_TickComment(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, PCSCMSETTINGSBASE pSettings)
+{
+    return rewrite_Copyright_Common(pState, pIn, pOut, pSettings, kScmCommentStyle_Tick);
+}
+
+
+/**
  * Makefile.kup are empty files, enforce this.
  *
  * @returns true if modifications were made, false if not.
@@ -470,11 +1940,12 @@ bool rewrite_Makefile_kmk(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM pOut, P
 }
 
 
-static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t cchLine,
-                                     const char **ppchText, size_t *pcchText)
+static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t cchLine, uint32_t cchWidth,
+                                     const char **ppchText, size_t *pcchText, bool *pfNeedFixing)
 {
     *ppchText = NULL;
     *pcchText = 0;
+    *pfNeedFixing = false;
 
     /*
      * The first line.
@@ -492,6 +1963,7 @@ static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t
         return false;
 
     size_t const cchBox = cchLine;
+    *pfNeedFixing = cchBox != cchWidth;
 
     /*
      * The next line, extracting the text.
@@ -503,7 +1975,10 @@ static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t
 
     offLine = 0;
     if (RT_C_IS_BLANK(pchLine[0]))
+    {
+        *pfNeedFixing = true;
         offLine = RT_C_IS_BLANK(pchLine[1]) ? 2 : 1;
+    }
 
     if (pchLine[offLine] != '*')
         return false;
@@ -520,6 +1995,9 @@ static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t
     if (!RT_C_IS_UPPER(pchLine[offLine]))
         return false;
 
+    if (offLine != 4 || cchLine != cchBox)
+        *pfNeedFixing = true;
+
     *ppchText = &pchLine[offLine];
     size_t const offText = offLine;
 
@@ -547,7 +2025,10 @@ static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t
 
     offLine = 0;
     if (RT_C_IS_BLANK(pchLine[0]))
+    {
+        *pfNeedFixing = true;
         offLine = RT_C_IS_BLANK(pchLine[1]) ? 2 : 1;
+    }
     while (offLine < cchLine && pchLine[offLine] == '*')
         offLine++;
     if (offLine < cchBox - 4)
@@ -557,6 +2038,9 @@ static bool isFlowerBoxSectionMarker(PSCMSTREAM pIn, const char *pchLine, size_t
         return false;
     offLine++;
 
+    if (offLine != cchBox)
+        *pfNeedFixing = true;
+
     while (offLine < cchLine && RT_C_IS_BLANK(pchLine[offLine]))
         offLine++;
     if (offLine != cchLine)
@@ -601,7 +2085,12 @@ bool rewrite_FixFlowerBoxMarkers(PSCMRWSTATE pState, PSCMSTREAM pIn, PSCMSTREAM
             size_t const offSaved = ScmStreamTell(pIn);
             char const  *pchText;
             size_t       cchText;
-            if (isFlowerBoxSectionMarker(pIn, pchLine, cchLine, &pchText, &cchText))
+            bool         fNeedFixing;
+            bool         fIsFlowerBoxSection = isFlowerBoxSectionMarker(pIn, pchLine, cchLine, pSettings->cchWidth,
+                                                                        &pchText, &cchText, &fNeedFixing);
+            if (   fIsFlowerBoxSection
+                && (   fNeedFixing
+                    || cBlankLines < pSettings->cMinBlankLinesBeforeFlowerBoxMakers) )
             {
                 while (cBlankLines < pSettings->cMinBlankLinesBeforeFlowerBoxMakers)
                 {
diff --git a/src/bldprogs/scmstream.cpp b/src/bldprogs/scmstream.cpp
index 69073f6..ae46975 100644
--- a/src/bldprogs/scmstream.cpp
+++ b/src/bldprogs/scmstream.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -92,9 +92,8 @@ int ScmStreamInitForWriting(PSCMSTREAM pStream, PCSCMSTREAM pRelatedStream)
     scmStreamInitInternal(pStream, true /*fWriteOrRead*/);
 
     /* allocate stuff */
-    size_t cbEstimate = pRelatedStream
-                      ? pRelatedStream->cb + pRelatedStream->cb / 10
-                      : _64K;
+    size_t cbEstimate = !pRelatedStream ? _64K
+                      : pRelatedStream->cb > 0 ? pRelatedStream->cb + pRelatedStream->cb / 10 : 64;
     cbEstimate = RT_ALIGN(cbEstimate, _4K);
     pStream->pch = (char *)RTMemAlloc(cbEstimate);
     if (pStream->pch)
@@ -103,6 +102,8 @@ int ScmStreamInitForWriting(PSCMSTREAM pStream, PCSCMSTREAM pRelatedStream)
                               ? pRelatedStream->cLines + pRelatedStream->cLines / 10
                               : cbEstimate / 24;
         cLinesEstimate = RT_ALIGN(cLinesEstimate, 512);
+        if (cLinesEstimate == 0)
+            cLinesEstimate = 16;
         pStream->paLines = (PSCMSTREAMLINE)RTMemAlloc(cLinesEstimate * sizeof(SCMSTREAMLINE));
         if (pStream->paLines)
         {
@@ -254,7 +255,7 @@ bool ScmStreamIsText(PSCMSTREAM pStream)
     if (RTStrEnd(pStream->pch, pStream->cb))
         return false;
     if (!pStream->cb)
-        return false;
+        return true;
     return true;
 }
 
@@ -662,6 +663,50 @@ bool ScmStreamIsAtStartOfLine(PSCMSTREAM pStream)
 }
 
 /**
+ * Worker for ScmStreamGetLineByNo and ScmStreamGetLine.
+ *
+ * Works on a fully lineated stream.
+ *
+ * @returns Pointer to the first character in the line, not NULL terminated.
+ *          NULL if the end of the stream has been reached or some problem
+ *          occurred.
+ *
+ * @param   pStream             The stream.  Must be in read mode.
+ * @param   iLine               The line to get (0-based).
+ * @param   pcchLine            The length.
+ * @param   penmEol             Where to return the end of line type indicator.
+ */
+DECLINLINE(const char *) scmStreamGetLineByNoCommon(PSCMSTREAM pStream, size_t iLine, size_t *pcchLine, PSCMEOL penmEol)
+{
+    Assert(!pStream->fWriteOrRead);
+    Assert(pStream->fFullyLineated);
+
+    /* Check stream status. */
+    if (RT_SUCCESS(pStream->rc))
+    {
+        /* Not at the end of the stream yet? */
+        if (RT_LIKELY(iLine < pStream->cLines))
+        {
+            /* Get the data. */
+            const char *pchRet = &pStream->pch[pStream->paLines[iLine].off];
+            *pcchLine          = pStream->paLines[iLine].cch;
+            *penmEol           = pStream->paLines[iLine].enmEol;
+
+            /* update the stream position. */
+            pStream->off       = pStream->paLines[iLine].off + pStream->paLines[iLine].cch + pStream->paLines[iLine].enmEol;
+            pStream->iLine     = iLine + 1;
+            return pchRet;
+        }
+        pStream->off   = pStream->cb;
+        pStream->iLine = pStream->cLines;
+    }
+    *pcchLine = 0;
+    *penmEol  = SCMEOL_NONE;
+    return NULL;
+}
+
+
+/**
  * Get a numbered line from the stream (changes the position).
  *
  * A line is always delimited by a LF character or the end of the stream.  The
@@ -670,7 +715,7 @@ bool ScmStreamIsAtStartOfLine(PSCMSTREAM pStream)
  *
  * @returns Pointer to the first character in the line, not NULL terminated.
  *          NULL if the end of the stream has been reached or some problem
- *          occurred.
+ *          occurred (*pcchLine set to zero and *penmEol to SCMEOL_NONE).
  *
  * @param   pStream             The stream.  Must be in read mode.
  * @param   iLine               The line to get (0-based).
@@ -680,35 +725,22 @@ bool ScmStreamIsAtStartOfLine(PSCMSTREAM pStream)
 const char *ScmStreamGetLineByNo(PSCMSTREAM pStream, size_t iLine, size_t *pcchLine, PSCMEOL penmEol)
 {
     AssertReturn(!pStream->fWriteOrRead, NULL);
-    if (RT_FAILURE(pStream->rc))
-        return NULL;
 
     /* Make sure it's fully delineated so we can use the index. */
-    if (RT_UNLIKELY(!pStream->fFullyLineated))
-    {
-        int rc = scmStreamLineate(pStream);
-        if (RT_FAILURE(rc))
-            return NULL;
-    }
+    if (RT_LIKELY(pStream->fFullyLineated))
+        return scmStreamGetLineByNoCommon(pStream, iLine, pcchLine, penmEol);
 
-    /* End of stream? */
-    if (RT_UNLIKELY(iLine >= pStream->cLines))
+    int rc = pStream->rc;
+    if (RT_SUCCESS(rc))
     {
-        pStream->off   = pStream->cb;
-        pStream->iLine = pStream->cLines;
-        return NULL;
+        rc = scmStreamLineate(pStream);
+        if (RT_SUCCESS(rc))
+            return scmStreamGetLineByNoCommon(pStream, iLine, pcchLine, penmEol);
     }
 
-    /* Get the data. */
-    const char *pchRet = &pStream->pch[pStream->paLines[iLine].off];
-    *pcchLine          = pStream->paLines[iLine].cch;
-    *penmEol           = pStream->paLines[iLine].enmEol;
-
-    /* update the stream position. */
-    pStream->off       = pStream->paLines[iLine].off + pStream->paLines[iLine].cch + pStream->paLines[iLine].enmEol;
-    pStream->iLine     = iLine + 1;
-
-    return pchRet;
+    *pcchLine = 0;
+    *penmEol  = SCMEOL_NONE;
+    return NULL;
 }
 
 /**
@@ -720,7 +752,7 @@ const char *ScmStreamGetLineByNo(PSCMSTREAM pStream, size_t iLine, size_t *pcchL
  *
  * @returns Pointer to the first character in the line, not NULL terminated.
  *          NULL if the end of the stream has been reached or some problem
- *          occurred.
+ *          occurred (*pcchLine set to zero and *penmEol to SCMEOL_NONE).
  *
  * @param   pStream             The stream.  Must be in read mode.
  * @param   pcchLine            The length.
@@ -728,24 +760,25 @@ const char *ScmStreamGetLineByNo(PSCMSTREAM pStream, size_t iLine, size_t *pcchL
  */
 const char *ScmStreamGetLine(PSCMSTREAM pStream, size_t *pcchLine, PSCMEOL penmEol)
 {
-    if (!pStream->fFullyLineated)
-        return scmStreamGetLineInternal(pStream, pcchLine, penmEol);
-
-    size_t      offCur   = pStream->off;
-    size_t      iCurLine = pStream->iLine;
-    const char *pszLine  = ScmStreamGetLineByNo(pStream, iCurLine, pcchLine, penmEol);
-    if (   pszLine
-        && offCur > pStream->paLines[iCurLine].off)
+    if (RT_LIKELY(pStream->fFullyLineated))
     {
-        offCur -= pStream->paLines[iCurLine].off;
-        Assert(offCur <= pStream->paLines[iCurLine].cch + pStream->paLines[iCurLine].enmEol);
-        if (offCur < pStream->paLines[iCurLine].cch)
-            *pcchLine  -= offCur;
-        else
-            *pcchLine   = 0;
-        pszLine        += offCur;
+        size_t      offCur   = pStream->off;
+        size_t      iCurLine = pStream->iLine;
+        const char *pszLine  = scmStreamGetLineByNoCommon(pStream, iCurLine, pcchLine, penmEol);
+        if (   pszLine
+            && offCur > pStream->paLines[iCurLine].off)
+        {
+            offCur -= pStream->paLines[iCurLine].off;
+            Assert(offCur <= pStream->paLines[iCurLine].cch + pStream->paLines[iCurLine].enmEol);
+            if (offCur < pStream->paLines[iCurLine].cch)
+                *pcchLine  -= offCur;
+            else
+                *pcchLine   = 0;
+            pszLine        += offCur;
+        }
+        return pszLine;
     }
-    return pszLine;
+    return scmStreamGetLineInternal(pStream, pcchLine, penmEol);
 }
 
 /**
diff --git a/src/bldprogs/scmstream.h b/src/bldprogs/scmstream.h
index ac7252a..eb7f9b2 100644
--- a/src/bldprogs/scmstream.h
+++ b/src/bldprogs/scmstream.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2012-2016 Oracle Corporation
+ * Copyright (C) 2012-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/bldprogs/scmsubversion.cpp b/src/bldprogs/scmsubversion.cpp
index a392cb8..d3f3f32 100644
--- a/src/bldprogs/scmsubversion.cpp
+++ b/src/bldprogs/scmsubversion.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2016 Oracle Corporation
+ * Copyright (C) 2010-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -159,6 +159,22 @@ static svn_error_t *         (SVN_CALL *g_pfnSvnClientPropGet4)(apr_hash_t **ppH
                                                                 svn_client_ctx_t *pCtx, apr_pool_t *pResultPool,
                                                                 apr_pool_t *pScratchPool);
 /**@} */
+
+/** Cached APR pool. */
+static apr_pool_t          *g_pSvnPool = NULL;
+/** Cached SVN client context. */
+static svn_client_ctx_t    *g_pSvnClientCtx = NULL;
+/** Number of times the current context has been used. */
+static uint32_t             g_cSvnClientCtxUsed = 0;
+
+#endif
+
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+#ifdef SCM_WITH_DYNAMIC_LIB_SVN
+static void scmSvnFlushClientContextAndPool(void);
 #endif
 
 
@@ -566,6 +582,10 @@ static int scmSvnRunAndGetOutput(PSCMRWSTATE pState, const char **papszArgs, boo
 {
     *ppszStdOut = NULL;
 
+#ifdef SCM_WITH_DYNAMIC_LIB_SVN
+    scmSvnFlushClientContextAndPool();
+#endif
+
     char *pszCmdLine = NULL;
     int rc = RTGetOptArgvToString(&pszCmdLine, papszArgs, RTGETOPTARGV_CNV_QUOTE_BOURNE_SH);
     if (RT_FAILURE(rc))
@@ -620,13 +640,17 @@ static int scmSvnRunAndGetOutput(PSCMRWSTATE pState, const char **papszArgs, boo
  */
 static int scmSvnRun(PSCMRWSTATE pState, const char **papszArgs, bool fNormalFailureOk)
 {
+#ifdef SCM_WITH_DYNAMIC_LIB_SVN
+    scmSvnFlushClientContextAndPool();
+#endif
+
     char *pszCmdLine = NULL;
     int rc = RTGetOptArgvToString(&pszCmdLine, papszArgs, RTGETOPTARGV_CNV_QUOTE_BOURNE_SH);
     if (RT_FAILURE(rc))
         return rc;
     ScmVerbose(pState, 2, "executing: %s\n", pszCmdLine);
 
-    /* Lazy bird uses RTProcExecToString. */
+    /* Lazy bird uses RTProcExec. */
     RTPROCSTATUS Status;
     rc = RTProcExec(g_szSvnPath, papszArgs, RTENV_DEFAULT, RTPROCEXEC_FLAGS_STD_NULL, &Status);
 
@@ -690,13 +714,13 @@ static void scmSvnTryResolveFunctions(void)
 # else
             { "../lib/lib", ".so" },
             { "../lib/lib", "-1.so" },
-# ifdef RT_ARCH_X86
+#  ifdef RT_ARCH_X86
             { "../lib/i386-linux-gnu/lib", ".so" },
             { "../lib/i386-linux-gnu/lib", "-1.so" },
-# else
+#  else
             { "../lib/x86_64-linux-gnu/lib", ".so" },
             { "../lib/x86_64-linux-gnu/lib", "-1.so" },
-# endif
+#  endif
 # endif
         };
         for (unsigned iVar = 0; iVar < RT_ELEMENTS(s_aVariations); iVar++)
@@ -923,15 +947,98 @@ static bool scmSvnReadNumber(const char *pch, size_t cch, size_t *pu)
 static int scmSvnAbsPath(const char *pszPath, char *pszAbsPath, size_t cbAbsPath)
 {
     int rc = RTPathAbs(pszPath, pszAbsPath, cbAbsPath);
-# if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
+# if RTPATH_STYLE == RTPATH_STR_F_STYLE_DOS
     if (RT_SUCCESS(rc))
+    {
         RTPathChangeToUnixSlashes(pszAbsPath, true /*fForce*/);
+        /* To avoid: svn: E235000: In file '..\..\..\subversion\libsvn_client\prop_commands.c' line 796: assertion failed (svn_dirent_is_absolute(target)) */
+        if (pszAbsPath[1] == ':')
+            pszAbsPath[0] = RT_C_TO_UPPER(pszAbsPath[0]);
+    }
 # endif
     return rc;
 }
 
 
 /**
+ * Gets a client context and pool.
+ *
+ * This implements caching.
+ *
+ * @returns IPRT status code.
+ * @param   ppCtx               Where to return the context
+ * @param   ppPool              Where to return the pool.
+ */
+static int scmSvnGetClientContextAndPool(svn_client_ctx_t **ppCtx, apr_pool_t **ppPool)
+{
+    /*
+     * Use cached if present.
+     */
+    if (g_pSvnClientCtx && g_pSvnPool)
+    {
+        g_cSvnClientCtxUsed++;
+        *ppCtx  = g_pSvnClientCtx;
+        *ppPool = g_pSvnPool;
+        return VINF_SUCCESS;
+    }
+    Assert(!g_pSvnClientCtx);
+    Assert(!g_pSvnPool);
+
+    /*
+     * Create new pool and context.
+     */
+    apr_pool_t *pPool = g_pfnSvnPoolCreateEx(NULL, NULL);
+    if (pPool)
+    {
+        svn_client_ctx_t *pCtx = NULL;
+        svn_error_t *pErr = g_pfnSvnClientCreateContext(&pCtx, pPool);
+        if (!pErr)
+        {
+            g_cSvnClientCtxUsed = 1;
+            g_pSvnClientCtx     = *ppCtx  = pCtx;
+            g_pSvnPool          = *ppPool = pPool;
+            return VINF_SUCCESS;
+        }
+        g_pfnAprPoolDestroy(pPool);
+    }
+
+    *ppCtx  = NULL;
+    *ppPool = NULL;
+    return VERR_GENERAL_FAILURE;
+}
+
+
+/**
+ * Puts back a client context and pool after use.
+ *
+ * @param   pCtx                The context.
+ * @param   pPool               The pool.
+ * @param   fFlush              Whether to flush it.
+ */
+static void scmSvnPutClientContextAndPool(svn_client_ctx_t *pCtx, apr_pool_t *pPool, bool fFlush)
+{
+    if (fFlush || g_cSvnClientCtxUsed > 4096) /* Disable this to force new context every time. */
+    {
+        g_pfnAprPoolDestroy(pPool);
+        g_pSvnPool = NULL;
+        g_pSvnClientCtx = NULL;
+    }
+    RT_NOREF(pCtx, fFlush);
+}
+
+
+/**
+ * Flushes the cached client context and pool
+ */
+static void scmSvnFlushClientContextAndPool(void)
+{
+    if (g_pSvnPool)
+        scmSvnPutClientContextAndPool(g_pSvnClientCtx, g_pSvnPool, true /*fFlush*/);
+    Assert(!g_pSvnPool);
+}
+
+
+/**
  * Checks if @a pszPath exists in the current WC.
  *
  * @returns true, false or -1. In the latter case, please use the fallback.
@@ -939,35 +1046,31 @@ static int scmSvnAbsPath(const char *pszPath, char *pszAbsPath, size_t cbAbsPath
  */
 static int scmSvnIsObjectInWorkingCopy(const char *pszPath)
 {
-    int rc = -1;
-
     /* svn_client_propget4 and later requires absolute target path. */
     char szAbsPath[RTPATH_MAX];
-    int  rc2 = scmSvnAbsPath(pszPath, szAbsPath, sizeof(szAbsPath));
-    if (RT_SUCCESS(rc2))
+    int  rc = scmSvnAbsPath(pszPath, szAbsPath, sizeof(szAbsPath));
+    if (RT_SUCCESS(rc))
     {
-        /* Create calling context. */
-        apr_pool_t *pPool = g_pfnSvnPoolCreateEx(NULL, NULL);
-        if (pPool)
+        apr_pool_t *pPool;
+        svn_client_ctx_t *pCtx = NULL;
+        rc = scmSvnGetClientContextAndPool(&pCtx, &pPool);
+        if (RT_SUCCESS(rc))
         {
-            svn_client_ctx_t *pCtx = NULL;
-            svn_error_t *pErr = g_pfnSvnClientCreateContext(&pCtx, pPool);
+            /* Make the call. */
+            apr_hash_t         *pHash = NULL;
+            svn_opt_revision_t  Rev;
+            RT_ZERO(Rev);
+            Rev.kind          = svn_opt_revision_working;
+            Rev.value.number  = -1L;
+            svn_error_t *pErr = g_pfnSvnClientPropGet4(&pHash, "svn:no-such-property", szAbsPath, &Rev, &Rev,
+                                                       NULL /*pActualRev*/, svn_depth_empty, NULL /*pChangeList*/,
+                                                       pCtx, pPool, pPool);
             if (!pErr)
-            {
-                /* Make the call. */
-                apr_hash_t         *pHash = NULL;
-                svn_opt_revision_t  Rev;
-                RT_ZERO(Rev);
-                Rev.kind          = svn_opt_revision_base;
-                Rev.value.number  = -1L;
-                pErr = g_pfnSvnClientPropGet4(&pHash, "svn:no-such-property", szAbsPath, &Rev, &Rev,
-                                              NULL /*pActualRev*/, svn_depth_empty, NULL /*pChangeList*/, pCtx, pPool, pPool);
-                if (!pErr)
-                    rc = true;
-                else if (pErr->apr_err == SVN_ERR_UNVERSIONED_RESOURCE)
-                    rc = false;
-            }
-            g_pfnAprPoolDestroy(pPool);
+                rc = true;
+            else if (pErr->apr_err == SVN_ERR_UNVERSIONED_RESOURCE)
+                rc = false;
+
+            scmSvnPutClientContextAndPool(pCtx, pPool, false);
         }
     }
     return rc;
@@ -980,18 +1083,26 @@ static int scmSvnIsObjectInWorkingCopy(const char *pszPath)
  * Checks if the file we're operating on is part of a SVN working copy.
  *
  * @returns true if it is, false if it isn't or we cannot tell.
- * @param   pState              The rewrite state to work on.
+ * @param   pState      The rewrite state to work on.  Will use the
+ *                      fIsInSvnWorkingCopy member for caching the result.
  */
 bool ScmSvnIsInWorkingCopy(PSCMRWSTATE pState)
 {
-    scmSvnFindSvnBinary(pState);
+    /*
+     * We don't ask SVN twice as that's expensive.
+     */
+    if (pState->fIsInSvnWorkingCopy != 0)
+        return pState->fIsInSvnWorkingCopy > 0;
 
 #ifdef SCM_WITH_DYNAMIC_LIB_SVN
     if (g_fSvnFunctionPointersValid)
     {
         int rc = scmSvnIsObjectInWorkingCopy(pState->pszFilename);
         if (rc == (int)true || rc == (int)false)
+        {
+            pState->fIsInSvnWorkingCopy = rc == (int)true ? 1 : -1;
             return rc == (int)true;
+        }
     }
 
     /* Fallback: */
@@ -1004,7 +1115,13 @@ bool ScmSvnIsInWorkingCopy(PSCMRWSTATE pState)
         char szPath[RTPATH_MAX];
         int rc = scmSvnConstructName(pState, ".svn/text-base/", ".svn-base", szPath);
         if (RT_SUCCESS(rc))
-            return RTFileExists(szPath);
+        {
+            if (RTFileExists(szPath))
+            {
+                pState->fIsInSvnWorkingCopy = 1;
+                return true;
+            }
+        }
     }
     else
     {
@@ -1014,9 +1131,11 @@ bool ScmSvnIsInWorkingCopy(PSCMRWSTATE pState)
         if (RT_SUCCESS(rc))
         {
             RTStrFree(pszValue);
+            pState->fIsInSvnWorkingCopy = 1;
             return true;
         }
     }
+    pState->fIsInSvnWorkingCopy = -1;
     return false;
 }
 
@@ -1029,8 +1148,6 @@ bool ScmSvnIsInWorkingCopy(PSCMRWSTATE pState)
  */
 bool ScmSvnIsDirInWorkingCopy(const char *pszDir)
 {
-    scmSvnFindSvnBinary(NULL);
-
 #ifdef SCM_WITH_DYNAMIC_LIB_SVN
     if (g_fSvnFunctionPointersValid)
     {
@@ -1077,52 +1194,48 @@ bool ScmSvnIsDirInWorkingCopy(const char *pszDir)
  */
 static int scmSvnQueryPropertyUsingApi(const char *pszPath, const char *pszProperty, char **ppszValue)
 {
-    int rc = VERR_NOT_SUPPORTED;
-
     /* svn_client_propget4 and later requires absolute target path. */
     char szAbsPath[RTPATH_MAX];
-    int  rc2 = scmSvnAbsPath(pszPath, szAbsPath, sizeof(szAbsPath));
-    if (RT_SUCCESS(rc2))
+    int  rc = scmSvnAbsPath(pszPath, szAbsPath, sizeof(szAbsPath));
+    if (RT_SUCCESS(rc))
     {
-        /* Create calling context. */
-        apr_pool_t *pPool = g_pfnSvnPoolCreateEx(NULL, NULL);
-        if (pPool)
+        apr_pool_t *pPool;
+        svn_client_ctx_t *pCtx = NULL;
+        rc = scmSvnGetClientContextAndPool(&pCtx, &pPool);
+        if (RT_SUCCESS(rc))
         {
-            svn_client_ctx_t *pCtx = NULL;
-            svn_error_t *pErr = g_pfnSvnClientCreateContext(&pCtx, pPool);
+            /* Make the call. */
+            apr_hash_t         *pHash = NULL;
+            svn_opt_revision_t  Rev;
+            RT_ZERO(Rev);
+            Rev.kind          = svn_opt_revision_working;
+            Rev.value.number  = -1L;
+            svn_error_t *pErr = g_pfnSvnClientPropGet4(&pHash, pszProperty, szAbsPath, &Rev, &Rev,
+                                                       NULL /*pActualRev*/, svn_depth_empty, NULL /*pChangeList*/,
+                                                       pCtx, pPool, pPool);
             if (!pErr)
             {
-                /* Make the call. */
-                apr_hash_t         *pHash = NULL;
-                svn_opt_revision_t  Rev;
-                RT_ZERO(Rev);
-                Rev.kind          = svn_opt_revision_base;
-                Rev.value.number  = -1L;
-                pErr = g_pfnSvnClientPropGet4(&pHash, pszProperty, szAbsPath, &Rev, &Rev,
-                                              NULL /*pActualRev*/, svn_depth_empty, NULL /*pChangeList*/, pCtx, pPool, pPool);
-                if (!pErr)
+                /* Get the first value, if any. */
+                rc = VERR_NOT_FOUND;
+                apr_hash_index_t *pHashIdx = g_pfnAprHashFirst(pPool, pHash);
+                if (pHashIdx)
                 {
-                    /* Get the first value, if any. */
-                    rc = VERR_NOT_FOUND;
-                    apr_hash_index_t *pHashIdx = g_pfnAprHashFirst(pPool, pHash);
-                    if (pHashIdx)
+                    const char **ppszFirst = (const char **)g_pfnAprHashThisVal(pHashIdx);
+                    if (ppszFirst && *ppszFirst)
                     {
-                        const char **ppszFirst = (const char **)g_pfnAprHashThisVal(pHashIdx);
-                        if (ppszFirst && *ppszFirst)
-                        {
-                            if (ppszValue)
-                                rc = RTStrDupEx(ppszValue, *ppszFirst);
-                            else
-                                rc = VINF_SUCCESS;
-                        }
+                        if (ppszValue)
+                            rc = RTStrDupEx(ppszValue, *ppszFirst);
+                        else
+                            rc = VINF_SUCCESS;
                     }
                 }
-                else if (pErr->apr_err == SVN_ERR_UNVERSIONED_RESOURCE)
-                    rc = VERR_INVALID_STATE;
-                else
-                    rc = VERR_GENERAL_FAILURE;
             }
-            g_pfnAprPoolDestroy(pPool);
+            else if (pErr->apr_err == SVN_ERR_UNVERSIONED_RESOURCE)
+                rc = VERR_INVALID_STATE;
+            else
+                rc = VERR_GENERAL_FAILURE;
+
+            scmSvnPutClientContextAndPool(pCtx, pPool, false);
         }
     }
     return rc;
@@ -1162,8 +1275,6 @@ int ScmSvnQueryProperty(PSCMRWSTATE pState, const char *pszName, char **ppszValu
             return VINF_SUCCESS;
         }
 
-    scmSvnFindSvnBinary(pState);
-
 #ifdef SCM_WITH_DYNAMIC_LIB_SVN
     if (g_fSvnFunctionPointersValid)
     {
@@ -1431,8 +1542,6 @@ int ScmSvnDisplayChanges(PSCMRWSTATE pState)
  */
 int ScmSvnApplyChanges(PSCMRWSTATE pState)
 {
-    scmSvnFindSvnBinary(pState);
-
 #ifdef SCM_WITH_LATER
     if (0)
     {
@@ -1465,3 +1574,19 @@ int ScmSvnApplyChanges(PSCMRWSTATE pState)
     return VINF_SUCCESS;
 }
 
+
+/**
+ * Initializes the subversion interface.
+ */
+void ScmSvnInit(void)
+{
+    scmSvnFindSvnBinary(NULL);
+}
+
+
+void ScmSvnTerm(void)
+{
+#ifdef SCM_WITH_DYNAMIC_LIB_SVN
+    scmSvnFlushClientContextAndPool();
+#endif
+}
diff --git a/src/bldprogs/solgcc/.scm-settings b/src/bldprogs/solgcc/.scm-settings
new file mode 100644
index 0000000..7285e6c
--- /dev/null
+++ b/src/bldprogs/solgcc/.scm-settings
@@ -0,0 +1,19 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for solgcc
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+/config/*: --external-copyright
+
diff --git a/src/bldprogs/test-gccplugin-2.c b/src/bldprogs/test-gccplugin-2.c
index 8068154..13cf8ee 100644
--- a/src/bldprogs/test-gccplugin-2.c
+++ b/src/bldprogs/test-gccplugin-2.c
@@ -1,3 +1,20 @@
+/* $Id: test-gccplugin-2.c $ */
+/** @file
+ * Compiler plugin testcase \#2.
+ */
+
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
 /* Only valid stuff in this one. */
 extern void MyIprtPrintf(const char *pszFormat, ...) __attribute__((__iprt_format__(1,2)));
 extern void foo(void);
diff --git a/src/bldprogs/test-gccplugin.c b/src/bldprogs/test-gccplugin.c
index 329fe18..4e03207 100644
--- a/src/bldprogs/test-gccplugin.c
+++ b/src/bldprogs/test-gccplugin.c
@@ -1,3 +1,19 @@
+/* $Id: test-gccplugin.c $ */
+/** @file
+ * Compiler plugin testcase \#2.
+ */
+
+/*
+ * Copyright (C) 2010-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
 
 extern void MyIprtPrintf(const char *pszFormat, ...) __attribute__((__iprt_format__(1,2)));
 extern void foo(void);
diff --git a/src/libs/kStuff/kStuff/include/k/kDefs.h b/src/libs/kStuff/kStuff/include/k/kDefs.h
index 9730fbc..01e210b 100644
--- a/src/libs/kStuff/kStuff/include/k/kDefs.h
+++ b/src/libs/kStuff/kStuff/include/k/kDefs.h
@@ -1,4 +1,4 @@
-/* $Id: kDefs.h 100 2017-10-01 13:08:49Z bird $ */
+/* $Id: kDefs.h 105 2017-11-21 23:55:40Z bird $ */
 /** @file
  * kTypes - Defines and Macros.
  */
@@ -46,26 +46,30 @@
 #define K_OS_DRAGONFLY  2
 /** FreeBSD. */
 #define K_OS_FREEBSD    3
+/** GNU/Hurd. */
+#define K_OS_GNU_HURD   4
 /** GNU/kFreeBSD. */
-#define K_OS_GNU_KFBSD  4
+#define K_OS_GNU_KFBSD  5
 /** GNU/kNetBSD or GNU/NetBSD or whatever the decide to call it. */
-#define K_OS_GNU_KNBSD  5
+#define K_OS_GNU_KNBSD  6
+/** Haiku. */
+#define K_OS_HAIKU      7
 /** Linux. */
-#define K_OS_LINUX      6
+#define K_OS_LINUX      8
 /** NetBSD. */
-#define K_OS_NETBSD     7
+#define K_OS_NETBSD     9
 /** NT (native). */
-#define K_OS_NT         8
+#define K_OS_NT         10
 /** OpenBSD*/
-#define K_OS_OPENBSD    9
+#define K_OS_OPENBSD    11
 /** OS/2 */
-#define K_OS_OS2        10
+#define K_OS_OS2        12
 /** Solaris */
-#define K_OS_SOLARIS    11
+#define K_OS_SOLARIS    13
 /** Windows. */
-#define K_OS_WINDOWS    12
+#define K_OS_WINDOWS    14
 /** The max K_OS_* value (exclusive). */
-#define K_OS_MAX        13
+#define K_OS_MAX        15
 /** @} */
 
 /** @def K_OS
@@ -88,6 +92,8 @@
 #  define K_OS      K_OS_FREEBSD
 # elif defined(__FreeBSD_kernel__)
 #  define K_OS      K_OS_GNU_KFBSD
+# elif defined(__gnu_hurd__)
+#  define K_OS      K_OS_GNU_HURD
 # elif defined(__gnu_linux__)
 #  define K_OS      K_OS_LINUX
 # elif defined(__NetBSD__) /*??*/
@@ -102,6 +108,8 @@
 #  define K_OS      K_OS_SOLARIS
 # elif defined(_WIN32) || defined(_WIN64)
 #  define K_OS      K_OS_WINDOWS
+# elif defined(__haiku__) || defined(__HAIKU__)
+#  define K_OS      K_OS_HAIKU
 # else
 #  error "Port Me"
 # endif
@@ -141,45 +149,47 @@
 /** Clone or Intel 16-bit x86. */
 #define K_ARCH_X86_16           ( 1 | K_ARCH_BIT_16 | K_ARCH_END_LITTLE)
 /** Clone or Intel 32-bit x86. */
-#define K_ARCH_X86_32           ( 2 | K_ARCH_BIT_32 | K_ARCH_END_LITTLE)
+#define K_ARCH_X86_32           ( 1 | K_ARCH_BIT_32 | K_ARCH_END_LITTLE)
 /** AMD64 (including clones). */
-#define K_ARCH_AMD64            ( 3 | K_ARCH_BIT_64 | K_ARCH_END_LITTLE)
+#define K_ARCH_AMD64            ( 2 | K_ARCH_BIT_64 | K_ARCH_END_LITTLE)
 /** Itanic (64-bit). */
-#define K_ARCH_IA64             ( 4 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_IA64             ( 3 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** ALPHA (64-bit). */
-#define K_ARCH_ALPHA            ( 5 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_ALPHA            ( 4 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** ALPHA limited to 32-bit. */
-#define K_ARCH_ALPHA_32         ( 6 | K_ARCH_BIT_32 | K_ARCH_END_BI)
+#define K_ARCH_ALPHA_32         ( 4 | K_ARCH_BIT_32 | K_ARCH_END_BI)
 /** 32-bit ARM. */
-#define K_ARCH_ARM_32           ( 7 | K_ARCH_BIT_32 | K_ARCH_END_BI)
+#define K_ARCH_ARM_32           ( 5 | K_ARCH_BIT_32 | K_ARCH_END_BI)
 /** 64-bit ARM. */
-#define K_ARCH_ARM_64           ( 8 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_ARM_64           ( 5 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+/** Motorola 68000 (32-bit). */
+#define K_ARCH_M68K             ( 6 | K_ARCH_BIT_32 | K_ARCH_END_BIG)
 /** 32-bit MIPS. */
-#define K_ARCH_MIPS_32          ( 9 | K_ARCH_BIT_32 | K_ARCH_END_BI)
+#define K_ARCH_MIPS_32          ( 7 | K_ARCH_BIT_32 | K_ARCH_END_BI)
 /** 64-bit MIPS. */
-#define K_ARCH_MIPS_64          (10 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_MIPS_64          ( 7 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** 32-bit PA-RISC. */
-#define K_ARCH_PARISC_32        (11 | K_ARCH_BIT_32 | K_ARCH_END_BI)
+#define K_ARCH_PARISC_32        ( 8 | K_ARCH_BIT_32 | K_ARCH_END_BI)
 /** 64-bit PA-RISC. */
-#define K_ARCH_PARISC_64        (12 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_PARISC_64        ( 8 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** 32-bit PowerPC. */
-#define K_ARCH_POWERPC_32       (13 | K_ARCH_BIT_32 | K_ARCH_END_BI)
+#define K_ARCH_POWERPC_32       ( 9 | K_ARCH_BIT_32 | K_ARCH_END_BI)
 /** 64-bit PowerPC. */
-#define K_ARCH_POWERPC_64       (14 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_POWERPC_64       ( 9 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** 32(31)-bit S390. */
-#define K_ARCH_S390_32          (15 | K_ARCH_BIT_32 | K_ARCH_END_BIG)
+#define K_ARCH_S390_32          (10 | K_ARCH_BIT_32 | K_ARCH_END_BIG)
 /** 64-bit S390. */
-#define K_ARCH_S390_64          (16 | K_ARCH_BIT_64 | K_ARCH_END_BIG)
+#define K_ARCH_S390_64          (10 | K_ARCH_BIT_64 | K_ARCH_END_BIG)
 /** 32-bit SuperH. */
-#define K_ARCH_SH_32            (17 | K_ARCH_BIT_32 | K_ARCH_END_BI)
+#define K_ARCH_SH_32            (11 | K_ARCH_BIT_32 | K_ARCH_END_BI)
 /** 64-bit SuperH. */
-#define K_ARCH_SH_64            (17 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_SH_64            (11 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** 32-bit SPARC. */
-#define K_ARCH_SPARC_32         (18 | K_ARCH_BIT_32 | K_ARCH_END_BIG)
+#define K_ARCH_SPARC_32         (12 | K_ARCH_BIT_32 | K_ARCH_END_BIG)
 /** 64-bit SPARC. */
-#define K_ARCH_SPARC_64         (19 | K_ARCH_BIT_64 | K_ARCH_END_BI)
+#define K_ARCH_SPARC_64         (12 | K_ARCH_BIT_64 | K_ARCH_END_BI)
 /** The end of the valid architecture values (exclusive). */
-#define K_ARCH_MAX              (20)
+#define K_ARCH_MAX              (12+1)
 /** @} */
 
 
@@ -204,6 +214,8 @@
 #  define K_ARCH    K_ARCH_PARISC_64
 # elif defined(__hppa__)
 #  define K_ARCH    K_ARCH_PARISC_32
+# elif defined(__m68k__)
+#  define K_ARCH    K_ARCH_M68K
 # elif defined(__mips64)
 #  define K_ARCH    K_ARCH_MIPS_64
 # elif defined(__mips__)
diff --git a/src/libs/xpcom18a4/java/tools/genjifaces.xsl b/src/libs/xpcom18a4/java/tools/genjifaces.xsl
index 5d8eb66..137b545 100644
--- a/src/libs/xpcom18a4/java/tools/genjifaces.xsl
+++ b/src/libs/xpcom18a4/java/tools/genjifaces.xsl
@@ -564,8 +564,8 @@ public interface nsILocalFile extends nsIFile
     <xsl:variable name="self_target" select="current()/ancestor::if/@target"/>
     <xsl:variable name="module" select="current()/ancestor::module/@name"/>
 
-    <!-- We don't need WSDL-specific interfaces here -->
-    <xsl:if test="not($self_target='wsdl') and not($module)">
+    <!-- We don't need WSDL-specific nor MIDL-specific interfaces here -->
+    <xsl:if test="not($self_target='wsdl') and not($self_target='midl') and not($module)">
       <xsl:call-template name="genIface">
         <xsl:with-param name="ifname" select="@name" />
         <xsl:with-param name="filename" select="concat(@name, '.java')" />
diff --git a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp
index 6e80e91..d35eb60 100644
--- a/src/libs/xpcom18a4/python/src/module/_xpcom.cpp
+++ b/src/libs/xpcom18a4/python/src/module/_xpcom.cpp
@@ -75,6 +75,7 @@ extern PYXPCOM_EXPORT void PyXPCOM_InterpreterState_Ensure();
 
 #ifdef VBOX_PYXPCOM
 # include <iprt/cdefs.h>
+# include <VBox/com/com.h>
 # ifndef MODULE_NAME_SUFFIX
 #  define MANGLE_MODULE_NAME(a_szName)  a_szName
 #  define MANGLE_MODULE_INIT(a_Name)    a_Name
@@ -617,15 +618,16 @@ PyXPCOMMethod_InterruptWait(PyObject *self, PyObject *args)
   return PyBool_FromLong(RT_SUCCESS(rc));
 }
 
-static void deinitVBoxPython();
+static nsresult deinitVBoxPython();
 
 static PyObject*
 PyXPCOMMethod_DeinitCOM(PyObject *self, PyObject *args)
 {
+    nsresult nr;
     Py_BEGIN_ALLOW_THREADS;
-    deinitVBoxPython();
+    nr = deinitVBoxPython();
     Py_END_ALLOW_THREADS;
-    return PyInt_FromLong(0);
+    return PyInt_FromLong(nr);
 }
 
 static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
@@ -726,11 +728,11 @@ static struct PyMethodDef xpcom_methods[]=
 	{"MakeVariant", PyXPCOMMethod_MakeVariant, 1},
 	{"GetVariantValue", PyXPCOMMethod_GetVariantValue, 1},
 #ifdef VBOX
-    {"WaitForEvents", PyXPCOMMethod_WaitForEvents, 1},
-    {"InterruptWait", PyXPCOMMethod_InterruptWait, 1},
-    {"DeinitCOM",     PyXPCOMMethod_DeinitCOM, 1},
-    {"AttachThread",  PyXPCOMMethod_AttachThread, 1},
-    {"DetachThread",  PyXPCOMMethod_DetachThread, 1},
+	{"WaitForEvents", PyXPCOMMethod_WaitForEvents, 1},
+	{"InterruptWait", PyXPCOMMethod_InterruptWait, 1},
+	{"DeinitCOM",     PyXPCOMMethod_DeinitCOM, 1},
+	{"AttachThread",  PyXPCOMMethod_AttachThread, 1},
+	{"DetachThread",  PyXPCOMMethod_DetachThread, 1},
 #endif
 #ifdef VBOX_DEBUG_LIFETIMES
 	{"_DumpInterfaces", PyXPCOMMethod_DumpInterfaces, 1},
@@ -853,33 +855,38 @@ init_xpcom() {
 }
 
 #ifdef VBOX_PYXPCOM
-#include <VBox/com/com.h>
+# include <VBox/com/com.h>
 using namespace com;
 
-#include <iprt/initterm.h>
-#include <iprt/string.h>
-#include <iprt/alloca.h>
-#include <iprt/stream.h>
+# include <iprt/initterm.h>
+# include <iprt/string.h>
+# include <iprt/alloca.h>
+# include <iprt/stream.h>
 
-#if PY_MAJOR_VERSION <= 2
+/** Set if NS_ShutdownXPCOM has been called successfully already and we don't 
+ * need to do it again during module termination.  This avoids assertion in the 
+ * VBoxCOM glue code. */
+static bool g_fComShutdownAlready = true;
+
+# if PY_MAJOR_VERSION <= 2
 extern "C" NS_EXPORT
 void
-#else
+# else
 /** @todo r=klaus this is hacky, but as Python3 doesn't deal with ELF
  * visibility, assuming that all globals are visible (which is ugly and not
  * true in our case). */
-#undef PyMODINIT_FUNC
-#define PyMODINIT_FUNC extern "C" NS_EXPORT PyObject*
+#  undef PyMODINIT_FUNC
+#  define PyMODINIT_FUNC extern "C" NS_EXPORT PyObject*
 PyMODINIT_FUNC
-#endif
+# endif
 initVBoxPython() { /* NOTE! This name is redefined at the top of the file! */
   static bool s_vboxInited = false;
   if (!s_vboxInited) {
-    int rc = 0;
+    int rc = 0; /* Error handling in this code is NON-EXISTING. Sigh. */
 
-#if defined(VBOX_PATH_APP_PRIVATE_ARCH) && defined(VBOX_PATH_SHARED_LIBS)
+# if defined(VBOX_PATH_APP_PRIVATE_ARCH) && defined(VBOX_PATH_SHARED_LIBS)
     rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
-#else
+# else
     const char *home = getenv("VBOX_PROGRAM_PATH");
     if (home) {
       size_t len = strlen(home);
@@ -890,25 +897,35 @@ initVBoxPython() { /* NOTE! This name is redefined at the top of the file! */
     } else {
       rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
     }
-#endif
+# endif
 
     rc = com::Initialize();
+    g_fComShutdownAlready = false;
 
-#if PY_MAJOR_VERSION <= 2
+# if PY_MAJOR_VERSION <= 2
     init_xpcom();
-#else
+# else
     return init_xpcom();
-#endif
+# endif
   }
-#if PY_MAJOR_VERSION >= 3
+# if PY_MAJOR_VERSION >= 3
   return NULL;
-#endif
+# endif
 }
 
 static
-void deinitVBoxPython()
+nsresult deinitVBoxPython()
 {
-  com::Shutdown();
+  nsresult nr;
+  if (!g_fComShutdownAlready)
+  {
+    nr = com::Shutdown();
+    if (!NS_FAILED(nr))
+      g_fComShutdownAlready = true;
+  }
+  else
+    nr = NS_ERROR_NOT_INITIALIZED;
+  return nr;
 }
 
 #endif /* VBOX_PYXPCOM */
diff --git a/src/recompiler/.scm-settings b/src/recompiler/.scm-settings
new file mode 100644
index 0000000..6e91d6e
--- /dev/null
+++ b/src/recompiler/.scm-settings
@@ -0,0 +1,32 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for the recompiler.
+#
+
+#
+# Copyright (C) 2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+
+# This is external stuff.
+--external-copyright --no-convert-tabs
+/.scm-settings:         --no-external-copyright --convert-tabs
+/Makefile.kmk:          --no-external-copyright --convert-tabs
+/VBox*:                 --no-external-copyright --convert-tabs
+/Sun/*:                 --no-external-copyright --convert-tabs
+/Sun/e_*.S:             --external-copyright --no-convert-tabs
+
+*.com:                  --treat-as binary
+
+/tests/linux-test.c:    --lgpl-disclaimer
+/tests/test-i386.c:     --lgpl-disclaimer
+/tests/test-mmap.c:     --lgpl-disclaimer
+
diff --git a/src/recompiler/Sun/config-host.h b/src/recompiler/Sun/config-host.h
index 3ce049f..4feb0b7 100644
--- a/src/recompiler/Sun/config-host.h
+++ b/src/recompiler/Sun/config-host.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/Sun/config.h b/src/recompiler/Sun/config.h
index 0d64d06..3debbb7 100644
--- a/src/recompiler/Sun/config.h
+++ b/src/recompiler/Sun/config.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/Sun/crt/stdio.h b/src/recompiler/Sun/crt/stdio.h
index 1bc77ce..b5960b0 100644
--- a/src/recompiler/Sun/crt/stdio.h
+++ b/src/recompiler/Sun/crt/stdio.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/Sun/deftoimp.sed b/src/recompiler/Sun/deftoimp.sed
index 4c7557f..6a741a2 100644
--- a/src/recompiler/Sun/deftoimp.sed
+++ b/src/recompiler/Sun/deftoimp.sed
@@ -4,8 +4,7 @@
 #
 
 #
-#
-# Copyright (C) 2006-2010 Oracle Corporation
+# Copyright (C) 2006-2017 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/Sun/e_powl-amd64.S b/src/recompiler/Sun/e_powl-amd64.S
index b34bcba..5e0353e 100644
--- a/src/recompiler/Sun/e_powl-amd64.S
+++ b/src/recompiler/Sun/e_powl-amd64.S
@@ -18,6 +18,15 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 /*#include <machine/asm.h>*/
 #include <iprt/cdefs.h>
 
diff --git a/src/recompiler/Sun/e_powl-x86.S b/src/recompiler/Sun/e_powl-x86.S
index 252e541..cbc9925 100644
--- a/src/recompiler/Sun/e_powl-x86.S
+++ b/src/recompiler/Sun/e_powl-x86.S
@@ -19,20 +19,29 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
 /*#include <machine/asm.h>*/
 #include <iprt/cdefs.h>
 
 #ifdef __MINGW32__
-# define ASM_TYPE_DIRECTIVE(name,typearg) 
-# define ASM_SIZE_DIRECTIVE(name) 
+# define ASM_TYPE_DIRECTIVE(name,typearg)
+# define ASM_SIZE_DIRECTIVE(name)
 # define cfi_adjust_cfa_offset(a)
 # define C_LABEL(name)       _ ## name:
 # define C_SYMBOL_NAME(name) _ ## name
 # define ASM_GLOBAL_DIRECTIVE .global
 # define ALIGNARG(log2) 1<<log2
 #elif __APPLE__
-# define ASM_TYPE_DIRECTIVE(name,typearg) 
-# define ASM_SIZE_DIRECTIVE(name) 
+# define ASM_TYPE_DIRECTIVE(name,typearg)
+# define ASM_SIZE_DIRECTIVE(name)
 # define cfi_adjust_cfa_offset(a)
 # define C_LABEL(name)       _ ## name:
 # define C_SYMBOL_NAME(name) _ ## name
diff --git a/src/recompiler/Sun/kvm.h b/src/recompiler/Sun/kvm.h
index 22fd7bb..1a1cce4 100644
--- a/src/recompiler/Sun/kvm.h
+++ b/src/recompiler/Sun/kvm.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2011-2016 Oracle Corporation
+ * Copyright (C) 2011-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/Sun/testmath.c b/src/recompiler/Sun/testmath.c
index 8ebbf9f..47d3319 100644
--- a/src/recompiler/Sun/testmath.c
+++ b/src/recompiler/Sun/testmath.c
@@ -3,6 +3,18 @@
  * Testcase for the no-crt math stuff.
  */
 
+/*
+ * Copyright (C) 2006-2017 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -387,8 +399,8 @@ typedef union {
 /* the following deal with x86 long double-precision numbers */
 #define MAXEXPD 0x7fff
 #define EXPBIAS 16383
-#define EXPD(fp)	(fp.l.upper & 0x7fff)
-#define SIGND(fp)	((fp.l.upper) & 0x8000)
+#define EXPD(fp)        (fp.l.upper & 0x7fff)
+#define SIGND(fp)       ((fp.l.upper) & 0x8000)
 #define MANTD(fp)       (fp.l.lower)
 #define BIASEXPONENT(fp) fp.l.upper = (fp.l.upper & ~(0x7fff)) | EXPBIAS
 
@@ -448,7 +460,7 @@ static void helper_fyl2x(void)
 
     fptemp = ST0;
     if (fptemp>0.0){
-        fptemp = log(fptemp)/log(2.0);	 /* log2(ST) */
+        fptemp = log(fptemp)/log(2.0);   /* log2(ST) */
         ST1 *= fptemp;
         fpop();
     } else {
@@ -515,7 +527,7 @@ static void helper_fprem1(void)
         ST0 = fpsrcop - fptemp*dblq;
         q = (int)dblq; /* cutting off top bits is assumed here */
         env->fpus &= (~0x4700); /* (C3,C2,C1,C0) <-- 0000 */
-				/* (C0,C1,C3) <-- (q2,q1,q0) */
+                                /* (C0,C1,C3) <-- (q2,q1,q0) */
         env->fpus |= (q&0x4) << 6; /* (C0) <-- q2 */
         env->fpus |= (q&0x2) << 8; /* (C1) <-- q1 */
         env->fpus |= (q&0x1) << 14; /* (C3) <-- q0 */
@@ -562,7 +574,7 @@ LogFlow(("helper_fprem: -> ST0=%.*Rhxs fpus=%#x c\n", sizeof(ST0), &ST0, env->fp
         ST0 = fpsrcop - fptemp*dblq;
         q = (int)dblq; /* cutting off top bits is assumed here */
         env->fpus &= (~0x4700); /* (C3,C2,C1,C0) <-- 0000 */
-				/* (C0,C1,C3) <-- (q2,q1,q0) */
+                                /* (C0,C1,C3) <-- (q2,q1,q0) */
         env->fpus |= (q&0x4) << 6; /* (C0) <-- q2 */
         env->fpus |= (q&0x2) << 8; /* (C1) <-- q1 */
         env->fpus |= (q&0x1) << 14; /* (C3) <-- q0 */
diff --git a/src/recompiler/VBoxREM.def b/src/recompiler/VBoxREM.def
index 3f6e39e..5176a8c 100644
--- a/src/recompiler/VBoxREM.def
+++ b/src/recompiler/VBoxREM.def
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/VBoxREM.rc b/src/recompiler/VBoxREM.rc
index 9e07451..5092d77 100644
--- a/src/recompiler/VBoxREM.rc
+++ b/src/recompiler/VBoxREM.rc
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2015-2016 Oracle Corporation
+ * Copyright (C) 2015-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/VBoxREMWrapper.cpp b/src/recompiler/VBoxREMWrapper.cpp
index f048c53..38d97e7 100644
--- a/src/recompiler/VBoxREMWrapper.cpp
+++ b/src/recompiler/VBoxREMWrapper.cpp
@@ -4,7 +4,7 @@
  * VBoxREM Win64 DLL Wrapper.
  */
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/VBoxREMWrapperA.asm b/src/recompiler/VBoxREMWrapperA.asm
index c4af2df..bf751d0 100644
--- a/src/recompiler/VBoxREMWrapperA.asm
+++ b/src/recompiler/VBoxREMWrapperA.asm
@@ -4,7 +4,7 @@
 ;
 
 ;
-; Copyright (C) 2006-2016 Oracle Corporation
+; Copyright (C) 2006-2017 Oracle Corporation
 ;
 ; This file is part of VirtualBox Open Source Edition (OSE), as
 ; available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/VBoxRecompiler.c b/src/recompiler/VBoxRecompiler.c
index eca88dd..19742aa 100644
--- a/src/recompiler/VBoxRecompiler.c
+++ b/src/recompiler/VBoxRecompiler.c
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2016 Oracle Corporation
+ * Copyright (C) 2006-2017 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
diff --git a/src/recompiler/target-i386/TODO b/src/recompiler/target-i386/TODO
index c8ada07..8dfd463 100644
--- a/src/recompiler/target-i386/TODO
+++ b/src/recompiler/target-i386/TODO
@@ -1,7 +1,7 @@
 Correctness issues:
 
 - some eflags manipulation incorrectly reset the bit 0x2.
-- SVM: test, cpu save/restore, SMM save/restore. 
+- SVM: test, cpu save/restore, SMM save/restore.
 - x86_64: lcall/ljmp intel/amd differences ?
 - better code fetch (different exception handling + CS.limit support)
 - user/kernel PUSHL/POPL in helper.c
@@ -9,7 +9,7 @@ Correctness issues:
 - return UD exception if LOCK prefix incorrectly used
 - test ldt limit < 7 ?
 - fix some 16 bit sp push/pop overflow (pusha/popa, lcall lret)
-- full support of segment limit/rights 
+- full support of segment limit/rights
 - full x87 exception support
 - improve x87 bit exactness (use bochs code ?)
 - DRx register support
diff --git a/src/recompiler/tcg/README b/src/recompiler/tcg/README
index 68d27ff..8d6fe05 100644
--- a/src/recompiler/tcg/README
+++ b/src/recompiler/tcg/README
@@ -4,7 +4,7 @@ Tiny Code Generator - Fabrice Bellard.
 
 TCG (Tiny Code Generator) began as a generic backend for a C
 compiler. It was simplified to be used in QEMU. It also has its roots
-in the QOP code generator written by Paul Brook. 
+in the QOP code generator written by Paul Brook.
 
 2) Definitions
 
@@ -30,7 +30,7 @@ or a memory location which is stored in a register outside QEMU TBs
 (not implemented yet).
 
 A TCG "basic block" corresponds to a list of instructions terminated
-by a branch instruction. 
+by a branch instruction.
 
 3) Intermediate representation
 
@@ -99,7 +99,7 @@ optimizations:
 - Single instructions are simplified, e.g.
 
    and_i32 t0, t0, $0xffffffff
-    
+
   is suppressed.
 
 - A liveness analysis is done at the basic block level. The
@@ -323,7 +323,7 @@ ld32s_i64 t0, t1, offset
 ld32u_i64 t0, t1, offset
 
 t0 = read(t1 + offset)
-Load 8, 16, 32 or 64 bits with or without sign extension from host memory. 
+Load 8, 16, 32 or 64 bits with or without sign extension from host memory.
 offset must be a constant.
 
 * st_i32/i64 t0, t1, offset
@@ -461,7 +461,7 @@ register.
 - The stack grows downwards.
 - The first N parameters are passed in registers.
 - The next parameters are passed on the stack by storing them as words.
-- Some registers are clobbered during the call. 
+- Some registers are clobbered during the call.
 - The function can return 0 or 1 value in registers. On a 32 bit
   target, functions must be able to return 2 values in registers for
   64 bit return type.
diff --git a/src/recompiler/tcg/TODO b/src/recompiler/tcg/TODO
index 0747847..2bc2785 100644
--- a/src/recompiler/tcg/TODO
+++ b/src/recompiler/tcg/TODO
@@ -1,6 +1,6 @@
 - Add new instructions such as: clz, ctz, popcnt.
 
-- See if it is worth exporting mul2, mulu2, div2, divu2. 
+- See if it is worth exporting mul2, mulu2, div2, divu2.
 
 - Support of globals saved in fixed registers between TBs.
 
diff --git a/src/recompiler/tests/hello-arm.c b/src/recompiler/tests/hello-arm.c
index f84e6cb..e0daa7a 100644
--- a/src/recompiler/tests/hello-arm.c
+++ b/src/recompiler/tests/hello-arm.c
@@ -83,7 +83,7 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {				\
   	: "r0","r1","r2","r3","lr");							\
   __syscall_return(type,__res);								\
 }
-  
+
 
 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5)	\
 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) {			\
diff --git a/src/recompiler/tests/test-i386-muldiv.h b/src/recompiler/tests/test-i386-muldiv.h
index fd0d991..015f59e 100644
--- a/src/recompiler/tests/test-i386-muldiv.h
+++ b/src/recompiler/tests/test-i386-muldiv.h
@@ -1,5 +1,5 @@
 
-void glue(glue(test_, OP), b)(long op0, long op1) 
+void glue(glue(test_, OP), b)(long op0, long op1)
 {
     long res, s1, s0, flags;
     s0 = op0;
@@ -8,7 +8,7 @@ void glue(glue(test_, OP), b)(long op0, long op1)
     flags = 0;
     asm ("push %4\n\t"
          "popf\n\t"
-         stringify(OP)"b %b2\n\t" 
+         stringify(OP)"b %b2\n\t"
          "pushf\n\t"
          "pop %1\n\t"
          : "=a" (res), "=g" (flags)
@@ -17,7 +17,7 @@ void glue(glue(test_, OP), b)(long op0, long op1)
            stringify(OP) "b", s0, s1, res, flags & CC_MASK);
 }
 
-void glue(glue(test_, OP), w)(long op0h, long op0, long op1) 
+void glue(glue(test_, OP), w)(long op0h, long op0, long op1)
 {
     long res, s1, flags, resh;
     s1 = op1;
@@ -26,7 +26,7 @@ void glue(glue(test_, OP), w)(long op0h, long op0, long op1)
     flags = 0;
     asm ("push %5\n\t"
          "popf\n\t"
-         stringify(OP) "w %w3\n\t" 
+         stringify(OP) "w %w3\n\t"
          "pushf\n\t"
          "pop %1\n\t"
          : "=a" (res), "=g" (flags), "=d" (resh)
@@ -35,7 +35,7 @@ void glue(glue(test_, OP), w)(long op0h, long op0, long op1)
            stringify(OP) "w", op0h, op0, s1, resh, res, flags & CC_MASK);
 }
 
-void glue(glue(test_, OP), l)(long op0h, long op0, long op1) 
+void glue(glue(test_, OP), l)(long op0h, long op0, long op1)
 {
     long res, s1, flags, resh;
     s1 = op1;
@@ -44,7 +44,7 @@ void glue(glue(test_, OP), l)(long op0h, long op0, long op1)
     flags = 0;
     asm ("push %5\n\t"
          "popf\n\t"
-         stringify(OP) "l %k3\n\t" 
+         stringify(OP) "l %k3\n\t"
          "pushf\n\t"
          "pop %1\n\t"
          : "=a" (res), "=g" (flags), "=d" (resh)
@@ -54,7 +54,7 @@ void glue(glue(test_, OP), l)(long op0h, long op0, long op1)
 }
 
 #if defined(__x86_64__)
-void glue(glue(test_, OP), q)(long op0h, long op0, long op1) 
+void glue(glue(test_, OP), q)(long op0h, long op0, long op1)
 {
     long res, s1, flags, resh;
     s1 = op1;
@@ -63,7 +63,7 @@ void glue(glue(test_, OP), q)(long op0h, long op0, long op1)
     flags = 0;
     asm ("push %5\n\t"
          "popf\n\t"
-         stringify(OP) "q %3\n\t" 
+         stringify(OP) "q %3\n\t"
          "pushf\n\t"
          "pop %1\n\t"
          : "=a" (res), "=g" (flags), "=d" (resh)

-- 
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